mirror of
https://github.com/meshtastic/python.git
synced 2025-12-25 17:07:53 -05:00
Compare commits
883 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3adeb925dd | ||
|
|
9de04a12e1 | ||
|
|
e01a1bb6e0 | ||
|
|
1ebea53703 | ||
|
|
ba2d6c9d93 | ||
|
|
fef0e1b77f | ||
|
|
dc1dec17b5 | ||
|
|
02ed17837b | ||
|
|
8cf996a242 | ||
|
|
02189aae07 | ||
|
|
894581ce00 | ||
|
|
fb8db01427 | ||
|
|
fa5ede93ed | ||
|
|
022a8a1017 | ||
|
|
21f6e25ab0 | ||
|
|
243e297505 | ||
|
|
9fc86f9450 | ||
|
|
e5999f5be6 | ||
|
|
3886bc16d7 | ||
|
|
7fe98bc266 | ||
|
|
2f9307fd99 | ||
|
|
3d6fa369e8 | ||
|
|
6812f508bc | ||
|
|
158cac6b0b | ||
|
|
4d10b6e1bd | ||
|
|
bb6e3b7a49 | ||
|
|
8b29dc683a | ||
|
|
d4156d78c6 | ||
|
|
c52977781e | ||
|
|
5ebc8e6f95 | ||
|
|
56d1dcafe5 | ||
|
|
393c765557 | ||
|
|
243b310eb2 | ||
|
|
cd1ecab4e0 | ||
|
|
c710953b85 | ||
|
|
70c5a30b77 | ||
|
|
9f0ba7aeae | ||
|
|
4226201423 | ||
|
|
bdf3a24be1 | ||
|
|
e8ba5581f6 | ||
|
|
948846e0f1 | ||
|
|
6c4dbb6fe6 | ||
|
|
afbabf9538 | ||
|
|
d8107122a2 | ||
|
|
03c1f08e45 | ||
|
|
760fcfcea7 | ||
|
|
a4830f5f62 | ||
|
|
2b1f337a41 | ||
|
|
ddad5f08b3 | ||
|
|
6e7933a3ce | ||
|
|
f449ff9506 | ||
|
|
a07e853f69 | ||
|
|
0d57449030 | ||
|
|
067cddd354 | ||
|
|
4af1b322da | ||
|
|
c580df15e1 | ||
|
|
b280d0ba23 | ||
|
|
439b1ade2e | ||
|
|
9f2b54eb98 | ||
|
|
278ca74a70 | ||
|
|
1c93b7bd52 | ||
|
|
2d4be347e9 | ||
|
|
26f024dc11 | ||
|
|
2b8348ea05 | ||
|
|
7cea3cefc8 | ||
|
|
693533aba2 | ||
|
|
157f9cd276 | ||
|
|
e742b5c0b8 | ||
|
|
b57d1d81ff | ||
|
|
4c97866875 | ||
|
|
8bb0cdf21b | ||
|
|
218e9b969a | ||
|
|
917d6b2214 | ||
|
|
523a855238 | ||
|
|
7a1b4b0d8b | ||
|
|
896eeff1a4 | ||
|
|
9f0d223b81 | ||
|
|
5f92ac3995 | ||
|
|
1b08aa4852 | ||
|
|
ffa2de5385 | ||
|
|
03ceb9bcab | ||
|
|
59091664db | ||
|
|
4baef92523 | ||
|
|
4528cbf407 | ||
|
|
ad8dbeab14 | ||
|
|
2746a8ebb6 | ||
|
|
5a277ab4bd | ||
|
|
1a278db65e | ||
|
|
276e99ad75 | ||
|
|
f51bc8b9d7 | ||
|
|
f3f6a6327d | ||
|
|
d03c78518d | ||
|
|
54303b5e02 | ||
|
|
49a5f6a63a | ||
|
|
934491dbd3 | ||
|
|
f4120102b3 | ||
|
|
3839c75c82 | ||
|
|
05e181dece | ||
|
|
ad02ce172d | ||
|
|
daa5587443 | ||
|
|
a139d180b8 | ||
|
|
09f8405422 | ||
|
|
107629e581 | ||
|
|
39a2ecb439 | ||
|
|
1318225e27 | ||
|
|
85a6d4c21b | ||
|
|
1088880f04 | ||
|
|
0738e5ec6d | ||
|
|
5537778b64 | ||
|
|
341d8e0cec | ||
|
|
9b5943192d | ||
|
|
bf56521a53 | ||
|
|
16a1af6a13 | ||
|
|
b8640666d7 | ||
|
|
0528a6fb3b | ||
|
|
5511871442 | ||
|
|
486e13a93b | ||
|
|
759cafb817 | ||
|
|
27be73c707 | ||
|
|
bd788ae303 | ||
|
|
bb8a0d987f | ||
|
|
92cc84e692 | ||
|
|
03abaf6059 | ||
|
|
6bed30e175 | ||
|
|
9f2cc28fef | ||
|
|
fdd5b866b5 | ||
|
|
4ebb928400 | ||
|
|
4522a8a7b0 | ||
|
|
14813e5c76 | ||
|
|
c67d299984 | ||
|
|
d1efe39c59 | ||
|
|
079c8c6a24 | ||
|
|
fbcdab37ed | ||
|
|
83359a9cae | ||
|
|
67636c4ce2 | ||
|
|
fdf594492c | ||
|
|
8d6827dd23 | ||
|
|
a1ffb459f8 | ||
|
|
df8ea85873 | ||
|
|
10c2e753f5 | ||
|
|
769c99ec7d | ||
|
|
1a8778022f | ||
|
|
b7e23ab762 | ||
|
|
9fbde7b85a | ||
|
|
17ab557f81 | ||
|
|
8271997279 | ||
|
|
1c9af1f002 | ||
|
|
9a4feecea8 | ||
|
|
90c218daa7 | ||
|
|
a067c9295e | ||
|
|
48fe844e12 | ||
|
|
1a9e728dee | ||
|
|
34736bd246 | ||
|
|
193b8bcfb5 | ||
|
|
3321d8454a | ||
|
|
22f2168bfd | ||
|
|
2bf72523e9 | ||
|
|
658ecb60dc | ||
|
|
129f68ec14 | ||
|
|
281ff788f3 | ||
|
|
70069323fc | ||
|
|
4721bc5adf | ||
|
|
bc67546019 | ||
|
|
dc35ffa12e | ||
|
|
b41baeac98 | ||
|
|
bbc458954d | ||
|
|
2f59028df3 | ||
|
|
0a8a193081 | ||
|
|
2eda2e56d5 | ||
|
|
52f8e82ea1 | ||
|
|
b11edacee0 | ||
|
|
6dcdf7fc19 | ||
|
|
fe8ae6237e | ||
|
|
7908fda1cf | ||
|
|
fe9a367553 | ||
|
|
79d7dcc199 | ||
|
|
ddf2221797 | ||
|
|
a6f9100520 | ||
|
|
36011da918 | ||
|
|
882e160a32 | ||
|
|
958edbfdb2 | ||
|
|
484dc8007c | ||
|
|
2464bcf414 | ||
|
|
590b60fefb | ||
|
|
b468a0c908 | ||
|
|
de154e50ca | ||
|
|
70bb58b8ce | ||
|
|
dae63d4176 | ||
|
|
9aef3b11f1 | ||
|
|
eebaa10d13 | ||
|
|
5076119b4f | ||
|
|
e25b183c23 | ||
|
|
236d30f7c1 | ||
|
|
1f054abe47 | ||
|
|
d793ae431c | ||
|
|
d02c4af995 | ||
|
|
7123a095dc | ||
|
|
abbe9ba10e | ||
|
|
6fe40e22b6 | ||
|
|
ae648e7a82 | ||
|
|
550a5fe49a | ||
|
|
20bb1ebdfa | ||
|
|
a6d20abcdf | ||
|
|
7d9e75cf3f | ||
|
|
7c3df00b46 | ||
|
|
28e848ace6 | ||
|
|
849724a129 | ||
|
|
309b069558 | ||
|
|
cbedc982b6 | ||
|
|
dd482f2f89 | ||
|
|
29331cc3d2 | ||
|
|
4f2fbe39c0 | ||
|
|
b2f3ba11ae | ||
|
|
08c0b0e940 | ||
|
|
775cb4d650 | ||
|
|
52cc825b3e | ||
|
|
ce3065b37d | ||
|
|
d6ee815183 | ||
|
|
0192eed76e | ||
|
|
9858fa1976 | ||
|
|
95bfc0b428 | ||
|
|
130c82ae4f | ||
|
|
3698f2e4fb | ||
|
|
f58f8bdb1d | ||
|
|
e76c9852d6 | ||
|
|
0788c1fadc | ||
|
|
a8057ac670 | ||
|
|
bb067e0e1e | ||
|
|
755e68040f | ||
|
|
1687a4cb90 | ||
|
|
03398c7e3b | ||
|
|
d27be003c7 | ||
|
|
8e39a00c30 | ||
|
|
055da95b8a | ||
|
|
0c2ad5c77c | ||
|
|
0a88ca6a5c | ||
|
|
51079d4f25 | ||
|
|
4ca3b4bf58 | ||
|
|
25d42d3361 | ||
|
|
a1bffe4f26 | ||
|
|
b87630803f | ||
|
|
e2c7a2c32c | ||
|
|
9dda5d6d2d | ||
|
|
c3be392533 | ||
|
|
f63f2e3e39 | ||
|
|
c8dbac7770 | ||
|
|
959c597e33 | ||
|
|
4b0ca13ad1 | ||
|
|
811bfdcb8c | ||
|
|
79095dc243 | ||
|
|
ff9ab44796 | ||
|
|
77dea8ee67 | ||
|
|
c2eb466792 | ||
|
|
b4405dc60e | ||
|
|
dc3d43c57c | ||
|
|
be91e923ab | ||
|
|
6408d65ae7 | ||
|
|
6506a1be1a | ||
|
|
fc768fa3ea | ||
|
|
8012f979cb | ||
|
|
06b87b376c | ||
|
|
1a97dc6982 | ||
|
|
6a181ae025 | ||
|
|
97aa8a8d74 | ||
|
|
7e6f13f0a2 | ||
|
|
f0723ffbc0 | ||
|
|
78f85efe56 | ||
|
|
72510088c9 | ||
|
|
edb537947a | ||
|
|
b8b268feac | ||
|
|
c28b61fbb1 | ||
|
|
62843ea39c | ||
|
|
cb93669740 | ||
|
|
f154d223bf | ||
|
|
4980a02ef6 | ||
|
|
c65a60d22d | ||
|
|
3a6475dc9d | ||
|
|
6f91479605 | ||
|
|
bbebddea78 | ||
|
|
45be828183 | ||
|
|
e0753d4745 | ||
|
|
21f2e185f2 | ||
|
|
4bfedf6aa9 | ||
|
|
193c3faca5 | ||
|
|
1f47c225b3 | ||
|
|
1b372fca8d | ||
|
|
5e7b6027fa | ||
|
|
64bd5deb4b | ||
|
|
d0fdb9b570 | ||
|
|
f37755209e | ||
|
|
297c0dbc0e | ||
|
|
7de17f7c94 | ||
|
|
55f6494681 | ||
|
|
b2cfebc5a7 | ||
|
|
802768e0cc | ||
|
|
f68e4112e1 | ||
|
|
19b4cd65ce | ||
|
|
ef12125785 | ||
|
|
014993f058 | ||
|
|
a10da7d3ed | ||
|
|
786dca9d13 | ||
|
|
1cfd471abc | ||
|
|
9ff575c388 | ||
|
|
b973e39ef7 | ||
|
|
75cdc5a36b | ||
|
|
93441a473f | ||
|
|
7b8a83ade7 | ||
|
|
2cf1ce2898 | ||
|
|
e4890bfff2 | ||
|
|
5c6ba26334 | ||
|
|
e6e3ad121d | ||
|
|
7133c859d6 | ||
|
|
8acf0b849a | ||
|
|
42f6818a02 | ||
|
|
af043ef5c0 | ||
|
|
4f46858643 | ||
|
|
ddc47fb8de | ||
|
|
7ee134b819 | ||
|
|
254e9f4015 | ||
|
|
babd1242d5 | ||
|
|
cc99ea009e | ||
|
|
76407e11f8 | ||
|
|
57719ddd5e | ||
|
|
d0b8b9ff1b | ||
|
|
c5c9723208 | ||
|
|
9bceaafd9c | ||
|
|
7d3a9178ea | ||
|
|
2c76c0cafa | ||
|
|
82977e9ef2 | ||
|
|
7a9c25da8e | ||
|
|
342c48fb16 | ||
|
|
6bc955a403 | ||
|
|
741ba378ab | ||
|
|
c1054caf4a | ||
|
|
24b97d9277 | ||
|
|
868fb64857 | ||
|
|
8729e97e1b | ||
|
|
aaed54393e | ||
|
|
d12776bb5f | ||
|
|
7829f6afca | ||
|
|
4bd10bc102 | ||
|
|
3821e02f09 | ||
|
|
97689da0b4 | ||
|
|
5c75e74bf9 | ||
|
|
388a46abf4 | ||
|
|
6b89fc81a1 | ||
|
|
c9b5d5d697 | ||
|
|
f16dd0e737 | ||
|
|
5ed19eff73 | ||
|
|
0b3605141d | ||
|
|
f1df14ca92 | ||
|
|
83776ceec5 | ||
|
|
7aff5e9ee5 | ||
|
|
bf6be107d3 | ||
|
|
c24d1fe26b | ||
|
|
61f5468847 | ||
|
|
c713ce04b6 | ||
|
|
fe2b36e04b | ||
|
|
a720916df5 | ||
|
|
b2593e4bb1 | ||
|
|
6e3c759e5c | ||
|
|
a41f33e0bd | ||
|
|
111bf8dcbf | ||
|
|
f18abb2fe6 | ||
|
|
b7093e176a | ||
|
|
cf7d37a454 | ||
|
|
2af431e2eb | ||
|
|
3db64f7988 | ||
|
|
7ef64d4250 | ||
|
|
363aa995a2 | ||
|
|
696fa28e6f | ||
|
|
a908bdfc1c | ||
|
|
81b64ac908 | ||
|
|
d5ccdc826f | ||
|
|
fac4faaae8 | ||
|
|
cfb8769746 | ||
|
|
c1b0e4e8d0 | ||
|
|
5683e31f6b | ||
|
|
7909ad477b | ||
|
|
f94dbf05ef | ||
|
|
a44b769390 | ||
|
|
2a4816a9cd | ||
|
|
674fd92690 | ||
|
|
cc29cab99a | ||
|
|
bf803bb6e9 | ||
|
|
3c80fd0f02 | ||
|
|
616a3ab706 | ||
|
|
8350cc611d | ||
|
|
621feb749d | ||
|
|
f6731a435d | ||
|
|
dcfe5fb558 | ||
|
|
4fa80e9652 | ||
|
|
02851b6237 | ||
|
|
a74ec12445 | ||
|
|
262e921a81 | ||
|
|
0c7b9e10f4 | ||
|
|
ab8b930365 | ||
|
|
4ae49c68aa | ||
|
|
733f22d927 | ||
|
|
791131ea27 | ||
|
|
f17292221c | ||
|
|
b60a438c9d | ||
|
|
3b3a610375 | ||
|
|
38f928bdb7 | ||
|
|
6272e992a4 | ||
|
|
3263fbca28 | ||
|
|
f0e7af389c | ||
|
|
471dfc7a29 | ||
|
|
2a7c21c062 | ||
|
|
03797e3336 | ||
|
|
dc1be12c86 | ||
|
|
4c83a43d64 | ||
|
|
e083cda3d9 | ||
|
|
c0006f888b | ||
|
|
e2d2d3a347 | ||
|
|
3fd50b0e44 | ||
|
|
4b0e3ae923 | ||
|
|
37f10cc0d4 | ||
|
|
998df265e6 | ||
|
|
d852981371 | ||
|
|
afed5bd943 | ||
|
|
97b9041b76 | ||
|
|
2dc14ef466 | ||
|
|
8e69c32a36 | ||
|
|
42b33bea5b | ||
|
|
7fd101cbf8 | ||
|
|
92ee9889b1 | ||
|
|
b6e1610abe | ||
|
|
bde5db9c51 | ||
|
|
148ae49ded | ||
|
|
d1f8365da1 | ||
|
|
59fc294d66 | ||
|
|
7473b4e18c | ||
|
|
58aafcf3f1 | ||
|
|
776fc57c35 | ||
|
|
b3f752a3c4 | ||
|
|
4965ec7f1d | ||
|
|
0746acd34f | ||
|
|
49b1c4816e | ||
|
|
7c6e87e161 | ||
|
|
b548700c0b | ||
|
|
f278a30003 | ||
|
|
22bbe67d24 | ||
|
|
a2861a133e | ||
|
|
03aab10786 | ||
|
|
95e768efd5 | ||
|
|
6644e86be9 | ||
|
|
c8363cd476 | ||
|
|
62efe1ab7f | ||
|
|
01e643ad2f | ||
|
|
e4078e84d7 | ||
|
|
abfcbe2a90 | ||
|
|
e06d8bbc06 | ||
|
|
a78cdde86f | ||
|
|
10517ac94d | ||
|
|
a572699588 | ||
|
|
d11fb47734 | ||
|
|
92c7b2db69 | ||
|
|
ff94ad968c | ||
|
|
c6071c57ec | ||
|
|
e3e3562c2c | ||
|
|
06b5b8fa83 | ||
|
|
4b95b0ff30 | ||
|
|
42f2ed571d | ||
|
|
f3791c5c6d | ||
|
|
4cff344971 | ||
|
|
594b307e94 | ||
|
|
8a5fd16469 | ||
|
|
4fa93989fa | ||
|
|
032072d2f3 | ||
|
|
ce7b1d9916 | ||
|
|
d015da3ca1 | ||
|
|
a956c8068c | ||
|
|
2124e292f1 | ||
|
|
115739a9bb | ||
|
|
cc2c16b957 | ||
|
|
b9245c6c1f | ||
|
|
d21f7811fa | ||
|
|
8dbd6431f7 | ||
|
|
c7b2bbf700 | ||
|
|
682fdb7ef4 | ||
|
|
9c79f9d80e | ||
|
|
c55b1188e8 | ||
|
|
d5e4eaf2d8 | ||
|
|
d49cc74828 | ||
|
|
47781fa1e0 | ||
|
|
cc98ed1084 | ||
|
|
bec8cf2b13 | ||
|
|
5bfebbe436 | ||
|
|
c02a4d8138 | ||
|
|
15aae34d65 | ||
|
|
89b0426a2b | ||
|
|
e1f1cab5a5 | ||
|
|
132fb4fe5f | ||
|
|
f1843649ba | ||
|
|
43b7bbb5b3 | ||
|
|
b79b7ceb40 | ||
|
|
2a546f8899 | ||
|
|
a4a0740903 | ||
|
|
075ad01e46 | ||
|
|
1296a1ce28 | ||
|
|
d510ba15c5 | ||
|
|
decc887cb5 | ||
|
|
163f7eeaaa | ||
|
|
d15667d5ce | ||
|
|
39a7869524 | ||
|
|
c9464d2595 | ||
|
|
717de611b9 | ||
|
|
85869cf595 | ||
|
|
03ca28e0d2 | ||
|
|
a3bdf976bb | ||
|
|
bf6eec626c | ||
|
|
cd0bdbbd9c | ||
|
|
e7faa85476 | ||
|
|
e419f95910 | ||
|
|
ee613104f1 | ||
|
|
93a8722b22 | ||
|
|
73b06248aa | ||
|
|
82169f9d58 | ||
|
|
1fa71f2e2d | ||
|
|
af599ab320 | ||
|
|
99eed4bb5c | ||
|
|
d8deb90527 | ||
|
|
37a0010714 | ||
|
|
3c298df5ce | ||
|
|
c6a8618d33 | ||
|
|
f19ddf66b8 | ||
|
|
203d5246eb | ||
|
|
b78276e49a | ||
|
|
bd4d309d89 | ||
|
|
804c09b6c5 | ||
|
|
92202807f7 | ||
|
|
0c92460163 | ||
|
|
8bb570d222 | ||
|
|
f1abce9eff | ||
|
|
1fc46a3c02 | ||
|
|
1d45adfb27 | ||
|
|
8365ad5d1b | ||
|
|
00346ea441 | ||
|
|
ae70d34dd6 | ||
|
|
e0ef62d1b3 | ||
|
|
02e8467fdd | ||
|
|
48e7f8c755 | ||
|
|
19b607b3f2 | ||
|
|
1d827ab2bf | ||
|
|
7af886cf07 | ||
|
|
a76ad6c686 | ||
|
|
3d9a55add3 | ||
|
|
4ceac5e847 | ||
|
|
0939022cb4 | ||
|
|
f7afb9ff15 | ||
|
|
13fd4ba614 | ||
|
|
2f80c9866a | ||
|
|
e2bca647ae | ||
|
|
ec2467486c | ||
|
|
3332271a97 | ||
|
|
7fdfd782d8 | ||
|
|
af7bf7ff7f | ||
|
|
b6dc4d0bd2 | ||
|
|
8ec5dbbf38 | ||
|
|
0c760f3721 | ||
|
|
c45568731f | ||
|
|
ef4c9dc338 | ||
|
|
89de553aba | ||
|
|
247e7b2605 | ||
|
|
f81ba64b91 | ||
|
|
d6fbca1bf1 | ||
|
|
ef9441e7d2 | ||
|
|
6fbf78fa19 | ||
|
|
e38a614c37 | ||
|
|
d8b9665946 | ||
|
|
e655beb01c | ||
|
|
aa1dcb7f99 | ||
|
|
1a2519d647 | ||
|
|
a3572efaa6 | ||
|
|
e28f0d5509 | ||
|
|
789a14054f | ||
|
|
4655b5c732 | ||
|
|
81ebd8c8e7 | ||
|
|
7998520e4a | ||
|
|
460196a62b | ||
|
|
22f43851bd | ||
|
|
91bb63eb97 | ||
|
|
ede1b5f08b | ||
|
|
a26c157c65 | ||
|
|
bcf00a1f8d | ||
|
|
749a94e6e4 | ||
|
|
fc9d1e077c | ||
|
|
a40f0b4038 | ||
|
|
dbf54396f3 | ||
|
|
3fe881e45a | ||
|
|
af03c5163c | ||
|
|
58de84945f | ||
|
|
a2d4252002 | ||
|
|
0689fc19a9 | ||
|
|
68530f6e11 | ||
|
|
fd752bedc5 | ||
|
|
cac880eb1a | ||
|
|
2c66cd4a95 | ||
|
|
64e428f182 | ||
|
|
6f2efdcefe | ||
|
|
9214b2ffcc | ||
|
|
cfb14d4b77 | ||
|
|
5965615e17 | ||
|
|
40eb7d8515 | ||
|
|
e2f36a9bea | ||
|
|
a0ba644488 | ||
|
|
2f67f344b7 | ||
|
|
8bb208aed1 | ||
|
|
48b145a592 | ||
|
|
65de9200fb | ||
|
|
e51d7a7a18 | ||
|
|
c4af50d63a | ||
|
|
933fe8953a | ||
|
|
66aa492d50 | ||
|
|
730934f520 | ||
|
|
d2ec09eaf8 | ||
|
|
7fd3b313b2 | ||
|
|
89f1549741 | ||
|
|
e91015f5c8 | ||
|
|
d9c3edfb12 | ||
|
|
cbf9696f47 | ||
|
|
24e556b9a7 | ||
|
|
eaf29512b6 | ||
|
|
0c1e0ec375 | ||
|
|
b56a054f50 | ||
|
|
33ff4e36de | ||
|
|
bf879934e6 | ||
|
|
b878fa3a80 | ||
|
|
901849f176 | ||
|
|
371c0d22c2 | ||
|
|
4f7f38e0a7 | ||
|
|
85dca2e14e | ||
|
|
e53a5023f1 | ||
|
|
ce8b75d96d | ||
|
|
26f65c4fee | ||
|
|
1ba1e51ca4 | ||
|
|
f674afc412 | ||
|
|
db90b898e1 | ||
|
|
71621c2225 | ||
|
|
ed36fca4a2 | ||
|
|
fdd3699ba5 | ||
|
|
7d4b39643b | ||
|
|
7698cd2c7d | ||
|
|
03c744df54 | ||
|
|
90978d1f35 | ||
|
|
68a2bf271a | ||
|
|
8301384c53 | ||
|
|
045592212a | ||
|
|
45d879e607 | ||
|
|
3e44ee1eba | ||
|
|
36c5fc8d3c | ||
|
|
38ceb85ad9 | ||
|
|
6d18d9226d | ||
|
|
6d5ed2129a | ||
|
|
5cfb6ffa11 | ||
|
|
363b268ccf | ||
|
|
e6cddb0084 | ||
|
|
5e77bf62b9 | ||
|
|
4905c0b179 | ||
|
|
43ab3be804 | ||
|
|
14a6e581bc | ||
|
|
cadad32bdb | ||
|
|
71c6411d1a | ||
|
|
85e8fad16f | ||
|
|
67398222d4 | ||
|
|
1a82bdee75 | ||
|
|
9fff26c3db | ||
|
|
172f6c577d | ||
|
|
ff5652058d | ||
|
|
5241fabb33 | ||
|
|
6c9aa5794f | ||
|
|
7c8cb375a3 | ||
|
|
a6e770f548 | ||
|
|
eb7683450f | ||
|
|
ee739d3414 | ||
|
|
b864bbdd5f | ||
|
|
5a740eddc3 | ||
|
|
fdced6f225 | ||
|
|
3d772845f9 | ||
|
|
72326d467e | ||
|
|
a0944961b5 | ||
|
|
1fa61ece93 | ||
|
|
288d0bb884 | ||
|
|
28a2aa47e8 | ||
|
|
069056edad | ||
|
|
19bd510975 | ||
|
|
7979efc0a1 | ||
|
|
66866a4c65 | ||
|
|
e6fb066fe5 | ||
|
|
5841979566 | ||
|
|
529f50edc6 | ||
|
|
5895e8fb4d | ||
|
|
49dcf71116 | ||
|
|
5778552380 | ||
|
|
592ecc9997 | ||
|
|
1aaa205cc9 | ||
|
|
ff5a0927fa | ||
|
|
607127d46e | ||
|
|
cf61a5d39d | ||
|
|
69b2599abb | ||
|
|
533e50de9d | ||
|
|
12b99f80dc | ||
|
|
0193ca052f | ||
|
|
e0af620cbe | ||
|
|
80367232ae | ||
|
|
1c480bd74f | ||
|
|
ba05de263c | ||
|
|
f045c3bc2b | ||
|
|
9ec5f33a85 | ||
|
|
e1cc657059 | ||
|
|
9c3dce4bbb | ||
|
|
5418539275 | ||
|
|
3103640688 | ||
|
|
86beb2f212 | ||
|
|
dd1c96fcba | ||
|
|
b282baadb7 | ||
|
|
fccb38fced | ||
|
|
700a7e27d3 | ||
|
|
bb1c40c7f8 | ||
|
|
407490c654 | ||
|
|
dfd61af346 | ||
|
|
a85b4ad985 | ||
|
|
eacffa79fa | ||
|
|
ca5449f1b8 | ||
|
|
6751f5bd53 | ||
|
|
c5c70fe83e | ||
|
|
0c0cd81253 | ||
|
|
553a03e40f | ||
|
|
b50190aeb0 | ||
|
|
bc231a8a9d | ||
|
|
c1c9cb8139 | ||
|
|
0a915e305d | ||
|
|
308eb1f321 | ||
|
|
d576c0e30b | ||
|
|
e63d4c3a30 | ||
|
|
2041e81101 | ||
|
|
f396374fa8 | ||
|
|
1a0db63f32 | ||
|
|
0d32a83e66 | ||
|
|
7ac3328db8 | ||
|
|
4f72987a29 | ||
|
|
aa5af53348 | ||
|
|
030ee8554c | ||
|
|
80d447d64b | ||
|
|
bfac5a418c | ||
|
|
a3b09f028a | ||
|
|
930292aaad | ||
|
|
1d3b59a7e0 | ||
|
|
d54b518bfd | ||
|
|
ccb8bb83a6 | ||
|
|
076e865f77 | ||
|
|
8ceb9faf2d | ||
|
|
b15e5f516a | ||
|
|
e161d75986 | ||
|
|
084473a340 | ||
|
|
74d6d4d634 | ||
|
|
38ac4298a0 | ||
|
|
9b2c0e7954 | ||
|
|
62472034f1 | ||
|
|
13cfc19841 | ||
|
|
4955ab8df2 | ||
|
|
de39c98e50 | ||
|
|
51378bb0eb | ||
|
|
aff3bdd78e | ||
|
|
e9a8e26e76 | ||
|
|
83439679c1 | ||
|
|
968027a439 | ||
|
|
cc24b6ebc5 | ||
|
|
db09b4718d | ||
|
|
e0edbc6288 | ||
|
|
ae9ae91af5 | ||
|
|
7921db007b | ||
|
|
e85af2f9e9 | ||
|
|
8ccc64f92e | ||
|
|
afb21c6dc3 | ||
|
|
3291bc7097 | ||
|
|
a7d56504be | ||
|
|
90e5b473d9 | ||
|
|
52834e9966 | ||
|
|
63c60d4cea | ||
|
|
6a2a9d2093 | ||
|
|
1410448808 | ||
|
|
ad8f2222db | ||
|
|
48265e73b1 | ||
|
|
f3139a8aa0 | ||
|
|
8d68e36703 | ||
|
|
d2d93fbe80 | ||
|
|
ed8510468d | ||
|
|
e7680e07c2 | ||
|
|
0f89baa36e | ||
|
|
48ed7690af | ||
|
|
59b94ea650 | ||
|
|
5b992734fb | ||
|
|
3b74b911f8 | ||
|
|
b6570e3c27 | ||
|
|
e1e1664b96 | ||
|
|
cb1913dfc3 | ||
|
|
b813a6f8c5 | ||
|
|
0b662318e1 | ||
|
|
a6ccc1a246 | ||
|
|
bc17e9b389 | ||
|
|
b08e96b66a | ||
|
|
9e74ead54e | ||
|
|
2cf52f3df6 | ||
|
|
50e9a0a9f7 | ||
|
|
841c44e05c | ||
|
|
465bafeb30 | ||
|
|
cb8dafbd31 | ||
|
|
52db617b06 | ||
|
|
ec622590da | ||
|
|
345cb1bdc4 | ||
|
|
8ca692a26e | ||
|
|
d1ea68d7dc | ||
|
|
b56440a4e8 | ||
|
|
1401b949a3 | ||
|
|
97f3ce6198 | ||
|
|
8019391914 | ||
|
|
8d10010ab1 | ||
|
|
a2b4d2a96a | ||
|
|
4de558bdf6 | ||
|
|
8ff06a0de1 | ||
|
|
f8ad6061c1 | ||
|
|
aa4cdb6aea | ||
|
|
cba424fde0 | ||
|
|
6c7a870645 | ||
|
|
f42b1ad4e0 | ||
|
|
30a51952e0 | ||
|
|
5de754c5ab | ||
|
|
bda446c7b5 | ||
|
|
f79540f197 | ||
|
|
d507697e56 | ||
|
|
acbc1f2e30 | ||
|
|
7b3c68119c | ||
|
|
39f97166b0 | ||
|
|
541d19cafb | ||
|
|
969a81b779 | ||
|
|
3f76c1efb0 | ||
|
|
774849189f | ||
|
|
53d626aa72 | ||
|
|
1a3a840269 | ||
|
|
fe69f05e75 | ||
|
|
5c662822b9 | ||
|
|
c049d3424a | ||
|
|
471535853b | ||
|
|
676148cc14 | ||
|
|
a915b05240 | ||
|
|
a1668e8c66 | ||
|
|
e7664cb40b | ||
|
|
83c18f4008 | ||
|
|
8b6321ce7f | ||
|
|
9fac981ba6 | ||
|
|
ccc71930f7 | ||
|
|
9380f048fa | ||
|
|
0a655ac8df | ||
|
|
0b6676c5b3 | ||
|
|
e5ecba7ec0 | ||
|
|
a1809f5b84 | ||
|
|
9c66447913 | ||
|
|
65960fb982 | ||
|
|
9d0bc09e0f | ||
|
|
475ddcc8dd | ||
|
|
105276f98e | ||
|
|
4ee647403b | ||
|
|
10f48f130f | ||
|
|
bd697864e4 | ||
|
|
ab876c9efd | ||
|
|
aba303c677 | ||
|
|
43d59ca8d8 | ||
|
|
177705aeff | ||
|
|
b92fff0da6 | ||
|
|
6a6b72a2ae | ||
|
|
614a90c0eb | ||
|
|
9adbed4be6 | ||
|
|
809f005f61 | ||
|
|
d366e74e86 | ||
|
|
3f307880f9 | ||
|
|
50523ec1b1 | ||
|
|
684b2885aa | ||
|
|
f5eb8738fb | ||
|
|
14941c742a | ||
|
|
217add3b00 | ||
|
|
4bac85b6a9 |
@@ -1,2 +1,6 @@
|
||||
[run]
|
||||
omit = meshtastic/*_pb2.py,meshtastic/tests/*.py,meshtastic/test.py
|
||||
|
||||
[report]
|
||||
exclude_lines =
|
||||
if __name__ == .__main__.:
|
||||
|
||||
4
.gitattributes
vendored
Normal file
4
.gitattributes
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
* text=auto eol=lf
|
||||
*.{cmd,[cC][mM][dD]} text eol=crlf
|
||||
*.{bat,[bB][aA][tT]} text eol=crlf
|
||||
*.{sh,[sS][hH]} text eol=lf
|
||||
37
.github/workflows/ci.yml
vendored
37
.github/workflows/ci.yml
vendored
@@ -1,4 +1,4 @@
|
||||
name: Linting and Tests
|
||||
name: CI
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
@@ -10,12 +10,17 @@ on:
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version:
|
||||
- "3.8"
|
||||
- "3.9"
|
||||
- "3.10"
|
||||
- "3.11"
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install Python 3
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: 3.9
|
||||
- name: Uninstall meshtastic
|
||||
run: |
|
||||
pip3 uninstall meshtastic
|
||||
@@ -29,17 +34,37 @@ jobs:
|
||||
which meshtastic
|
||||
meshtastic --version
|
||||
- name: Run pylint
|
||||
run: pylint meshtastic
|
||||
run: pylint meshtastic examples/ --ignore-patterns ".*_pb2.pyi?$"
|
||||
- name: Check types with mypy
|
||||
run: mypy meshtastic/
|
||||
- name: Run tests with pytest
|
||||
run: pytest --cov=meshtastic
|
||||
- name: Generate coverage report
|
||||
run: |
|
||||
pytest --cov=meshtastic --cov-report=xml
|
||||
- name: Upload coverage to Codecov
|
||||
uses: codecov/codecov-action@v4
|
||||
with:
|
||||
token: ${{ secrets.CODECOV_TOKEN }}
|
||||
env_vars: OS, PYTHON
|
||||
files: ./coverage.xml
|
||||
flags: unittests
|
||||
name: codecov-umbrella
|
||||
fail_ci_if_error: true
|
||||
verbose: true
|
||||
validate:
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
python-version:
|
||||
- "3.8"
|
||||
- "3.9"
|
||||
- "3.10"
|
||||
- "3.11"
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install Python 3
|
||||
uses: actions/setup-python@v1
|
||||
with:
|
||||
python-version: 3.9
|
||||
- name: Install meshtastic from local
|
||||
run: |
|
||||
pip3 install .
|
||||
|
||||
20
.github/workflows/cleanup_artifacts.yml
vendored
Normal file
20
.github/workflows/cleanup_artifacts.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
name: Remove old artifacts
|
||||
|
||||
on:
|
||||
schedule:
|
||||
# Every day at 1am
|
||||
- cron: "0 1 * * *"
|
||||
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
remove-old-artifacts:
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 10
|
||||
|
||||
steps:
|
||||
- name: Remove old artifacts
|
||||
uses: c-hive/gha-remove-artifacts@v1
|
||||
with:
|
||||
age: "1 month"
|
||||
skip-tags: true
|
||||
35
.github/workflows/publish_to_pypi.yml
vendored
35
.github/workflows/publish_to_pypi.yml
vendored
@@ -1,35 +0,0 @@
|
||||
name: Publish PyPI
|
||||
|
||||
on: workflow_dispatch
|
||||
|
||||
jobs:
|
||||
build-and-publish:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Set up Python 3.9
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: 3.9
|
||||
- name: Install pypa/build
|
||||
run: >-
|
||||
python -m
|
||||
pip install
|
||||
build
|
||||
--user
|
||||
- name: Build a binary wheel and a source tarball
|
||||
run: >-
|
||||
python -m
|
||||
build
|
||||
--sdist
|
||||
--wheel
|
||||
--outdir dist/
|
||||
.
|
||||
- name: Publish to PyPI
|
||||
uses: pypa/gh-action-pypi-publish@master
|
||||
with:
|
||||
username: __token__
|
||||
password: ${{ secrets.PYPI_API_TOKEN }}
|
||||
193
.github/workflows/release.yml
vendored
Normal file
193
.github/workflows/release.yml
vendored
Normal file
@@ -0,0 +1,193 @@
|
||||
name: Make Release
|
||||
on: workflow_dispatch
|
||||
|
||||
jobs:
|
||||
release_create:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
outputs:
|
||||
version: ${{ steps.get_version.outputs.version }}
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
new_sha: ${{ steps.commit_updated.outputs.sha }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Bump version
|
||||
run: >-
|
||||
bin/bump_version.py
|
||||
|
||||
- name: Commit updated version.py
|
||||
id: commit_updated
|
||||
run: |
|
||||
git config --global user.name 'github-actions'
|
||||
git config --global user.email 'bot@noreply.github.com'
|
||||
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
|
||||
git add setup.py
|
||||
git commit -m "bump version" && git push || echo "No changes to commit"
|
||||
git log -n 1 --pretty=format:"%H" | tail -n 1 | awk '{print "::set-output name=sha::"$0}'
|
||||
|
||||
- name: Get version
|
||||
id: get_version
|
||||
run: >-
|
||||
bin/show_version.py
|
||||
|
||||
- name: Create GitHub release
|
||||
uses: actions/create-release@v1
|
||||
id: create_release
|
||||
|
||||
with:
|
||||
draft: true
|
||||
prerelease: true
|
||||
release_name: Meshtastic Python ${{ steps.get_version.outputs.version }}
|
||||
tag_name: ${{ steps.get_version.outputs.version }}
|
||||
body: |
|
||||
Autogenerated by github action, developer should edit as required before publishing...
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Set up Python 3.9
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: 3.9
|
||||
|
||||
- name: Install pypa/build
|
||||
run: >-
|
||||
python -m
|
||||
pip install
|
||||
build
|
||||
--user
|
||||
|
||||
- name: Build a binary wheel and a source tarball
|
||||
run: >-
|
||||
python -m
|
||||
build
|
||||
--sdist
|
||||
--wheel
|
||||
--outdir dist/
|
||||
.
|
||||
|
||||
- name: Publish to PyPI
|
||||
uses: pypa/gh-action-pypi-publish@master
|
||||
with:
|
||||
user: __token__
|
||||
password: ${{ secrets.PYPI_API_TOKEN }}
|
||||
|
||||
# build-and-publish-mac:
|
||||
# runs-on: macos-latest
|
||||
# needs: release_create
|
||||
# steps:
|
||||
# - name: Checkout
|
||||
# uses: actions/checkout@v3
|
||||
# with:
|
||||
# ref: ${{ needs.release_create.outputs.new_sha }}
|
||||
|
||||
# - name: Set up Python 3.9
|
||||
# uses: actions/setup-python@v2
|
||||
# with:
|
||||
# python-version: 3.9
|
||||
|
||||
# - name: Setup code signing
|
||||
# env:
|
||||
# MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }}
|
||||
# MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERTIFICATE_PWD }}
|
||||
# MACOS_KEYCHAIN_PASSWORD: ${{ secrets.MACOS_KEYCHAIN_PASSWORD }}
|
||||
# run: |
|
||||
# echo $MACOS_CERTIFICATE | base64 --decode > certificate.p12
|
||||
# security create-keychain -p "$MACOS_KEYCHAIN_PASSWORD" meshtastic.keychain
|
||||
# security default-keychain -s meshtastic.keychain
|
||||
# security unlock-keychain -p "$MACOS_KEYCHAIN_PASSWORD" meshtastic.keychain
|
||||
# security import certificate.p12 -k meshtastic.keychain -P "$MACOS_CERTIFICATE_PWD" -T /usr/bin/codesign
|
||||
# security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$MACOS_KEYCHAIN_PASSWORD" meshtastic.keychain
|
||||
|
||||
# - name: Build
|
||||
# env:
|
||||
# MACOS_SIGNING_IDENTITY: ${{ secrets.MACOS_SIGNING_IDENTITY }}
|
||||
# run: |
|
||||
# pip install pyinstaller
|
||||
# pip install -r requirements.txt
|
||||
# pip install .
|
||||
# pyinstaller -F -n meshtastic --collect-all meshtastic --codesign-identity "$MACOS_SIGNING_IDENTITY" meshtastic/__main__.py
|
||||
|
||||
# - name: Add mac to release
|
||||
# uses: actions/upload-release-asset@v1
|
||||
# env:
|
||||
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
# with:
|
||||
# upload_url: ${{ needs.release_create.outputs.upload_url }}
|
||||
# asset_path: dist/meshtastic
|
||||
# asset_name: meshtastic_mac
|
||||
# asset_content_type: application/zip
|
||||
|
||||
build-and-publish-ubuntu:
|
||||
runs-on: ubuntu-latest
|
||||
needs: release_create
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ needs.release_create.outputs.new_sha }}
|
||||
|
||||
- name: Set up Python 3.9
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: 3.9
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
pip install pyinstaller
|
||||
pip install -r requirements.txt
|
||||
pip install .
|
||||
pyinstaller -F -n meshtastic --collect-all meshtastic meshtastic/__main__.py
|
||||
|
||||
- name: Add ubuntu to release
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ needs.release_create.outputs.upload_url }}
|
||||
asset_path: dist/meshtastic
|
||||
asset_name: meshtastic_ubuntu
|
||||
asset_content_type: application/zip
|
||||
|
||||
- name: Add readme.txt to release
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ needs.release_create.outputs.upload_url }}
|
||||
asset_path: standalone_readme.txt
|
||||
asset_name: readme.txt
|
||||
asset_content_type: text/plain
|
||||
|
||||
build-and-publish-windows:
|
||||
runs-on: windows-latest
|
||||
needs: release_create
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
ref: ${{ needs.release_create.outputs.new_sha }}
|
||||
|
||||
- name: Set up Python 3.9
|
||||
uses: actions/setup-python@v2
|
||||
with:
|
||||
python-version: 3.9
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
pip install pyinstaller
|
||||
pip install -r requirements.txt
|
||||
pip install .
|
||||
pyinstaller -F -n meshtastic --collect-all meshtastic meshtastic/__main__.py
|
||||
|
||||
- name: Add windows to release
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ needs.release_create.outputs.upload_url }}
|
||||
asset_path: dist/meshtastic.exe
|
||||
asset_name: meshtastic_windows
|
||||
asset_content_type: application/zip
|
||||
14
.github/workflows/update_protobufs.yml
vendored
14
.github/workflows/update_protobufs.yml
vendored
@@ -15,10 +15,22 @@ jobs:
|
||||
run: |
|
||||
git pull --recurse-submodules
|
||||
git submodule update --remote --recursive
|
||||
|
||||
- name: Download nanopb
|
||||
run: |
|
||||
wget https://jpa.kapsi.fi/nanopb/download/nanopb-0.4.6-linux-x86.tar.gz
|
||||
tar xvzf nanopb-0.4.6-linux-x86.tar.gz
|
||||
mv nanopb-0.4.6-linux-x86 nanopb-0.4.6
|
||||
|
||||
- name: Re-generate protocol buffers
|
||||
run: |
|
||||
./bin/regen-protobufs.sh
|
||||
|
||||
- name: Commit update
|
||||
run: |
|
||||
git config --global user.name 'github-actions'
|
||||
git config --global user.email 'bot@noreply.github.com'
|
||||
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
|
||||
git add proto
|
||||
git add protobufs
|
||||
git add meshtastic
|
||||
git commit -m "Update protobuf submodule" && git push || echo "No changes to commit"
|
||||
|
||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -5,7 +5,7 @@ dist
|
||||
*.egg-info
|
||||
log_*
|
||||
.eggs
|
||||
nanopb-0.4.4
|
||||
nanopb-*
|
||||
.*swp
|
||||
.coverage
|
||||
*.py-E
|
||||
@@ -14,3 +14,4 @@ venv/
|
||||
.DS_Store
|
||||
__pycache__
|
||||
examples/__pycache__
|
||||
meshtastic.spec
|
||||
|
||||
6
.gitmodules
vendored
6
.gitmodules
vendored
@@ -1,3 +1,3 @@
|
||||
[submodule "proto"]
|
||||
path = proto
|
||||
url = https://github.com/meshtastic/Meshtastic-protobufs.git
|
||||
[submodule "protobufs"]
|
||||
path = protobufs
|
||||
url = http://github.com/meshtastic/protobufs
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
# Add files or directories matching the regex patterns to the blacklist. The
|
||||
# regex matches against base names, not paths.
|
||||
ignore-patterns=mqtt_pb2.py,channel_pb2.py,environmental_measurement_pb2.py,admin_pb2.py,radioconfig_pb2.py,deviceonly_pb2.py,apponly_pb2.py,remote_hardware_pb2.py,portnums_pb2.py,mesh_pb2.py,storeforward_pb2.py
|
||||
ignore-patterns=mqtt_pb2.py,channel_pb2.py,telemetry_pb2.py,admin_pb2.py,config_pb2.py,deviceonly_pb2.py,apponly_pb2.py,remote_hardware_pb2.py,portnums_pb2.py,mesh_pb2.py,storeforward_pb2.py,cannedmessages_pb2.py,module_config_pb2.py,localonly_pb2.py,node.py,device_metadata_pb2.py,nanopb_pb2.py
|
||||
|
||||
|
||||
|
||||
@@ -23,8 +23,7 @@ ignore-patterns=mqtt_pb2.py,channel_pb2.py,environmental_measurement_pb2.py,admi
|
||||
# no Warning level messages displayed, use"--disable=all --enable=classes
|
||||
# --disable=W"
|
||||
#
|
||||
disable=invalid-name,fixme,logging-fstring-interpolation,too-many-statements,too-many-branches,too-many-locals,no-member,f-string-without-interpolation,protected-access,no-self-use,pointless-string-statement,too-few-public-methods,consider-using-f-string,broad-except,no-else-return,unused-argument,global-statement,global-variable-not-assigned,too-many-boolean-expressions,no-else-raise,bare-except,c-extension-no-member
|
||||
|
||||
disable=invalid-name,fixme,logging-fstring-interpolation,too-many-statements,too-many-branches,too-many-locals,no-member,f-string-without-interpolation,protected-access,pointless-string-statement,too-few-public-methods,broad-except,no-else-return,no-else-raise,bare-except,too-many-public-methods
|
||||
|
||||
[BASIC]
|
||||
|
||||
@@ -41,7 +40,7 @@ bad-names=foo,bar,baz,toto,tutu,tata
|
||||
max-line-length=150
|
||||
|
||||
# Maximum number of lines in a module
|
||||
max-module-lines=1200
|
||||
max-module-lines=1600
|
||||
|
||||
|
||||
|
||||
|
||||
8
.trunk/.gitignore
vendored
Normal file
8
.trunk/.gitignore
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
*out
|
||||
*logs
|
||||
*actions
|
||||
*notifications
|
||||
*tools
|
||||
plugins
|
||||
user_trunk.yaml
|
||||
user.yaml
|
||||
2
.trunk/configs/.isort.cfg
Normal file
2
.trunk/configs/.isort.cfg
Normal file
@@ -0,0 +1,2 @@
|
||||
[settings]
|
||||
profile=black
|
||||
10
.trunk/configs/.markdownlint.yaml
Normal file
10
.trunk/configs/.markdownlint.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# Autoformatter friendly markdownlint config (all formatting rules disabled)
|
||||
default: true
|
||||
blank_lines: false
|
||||
bullet: false
|
||||
html: false
|
||||
indentation: false
|
||||
line_length: false
|
||||
spaces: false
|
||||
url: false
|
||||
whitespace: false
|
||||
7
.trunk/configs/.shellcheckrc
Normal file
7
.trunk/configs/.shellcheckrc
Normal file
@@ -0,0 +1,7 @@
|
||||
enable=all
|
||||
source-path=SCRIPTDIR
|
||||
disable=SC2154
|
||||
|
||||
# If you're having issues with shellcheck following source, disable the errors via:
|
||||
# disable=SC1090
|
||||
# disable=SC1091
|
||||
10
.trunk/configs/.yamllint.yaml
Normal file
10
.trunk/configs/.yamllint.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
rules:
|
||||
quoted-strings:
|
||||
required: only-when-needed
|
||||
extra-allowed: ["{|}"]
|
||||
empty-values:
|
||||
forbid-in-block-mappings: true
|
||||
forbid-in-flow-mappings: true
|
||||
key-duplicates: {}
|
||||
octal-values:
|
||||
forbid-implicit-octal: true
|
||||
5
.trunk/configs/ruff.toml
Normal file
5
.trunk/configs/ruff.toml
Normal file
@@ -0,0 +1,5 @@
|
||||
# Generic, formatter-friendly config.
|
||||
select = ["B", "D3", "D4", "E", "F"]
|
||||
|
||||
# Never enforce `E501` (line length violations). This should be handled by formatters.
|
||||
ignore = ["E501"]
|
||||
46
.trunk/trunk.yaml
Normal file
46
.trunk/trunk.yaml
Normal file
@@ -0,0 +1,46 @@
|
||||
version: 0.1
|
||||
cli:
|
||||
version: 1.15.0
|
||||
plugins:
|
||||
sources:
|
||||
- id: trunk
|
||||
ref: v1.2.2
|
||||
uri: https://github.com/trunk-io/plugins
|
||||
lint:
|
||||
disabled:
|
||||
- bandit
|
||||
ignore:
|
||||
- linters: [ALL]
|
||||
paths:
|
||||
# Ignore generated files
|
||||
- meshtastic/*_pb2.py
|
||||
enabled:
|
||||
- actionlint@1.6.25
|
||||
- black@23.7.0
|
||||
- checkov@2.4.9
|
||||
- git-diff-check
|
||||
- gitleaks@8.18.0
|
||||
- isort@5.12.0
|
||||
- markdownlint@0.36.0
|
||||
- osv-scanner@1.3.6
|
||||
- prettier@3.0.3
|
||||
- pylint@2.17.5
|
||||
- ruff@0.0.287
|
||||
- shellcheck@0.9.0
|
||||
- shfmt@3.6.0
|
||||
- taplo@0.8.1
|
||||
- trivy@0.44.1
|
||||
- trufflehog@3.54.3
|
||||
- yamllint@1.32.0
|
||||
runtimes:
|
||||
enabled:
|
||||
- go@1.21.0
|
||||
- node@18.12.1
|
||||
- python@3.10.8
|
||||
actions:
|
||||
disabled:
|
||||
- trunk-announce
|
||||
- trunk-check-pre-push
|
||||
- trunk-fmt-pre-commit
|
||||
enabled:
|
||||
- trunk-upgrade-available
|
||||
103
.vscode/launch.json
vendored
103
.vscode/launch.json
vendored
@@ -10,7 +10,7 @@
|
||||
"request": "launch",
|
||||
"module": "meshtastic",
|
||||
"justMyCode": false,
|
||||
"args": ["--debug", "--ble", "--device", "24:62:AB:DD:DF:3A"]
|
||||
"args": ["--debug", "--ble", "24:62:AB:DD:DF:3A"]
|
||||
},
|
||||
{
|
||||
"name": "meshtastic admin",
|
||||
@@ -42,7 +42,95 @@
|
||||
"request": "launch",
|
||||
"module": "meshtastic",
|
||||
"justMyCode": true,
|
||||
"args": ["--debug" ]
|
||||
"args": ["--debug"]
|
||||
},
|
||||
{
|
||||
"name": "meshtastic listen",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "meshtastic",
|
||||
"justMyCode": true,
|
||||
"args": ["--listen", "--debug"]
|
||||
},
|
||||
{
|
||||
"name": "meshtastic debug getPref",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "meshtastic",
|
||||
"justMyCode": true,
|
||||
"args": ["--debug", "--get", "power.is_power_saving"]
|
||||
},
|
||||
{
|
||||
"name": "meshtastic debug getPref telemetry",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "meshtastic",
|
||||
"justMyCode": true,
|
||||
"args": ["--debug", "--get", "telemetry.environment_update_interval"]
|
||||
},
|
||||
{
|
||||
"name": "meshtastic debug info",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "meshtastic",
|
||||
"justMyCode": true,
|
||||
"args": ["--debug", "--info"]
|
||||
},
|
||||
{
|
||||
"name": "meshtastic debug set region",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "meshtastic",
|
||||
"justMyCode": true,
|
||||
"args": ["--debug", "--set", "lora.region", "TW"]
|
||||
},
|
||||
{
|
||||
"name": "meshtastic debug set bluetooth fixed pin",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "meshtastic",
|
||||
"justMyCode": true,
|
||||
"args": ["--debug", "--set", "bluetooth.fixed_pin", "555555"]
|
||||
},
|
||||
{
|
||||
"name": "meshtastic debug get bluetooth fixed pin",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "meshtastic",
|
||||
"justMyCode": true,
|
||||
"args": ["--debug", "--get", "bluetooth.fixed_pin"]
|
||||
},
|
||||
{
|
||||
"name": "meshtastic debug setPref",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "meshtastic",
|
||||
"justMyCode": true,
|
||||
"args": ["--debug", "--set", "power.is_power_saving", "1"]
|
||||
},
|
||||
{
|
||||
"name": "meshtastic debug setPref telemetry.environment_measurement_enabled",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "meshtastic",
|
||||
"justMyCode": true,
|
||||
"args": ["--debug", "--set", "telemetry.environment_measurement_enabled", "1"]
|
||||
},
|
||||
{
|
||||
"name": "meshtastic debug setPref telemetry.environment_screen_enabled",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "meshtastic",
|
||||
"justMyCode": true,
|
||||
"args": ["--debug", "--set", "telemetry.environment_screen_enabled", "1"]
|
||||
},
|
||||
{
|
||||
"name": "meshtastic debug setPref telemetry",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "meshtastic",
|
||||
"justMyCode": true,
|
||||
"args": ["--debug", "--set", "telemetry.environment_measurement_enabled", "1"]
|
||||
},
|
||||
{
|
||||
"name": "meshtastic setpref",
|
||||
@@ -52,6 +140,15 @@
|
||||
"justMyCode": true,
|
||||
"args": ["--debug", "--setchan", "psk", ""]
|
||||
},
|
||||
{
|
||||
"name": "meshtastic --ch-set",
|
||||
"type": "python",
|
||||
"request": "launch",
|
||||
"module": "meshtastic",
|
||||
"justMyCode": true,
|
||||
"args": ["--debug", "--ch-set", "channel_num", "0", "--ch-index", "0"]
|
||||
},
|
||||
|
||||
{
|
||||
"name": "meshtastic seturl",
|
||||
"type": "python",
|
||||
@@ -92,7 +189,7 @@
|
||||
"module": "meshtastic",
|
||||
"justMyCode": true,
|
||||
"args": ["--debug", "--sendtext", "pytest"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "meshtastic showNodes",
|
||||
"type": "python",
|
||||
|
||||
18
Makefile
18
Makefile
@@ -2,6 +2,14 @@
|
||||
test:
|
||||
pytest -m unit
|
||||
|
||||
# only run the smoke tests against the virtual device
|
||||
virt:
|
||||
pytest -m smokevirt
|
||||
|
||||
# run the smoke1 test (after doing a factory reset and unplugging/replugging in device)
|
||||
smoke1:
|
||||
pytest -m smoke1 -s -vv
|
||||
|
||||
# local install
|
||||
install:
|
||||
pip install .
|
||||
@@ -12,11 +20,17 @@ docs:
|
||||
|
||||
# lint the codebase
|
||||
lint:
|
||||
pylint meshtastic
|
||||
pylint meshtastic examples
|
||||
|
||||
# show the slowest unit tests
|
||||
slow:
|
||||
pytest --durations=0
|
||||
pytest -m unit --durations=5
|
||||
|
||||
protobufs: FORCE
|
||||
git submodule update --init --recursive
|
||||
git pull --rebase
|
||||
git submodule update --remote --merge
|
||||
./bin/regen-protobufs.sh
|
||||
|
||||
# run the coverage report and open results in a browser
|
||||
cov:
|
||||
|
||||
51
README.md
51
README.md
@@ -1,13 +1,50 @@
|
||||
# Meshtastic-python
|
||||
# Meshtastic Python
|
||||
|
||||
[](https://open.vscode.dev/meshtastic/Meshtastic-python)
|
||||

|
||||
[](https://codecov.io/gh/meshtastic/python)
|
||||

|
||||
[](https://github.com/meshtastic/python/actions/workflows/ci.yml)
|
||||
[](https://cla-assistant.io/meshtastic/python)
|
||||
[](https://opencollective.com/meshtastic/)
|
||||
|
||||
A python client for using [Meshtastic](https://www.meshtastic.org) devices. This small library (and example application) provides an easy API for sending and receiving messages over mesh radios. It also provides access to any of the operations/data available in the device user interface or the Android application. Events are delivered using a publish-subscribe model, and you can subscribe to only the message types you are interested in.
|
||||
## Overview
|
||||
|
||||
Full documentation including examples [here](https://meshtastic.org/docs/software/python/python-installation).
|
||||
A Python client for use with Meshtastic devices.
|
||||
This small library (and example application) provides an easy API for sending and receiving messages over mesh radios.
|
||||
It also provides access to any of the operations/data available in the device user interface or the Android application.
|
||||
Events are delivered using a publish-subscribe model, and you can subscribe to only the message types you are interested in.
|
||||
|
||||
The library api is documented [here](https://meshtastic-python.vercel.app/meshtastic/index.html)
|
||||
**[Getting Started Guide](https://meshtastic.org/docs/software/python/cli/installation)**
|
||||
|
||||
(Documentation/API Reference is currently offline)
|
||||
|
||||
[](https://vercel.com?utm_source=meshtastic&utm_campaign=oss)
|
||||
## Call for Contributors
|
||||
|
||||
This library and CLI has gone without a consistent maintainer for a while, and there's many improvements that could be made. We're all volunteers here and help is extremely appreciated, whether in implementing your own needs or helping maintain the library and CLI in general.
|
||||
|
||||
If you're interested in contributing but don't have specific things you'd like to work on, look at the roadmap below!
|
||||
|
||||
## Roadmap
|
||||
|
||||
This should always be considered a list in progress and flux -- inclusion doesn't guarantee implementation, and exclusion doesn't mean something's not wanted. GitHub issues are a great place to discuss ideas.
|
||||
|
||||
* Types
|
||||
* type annotations throughout the codebase, and upgrading mypy running in CI to `--strict`
|
||||
* async-friendliness
|
||||
* CLI completeness & consistency
|
||||
* the CLI should support all features of the firmware
|
||||
* there should be a consistent output format available for shell scripting
|
||||
* CLI input validation & documentation
|
||||
* what arguments and options are compatible & incompatible with one another?
|
||||
* can the options be restructured in a way that is more self-documenting?
|
||||
* pubsub events should be documented clearly
|
||||
* helpers for third-party code
|
||||
* it should be easy to write a script that supports similar options to the CLI so many tools support the same ways of connecting to nodes
|
||||
* data storage & processing
|
||||
* there should be a standardized way of recording packets for later use, debugging, etc.
|
||||
* a persistence layer could also keep track of nodes beyond nodedb, as the apps do
|
||||
* a sqlite database schema and tools for writing to it may be a good starting point
|
||||
* enable maps, charts, visualizations
|
||||
|
||||
## Stats
|
||||
|
||||

|
||||
|
||||
10
TODO.md
10
TODO.md
@@ -5,7 +5,6 @@ Basic functionality is complete now.
|
||||
## Eventual tasks
|
||||
|
||||
- Improve documentation on properties/fields
|
||||
- change back to Bleak for BLE support - now that they fixed https://github.com/hbldh/bleak/issues/139#event-3499535304
|
||||
- include more examples: textchat.py, replymessage.py all as one little demo
|
||||
|
||||
- possibly use tk to make a multiwindow test console: https://stackoverflow.com/questions/12351786/how-to-redirect-print-statements-to-tkinter-text-widget
|
||||
@@ -17,11 +16,8 @@ Basic functionality is complete now.
|
||||
|
||||
## Bluetooth support
|
||||
|
||||
(Pre-alpha level feature - you probably don't want this one yet)
|
||||
|
||||
- This library supports connecting to Meshtastic devices over either USB (serial) or Bluetooth. Before connecting to the device you must [pair](https://docs.ubuntu.com/core/en/stacks/bluetooth/bluez/docs/reference/pairing/outbound.html) your PC with it.
|
||||
- We use the pip3 install "pygatt[GATTTOOL]"
|
||||
- ./bin/run.sh --debug --ble --device 24:62:AB:DD:DF:3A
|
||||
- ./bin/run.sh --ble-scan # To look for Meshtastic devices
|
||||
- ./bin/run.sh --ble 24:62:AB:DD:DF:3A --info
|
||||
|
||||
## Done
|
||||
|
||||
@@ -34,7 +30,7 @@ Basic functionality is complete now.
|
||||
- DONE add fromId and toId to received messages dictionaries
|
||||
- make command line options for displaying/changing config
|
||||
- update nodedb as nodes change
|
||||
- radioConfig - getter/setter syntax: https://www.python-course.eu/python3_properties.php
|
||||
- localConfig - getter/setter syntax: https://www.python-course.eu/python3_properties.php
|
||||
- let user change radio params via commandline options
|
||||
- keep nodedb up-to-date based on received MeshPackets
|
||||
- handle radio reboots and redownload db when that happens. Look for a special FromRadio.rebooted packet
|
||||
|
||||
30
bin/bump_version.py
Executable file
30
bin/bump_version.py
Executable file
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env python
|
||||
"""Bump the version number"""
|
||||
import re
|
||||
|
||||
version_filename = "setup.py"
|
||||
|
||||
lines = None
|
||||
|
||||
with open(version_filename, "r", encoding="utf-8") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
with open(version_filename, "w", encoding="utf-8") as f:
|
||||
for line in lines:
|
||||
if line.lstrip().startswith("version="):
|
||||
# get rid of quotes around the version
|
||||
line = line.replace('"', "")
|
||||
# get rid of trailing comma
|
||||
line = line.replace(",", "")
|
||||
# split on '='
|
||||
words = line.split("=")
|
||||
# split the version into parts (by period)
|
||||
v = words[1].split(".")
|
||||
build_num = re.findall(r"\d+", v[2])[0]
|
||||
new_build_num = str(int(build_num) + 1)
|
||||
ver = f"{v[0]}.{v[1]}.{v[2].replace(build_num, new_build_num)}".replace(
|
||||
"\n", ""
|
||||
)
|
||||
f.write(f' version="{ver}",\n')
|
||||
else:
|
||||
f.write(line)
|
||||
@@ -1,4 +1,4 @@
|
||||
# Note: Docs are generated from this command below, albeit from Vercel.
|
||||
# The docs/ dir is not used and is no longer commited.
|
||||
# The docs/ dir is not used and is no longer committed.
|
||||
# see sachaw if you have questions
|
||||
pdoc3 --html -f --output-dir docs meshtastic
|
||||
|
||||
20
bin/regen-protobufs.sh
Executable file
20
bin/regen-protobufs.sh
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
|
||||
#Uncomment to run hack
|
||||
#gsed -i 's/import "\//import ".\//g' ./protobufs/meshtastic/*
|
||||
#gsed -i 's/package meshtastic;//g' ./protobufs/meshtastic/*
|
||||
|
||||
./nanopb-0.4.7/generator-bin/protoc -I=protobufs --python_out ./ --mypy_out ./ ./protobufs/meshtastic/*.proto
|
||||
./nanopb-0.4.7/generator-bin/protoc -I=protobufs --python_out ./meshtastic/ --mypy_out ./meshtastic/ ./protobufs/nanopb.proto
|
||||
|
||||
# workaround for import bug in protoc https://github.com/protocolbuffers/protobuf/issues/1491#issuecomment-690618628
|
||||
|
||||
if [[ $OSTYPE == 'darwin'* ]]; then
|
||||
sed -i '' -E 's/^(import.*_pb2)/from . \1/' meshtastic/*.py
|
||||
# automate the current workaround (may be related to Meshtastic-protobufs issue #27 https://github.com/meshtastic/protobufs/issues/27)
|
||||
sed -i '' -E "s/^None = 0/globals()['None'] = 0/" meshtastic/mesh_pb2.py
|
||||
else
|
||||
sed -i -e 's/^import.*_pb2/from . \0/' meshtastic/*.py
|
||||
# automate the current workaround (may be related to Meshtastic-protobufs issue #27 https://github.com/meshtastic/protobufs/issues/27)
|
||||
sed -i -e "s/^None = 0/globals()['None'] = 0/" meshtastic/mesh_pb2.py
|
||||
fi
|
||||
@@ -1,15 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
./nanopb-0.4.4/generator-bin/protoc -I=proto --python_out meshtastic `ls proto/*.proto`
|
||||
|
||||
# workaround for import bug in protoc https://github.com/protocolbuffers/protobuf/issues/1491#issuecomment-690618628
|
||||
|
||||
if [[ $OSTYPE == 'darwin'* ]]; then
|
||||
sed -i -E 's/^\(import.*_pb2\)/from . \1/' meshtastic/*.py
|
||||
else
|
||||
sed -i -E 's/^import.*_pb2/from . \0/' meshtastic/*.py
|
||||
fi
|
||||
|
||||
|
||||
# automate the current workaround (may be related to Meshtastic-protobufs issue #27 https://github.com/meshtastic/Meshtastic-protobufs/issues/27)
|
||||
sed -i '' -e "s/^None = 0/globals()['None'] = 0/" meshtastic/mesh_pb2.py
|
||||
20
bin/show_version.py
Executable file
20
bin/show_version.py
Executable file
@@ -0,0 +1,20 @@
|
||||
#!/usr/bin/env python
|
||||
"""Show the version number"""
|
||||
|
||||
version_filename = "setup.py"
|
||||
|
||||
lines = None
|
||||
|
||||
with open(version_filename, "r", encoding="utf-8") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
for line in lines:
|
||||
if line.lstrip().startswith("version="):
|
||||
# get rid of quotes around the version
|
||||
line2 = line.replace('"', "")
|
||||
# get rid of the trailing comma
|
||||
line2 = line2.replace(",", "")
|
||||
# split on =
|
||||
words = line2.split("=")
|
||||
# Note: This format is for github actions
|
||||
print(f"::set-output name=version::{words[1].strip()}")
|
||||
@@ -7,4 +7,4 @@ python3 setup.py sdist bdist_wheel
|
||||
python3 -m twine check dist/*
|
||||
# test the upload
|
||||
python3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*
|
||||
echo "view the upload at https://test.pypi.org/ it it looks good upload for real"
|
||||
echo "view the upload at https://test.pypi.org/ it it looks good upload for real"
|
||||
|
||||
16
exampleConfig.yaml
Normal file
16
exampleConfig.yaml
Normal file
@@ -0,0 +1,16 @@
|
||||
# example config using camelCase keys
|
||||
owner: Bob TBeam
|
||||
ownerShort: BOB
|
||||
|
||||
channelUrl: https://www.meshtastic.org/d/#CgUYAyIBAQ
|
||||
|
||||
location:
|
||||
lat: 35.88888
|
||||
lon: -93.88888
|
||||
alt: 304
|
||||
|
||||
userPrefs:
|
||||
region: 1
|
||||
isAlwaysPowered: "true"
|
||||
screenOnSecs: 31536000
|
||||
waitBluetoothSecs: 31536000
|
||||
@@ -1,15 +1,43 @@
|
||||
# example configuration file with snake_case keys
|
||||
owner: Bob TBeam
|
||||
owner_short: BOB
|
||||
|
||||
channel_url: https://www.meshtastic.org/d/#CgUYAyIBAQ
|
||||
channel_url: https://www.meshtastic.org/e/#CgMSAQESCDgBQANIAVAe
|
||||
|
||||
location:
|
||||
lat: 35.88888
|
||||
lon: -93.88888
|
||||
alt: 304
|
||||
|
||||
user_prefs:
|
||||
region: 1
|
||||
is_always_powered: 'true'
|
||||
send_owner_interval: 2
|
||||
screen_on_secs: 31536000
|
||||
wait_bluetooth_secs: 31536000
|
||||
config:
|
||||
bluetooth:
|
||||
enabled: true
|
||||
fixedPin: 123456
|
||||
device:
|
||||
serialEnabled: true
|
||||
display:
|
||||
screenOnSecs: 600
|
||||
lora:
|
||||
region: US
|
||||
hopLimit: 3
|
||||
txEnabled: true
|
||||
txPower: 30
|
||||
network:
|
||||
ntpServer: 0.pool.ntp.org
|
||||
position:
|
||||
gpsAttemptTime: 900
|
||||
gpsEnabled: true
|
||||
gpsUpdateInterval: 120
|
||||
positionBroadcastSecs: 900
|
||||
positionBroadcastSmartEnabled: true
|
||||
positionFlags: 3
|
||||
power:
|
||||
lsSecs: 300
|
||||
meshSdsTimeoutSecs: 7200
|
||||
minWakeSecs: 10
|
||||
sdsSecs: 4294967295
|
||||
|
||||
module_config:
|
||||
telemetry:
|
||||
deviceUpdateInterval: 900
|
||||
environmentUpdateInterval: 900
|
||||
|
||||
21
examples/get_hw.py
Normal file
21
examples/get_hw.py
Normal file
@@ -0,0 +1,21 @@
|
||||
"""Simple program to demo how to use meshtastic library.
|
||||
To run: python examples/get_hw.py
|
||||
"""
|
||||
|
||||
import sys
|
||||
|
||||
import meshtastic
|
||||
import meshtastic.serial_interface
|
||||
|
||||
# simple arg check
|
||||
if len(sys.argv) != 1:
|
||||
print(f"usage: {sys.argv[0]}")
|
||||
print("Print the hardware model for the local node.")
|
||||
sys.exit(3)
|
||||
|
||||
iface = meshtastic.serial_interface.SerialInterface()
|
||||
if iface.nodes:
|
||||
for n in iface.nodes.values():
|
||||
if n["num"] == iface.myInfo.my_node_num:
|
||||
print(n["user"]["hwModel"])
|
||||
iface.close()
|
||||
@@ -3,6 +3,7 @@
|
||||
"""
|
||||
|
||||
import sys
|
||||
|
||||
import meshtastic
|
||||
import meshtastic.serial_interface
|
||||
|
||||
|
||||
20
examples/info_example.py
Normal file
20
examples/info_example.py
Normal file
@@ -0,0 +1,20 @@
|
||||
"""Simple program to demo how to use meshtastic library.
|
||||
To run: python examples/info.py
|
||||
"""
|
||||
|
||||
import meshtastic
|
||||
import meshtastic.serial_interface
|
||||
|
||||
iface = meshtastic.serial_interface.SerialInterface()
|
||||
|
||||
# call showInfo() just to ensure values are populated
|
||||
# info = iface.showInfo()
|
||||
|
||||
|
||||
if iface.nodes:
|
||||
for n in iface.nodes.values():
|
||||
if n["num"] == iface.myInfo.my_node_num:
|
||||
print(n["user"]["hwModel"])
|
||||
break
|
||||
|
||||
iface.close()
|
||||
@@ -3,6 +3,7 @@
|
||||
"""
|
||||
|
||||
import sys
|
||||
|
||||
from pubsub import pub
|
||||
|
||||
import meshtastic
|
||||
@@ -13,10 +14,13 @@ if len(sys.argv) < 2:
|
||||
print(f"usage: {sys.argv[0]} host")
|
||||
sys.exit(1)
|
||||
|
||||
def onConnection(interface, topic=pub.AUTO_TOPIC):
|
||||
|
||||
def onConnection(interface, topic=pub.AUTO_TOPIC): # pylint: disable=unused-argument
|
||||
"""This is called when we (re)connect to the radio."""
|
||||
print(interface.myInfo)
|
||||
interface.close()
|
||||
|
||||
|
||||
pub.subscribe(onConnection, "meshtastic.connection.established")
|
||||
|
||||
try:
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
import sys
|
||||
import time
|
||||
|
||||
from pubsub import pub
|
||||
|
||||
import meshtastic
|
||||
@@ -14,15 +15,18 @@ if len(sys.argv) < 2:
|
||||
print(f"usage: {sys.argv[0]} host")
|
||||
sys.exit(1)
|
||||
|
||||
def onReceive(packet, interface):
|
||||
|
||||
def onReceive(packet, interface): # pylint: disable=unused-argument
|
||||
"""called when a packet arrives"""
|
||||
print(f"Received: {packet}")
|
||||
|
||||
def onConnection(interface, topic=pub.AUTO_TOPIC):
|
||||
|
||||
def onConnection(interface, topic=pub.AUTO_TOPIC): # pylint: disable=unused-argument
|
||||
"""called when we (re)connect to the radio"""
|
||||
# defaults to broadcast, specify a destination ID if you wish
|
||||
interface.sendText("hello mesh")
|
||||
|
||||
|
||||
pub.subscribe(onReceive, "meshtastic.receive")
|
||||
pub.subscribe(onConnection, "meshtastic.connection.established")
|
||||
try:
|
||||
@@ -30,6 +34,6 @@ try:
|
||||
while True:
|
||||
time.sleep(1000)
|
||||
iface.close()
|
||||
except(Exception) as ex:
|
||||
except Exception as ex:
|
||||
print(f"Error: Could not connect to {sys.argv[1]} {ex}")
|
||||
sys.exit(1)
|
||||
|
||||
29
examples/scan_for_devices.py
Normal file
29
examples/scan_for_devices.py
Normal file
@@ -0,0 +1,29 @@
|
||||
"""Program to scan for hardware
|
||||
To run: python examples/scan_for_devices.py
|
||||
"""
|
||||
|
||||
import sys
|
||||
|
||||
from meshtastic.util import (
|
||||
active_ports_on_supported_devices,
|
||||
detect_supported_devices,
|
||||
get_unique_vendor_ids,
|
||||
)
|
||||
|
||||
# simple arg check
|
||||
if len(sys.argv) != 1:
|
||||
print(f"usage: {sys.argv[0]}")
|
||||
print("Detect which device we might have.")
|
||||
sys.exit(3)
|
||||
|
||||
vids = get_unique_vendor_ids()
|
||||
print(f"Searching for all devices with these vendor ids {vids}")
|
||||
|
||||
sds = detect_supported_devices()
|
||||
if len(sds) > 0:
|
||||
print("Detected possible devices:")
|
||||
for d in sds:
|
||||
print(f" name:{d.name}{d.version} firmware:{d.for_firmware}")
|
||||
|
||||
ports = active_ports_on_supported_devices(sds)
|
||||
print(f"ports:{ports}")
|
||||
21
examples/set_owner.py
Normal file
21
examples/set_owner.py
Normal file
@@ -0,0 +1,21 @@
|
||||
"""Simple program to demo how to use meshtastic library.
|
||||
To run: python examples/set_owner.py Bobby 333
|
||||
"""
|
||||
|
||||
import sys
|
||||
|
||||
import meshtastic
|
||||
import meshtastic.serial_interface
|
||||
|
||||
# simple arg check
|
||||
if len(sys.argv) < 2:
|
||||
print(f"usage: {sys.argv[0]} long_name [short_name]")
|
||||
sys.exit(3)
|
||||
|
||||
iface = meshtastic.serial_interface.SerialInterface()
|
||||
long_name = sys.argv[1]
|
||||
short_name = None
|
||||
if len(sys.argv) > 2:
|
||||
short_name = sys.argv[2]
|
||||
iface.localNode.setOwner(long_name, short_name)
|
||||
iface.close()
|
||||
6
examples/show_ports.py
Normal file
6
examples/show_ports.py
Normal file
@@ -0,0 +1,6 @@
|
||||
"""Simple program to show serial ports.
|
||||
"""
|
||||
|
||||
from meshtastic.util import findPorts
|
||||
|
||||
print(findPorts())
|
||||
14
examples/tcp_gps_example.py
Normal file
14
examples/tcp_gps_example.py
Normal file
@@ -0,0 +1,14 @@
|
||||
"""Demonstration of how to look up a radio's location via its LAN connection.
|
||||
Before running, connect your machine to the same WiFi network as the radio.
|
||||
"""
|
||||
|
||||
import meshtastic
|
||||
import meshtastic.tcp_interface
|
||||
|
||||
radio_hostname = "meshtastic.local" # Can also be an IP
|
||||
iface = meshtastic.tcp_interface.TCPInterface(radio_hostname)
|
||||
my_node_num = iface.myInfo.my_node_num
|
||||
pos = iface.nodesByNum[my_node_num]["position"]
|
||||
print(pos)
|
||||
|
||||
iface.close()
|
||||
20
info/mac/heltec.txt
Normal file
20
info/mac/heltec.txt
Normal file
@@ -0,0 +1,20 @@
|
||||
ioreg -p IOUSB > /tmp/d
|
||||
|
||||
> | +-o CP2102 USB to UART Bridge Controller@14400000 <class AppleUSBDevice, id 0x10005c048, registered, matched, active, busy 0 (9 ms), retain 12>
|
||||
|
||||
|
||||
system_profiler SPUSBDataType > /tmp/b
|
||||
|
||||
37a38,50
|
||||
> CP2102 USB to UART Bridge Controller:
|
||||
>
|
||||
> Product ID: 0xea60
|
||||
> Vendor ID: 0x10c4 (Silicon Laboratories, Inc.)
|
||||
> Version: 1.00
|
||||
> Serial Number: 0001
|
||||
> Speed: Up to 12 Mb/s
|
||||
> Manufacturer: Silicon Labs
|
||||
> Location ID: 0x14400000 / 53
|
||||
> Current Available (mA): 500
|
||||
> Current Required (mA): 100
|
||||
> Extra Operating Current (mA): 0
|
||||
30
info/mac/nano_g1.txt
Normal file
30
info/mac/nano_g1.txt
Normal file
@@ -0,0 +1,30 @@
|
||||
meshtastic detected port: /dev/cu.wchusbserial53820208781
|
||||
|
||||
ioreg -p IOUSB
|
||||
|
||||
shows this:
|
||||
|
||||
| +-o USB Single Serial@14300000 <class AppleUSBDevice, id 0x1000407a5, registered, matched, active, busy 0 (18 ms), retain 14>
|
||||
|
||||
|
||||
|
||||
|
||||
system_profiler SPUSBDataType > /tmp/a
|
||||
with device plugged in
|
||||
|
||||
system_profiler SPUSBDataType > /tmp/b
|
||||
with device not plugged in
|
||||
|
||||
diff /tmp/a /tmp/b
|
||||
|
||||
< USB Single Serial:
|
||||
<
|
||||
< Product ID: 0x55d4
|
||||
< Vendor ID: 0x1a86
|
||||
< Version: 4.43
|
||||
< Serial Number: 5382020878
|
||||
< Speed: Up to 12 Mb/s
|
||||
< Location ID: 0x14300000 / 63
|
||||
< Current Available (mA): 500
|
||||
< Current Required (mA): 134
|
||||
< Extra Operating Current (mA): 0
|
||||
52
info/mac/rak11200.txt
Normal file
52
info/mac/rak11200.txt
Normal file
@@ -0,0 +1,52 @@
|
||||
|
||||
|
||||
% ioreg -p IOUSB > /tmp/a
|
||||
# only a solid red light (pins GRND and BOOT0 jumpered)
|
||||
|
||||
% ioreg -p IOUSB > /tmp/b
|
||||
# solid red light and solid green light
|
||||
|
||||
% ioreg -p IOUSB > /tmp/c
|
||||
# nothing plugged in
|
||||
|
||||
|
||||
|
||||
% diff /tmp/a /tmp/c
|
||||
13c13
|
||||
< +-o AppleUSBXHCI Root Hub Simulation@14000000 <class AppleUSBRootHubDevice, id 0x100000589, registered, matched, active, busy 0 (15 ms), retain 11>
|
||||
---
|
||||
> +-o AppleUSBXHCI Root Hub Simulation@14000000 <class AppleUSBRootHubDevice, id 0x100000589, registered, matched, active, busy 0 (15 ms), retain 10>
|
||||
18d17
|
||||
< +-o USB Serial@14300000 <class AppleUSBDevice, id 0x100004ca4, registered, matched, active, busy 0 (10 ms), retain 12>
|
||||
|
||||
|
||||
% diff /tmp/b /tmp/c
|
||||
13c13
|
||||
< +-o AppleUSBXHCI Root Hub Simulation@14000000 <class AppleUSBRootHubDevice, id 0x100000589, registered, matched, active, busy 0 (15 ms), retain 11>
|
||||
---
|
||||
> +-o AppleUSBXHCI Root Hub Simulation@14000000 <class AppleUSBRootHubDevice, id 0x100000589, registered, matched, active, busy 0 (15 ms), retain 10>
|
||||
18d17
|
||||
< +-o USB Serial@14300000 <class AppleUSBDevice, id 0x100004ce5, registered, matched, active, busy 0 (11 ms), retain 12>
|
||||
|
||||
|
||||
|
||||
system_profiler SPUSBDataType > /tmp/d
|
||||
# red solid
|
||||
|
||||
|
||||
system_profiler SPUSBDataType > /tmp/e
|
||||
# nothing
|
||||
|
||||
|
||||
% diff /tmp/d /tmp/e
|
||||
38,48d37
|
||||
< USB Serial:
|
||||
<
|
||||
< Product ID: 0x7523
|
||||
< Vendor ID: 0x1a86
|
||||
< Version: 2.64
|
||||
< Speed: Up to 12 Mb/s
|
||||
< Location ID: 0x14300000 / 33
|
||||
< Current Available (mA): 500
|
||||
< Current Required (mA): 98
|
||||
< Extra Operating Current (mA): 0
|
||||
68
info/mac/rak4631_19003.txt
Normal file
68
info/mac/rak4631_19003.txt
Normal file
@@ -0,0 +1,68 @@
|
||||
|
||||
|
||||
> | +-o WisCore RAK4631 Board@14400000 <class AppleUSBDevice, id 0x10005c158, registered, matched, active, busy 0 (18 ms), retain 14>
|
||||
|
||||
|
||||
/dev/cu.usbmodem14401
|
||||
|
||||
% ls -al /dev/*modem*
|
||||
crw-rw-rw- 1 root wheel 0x9000005 Jan 29 15:32 /dev/cu.usbmodem14401
|
||||
crw-rw-rw- 1 root wheel 0x9000004 Jan 29 15:31 /dev/tty.usbmodem14401
|
||||
|
||||
|
||||
Note: On a Mac Air, output is:
|
||||
|
||||
% system_profiler SPUSBDataType
|
||||
USB:
|
||||
USB 3.1 Bus:
|
||||
Host Controller Driver: AppleT8103USBXHCI
|
||||
USB 3.1 Bus:
|
||||
Host Controller Driver: AppleT8103USBXHCI
|
||||
WisCore RAK4631 Board:
|
||||
Product ID: 0x8029
|
||||
Vendor ID: 0x239a
|
||||
Version: 1.00
|
||||
Serial Number: E6CF9502B1D410D8
|
||||
Speed: Up to 12 Mb/s
|
||||
Manufacturer: RAKwireless
|
||||
Location ID: 0x01100000 / 2
|
||||
Current Available (mA): 500
|
||||
Current Required (mA): 100
|
||||
Extra Operating Current (mA): 0
|
||||
|
||||
However, in FTHR840BOOT mode, it shows this:
|
||||
|
||||
% system_profiler SPUSBDataType
|
||||
USB:
|
||||
USB 3.1 Bus:
|
||||
Host Controller Driver: AppleT8103USBXHCI
|
||||
USB 3.1 Bus:
|
||||
Host Controller Driver: AppleT8103USBXHCI
|
||||
Feather nRF52840 Express:
|
||||
Product ID: 0x0029
|
||||
Vendor ID: 0x239a
|
||||
Version: 1.00
|
||||
Serial Number: E6CF9502B1D410D8
|
||||
Speed: Up to 12 Mb/s
|
||||
Manufacturer: Adafruit Industries
|
||||
Location ID: 0x01100000 / 1
|
||||
Current Available (mA): 500
|
||||
Current Required (mA): 100
|
||||
Extra Operating Current (mA): 0
|
||||
Media:
|
||||
nRF UF2:
|
||||
Capacity: 33.7 MB (33,690,112 bytes)
|
||||
Removable Media: Yes
|
||||
BSD Name: disk4
|
||||
Logical Unit: 0
|
||||
Partition Map Type: Unknown
|
||||
S.M.A.R.T. status: Verified
|
||||
USB Interface: 2
|
||||
|
||||
|
||||
$ cat /Volumes/FTHR840BOOT/INFO_UF2.TXT
|
||||
UF2 Bootloader 0.3.2-109-gd6b28e6-dirty lib/nrfx (v2.0.0) lib/tinyusb (0.6.0-272-g4e6aa0d8) lib/uf2 (heads/master)
|
||||
Model: Adafruit Feather nRF52840 Express
|
||||
Board-ID: nRF52840-Feather-revD
|
||||
SoftDevice: S140 version 6.1.1
|
||||
Date: Jun 16 2020
|
||||
18
info/mac/rak4631_5005.txt
Normal file
18
info/mac/rak4631_5005.txt
Normal file
@@ -0,0 +1,18 @@
|
||||
|
||||
no device plugged in
|
||||
% ioreg -p IOUSB > /tmp/a
|
||||
|
||||
device plugged in, in "boot" mode
|
||||
% ioreg -p IOUSB > /tmp/b
|
||||
|
||||
device plugged in, botted to Meshtastic firmware
|
||||
% ioreg -p IOUSB > /tmp/c
|
||||
|
||||
(venv) sweet Meshtastic-python % diff /tmp/a /tmp/b (with most info removed)
|
||||
> | +-o Feather nRF52840 Express@14400000 <class AppleUSBDevice, id 0x10005c0ff, registered, matched, active, busy 0 (22 ms), retain 16>
|
||||
|
||||
diff /tmp/a /tmp/c (with most info removed)
|
||||
> | +-o WisCore RAK4631 Board@14400000 <class AppleUSBDevice, id 0x10005c134, registered, matched, active, busy 0 (17 ms), retain 14>
|
||||
|
||||
|
||||
Meshtastic detected port on /dev/cu.usbmodem14401
|
||||
21
info/mac/tbeam.txt
Normal file
21
info/mac/tbeam.txt
Normal file
@@ -0,0 +1,21 @@
|
||||
|
||||
meshtastic detected port: /dev/cu.usbmodem53230050571
|
||||
|
||||
ioreg -p IOUSB > /tmp/c
|
||||
|
||||
> | +-o USB Single Serial@14400000 <class AppleUSBDevice, id 0x10005bff7, registered, matched, active, busy 0 (15 ms), retain 14>
|
||||
|
||||
|
||||
system_profiler SPUSBDataType > /tmp/a
|
||||
|
||||
> USB Single Serial:
|
||||
>
|
||||
> Product ID: 0x55d4
|
||||
> Vendor ID: 0x1a86
|
||||
> Version: 4.43
|
||||
> Serial Number: 5323005057
|
||||
> Speed: Up to 12 Mb/s
|
||||
> Location ID: 0x14400000 / 50
|
||||
> Current Available (mA): 500
|
||||
> Current Required (mA): 134
|
||||
> Extra Operating Current (mA): 0
|
||||
40
info/mac/techo.txt
Normal file
40
info/mac/techo.txt
Normal file
@@ -0,0 +1,40 @@
|
||||
|
||||
in boot mode:
|
||||
|
||||
% mount
|
||||
<snip>
|
||||
/dev/disk122 on /Volumes/TECHOBOOT (msdos, local, nodev, nosuid, noowners)
|
||||
|
||||
% ls -al /Volumes/TECHOBOOT
|
||||
total 3735
|
||||
drwxrwxrwx@ 1 bob staff 2048 Feb 1 16:47 .
|
||||
drwxr-xr-x 5 root wheel 160 Feb 1 16:47 ..
|
||||
drwxrwxrwx 1 bob staff 512 Feb 1 16:47 .fseventsd
|
||||
-rwxrwxrwx 1 bob staff 1908736 Oct 13 08:37 CURRENT.UF2
|
||||
-rwxrwxrwx 1 bob staff 129 Oct 13 08:37 INDEX.HTM
|
||||
-rwxrwxrwx 1 bob staff 237 Oct 13 08:37 INFO_UF2.TXT
|
||||
|
||||
|
||||
# nothing plugged in
|
||||
% ioreg -p IOUSB > /tmp/a
|
||||
# not boot mode
|
||||
% ioreg -p IOUSB > /tmp/b
|
||||
# bootmode
|
||||
% ioreg -p IOUSB > /tmp/c
|
||||
|
||||
|
||||
% diff /tmp/a /tmp/b
|
||||
<snip>
|
||||
> | +-o TTGO_eink@14300000 <class AppleUSBDevice, id 0x100060fe4, registered, matched, active, busy 0 (18 ms), retain 14>
|
||||
|
||||
% diff /tmp/a /tmp/c
|
||||
<snip>
|
||||
> | +-o T-Echo v1@14300000 <class AppleUSBDevice, id 0x100061000, registered, matched, active, busy 0 (25 ms), retain 16>
|
||||
|
||||
contents of: INFO_UF2.TXT
|
||||
|
||||
UF2 Bootloader 0.6.1-2-g1224915 lib/nrfx (v2.0.0) lib/tinyusb (0.10.1-293-gaf8e5a90) lib/uf2 (remotes/origin/configupdate-9-gadbb8c7)
|
||||
Model: LilyGo T-Echo
|
||||
Board-ID: nRF52840-TEcho-v1
|
||||
SoftDevice: S140 version 6.1.1
|
||||
Date: Oct 13 2021
|
||||
16
info/mac/tlora.txt
Normal file
16
info/mac/tlora.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
diff of ioreg -p IOUSB
|
||||
|
||||
> | +-o USB Single Serial@14300000 <class AppleUSBDevice, id 0x10005bf0f, registered, matched, active, busy 0 (18 ms), retain 14>
|
||||
|
||||
|
||||
Diff of system_profiler SPUSBDataType
|
||||
< USB Single Serial:
|
||||
<
|
||||
< Product ID: 0x55d4
|
||||
< Vendor ID: 0x1a86
|
||||
< Version: 4.43
|
||||
< Speed: Up to 12 Mb/s
|
||||
< Location ID: 0x14300000 / 46
|
||||
< Current Available (mA): 500
|
||||
< Current Required (mA): 134
|
||||
< Extra Operating Current (mA): 0
|
||||
85
info/mac/tlora_2.1.6.txt
Normal file
85
info/mac/tlora_2.1.6.txt
Normal file
@@ -0,0 +1,85 @@
|
||||
lsusb
|
||||
|
||||
Bus 001 Device 001: ID 0bda:2172 Realtek Semiconductor Corp. BillBoard Device Serial: 00000000000000000
|
||||
Bus 000 Device 002: ID 2109:0817 VIA Labs, Inc. USB3.0 Hub Serial: 000000000
|
||||
Bus 000 Device 003: ID 2109:0715 VIA Labs, Inc. VLI Product String Serial: 000000075003
|
||||
Bus 000 Device 004: ID 0bda:0306 Realtek Semiconductor Corp. USB3.0-CRW Serial: 60000719201300000
|
||||
Bus 000 Device 005: ID 2109:0817 VIA Labs, Inc. USB3.0 Hub Serial: 000000000
|
||||
Bus 000 Device 001: ID 2109:2817 VIA Labs, Inc. USB2.0 Hub Serial: 000000000
|
||||
Bus 000 Device 009: ID 1a86:55d4 1a86 USB Single Serial Serial: 533C005215
|
||||
Bus 000 Device 006: ID 2109:2817 VIA Labs, Inc. USB2.0 Hub Serial: 000000000
|
||||
Bus 000 Device 007: ID 2109:8817 VIA Labs, Inc. USB Billboard Device Serial: 0000000000000001
|
||||
Bus 000 Device 008: ID 2109:8817 VIA Labs, Inc. USB Billboard Device Serial: 0000000000000001
|
||||
Bus 002 Device 001: ID 1a40:0101 TERMINUS TECHNOLOGY INC. USB 2.0 Hub
|
||||
Bus 002 Device 003: ID 0922:001f Dymo Corporation DYMO LabelWriter 4XL Serial: 17032316350940
|
||||
Bus 002 Device 002: ID 046d:082d Logitech Inc. HD Pro Webcam C920 Serial: A21C905F
|
||||
Bus 000 Device 000: ID 0bda:2172 Realtek Semiconductor Corp. USB 3.1 Bus
|
||||
Bus 000 Device 000: ID 2109:0817 VIA Labs, Inc. USB 3.1 Bus
|
||||
Bus 000 Device 001: ID 1d6b:1100 Linux Foundation USB 3.0 Bus
|
||||
|
||||
% lsusb -v (with parts snipped)
|
||||
|
||||
USB2.0 Hub :
|
||||
|
||||
Product ID: 0x2817
|
||||
Vendor ID: 0x2109 (VIA Labs, Inc.)
|
||||
Version: 6.03
|
||||
Serial Number: 000000000
|
||||
Speed: Up to 480 Mb/s
|
||||
Manufacturer: VIA Labs, Inc.
|
||||
Location ID: 0x00100000 / 1
|
||||
Current Available (mA): 500
|
||||
Current Required (mA): 0
|
||||
Extra Operating Current (mA): 0
|
||||
|
||||
USB Single Serial:
|
||||
|
||||
Product ID: 0x55d4
|
||||
Vendor ID: 0x1a86
|
||||
Version: 4.43
|
||||
Serial Number: 533C005215
|
||||
Speed: Up to 12 Mb/s
|
||||
Location ID: 0x00140000 / 9
|
||||
Current Available (mA): 500
|
||||
Current Required (mA): 134
|
||||
Extra Operating Current (mA): 0
|
||||
|
||||
USB2.0 Hub :
|
||||
|
||||
Product ID: 0x2817
|
||||
Vendor ID: 0x2109 (VIA Labs, Inc.)
|
||||
Version: 6.03
|
||||
Serial Number: 000000000
|
||||
Speed: Up to 480 Mb/s
|
||||
Manufacturer: VIA Labs, Inc.
|
||||
Location ID: 0x00110000 / 6
|
||||
Current Available (mA): 500
|
||||
Current Required (mA): 0
|
||||
Extra Operating Current (mA): 0
|
||||
|
||||
USB Billboard Device :
|
||||
|
||||
Product ID: 0x8817
|
||||
Vendor ID: 0x2109 (VIA Labs, Inc.)
|
||||
Version: 0.01
|
||||
Serial Number: 0000000000000001
|
||||
Speed: Up to 480 Mb/s
|
||||
Manufacturer: VIA Labs, Inc.
|
||||
Location ID: 0x00115000 / 7
|
||||
Current Available (mA): 500
|
||||
Current Required (mA): 100
|
||||
Extra Operating Current (mA): 0
|
||||
|
||||
USB Billboard Device :
|
||||
|
||||
Product ID: 0x8817
|
||||
Vendor ID: 0x2109 (VIA Labs, Inc.)
|
||||
Version: 0.01
|
||||
Serial Number: 0000000000000001
|
||||
Speed: Up to 480 Mb/s
|
||||
Manufacturer: VIA Labs, Inc.
|
||||
Location ID: 0x00150000 / 8
|
||||
Current Available (mA): 500
|
||||
Current Required (mA): 100
|
||||
Extra Operating Current (mA): 0
|
||||
|
||||
3
info/readme.txt
Normal file
3
info/readme.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
Gathering OS-level info for devices.
|
||||
|
||||
This info might be helpful for developers detecting info about devices.
|
||||
67
info/ubuntu/diy.txt
Normal file
67
info/ubuntu/diy.txt
Normal file
@@ -0,0 +1,67 @@
|
||||
lsusb
|
||||
|
||||
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
|
||||
Bus 001 Device 004: ID 10c4:ea60 Silicon Labs CP210x UART Bridge
|
||||
Bus 001 Device 003: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
|
||||
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
|
||||
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
|
||||
lsusb -d 10c4: -v
|
||||
|
||||
Bus 001 Device 004: ID 10c4:ea60 Silicon Labs CP210x UART Bridge
|
||||
Couldn't open device, some information will be missing
|
||||
Device Descriptor:
|
||||
bLength 18
|
||||
bDescriptorType 1
|
||||
bcdUSB 2.00
|
||||
bDeviceClass 0
|
||||
bDeviceSubClass 0
|
||||
bDeviceProtocol 0
|
||||
bMaxPacketSize0 64
|
||||
idVendor 0x10c4 Silicon Labs
|
||||
idProduct 0xea60 CP210x UART Bridge
|
||||
bcdDevice 1.00
|
||||
iManufacturer 1
|
||||
iProduct 2
|
||||
iSerial 3
|
||||
bNumConfigurations 1
|
||||
Configuration Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 2
|
||||
wTotalLength 0x0020
|
||||
bNumInterfaces 1
|
||||
bConfigurationValue 1
|
||||
iConfiguration 0
|
||||
bmAttributes 0x80
|
||||
(Bus Powered)
|
||||
MaxPower 100mA
|
||||
Interface Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 4
|
||||
bInterfaceNumber 0
|
||||
bAlternateSetting 0
|
||||
bNumEndpoints 2
|
||||
bInterfaceClass 255 Vendor Specific Class
|
||||
bInterfaceSubClass 0
|
||||
bInterfaceProtocol 0
|
||||
iInterface 2
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x01 EP 1 OUT
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x82 EP 2 IN
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
85
info/ubuntu/heltec_v2.txt
Normal file
85
info/ubuntu/heltec_v2.txt
Normal file
@@ -0,0 +1,85 @@
|
||||
Run on Ubuntu 20
|
||||
|
||||
Command:
|
||||
lsusb -d 10c4: -v
|
||||
|
||||
Output:
|
||||
Bus 001 Device 091: ID 10c4:ea60 Silicon Labs CP210x UART Bridge
|
||||
Device Descriptor:
|
||||
bLength 18
|
||||
bDescriptorType 1
|
||||
bcdUSB 1.10
|
||||
bDeviceClass 0
|
||||
bDeviceSubClass 0
|
||||
bDeviceProtocol 0
|
||||
bMaxPacketSize0 64
|
||||
idVendor 0x10c4 Silicon Labs
|
||||
idProduct 0xea60 CP210x UART Bridge
|
||||
bcdDevice 1.00
|
||||
iManufacturer 1
|
||||
iProduct 2
|
||||
iSerial 3
|
||||
bNumConfigurations 1
|
||||
Configuration Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 2
|
||||
wTotalLength 0x0020
|
||||
bNumInterfaces 1
|
||||
bConfigurationValue 1
|
||||
iConfiguration 0
|
||||
bmAttributes 0x80
|
||||
(Bus Powered)
|
||||
MaxPower 100mA
|
||||
Interface Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 4
|
||||
bInterfaceNumber 0
|
||||
bAlternateSetting 0
|
||||
bNumEndpoints 2
|
||||
bInterfaceClass 255 Vendor Specific Class
|
||||
bInterfaceSubClass 0
|
||||
bInterfaceProtocol 0
|
||||
iInterface 2
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x81 EP 1 IN
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x01 EP 1 OUT
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
|
||||
|
||||
Command:
|
||||
esptool.py chip_id
|
||||
|
||||
Output:
|
||||
esptool.py v3.2
|
||||
Found 3 serial ports
|
||||
Serial port /dev/ttyUSB0
|
||||
Connecting....
|
||||
Detecting chip type... Unsupported detection protocol, switching and trying again...
|
||||
Connecting.....
|
||||
Detecting chip type... ESP32
|
||||
Chip is ESP32-D0WDQ6 (revision 1)
|
||||
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
|
||||
Crystal is 40MHz
|
||||
MAC: 24:0a:c4:fc:be:f0
|
||||
Uploading stub...
|
||||
Running stub...
|
||||
Stub running...
|
||||
Warning: ESP32 has no Chip ID. Reading MAC instead.
|
||||
MAC: 24:0a:c4:fc:be:f0
|
||||
Hard resetting via RTS pin...
|
||||
91
info/ubuntu/nano_g1.txt
Normal file
91
info/ubuntu/nano_g1.txt
Normal file
@@ -0,0 +1,91 @@
|
||||
lsusb -d 1a86: -v
|
||||
|
||||
Bus 001 Device 013: ID 1a86:55d4 QinHeng Electronics
|
||||
Couldn't open device, some information will be missing
|
||||
Device Descriptor:
|
||||
bLength 18
|
||||
bDescriptorType 1
|
||||
bcdUSB 1.10
|
||||
bDeviceClass 2 Communications
|
||||
bDeviceSubClass 0
|
||||
bDeviceProtocol 0
|
||||
bMaxPacketSize0 8
|
||||
idVendor 0x1a86 QinHeng Electronics
|
||||
idProduct 0x55d4
|
||||
bcdDevice 4.43
|
||||
iManufacturer 0
|
||||
iProduct 2
|
||||
iSerial 3
|
||||
bNumConfigurations 1
|
||||
Configuration Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 2
|
||||
wTotalLength 0x0043
|
||||
bNumInterfaces 2
|
||||
bConfigurationValue 1
|
||||
iConfiguration 0
|
||||
bmAttributes 0xa0
|
||||
(Bus Powered)
|
||||
Remote Wakeup
|
||||
MaxPower 134mA
|
||||
Interface Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 4
|
||||
bInterfaceNumber 0
|
||||
bAlternateSetting 0
|
||||
bNumEndpoints 1
|
||||
bInterfaceClass 2 Communications
|
||||
bInterfaceSubClass 2 Abstract (modem)
|
||||
bInterfaceProtocol 1 AT-commands (v.25ter)
|
||||
iInterface 0
|
||||
CDC Header:
|
||||
bcdCDC 1.10
|
||||
CDC Call Management:
|
||||
bmCapabilities 0x00
|
||||
bDataInterface 1
|
||||
CDC ACM:
|
||||
bmCapabilities 0x02
|
||||
line coding and serial state
|
||||
CDC Union:
|
||||
bMasterInterface 0
|
||||
bSlaveInterface 1
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x83 EP 3 IN
|
||||
bmAttributes 3
|
||||
Transfer Type Interrupt
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0010 1x 16 bytes
|
||||
bInterval 1
|
||||
Interface Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 4
|
||||
bInterfaceNumber 1
|
||||
bAlternateSetting 0
|
||||
bNumEndpoints 2
|
||||
bInterfaceClass 10 CDC Data
|
||||
bInterfaceSubClass 0
|
||||
bInterfaceProtocol 0
|
||||
iInterface 0
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x02 EP 2 OUT
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0020 1x 32 bytes
|
||||
bInterval 0
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x82 EP 2 IN
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
118
info/ubuntu/rak4631_19003.txt
Normal file
118
info/ubuntu/rak4631_19003.txt
Normal file
@@ -0,0 +1,118 @@
|
||||
|
||||
Note: Meshtastic firmware was installed when running these commands
|
||||
|
||||
$ ls -al /dev/ttyACM*
|
||||
crw-rw---- 1 root dialout 166, 0 Jan 29 21:50 /dev/ttyACM0
|
||||
|
||||
lsusb -d 239a: -v
|
||||
|
||||
Bus 001 Device 097: ID 239a:8029
|
||||
Couldn't open device, some information will be missing
|
||||
Device Descriptor:
|
||||
bLength 18
|
||||
bDescriptorType 1
|
||||
bcdUSB 2.00
|
||||
bDeviceClass 239 Miscellaneous Device
|
||||
bDeviceSubClass 2
|
||||
bDeviceProtocol 1 Interface Association
|
||||
bMaxPacketSize0 64
|
||||
idVendor 0x239a
|
||||
idProduct 0x8029
|
||||
bcdDevice 1.00
|
||||
iManufacturer 1
|
||||
iProduct 2
|
||||
iSerial 3
|
||||
bNumConfigurations 1
|
||||
Configuration Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 2
|
||||
wTotalLength 0x004b
|
||||
bNumInterfaces 2
|
||||
bConfigurationValue 1
|
||||
iConfiguration 0
|
||||
bmAttributes 0xa0
|
||||
(Bus Powered)
|
||||
Remote Wakeup
|
||||
MaxPower 100mA
|
||||
Interface Association:
|
||||
bLength 8
|
||||
bDescriptorType 11
|
||||
bFirstInterface 0
|
||||
bInterfaceCount 2
|
||||
bFunctionClass 2 Communications
|
||||
bFunctionSubClass 2 Abstract (modem)
|
||||
bFunctionProtocol 0
|
||||
iFunction 0
|
||||
Interface Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 4
|
||||
bInterfaceNumber 0
|
||||
bAlternateSetting 0
|
||||
bNumEndpoints 1
|
||||
bInterfaceClass 2 Communications
|
||||
bInterfaceSubClass 2 Abstract (modem)
|
||||
bInterfaceProtocol 0
|
||||
iInterface 4
|
||||
CDC Header:
|
||||
bcdCDC 1.20
|
||||
CDC Call Management:
|
||||
bmCapabilities 0x00
|
||||
bDataInterface 1
|
||||
CDC ACM:
|
||||
bmCapabilities 0x02
|
||||
line coding and serial state
|
||||
CDC Union:
|
||||
bMasterInterface 0
|
||||
bSlaveInterface 1
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x81 EP 1 IN
|
||||
bmAttributes 3
|
||||
Transfer Type Interrupt
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0008 1x 8 bytes
|
||||
bInterval 16
|
||||
Interface Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 4
|
||||
bInterfaceNumber 1
|
||||
bAlternateSetting 0
|
||||
bNumEndpoints 2
|
||||
bInterfaceClass 10 CDC Data
|
||||
bInterfaceSubClass 0
|
||||
bInterfaceProtocol 0
|
||||
iInterface 0
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x01 EP 1 OUT
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x82 EP 2 IN
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
|
||||
$ lsusb
|
||||
Bus 002 Device 005: ID 046d:c31c Logitech, Inc. Keyboard K120
|
||||
Bus 002 Device 002: ID 8087:8000 Intel Corp.
|
||||
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
Bus 001 Device 097: ID 239a:8029
|
||||
Bus 001 Device 002: ID 8087:8008 Intel Corp.
|
||||
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
|
||||
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
|
||||
Note: esptool.py chip_id does not detect device
|
||||
148
info/ubuntu/rak4631_5005.txt
Normal file
148
info/ubuntu/rak4631_5005.txt
Normal file
@@ -0,0 +1,148 @@
|
||||
|
||||
Note: Device has Meshtastic firmware installed.
|
||||
|
||||
$ ls -al /dev/ttyACM*
|
||||
crw-rw---- 1 root dialout 166, 0 Jan 29 21:44 /dev/ttyACM0
|
||||
|
||||
$ lsusb -d 239a: -v
|
||||
|
||||
Bus 001 Device 098: ID 239a:0029
|
||||
Couldn't open device, some information will be missing
|
||||
Device Descriptor:
|
||||
bLength 18
|
||||
bDescriptorType 1
|
||||
bcdUSB 2.00
|
||||
bDeviceClass 239 Miscellaneous Device
|
||||
bDeviceSubClass 2
|
||||
bDeviceProtocol 1 Interface Association
|
||||
bMaxPacketSize0 64
|
||||
idVendor 0x239a
|
||||
idProduct 0x0029
|
||||
bcdDevice 1.00
|
||||
iManufacturer 1
|
||||
iProduct 2
|
||||
iSerial 3
|
||||
bNumConfigurations 1
|
||||
Configuration Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 2
|
||||
wTotalLength 0x0062
|
||||
bNumInterfaces 3
|
||||
bConfigurationValue 1
|
||||
iConfiguration 0
|
||||
bmAttributes 0xa0
|
||||
(Bus Powered)
|
||||
Remote Wakeup
|
||||
MaxPower 100mA
|
||||
Interface Association:
|
||||
bLength 8
|
||||
bDescriptorType 11
|
||||
bFirstInterface 0
|
||||
bInterfaceCount 2
|
||||
bFunctionClass 2 Communications
|
||||
bFunctionSubClass 2 Abstract (modem)
|
||||
bFunctionProtocol 0
|
||||
iFunction 0
|
||||
Interface Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 4
|
||||
bInterfaceNumber 0
|
||||
bAlternateSetting 0
|
||||
bNumEndpoints 1
|
||||
bInterfaceClass 2 Communications
|
||||
bInterfaceSubClass 2 Abstract (modem)
|
||||
bInterfaceProtocol 0
|
||||
iInterface 4
|
||||
CDC Header:
|
||||
bcdCDC 1.20
|
||||
CDC Call Management:
|
||||
bmCapabilities 0x00
|
||||
bDataInterface 1
|
||||
CDC ACM:
|
||||
bmCapabilities 0x02
|
||||
line coding and serial state
|
||||
CDC Union:
|
||||
bMasterInterface 0
|
||||
bSlaveInterface 1
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x81 EP 1 IN
|
||||
bmAttributes 3
|
||||
Transfer Type Interrupt
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0008 1x 8 bytes
|
||||
bInterval 16
|
||||
Interface Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 4
|
||||
bInterfaceNumber 1
|
||||
bAlternateSetting 0
|
||||
bNumEndpoints 2
|
||||
bInterfaceClass 10 CDC Data
|
||||
bInterfaceSubClass 0
|
||||
bInterfaceProtocol 0
|
||||
iInterface 0
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x02 EP 2 OUT
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x82 EP 2 IN
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
Interface Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 4
|
||||
bInterfaceNumber 2
|
||||
bAlternateSetting 0
|
||||
bNumEndpoints 2
|
||||
bInterfaceClass 8 Mass Storage
|
||||
bInterfaceSubClass 6 SCSI
|
||||
bInterfaceProtocol 80 Bulk-Only
|
||||
iInterface 5
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x03 EP 3 OUT
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x83 EP 3 IN
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
|
||||
$ lsusb
|
||||
Bus 002 Device 005: ID 046d:c31c Logitech, Inc. Keyboard K120
|
||||
Bus 002 Device 002: ID 8087:8000 Intel Corp.
|
||||
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
Bus 001 Device 098: ID 239a:0029
|
||||
Bus 001 Device 002: ID 8087:8008 Intel Corp.
|
||||
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
|
||||
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
|
||||
Note: esptool.py chip_id does not detect device
|
||||
1
info/ubuntu/readme.txt
Normal file
1
info/ubuntu/readme.txt
Normal file
@@ -0,0 +1 @@
|
||||
info run on ubuntu
|
||||
94
info/ubuntu/tbeam.txt
Normal file
94
info/ubuntu/tbeam.txt
Normal file
@@ -0,0 +1,94 @@
|
||||
Run on Ubuntu 20
|
||||
|
||||
Command:
|
||||
lsusb -d 1a86: -v
|
||||
|
||||
Output:
|
||||
Bus 001 Device 096: ID 1a86:55d4 QinHeng Electronics
|
||||
Device Descriptor:
|
||||
bLength 18
|
||||
bDescriptorType 1
|
||||
bcdUSB 1.10
|
||||
bDeviceClass 2 Communications
|
||||
bDeviceSubClass 0
|
||||
bDeviceProtocol 0
|
||||
bMaxPacketSize0 8
|
||||
idVendor 0x1a86 QinHeng Electronics
|
||||
idProduct 0x55d4
|
||||
bcdDevice 4.43
|
||||
iManufacturer 0
|
||||
iProduct 2
|
||||
iSerial 3
|
||||
bNumConfigurations 1
|
||||
Configuration Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 2
|
||||
wTotalLength 0x0043
|
||||
bNumInterfaces 2
|
||||
bConfigurationValue 1
|
||||
iConfiguration 0
|
||||
bmAttributes 0xa0
|
||||
(Bus Powered)
|
||||
Remote Wakeup
|
||||
MaxPower 134mA
|
||||
Interface Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 4
|
||||
bInterfaceNumber 0
|
||||
bAlternateSetting 0
|
||||
bNumEndpoints 1
|
||||
bInterfaceClass 2 Communications
|
||||
bInterfaceSubClass 2 Abstract (modem)
|
||||
bInterfaceProtocol 1 AT-commands (v.25ter)
|
||||
iInterface 0
|
||||
CDC Header:
|
||||
bcdCDC 1.10
|
||||
CDC Call Management:
|
||||
bmCapabilities 0x00
|
||||
bDataInterface 1
|
||||
CDC ACM:
|
||||
bmCapabilities 0x02
|
||||
line coding and serial state
|
||||
CDC Union:
|
||||
bMasterInterface 0
|
||||
bSlaveInterface 1
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x83 EP 3 IN
|
||||
bmAttributes 3
|
||||
Transfer Type Interrupt
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0010 1x 16 bytes
|
||||
bInterval 1
|
||||
Interface Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 4
|
||||
bInterfaceNumber 1
|
||||
bAlternateSetting 0
|
||||
bNumEndpoints 2
|
||||
bInterfaceClass 10 CDC Data
|
||||
bInterfaceSubClass 0
|
||||
bInterfaceProtocol 0
|
||||
iInterface 0
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x02 EP 2 OUT
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0020 1x 32 bytes
|
||||
bInterval 0
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x82 EP 2 IN
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
141
info/ubuntu/techo.txt
Normal file
141
info/ubuntu/techo.txt
Normal file
@@ -0,0 +1,141 @@
|
||||
|
||||
$ lsusb
|
||||
Bus 002 Device 005: ID 046d:c31c Logitech, Inc. Keyboard K120
|
||||
Bus 002 Device 002: ID 8087:8000 Intel Corp.
|
||||
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
Bus 001 Device 107: ID 239a:0029
|
||||
Bus 001 Device 002: ID 8087:8008 Intel Corp.
|
||||
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
|
||||
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
|
||||
$ lsusb -d 239a: -v
|
||||
|
||||
Bus 001 Device 107: ID 239a:0029
|
||||
Couldn't open device, some information will be missing
|
||||
Device Descriptor:
|
||||
bLength 18
|
||||
bDescriptorType 1
|
||||
bcdUSB 2.00
|
||||
bDeviceClass 239 Miscellaneous Device
|
||||
bDeviceSubClass 2
|
||||
bDeviceProtocol 1 Interface Association
|
||||
bMaxPacketSize0 64
|
||||
idVendor 0x239a
|
||||
idProduct 0x0029
|
||||
bcdDevice 1.00
|
||||
iManufacturer 1
|
||||
iProduct 2
|
||||
iSerial 3
|
||||
bNumConfigurations 1
|
||||
Configuration Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 2
|
||||
wTotalLength 0x0062
|
||||
bNumInterfaces 3
|
||||
bConfigurationValue 1
|
||||
iConfiguration 0
|
||||
bmAttributes 0xa0
|
||||
(Bus Powered)
|
||||
Remote Wakeup
|
||||
MaxPower 100mA
|
||||
Interface Association:
|
||||
bLength 8
|
||||
bDescriptorType 11
|
||||
bFirstInterface 0
|
||||
bInterfaceCount 2
|
||||
bFunctionClass 2 Communications
|
||||
bFunctionSubClass 2 Abstract (modem)
|
||||
bFunctionProtocol 0
|
||||
iFunction 0
|
||||
Interface Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 4
|
||||
bInterfaceNumber 0
|
||||
bAlternateSetting 0
|
||||
bNumEndpoints 1
|
||||
bInterfaceClass 2 Communications
|
||||
bInterfaceSubClass 2 Abstract (modem)
|
||||
bInterfaceProtocol 0
|
||||
iInterface 4
|
||||
CDC Header:
|
||||
bcdCDC 1.20
|
||||
CDC Call Management:
|
||||
bmCapabilities 0x00
|
||||
bDataInterface 1
|
||||
CDC ACM:
|
||||
bmCapabilities 0x02
|
||||
line coding and serial state
|
||||
CDC Union:
|
||||
bMasterInterface 0
|
||||
bSlaveInterface 1
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x81 EP 1 IN
|
||||
bmAttributes 3
|
||||
Transfer Type Interrupt
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0008 1x 8 bytes
|
||||
bInterval 16
|
||||
Interface Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 4
|
||||
bInterfaceNumber 1
|
||||
bAlternateSetting 0
|
||||
bNumEndpoints 2
|
||||
bInterfaceClass 10 CDC Data
|
||||
bInterfaceSubClass 0
|
||||
bInterfaceProtocol 0
|
||||
iInterface 0
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x02 EP 2 OUT
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x82 EP 2 IN
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
Interface Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 4
|
||||
bInterfaceNumber 2
|
||||
bAlternateSetting 0
|
||||
bNumEndpoints 2
|
||||
bInterfaceClass 8 Mass Storage
|
||||
bInterfaceSubClass 6 SCSI
|
||||
bInterfaceProtocol 80 Bulk-Only
|
||||
iInterface 5
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x03 EP 3 OUT
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x83 EP 3 IN
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
107
info/ubuntu/tlora.txt
Normal file
107
info/ubuntu/tlora.txt
Normal file
@@ -0,0 +1,107 @@
|
||||
|
||||
Run on Ubuntu 20
|
||||
|
||||
Note: Device has Meshtastic firmware installed
|
||||
|
||||
|
||||
$ lsusb
|
||||
Bus 002 Device 005: ID 046d:c31c Logitech, Inc. Keyboard K120
|
||||
Bus 002 Device 002: ID 8087:8000 Intel Corp.
|
||||
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
Bus 001 Device 099: ID 1a86:55d4 QinHeng Electronics
|
||||
Bus 001 Device 002: ID 8087:8008 Intel Corp.
|
||||
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
|
||||
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||
|
||||
$ lsusb -d 1a86: -v
|
||||
|
||||
Bus 001 Device 099: ID 1a86:55d4 QinHeng Electronics
|
||||
Couldn't open device, some information will be missing
|
||||
Device Descriptor:
|
||||
bLength 18
|
||||
bDescriptorType 1
|
||||
bcdUSB 1.10
|
||||
bDeviceClass 2 Communications
|
||||
bDeviceSubClass 0
|
||||
bDeviceProtocol 0
|
||||
bMaxPacketSize0 8
|
||||
idVendor 0x1a86 QinHeng Electronics
|
||||
idProduct 0x55d4
|
||||
bcdDevice 4.43
|
||||
iManufacturer 0
|
||||
iProduct 2
|
||||
iSerial 0
|
||||
bNumConfigurations 1
|
||||
Configuration Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 2
|
||||
wTotalLength 0x0043
|
||||
bNumInterfaces 2
|
||||
bConfigurationValue 1
|
||||
iConfiguration 0
|
||||
bmAttributes 0xa0
|
||||
(Bus Powered)
|
||||
Remote Wakeup
|
||||
MaxPower 134mA
|
||||
Interface Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 4
|
||||
bInterfaceNumber 0
|
||||
bAlternateSetting 0
|
||||
bNumEndpoints 1
|
||||
bInterfaceClass 2 Communications
|
||||
bInterfaceSubClass 2 Abstract (modem)
|
||||
bInterfaceProtocol 1 AT-commands (v.25ter)
|
||||
iInterface 0
|
||||
CDC Header:
|
||||
bcdCDC 1.10
|
||||
CDC Call Management:
|
||||
bmCapabilities 0x00
|
||||
bDataInterface 1
|
||||
CDC ACM:
|
||||
bmCapabilities 0x02
|
||||
line coding and serial state
|
||||
CDC Union:
|
||||
bMasterInterface 0
|
||||
bSlaveInterface 1
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x83 EP 3 IN
|
||||
bmAttributes 3
|
||||
Transfer Type Interrupt
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0010 1x 16 bytes
|
||||
bInterval 1
|
||||
Interface Descriptor:
|
||||
bLength 9
|
||||
bDescriptorType 4
|
||||
bInterfaceNumber 1
|
||||
bAlternateSetting 0
|
||||
bNumEndpoints 2
|
||||
bInterfaceClass 10 CDC Data
|
||||
bInterfaceSubClass 0
|
||||
bInterfaceProtocol 0
|
||||
iInterface 0
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x02 EP 2 OUT
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0020 1x 32 bytes
|
||||
bInterval 0
|
||||
Endpoint Descriptor:
|
||||
bLength 7
|
||||
bDescriptorType 5
|
||||
bEndpointAddress 0x82 EP 2 IN
|
||||
bmAttributes 2
|
||||
Transfer Type Bulk
|
||||
Synch Type None
|
||||
Usage Type Data
|
||||
wMaxPacketSize 0x0040 1x 64 bytes
|
||||
bInterval 0
|
||||
106
info/windows/heltec.txt
Normal file
106
info/windows/heltec.txt
Normal file
@@ -0,0 +1,106 @@
|
||||
Run from Windows 10
|
||||
|
||||
Might work... (nope)
|
||||
Get-PnpDevice -Class 'USB' -PresentOnly | Format-List
|
||||
|
||||
|
||||
> Get-PnpDevice -PresentOnly | Format-List > b
|
||||
> Compare-Object (get-content a) (Get-Content b)
|
||||
|
||||
InputObject SideIndicator
|
||||
----------- -------------
|
||||
Caption : CP2102 USB to UART Bridge Controller <=
|
||||
Description : CP2102 USB to UART Bridge Controller <=
|
||||
Name : CP2102 USB to UART Bridge Controller <=
|
||||
Status : Error <=
|
||||
ConfigManagerErrorCode : CM_PROB_FAILED_INSTALL <=
|
||||
DeviceID : USB\VID_10C4&PID_EA60\0001 <=
|
||||
PNPDeviceID : USB\VID_10C4&PID_EA60\0001 <=
|
||||
CompatibleID : {USB\Class_FF&SubClass_00&Prot_00, USB\Class_FF&SubClass_00, USB\Class_FF} <=
|
||||
HardwareID : {USB\VID_10C4&PID_EA60&REV_0100, USB\VID_10C4&PID_EA60} <=
|
||||
FriendlyName : CP2102 USB to UART Bridge Controller <=
|
||||
InstanceId : USB\VID_10C4&PID_EA60\0001 <=
|
||||
Problem : CM_PROB_FAILED_INSTALL <=
|
||||
ClassGuid : <=
|
||||
Manufacturer : <=
|
||||
PNPClass : <=
|
||||
Class : <=
|
||||
Service : <=
|
||||
InstallDate : <=
|
||||
Availability : <=
|
||||
ConfigManagerUserConfig : False <=
|
||||
CreationClassName : Win32_PnPEntity <=
|
||||
ErrorCleared : <=
|
||||
ErrorDescription : <=
|
||||
LastErrorCode : <=
|
||||
PowerManagementCapabilities : <=
|
||||
PowerManagementSupported : <=
|
||||
StatusInfo : <=
|
||||
SystemCreationClassName : Win32_ComputerSystem <=
|
||||
SystemName : DESKTOP-FRFQN8H <=
|
||||
Present : True <=
|
||||
PSComputerName : <=
|
||||
ProblemDescription : <=
|
||||
<=
|
||||
|
||||
> Get-PnpDevice -DeviceID 'USB\VID_10C4&PID_EA60\0001'
|
||||
|
||||
Status Class FriendlyName InstanceId
|
||||
------ ----- ------------ ----------
|
||||
Error CP2102 USB to UART Bridge Controller USB\VID_...
|
||||
|
||||
|
||||
> Get-PnpDevice -PresentOnly -DeviceID 'USB\VID_10C4&PID_EA60\0001'
|
||||
Get-PnpDevice : No matching Win32_PnPEntity objects found by CIM query for instances of the ROOT\cimv2\Win32_PnPEntity
|
||||
class on the CIM server: SELECT * FROM Win32_PnPEntity WHERE ((DeviceId LIKE 'USB\\VID[_]10C4&PID[_]EA60\\0001'))
|
||||
AND ((Present = TRUE)). Verify query parameters and retry.
|
||||
At line:1 char:1
|
||||
+ Get-PnpDevice -PresentOnly -DeviceID 'USB\VID_10C4&PID_EA60\0001'
|
||||
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
+ CategoryInfo : ObjectNotFound: (Win32_PnPEntity:String) [Get-PnpDevice], CimJobException
|
||||
+ FullyQualifiedErrorId : CmdletizationQuery_NotFound,Get-PnpDevice
|
||||
|
||||
> Get-PnpDevice -PresentOnly -DeviceID 'USB\VID_10C4&PID_EA60\0001'
|
||||
|
||||
Status Class FriendlyName InstanceId
|
||||
------ ----- ------------ ----------
|
||||
Error CP2102 USB to UART Bridge Controller USB\VID_...
|
||||
|
||||
|
||||
|
||||
If need to install driver
|
||||
Get-PnpDevice -DeviceID 'USB\VID_10C4&PID_EA60\0001' | Format-List
|
||||
|
||||
|
||||
Caption : CP2102 USB to UART Bridge Controller
|
||||
Description : CP2102 USB to UART Bridge Controller
|
||||
InstallDate :
|
||||
Name : CP2102 USB to UART Bridge Controller
|
||||
Status : Error
|
||||
Availability :
|
||||
ConfigManagerErrorCode : CM_PROB_FAILED_INSTALL
|
||||
ConfigManagerUserConfig : False
|
||||
CreationClassName : Win32_PnPEntity
|
||||
DeviceID : USB\VID_10C4&PID_EA60\0001
|
||||
ErrorCleared :
|
||||
ErrorDescription :
|
||||
LastErrorCode :
|
||||
PNPDeviceID : USB\VID_10C4&PID_EA60\0001
|
||||
PowerManagementCapabilities :
|
||||
PowerManagementSupported :
|
||||
StatusInfo :
|
||||
SystemCreationClassName : Win32_ComputerSystem
|
||||
SystemName : DESKTOP-FRFQN8H
|
||||
ClassGuid :
|
||||
CompatibleID : {USB\Class_FF&SubClass_00&Prot_00, USB\Class_FF&SubClass_00, USB\Class_FF}
|
||||
HardwareID : {USB\VID_10C4&PID_EA60&REV_0100, USB\VID_10C4&PID_EA60}
|
||||
Manufacturer :
|
||||
PNPClass :
|
||||
Present : True
|
||||
Service :
|
||||
PSComputerName :
|
||||
Class :
|
||||
FriendlyName : CP2102 USB to UART Bridge Controller
|
||||
InstanceId : USB\VID_10C4&PID_EA60\0001
|
||||
Problem : CM_PROB_FAILED_INSTALL
|
||||
ProblemDescription :
|
||||
39
info/windows/nano_g1.txt
Normal file
39
info/windows/nano_g1.txt
Normal file
@@ -0,0 +1,39 @@
|
||||
Get-PnpDevice -PresentOnly | Format-List >a
|
||||
Get-PnpDevice -PresentOnly | Format-List >b
|
||||
Compare-Object (get-content a) (Get-Content b)
|
||||
|
||||
InputObject SideIndicator
|
||||
----------- -------------
|
||||
Caption : USB-Enhanced-SERIAL CH9102 (COM9) =>
|
||||
Description : USB-Enhanced-SERIAL CH9102 =>
|
||||
Name : USB-Enhanced-SERIAL CH9102 (COM9) =>
|
||||
DeviceID : USB\VID_1A86&PID_55D4\5382020745 =>
|
||||
PNPDeviceID : USB\VID_1A86&PID_55D4\5382020745 =>
|
||||
ClassGuid : {4d36e978-e325-11ce-bfc1-08002be10318} =>
|
||||
CompatibleID : {USB\Class_02&SubClass_02&Prot_01, USB\Class_02&SubClass_02, USB\Class_02} =>
|
||||
HardwareID : {USB\VID_1A86&PID_55D4&REV_0443, USB\VID_1A86&PID_55D4} =>
|
||||
Manufacturer : wch.cn =>
|
||||
PNPClass : Ports =>
|
||||
Service : CH343SER_A64 =>
|
||||
Class : Ports =>
|
||||
FriendlyName : USB-Enhanced-SERIAL CH9102 (COM9) =>
|
||||
InstanceId : USB\VID_1A86&PID_55D4\5382020745 =>
|
||||
InstallDate : =>
|
||||
Status : OK =>
|
||||
Availability : =>
|
||||
ConfigManagerErrorCode : CM_PROB_NONE =>
|
||||
ConfigManagerUserConfig : False =>
|
||||
CreationClassName : Win32_PnPEntity =>
|
||||
ErrorCleared : =>
|
||||
ErrorDescription : =>
|
||||
LastErrorCode : =>
|
||||
PowerManagementCapabilities : =>
|
||||
PowerManagementSupported : =>
|
||||
StatusInfo : =>
|
||||
SystemCreationClassName : Win32_ComputerSystem =>
|
||||
SystemName : DESKTOP-FRFQN8H =>
|
||||
Present : True =>
|
||||
PSComputerName : =>
|
||||
Problem : CM_PROB_NONE =>
|
||||
ProblemDescription : =>
|
||||
=>
|
||||
78
info/windows/rak4631_19003.txt
Normal file
78
info/windows/rak4631_19003.txt
Normal file
@@ -0,0 +1,78 @@
|
||||
Run from Windows 10
|
||||
|
||||
> Get-PnpDevice -PresentOnly | Format-List >a
|
||||
> Get-PnpDevice -PresentOnly | Format-List >b
|
||||
> Compare-Object (get-content a) (Get-Content b)
|
||||
|
||||
InputObject Side
|
||||
Indi
|
||||
cato
|
||||
r
|
||||
----------- ----
|
||||
Caption : USB Serial Device (COM4) =>
|
||||
Description : USB Serial Device =>
|
||||
Name : USB Serial Device (COM4) =>
|
||||
DeviceID : USB\VID_239A&PID_8029&MI_00\6&E8876D1&0&0000 =>
|
||||
PNPDeviceID : USB\VID_239A&PID_8029&MI_00\6&E8876D1&0&0000 =>
|
||||
ClassGuid : {4d36e978-e325-11ce-bfc1-08002be10318} =>
|
||||
CompatibleID : {USB\Class_02&SubClass_02&Prot_00, USB\Class_02&SubClass_02, USB\Class_02} =>
|
||||
HardwareID : {USB\VID_239A&PID_8029&REV_0100&MI_00, USB\VID_239A&PID_8029&MI_00} =>
|
||||
PNPClass : Ports =>
|
||||
Service : usbser =>
|
||||
Class : Ports =>
|
||||
FriendlyName : USB Serial Device (COM4) =>
|
||||
InstanceId : USB\VID_239A&PID_8029&MI_00\6&E8876D1&0&0000 =>
|
||||
Caption : USB Composite Device =>
|
||||
Description : USB Composite Device =>
|
||||
Name : USB Composite Device =>
|
||||
DeviceID : USB\VID_239A&PID_8029\E6CF9502B1D410D8 =>
|
||||
PNPDeviceID : USB\VID_239A&PID_8029\E6CF9502B1D410D8 =>
|
||||
ClassGuid : {36fc9e60-c465-11cf-8056-444553540000} =>
|
||||
CompatibleID : {USB\DevClass_00&SubClass_00&Prot_00, USB\DevClass_00&SubClass_00, USB\DevClass_00, =>
|
||||
USB\COMPOSITE} =>
|
||||
HardwareID : {USB\VID_239A&PID_8029&REV_0100, USB\VID_239A&PID_8029} =>
|
||||
Manufacturer : (Standard USB Host Controller) =>
|
||||
PNPClass : USB =>
|
||||
Service : usbccgp =>
|
||||
Class : USB =>
|
||||
FriendlyName : USB Composite Device =>
|
||||
InstanceId : USB\VID_239A&PID_8029\E6CF9502B1D410D8 =>
|
||||
InstallDate : =>
|
||||
Status : OK =>
|
||||
Availability : =>
|
||||
ConfigManagerErrorCode : CM_PROB_NONE =>
|
||||
ConfigManagerUserConfig : False =>
|
||||
CreationClassName : Win32_PnPEntity =>
|
||||
ErrorCleared : =>
|
||||
ErrorDescription : =>
|
||||
LastErrorCode : =>
|
||||
PowerManagementCapabilities : =>
|
||||
PowerManagementSupported : =>
|
||||
StatusInfo : =>
|
||||
SystemCreationClassName : Win32_ComputerSystem =>
|
||||
SystemName : DESKTOP-FRFQN8H =>
|
||||
Present : True =>
|
||||
PSComputerName : =>
|
||||
Problem : CM_PROB_NONE =>
|
||||
ProblemDescription : =>
|
||||
InstallDate : =>
|
||||
Status : OK =>
|
||||
Availability : =>
|
||||
ConfigManagerErrorCode : CM_PROB_NONE =>
|
||||
ConfigManagerUserConfig : False =>
|
||||
CreationClassName : Win32_PnPEntity =>
|
||||
ErrorCleared : =>
|
||||
ErrorDescription : =>
|
||||
LastErrorCode : =>
|
||||
PowerManagementCapabilities : =>
|
||||
PowerManagementSupported : =>
|
||||
StatusInfo : =>
|
||||
SystemCreationClassName : Win32_ComputerSystem =>
|
||||
SystemName : DESKTOP-FRFQN8H =>
|
||||
Manufacturer : Microsoft =>
|
||||
Present : True =>
|
||||
PSComputerName : =>
|
||||
Problem : CM_PROB_NONE =>
|
||||
ProblemDescription : =>
|
||||
=>
|
||||
=>
|
||||
254
info/windows/rak4631_5005.txt
Normal file
254
info/windows/rak4631_5005.txt
Normal file
@@ -0,0 +1,254 @@
|
||||
Run from Windows 10
|
||||
|
||||
> Get-PnpDevice -PresentOnly | Format-List >a
|
||||
> Get-PnpDevice -PresentOnly | Format-List >b
|
||||
> Compare-Object (get-content a) (Get-Content b)
|
||||
|
||||
In "boot" mode:
|
||||
|
||||
InputObject
|
||||
-----------
|
||||
Caption : FTHR840BOOT
|
||||
Description : nRF UF2
|
||||
Name : FTHR840BOOT
|
||||
DeviceID : SWD\WPDBUSENUM\_??_USBSTOR#DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0#7&27E1626&0&D121BD1C90B
|
||||
93EA2&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
|
||||
PNPDeviceID : SWD\WPDBUSENUM\_??_USBSTOR#DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0#7&27E1626&0&D121BD1C90B
|
||||
93EA2&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
|
||||
ClassGuid : {eec5ad98-8080-425f-922a-dabf3de3f69a}
|
||||
CompatibleID : {wpdbusenum\fs, SWD\Generic}
|
||||
Manufacturer : Adafruit
|
||||
PNPClass : WPD
|
||||
Service : WUDFWpdFs
|
||||
Class : WPD
|
||||
FriendlyName : FTHR840BOOT
|
||||
InstanceId : SWD\WPDBUSENUM\_??_USBSTOR#DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0#7&27E1626&0&D121BD1C90B
|
||||
93EA2&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
|
||||
DeviceID : STORAGE\VOLUME\_??_USBSTOR#DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0#7&27E1626&0&D121BD1C90B
|
||||
93EA2&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
|
||||
PNPDeviceID : STORAGE\VOLUME\_??_USBSTOR#DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0#7&27E1626&0&D121BD1C90B
|
||||
93EA2&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
|
||||
InstanceId : STORAGE\VOLUME\_??_USBSTOR#DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0#7&27E1626&0&D121BD1C90B
|
||||
93EA2&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
|
||||
Caption : USB Mass Storage Device
|
||||
Description : USB Mass Storage Device
|
||||
Name : USB Mass Storage Device
|
||||
DeviceID : USB\VID_239A&PID_0029&MI_02\6&175793A&0&0002
|
||||
PNPDeviceID : USB\VID_239A&PID_0029&MI_02\6&175793A&0&0002
|
||||
CompatibleID : {USB\Class_08&SubClass_06&Prot_50, USB\Class_08&SubClass_06, USB\Class_08}
|
||||
HardwareID : {USB\VID_239A&PID_0029&REV_0100&MI_02, USB\VID_239A&PID_0029&MI_02}
|
||||
Manufacturer : Compatible USB storage device
|
||||
Service : USBSTOR
|
||||
FriendlyName : USB Mass Storage Device
|
||||
InstanceId : USB\VID_239A&PID_0029&MI_02\6&175793A&0&0002
|
||||
Caption : USB Serial Device (COM5)
|
||||
Description : USB Serial Device
|
||||
Name : USB Serial Device (COM5)
|
||||
DeviceID : USB\VID_239A&PID_0029&MI_00\6&175793A&0&0000
|
||||
PNPDeviceID : USB\VID_239A&PID_0029&MI_00\6&175793A&0&0000
|
||||
ClassGuid : {4d36e978-e325-11ce-bfc1-08002be10318}
|
||||
CompatibleID : {USB\Class_02&SubClass_02&Prot_00, USB\Class_02&SubClass_02, USB\Class_02}
|
||||
HardwareID : {USB\VID_239A&PID_0029&REV_0100&MI_00, USB\VID_239A&PID_0029&MI_00}
|
||||
PNPClass : Ports
|
||||
Service : usbser
|
||||
Class : Ports
|
||||
FriendlyName : USB Serial Device (COM5)
|
||||
InstanceId : USB\VID_239A&PID_0029&MI_00\6&175793A&0&0000
|
||||
DeviceID : USB\VID_239A&PID_0029\D121BD1C90B93EA2
|
||||
PNPDeviceID : USB\VID_239A&PID_0029\D121BD1C90B93EA2
|
||||
ClassGuid : {36fc9e60-c465-11cf-8056-444553540000}
|
||||
HardwareID : {USB\VID_239A&PID_0029&REV_0100, USB\VID_239A&PID_0029}
|
||||
PNPClass : USB
|
||||
Class : USB
|
||||
InstanceId : USB\VID_239A&PID_0029\D121BD1C90B93EA2
|
||||
Caption : USB Composite Device
|
||||
Description : USB Composite Device
|
||||
Name : USB Composite Device
|
||||
ClassGuid : {36fc9e60-c465-11cf-8056-444553540000}
|
||||
CompatibleID : {USB\DevClass_00&SubClass_00&Prot_00, USB\DevClass_00&SubClass_00, USB\DevClass_00,
|
||||
USB\COMPOSITE}
|
||||
Manufacturer : (Standard USB Host Controller)
|
||||
PNPClass : USB
|
||||
Service : usbccgp
|
||||
Class : USB
|
||||
FriendlyName : USB Composite Device
|
||||
Caption : Volume
|
||||
Description : Volume
|
||||
Name : Volume
|
||||
ClassGuid : {71a27cdd-812a-11d0-bec7-08002be2092f}
|
||||
HardwareID : {STORAGE\Volume}
|
||||
PNPClass : Volume
|
||||
Service : volume
|
||||
Class : Volume
|
||||
FriendlyName : Volume
|
||||
HardwareID :
|
||||
Caption : Adafruit nRF UF2 USB Device
|
||||
Name : Adafruit nRF UF2 USB Device
|
||||
DeviceID : USBSTOR\DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0\7&27E1626&0&D121BD1C90B93EA2&0
|
||||
PNPDeviceID : USBSTOR\DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0\7&27E1626&0&D121BD1C90B93EA2&0
|
||||
CompatibleID : {USBSTOR\Disk, USBSTOR\RAW, GenDisk}
|
||||
HardwareID : {USBSTOR\DiskAdafruitnRF_UF2_________1.0_, USBSTOR\DiskAdafruitnRF_UF2_________,
|
||||
USBSTOR\DiskAdafruit, USBSTOR\AdafruitnRF_UF2_________1...}
|
||||
FriendlyName : Adafruit nRF UF2 USB Device
|
||||
InstanceId : USBSTOR\DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0\7&27E1626&0&D121BD1C90B93EA2&0
|
||||
Description : Disk drive
|
||||
ClassGuid : {4d36e967-e325-11ce-bfc1-08002be10318}
|
||||
Manufacturer : (Standard disk drives)
|
||||
PNPClass : DiskDrive
|
||||
Service : disk
|
||||
Class : DiskDrive
|
||||
CompatibleID :
|
||||
InstallDate :
|
||||
Status : OK
|
||||
Availability :
|
||||
ConfigManagerErrorCode : CM_PROB_NONE
|
||||
ConfigManagerUserConfig : False
|
||||
CreationClassName : Win32_PnPEntity
|
||||
ErrorCleared :
|
||||
ErrorDescription :
|
||||
LastErrorCode :
|
||||
PowerManagementCapabilities :
|
||||
PowerManagementSupported :
|
||||
StatusInfo :
|
||||
SystemCreationClassName : Win32_ComputerSystem
|
||||
SystemName : DESKTOP-FRFQN8H
|
||||
Present : True
|
||||
PSComputerName :
|
||||
Problem : CM_PROB_NONE
|
||||
ProblemDescription :
|
||||
InstallDate :
|
||||
Status : OK
|
||||
Availability :
|
||||
ConfigManagerErrorCode : CM_PROB_NONE
|
||||
ConfigManagerUserConfig : False
|
||||
CreationClassName : Win32_PnPEntity
|
||||
ErrorCleared :
|
||||
ErrorDescription :
|
||||
LastErrorCode :
|
||||
PowerManagementCapabilities :
|
||||
PowerManagementSupported :
|
||||
StatusInfo :
|
||||
SystemCreationClassName : Win32_ComputerSystem
|
||||
SystemName : DESKTOP-FRFQN8H
|
||||
Present : True
|
||||
PSComputerName :
|
||||
Problem : CM_PROB_NONE
|
||||
ProblemDescription :
|
||||
InstallDate :
|
||||
Status : OK
|
||||
Availability :
|
||||
ConfigManagerErrorCode : CM_PROB_NONE
|
||||
ConfigManagerUserConfig : False
|
||||
CreationClassName : Win32_PnPEntity
|
||||
ErrorCleared :
|
||||
ErrorDescription :
|
||||
LastErrorCode :
|
||||
PowerManagementCapabilities :
|
||||
PowerManagementSupported :
|
||||
StatusInfo :
|
||||
SystemCreationClassName : Win32_ComputerSystem
|
||||
SystemName : DESKTOP-FRFQN8H
|
||||
Present : True
|
||||
PSComputerName :
|
||||
Problem : CM_PROB_NONE
|
||||
ProblemDescription :
|
||||
|
||||
InstallDate :
|
||||
Status : OK
|
||||
Availability :
|
||||
ConfigManagerErrorCode : CM_PROB_NONE
|
||||
ConfigManagerUserConfig : False
|
||||
CreationClassName : Win32_PnPEntity
|
||||
ErrorCleared :
|
||||
ErrorDescription :
|
||||
LastErrorCode :
|
||||
PowerManagementCapabilities :
|
||||
PowerManagementSupported :
|
||||
StatusInfo :
|
||||
SystemCreationClassName : Win32_ComputerSystem
|
||||
SystemName : DESKTOP-FRFQN8H
|
||||
Manufacturer : Microsoft
|
||||
Present : True
|
||||
PSComputerName :
|
||||
Problem : CM_PROB_NONE
|
||||
ProblemDescription :
|
||||
|
||||
|
||||
|
||||
When you press the RST to load Meshtastic:
|
||||
|
||||
> Get-PnpDevice -PresentOnly | Format-List >b
|
||||
> Compare-Object (get-content a) (Get-Content b)
|
||||
|
||||
InputObject Side
|
||||
Indi
|
||||
cato
|
||||
r
|
||||
----------- ----
|
||||
DeviceID : USB\VID_239A&PID_8029\D121BD1C90B93EA2 =>
|
||||
PNPDeviceID : USB\VID_239A&PID_8029\D121BD1C90B93EA2 =>
|
||||
HardwareID : {USB\VID_239A&PID_8029&REV_0100, USB\VID_239A&PID_8029} =>
|
||||
InstanceId : USB\VID_239A&PID_8029\D121BD1C90B93EA2 =>
|
||||
Caption : USB Composite Device =>
|
||||
Description : USB Composite Device =>
|
||||
Name : USB Composite Device =>
|
||||
ClassGuid : {36fc9e60-c465-11cf-8056-444553540000} =>
|
||||
CompatibleID : {USB\DevClass_00&SubClass_00&Prot_00, USB\DevClass_00&SubClass_00, USB\DevClass_00, =>
|
||||
USB\COMPOSITE} =>
|
||||
Manufacturer : (Standard USB Host Controller) =>
|
||||
PNPClass : USB =>
|
||||
Service : usbccgp =>
|
||||
Class : USB =>
|
||||
FriendlyName : USB Composite Device =>
|
||||
Caption : USB Serial Device (COM6) =>
|
||||
Description : USB Serial Device =>
|
||||
Name : USB Serial Device (COM6) =>
|
||||
DeviceID : USB\VID_239A&PID_8029&MI_00\6&39B279E2&0&0000 =>
|
||||
PNPDeviceID : USB\VID_239A&PID_8029&MI_00\6&39B279E2&0&0000 =>
|
||||
ClassGuid : {4d36e978-e325-11ce-bfc1-08002be10318} =>
|
||||
CompatibleID : {USB\Class_02&SubClass_02&Prot_00, USB\Class_02&SubClass_02, USB\Class_02} =>
|
||||
HardwareID : {USB\VID_239A&PID_8029&REV_0100&MI_00, USB\VID_239A&PID_8029&MI_00} =>
|
||||
PNPClass : Ports =>
|
||||
Service : usbser =>
|
||||
Class : Ports =>
|
||||
FriendlyName : USB Serial Device (COM6) =>
|
||||
InstanceId : USB\VID_239A&PID_8029&MI_00\6&39B279E2&0&0000 =>
|
||||
InstallDate : =>
|
||||
Status : OK =>
|
||||
Availability : =>
|
||||
ConfigManagerErrorCode : CM_PROB_NONE =>
|
||||
ConfigManagerUserConfig : False =>
|
||||
CreationClassName : Win32_PnPEntity =>
|
||||
ErrorCleared : =>
|
||||
ErrorDescription : =>
|
||||
LastErrorCode : =>
|
||||
PowerManagementCapabilities : =>
|
||||
PowerManagementSupported : =>
|
||||
StatusInfo : =>
|
||||
SystemCreationClassName : Win32_ComputerSystem =>
|
||||
SystemName : DESKTOP-FRFQN8H =>
|
||||
Present : True =>
|
||||
PSComputerName : =>
|
||||
Problem : CM_PROB_NONE =>
|
||||
ProblemDescription : =>
|
||||
InstallDate : =>
|
||||
Status : OK =>
|
||||
Availability : =>
|
||||
ConfigManagerErrorCode : CM_PROB_NONE =>
|
||||
ConfigManagerUserConfig : False =>
|
||||
CreationClassName : Win32_PnPEntity =>
|
||||
ErrorCleared : =>
|
||||
ErrorDescription : =>
|
||||
LastErrorCode : =>
|
||||
PowerManagementCapabilities : =>
|
||||
PowerManagementSupported : =>
|
||||
StatusInfo : =>
|
||||
SystemCreationClassName : Win32_ComputerSystem =>
|
||||
SystemName : DESKTOP-FRFQN8H =>
|
||||
Manufacturer : Microsoft =>
|
||||
Present : True =>
|
||||
PSComputerName : =>
|
||||
Problem : CM_PROB_NONE =>
|
||||
ProblemDescription : =>
|
||||
=>
|
||||
|
||||
42
info/windows/tbeam.txt
Normal file
42
info/windows/tbeam.txt
Normal file
@@ -0,0 +1,42 @@
|
||||
Run from Windows 10
|
||||
|
||||
> Get-PnpDevice -PresentOnly | Format-List >a
|
||||
> Get-PnpDevice -PresentOnly | Format-List >b
|
||||
> Compare-Object (get-content a) (Get-Content b)
|
||||
|
||||
InputObject SideIndicator
|
||||
----------- -------------
|
||||
Caption : USB-Enhanced-SERIAL CH9102 (COM7) =>
|
||||
Description : USB-Enhanced-SERIAL CH9102 =>
|
||||
Name : USB-Enhanced-SERIAL CH9102 (COM7) =>
|
||||
DeviceID : USB\VID_1A86&PID_55D4\5323005057 =>
|
||||
PNPDeviceID : USB\VID_1A86&PID_55D4\5323005057 =>
|
||||
ClassGuid : {4d36e978-e325-11ce-bfc1-08002be10318} =>
|
||||
CompatibleID : {USB\Class_02&SubClass_02&Prot_01, USB\Class_02&SubClass_02, USB\Class_02} =>
|
||||
HardwareID : {USB\VID_1A86&PID_55D4&REV_0443, USB\VID_1A86&PID_55D4} =>
|
||||
Manufacturer : wch.cn =>
|
||||
PNPClass : Ports =>
|
||||
Service : CH343SER_A64 =>
|
||||
Class : Ports =>
|
||||
FriendlyName : USB-Enhanced-SERIAL CH9102 (COM7) =>
|
||||
InstanceId : USB\VID_1A86&PID_55D4\5323005057 =>
|
||||
InstallDate : =>
|
||||
Status : OK =>
|
||||
Availability : =>
|
||||
ConfigManagerErrorCode : CM_PROB_NONE =>
|
||||
ConfigManagerUserConfig : False =>
|
||||
CreationClassName : Win32_PnPEntity =>
|
||||
ErrorCleared : =>
|
||||
ErrorDescription : =>
|
||||
LastErrorCode : =>
|
||||
PowerManagementCapabilities : =>
|
||||
PowerManagementSupported : =>
|
||||
StatusInfo : =>
|
||||
SystemCreationClassName : Win32_ComputerSystem =>
|
||||
SystemName : DESKTOP-FRFQN8H =>
|
||||
Present : True =>
|
||||
PSComputerName : =>
|
||||
Problem : CM_PROB_NONE =>
|
||||
ProblemDescription : =>
|
||||
=>
|
||||
|
||||
302
info/windows/techo.txt
Normal file
302
info/windows/techo.txt
Normal file
@@ -0,0 +1,302 @@
|
||||
PS > Get-PnpDevice -PresentOnly | Format-List >a
|
||||
PS > Get-PnpDevice -PresentOnly | Format-List >b
|
||||
PS > Compare-Object (get-content a) (get-content b)
|
||||
|
||||
|
||||
Note: Not in boot mode
|
||||
|
||||
InputObject Side
|
||||
Indi
|
||||
cato
|
||||
r
|
||||
----------- ----
|
||||
DeviceID : USB\VID_239A&PID_4405\D02012062C578951 =>
|
||||
PNPDeviceID : USB\VID_239A&PID_4405\D02012062C578951 =>
|
||||
HardwareID : {USB\VID_239A&PID_4405&REV_0100, USB\VID_239A&PID_4405} =>
|
||||
InstanceId : USB\VID_239A&PID_4405\D02012062C578951 =>
|
||||
Caption : USB Composite Device =>
|
||||
Description : USB Composite Device =>
|
||||
Name : USB Composite Device =>
|
||||
ClassGuid : {36fc9e60-c465-11cf-8056-444553540000} =>
|
||||
CompatibleID : {USB\DevClass_00&SubClass_00&Prot_00, USB\DevClass_00&SubClass_00, USB\DevClass_00, =>
|
||||
USB\COMPOSITE} =>
|
||||
Manufacturer : (Standard USB Host Controller) =>
|
||||
PNPClass : USB =>
|
||||
Service : usbccgp =>
|
||||
Class : USB =>
|
||||
FriendlyName : USB Composite Device =>
|
||||
Caption : USB Serial Device (COM10) =>
|
||||
Description : USB Serial Device =>
|
||||
Name : USB Serial Device (COM10) =>
|
||||
DeviceID : USB\VID_239A&PID_4405&MI_00\6&1B68A3E6&0&0000 =>
|
||||
PNPDeviceID : USB\VID_239A&PID_4405&MI_00\6&1B68A3E6&0&0000 =>
|
||||
ClassGuid : {4d36e978-e325-11ce-bfc1-08002be10318} =>
|
||||
CompatibleID : {USB\Class_02&SubClass_02&Prot_00, USB\Class_02&SubClass_02, USB\Class_02} =>
|
||||
HardwareID : {USB\VID_239A&PID_4405&REV_0100&MI_00, USB\VID_239A&PID_4405&MI_00} =>
|
||||
PNPClass : Ports =>
|
||||
Service : usbser =>
|
||||
Class : Ports =>
|
||||
FriendlyName : USB Serial Device (COM10) =>
|
||||
InstanceId : USB\VID_239A&PID_4405&MI_00\6&1B68A3E6&0&0000 =>
|
||||
InstallDate : =>
|
||||
Status : OK =>
|
||||
Availability : =>
|
||||
ConfigManagerErrorCode : CM_PROB_NONE =>
|
||||
ConfigManagerUserConfig : False =>
|
||||
CreationClassName : Win32_PnPEntity =>
|
||||
ErrorCleared : =>
|
||||
ErrorDescription : =>
|
||||
LastErrorCode : =>
|
||||
PowerManagementCapabilities : =>
|
||||
PowerManagementSupported : =>
|
||||
StatusInfo : =>
|
||||
SystemCreationClassName : Win32_ComputerSystem =>
|
||||
SystemName : DESKTOP-FRFQN8H =>
|
||||
Present : True =>
|
||||
PSComputerName : =>
|
||||
Problem : CM_PROB_NONE =>
|
||||
ProblemDescription : =>
|
||||
InstallDate : =>
|
||||
Status : OK =>
|
||||
Availability : =>
|
||||
ConfigManagerErrorCode : CM_PROB_NONE =>
|
||||
ConfigManagerUserConfig : False =>
|
||||
CreationClassName : Win32_PnPEntity =>
|
||||
ErrorCleared : =>
|
||||
ErrorDescription : =>
|
||||
LastErrorCode : =>
|
||||
PowerManagementCapabilities : =>
|
||||
PowerManagementSupported : =>
|
||||
StatusInfo : =>
|
||||
SystemCreationClassName : Win32_ComputerSystem =>
|
||||
SystemName : DESKTOP-FRFQN8H =>
|
||||
Manufacturer : Microsoft =>
|
||||
Present : True =>
|
||||
PSComputerName : =>
|
||||
Problem : CM_PROB_NONE =>
|
||||
ProblemDescription : =>
|
||||
=>
|
||||
|
||||
in boot mode
|
||||
|
||||
PS > Get-PnpDevice -PresentOnly | Format-List >c
|
||||
PS > Compare-Object (get-content a) (get-content c)
|
||||
|
||||
InputObject
|
||||
-----------
|
||||
Caption : Adafruit nRF UF2 USB Device
|
||||
Name : Adafruit nRF UF2 USB Device
|
||||
DeviceID : USBSTOR\DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0\7&10304CB2&0&D02012062C578951&0
|
||||
PNPDeviceID : USBSTOR\DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0\7&10304CB2&0&D02012062C578951&0
|
||||
CompatibleID : {USBSTOR\Disk, USBSTOR\RAW, GenDisk}
|
||||
HardwareID : {USBSTOR\DiskAdafruitnRF_UF2_________1.0_, USBSTOR\DiskAdafruitnRF_UF2_________,
|
||||
USBSTOR\DiskAdafruit, USBSTOR\AdafruitnRF_UF2_________1...}
|
||||
FriendlyName : Adafruit nRF UF2 USB Device
|
||||
InstanceId : USBSTOR\DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0\7&10304CB2&0&D02012062C578951&0
|
||||
Caption : USB Mass Storage Device
|
||||
Description : USB Mass Storage Device
|
||||
Name : USB Mass Storage Device
|
||||
DeviceID : USB\VID_239A&PID_0029&MI_02\6&2AE8D65&0&0002
|
||||
PNPDeviceID : USB\VID_239A&PID_0029&MI_02\6&2AE8D65&0&0002
|
||||
CompatibleID : {USB\Class_08&SubClass_06&Prot_50, USB\Class_08&SubClass_06, USB\Class_08}
|
||||
HardwareID : {USB\VID_239A&PID_0029&REV_0100&MI_02, USB\VID_239A&PID_0029&MI_02}
|
||||
Manufacturer : Compatible USB storage device
|
||||
Service : USBSTOR
|
||||
FriendlyName : USB Mass Storage Device
|
||||
InstanceId : USB\VID_239A&PID_0029&MI_02\6&2AE8D65&0&0002
|
||||
Caption : USB Serial Device (COM11)
|
||||
Description : USB Serial Device
|
||||
Name : USB Serial Device (COM11)
|
||||
DeviceID : USB\VID_239A&PID_0029&MI_00\6&2AE8D65&0&0000
|
||||
PNPDeviceID : USB\VID_239A&PID_0029&MI_00\6&2AE8D65&0&0000
|
||||
ClassGuid : {4d36e978-e325-11ce-bfc1-08002be10318}
|
||||
CompatibleID : {USB\Class_02&SubClass_02&Prot_00, USB\Class_02&SubClass_02, USB\Class_02}
|
||||
HardwareID : {USB\VID_239A&PID_0029&REV_0100&MI_00, USB\VID_239A&PID_0029&MI_00}
|
||||
PNPClass : Ports
|
||||
Service : usbser
|
||||
Class : Ports
|
||||
FriendlyName : USB Serial Device (COM11)
|
||||
InstanceId : USB\VID_239A&PID_0029&MI_00\6&2AE8D65&0&0000
|
||||
ClassGuid : {36fc9e60-c465-11cf-8056-444553540000}
|
||||
PNPClass : USB
|
||||
Class : USB
|
||||
Caption : USB Composite Device
|
||||
Description : USB Composite Device
|
||||
Name : USB Composite Device
|
||||
DeviceID : USB\VID_239A&PID_0029\D02012062C578951
|
||||
PNPDeviceID : USB\VID_239A&PID_0029\D02012062C578951
|
||||
ClassGuid : {36fc9e60-c465-11cf-8056-444553540000}
|
||||
CompatibleID : {USB\DevClass_00&SubClass_00&Prot_00, USB\DevClass_00&SubClass_00, USB\DevClass_00,
|
||||
USB\COMPOSITE}
|
||||
HardwareID : {USB\VID_239A&PID_0029&REV_0100, USB\VID_239A&PID_0029}
|
||||
Manufacturer : (Standard USB Host Controller)
|
||||
PNPClass : USB
|
||||
Service : usbccgp
|
||||
Class : USB
|
||||
FriendlyName : USB Composite Device
|
||||
InstanceId : USB\VID_239A&PID_0029\D02012062C578951
|
||||
DeviceID : STORAGE\VOLUME\_??_USBSTOR#DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0#7&10304CB2&0&D02012062C
|
||||
578951&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
|
||||
PNPDeviceID : STORAGE\VOLUME\_??_USBSTOR#DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0#7&10304CB2&0&D02012062C
|
||||
578951&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
|
||||
InstanceId : STORAGE\VOLUME\_??_USBSTOR#DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0#7&10304CB2&0&D02012062C
|
||||
578951&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
|
||||
Caption : Volume
|
||||
Description : Volume
|
||||
Name : Volume
|
||||
ClassGuid : {71a27cdd-812a-11d0-bec7-08002be2092f}
|
||||
HardwareID : {STORAGE\Volume}
|
||||
PNPClass : Volume
|
||||
Service : volume
|
||||
Class : Volume
|
||||
FriendlyName : Volume
|
||||
Description : Disk drive
|
||||
ClassGuid : {4d36e967-e325-11ce-bfc1-08002be10318}
|
||||
Manufacturer : (Standard disk drives)
|
||||
PNPClass : DiskDrive
|
||||
Service : disk
|
||||
Class : DiskDrive
|
||||
Caption : TECHOBOOT
|
||||
Description : nRF UF2
|
||||
Name : TECHOBOOT
|
||||
DeviceID : SWD\WPDBUSENUM\_??_USBSTOR#DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0#7&10304CB2&0&D02012062C
|
||||
578951&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
|
||||
PNPDeviceID : SWD\WPDBUSENUM\_??_USBSTOR#DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0#7&10304CB2&0&D02012062C
|
||||
578951&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
|
||||
ClassGuid : {eec5ad98-8080-425f-922a-dabf3de3f69a}
|
||||
CompatibleID : {wpdbusenum\fs, SWD\Generic}
|
||||
HardwareID :
|
||||
Manufacturer : Adafruit
|
||||
PNPClass : WPD
|
||||
Service : WUDFWpdFs
|
||||
Class : WPD
|
||||
FriendlyName : TECHOBOOT
|
||||
InstanceId : SWD\WPDBUSENUM\_??_USBSTOR#DISK&VEN_ADAFRUIT&PROD_NRF_UF2&REV_1.0#7&10304CB2&0&D02012062C
|
||||
578951&0#{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}
|
||||
CompatibleID :
|
||||
InstallDate :
|
||||
Status : OK
|
||||
Availability :
|
||||
ConfigManagerErrorCode : CM_PROB_NONE
|
||||
ConfigManagerUserConfig : False
|
||||
CreationClassName : Win32_PnPEntity
|
||||
ErrorCleared :
|
||||
ErrorDescription :
|
||||
LastErrorCode :
|
||||
PowerManagementCapabilities :
|
||||
PowerManagementSupported :
|
||||
StatusInfo :
|
||||
SystemCreationClassName : Win32_ComputerSystem
|
||||
SystemName : DESKTOP-FRFQN8H
|
||||
Present : True
|
||||
PSComputerName :
|
||||
Problem : CM_PROB_NONE
|
||||
ProblemDescription :
|
||||
InstallDate :
|
||||
Status : OK
|
||||
Availability :
|
||||
ConfigManagerErrorCode : CM_PROB_NONE
|
||||
ConfigManagerUserConfig : False
|
||||
CreationClassName : Win32_PnPEntity
|
||||
ErrorCleared :
|
||||
ErrorDescription :
|
||||
LastErrorCode :
|
||||
PowerManagementCapabilities :
|
||||
PowerManagementSupported :
|
||||
StatusInfo :
|
||||
SystemCreationClassName : Win32_ComputerSystem
|
||||
SystemName : DESKTOP-FRFQN8H
|
||||
Present : True
|
||||
PSComputerName :
|
||||
Problem : CM_PROB_NONE
|
||||
ProblemDescription :
|
||||
InstallDate :
|
||||
Status : OK
|
||||
Availability :
|
||||
ConfigManagerErrorCode : CM_PROB_NONE
|
||||
ConfigManagerUserConfig : False
|
||||
CreationClassName : Win32_PnPEntity
|
||||
ErrorCleared :
|
||||
ErrorDescription :
|
||||
LastErrorCode :
|
||||
PowerManagementCapabilities :
|
||||
PowerManagementSupported :
|
||||
StatusInfo :
|
||||
SystemCreationClassName : Win32_ComputerSystem
|
||||
SystemName : DESKTOP-FRFQN8H
|
||||
Present : True
|
||||
PSComputerName :
|
||||
Problem : CM_PROB_NONE
|
||||
ProblemDescription :
|
||||
|
||||
InstallDate :
|
||||
Status : OK
|
||||
Availability :
|
||||
ConfigManagerErrorCode : CM_PROB_NONE
|
||||
ConfigManagerUserConfig : False
|
||||
CreationClassName : Win32_PnPEntity
|
||||
ErrorCleared :
|
||||
ErrorDescription :
|
||||
LastErrorCode :
|
||||
PowerManagementCapabilities :
|
||||
PowerManagementSupported :
|
||||
StatusInfo :
|
||||
SystemCreationClassName : Win32_ComputerSystem
|
||||
SystemName : DESKTOP-FRFQN8H
|
||||
Manufacturer : Microsoft
|
||||
Present : True
|
||||
PSComputerName :
|
||||
Problem : CM_PROB_NONE
|
||||
ProblemDescription :
|
||||
|
||||
InstallDate :
|
||||
Status : OK
|
||||
Availability :
|
||||
ConfigManagerErrorCode : CM_PROB_NONE
|
||||
ConfigManagerUserConfig : False
|
||||
CreationClassName : Win32_PnPEntity
|
||||
ErrorCleared :
|
||||
ErrorDescription :
|
||||
LastErrorCode :
|
||||
PowerManagementCapabilities :
|
||||
PowerManagementSupported :
|
||||
StatusInfo :
|
||||
SystemCreationClassName : Win32_ComputerSystem
|
||||
SystemName : DESKTOP-FRFQN8H
|
||||
Present : True
|
||||
PSComputerName :
|
||||
Problem : CM_PROB_NONE
|
||||
ProblemDescription :
|
||||
|
||||
InstallDate :
|
||||
Status : OK
|
||||
Availability :
|
||||
ConfigManagerErrorCode : CM_PROB_NONE
|
||||
ConfigManagerUserConfig : False
|
||||
CreationClassName : Win32_PnPEntity
|
||||
ErrorCleared :
|
||||
ErrorDescription :
|
||||
LastErrorCode :
|
||||
PowerManagementCapabilities :
|
||||
PowerManagementSupported :
|
||||
StatusInfo :
|
||||
SystemCreationClassName : Win32_ComputerSystem
|
||||
SystemName : DESKTOP-FRFQN8H
|
||||
Manufacturer : Microsoft
|
||||
Present : True
|
||||
PSComputerName :
|
||||
Problem : CM_PROB_NONE
|
||||
ProblemDescription :
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PS > Get-Volume
|
||||
|
||||
DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus SizeRemaining Size
|
||||
----------- ------------ -------------- --------- ------------ ----------------- ------------- ----
|
||||
Recovery NTFS Fixed Healthy OK 301.99 MB 854 MB
|
||||
C NTFS Fixed Healthy OK 22.3 GB 56.67 GB
|
||||
D TECHOBOOT FAT Removable Healthy OK 30.05 MB 31.88 MB
|
||||
|
||||
41
info/windows/tlora.txt
Normal file
41
info/windows/tlora.txt
Normal file
@@ -0,0 +1,41 @@
|
||||
Run from Windows 10
|
||||
|
||||
PS > Get-PnpDevice -PresentOnly | Format-List > a
|
||||
PS > Get-PnpDevice -PresentOnly | Format-List > b
|
||||
PS > Compare-Object (get-content a) (Get-Content b)
|
||||
|
||||
InputObject SideIndicator
|
||||
----------- -------------
|
||||
Caption : USB-Enhanced-SERIAL CH9102 (COM3) <=
|
||||
Description : USB-Enhanced-SERIAL CH9102 <=
|
||||
Name : USB-Enhanced-SERIAL CH9102 (COM3) <=
|
||||
DeviceID : USB\VID_1A86&PID_55D4\5&27435A1F&0&1 <=
|
||||
PNPDeviceID : USB\VID_1A86&PID_55D4\5&27435A1F&0&1 <=
|
||||
ClassGuid : {4d36e978-e325-11ce-bfc1-08002be10318} <=
|
||||
CompatibleID : {USB\Class_02&SubClass_02&Prot_01, USB\Class_02&SubClass_02, USB\Class_02} <=
|
||||
HardwareID : {USB\VID_1A86&PID_55D4&REV_0443, USB\VID_1A86&PID_55D4} <=
|
||||
Manufacturer : wch.cn <=
|
||||
PNPClass : Ports <=
|
||||
Service : CH343SER_A64 <=
|
||||
Class : Ports <=
|
||||
FriendlyName : USB-Enhanced-SERIAL CH9102 (COM3) <=
|
||||
InstanceId : USB\VID_1A86&PID_55D4\5&27435A1F&0&1 <=
|
||||
InstallDate : <=
|
||||
Status : OK <=
|
||||
Availability : <=
|
||||
ConfigManagerErrorCode : CM_PROB_NONE <=
|
||||
ConfigManagerUserConfig : False <=
|
||||
CreationClassName : Win32_PnPEntity <=
|
||||
ErrorCleared : <=
|
||||
ErrorDescription : <=
|
||||
LastErrorCode : <=
|
||||
PowerManagementCapabilities : <=
|
||||
PowerManagementSupported : <=
|
||||
StatusInfo : <=
|
||||
SystemCreationClassName : Win32_ComputerSystem <=
|
||||
SystemName : DESKTOP-FRFQN8H <=
|
||||
Present : True <=
|
||||
PSComputerName : <=
|
||||
Problem : CM_PROB_NONE <=
|
||||
ProblemDescription : <=
|
||||
<=
|
||||
71
info/windows/tlora_v1.txt
Normal file
71
info/windows/tlora_v1.txt
Normal file
@@ -0,0 +1,71 @@
|
||||
InputObject SideIn
|
||||
dicato
|
||||
r
|
||||
----------- ------
|
||||
Caption : Silicon Labs CP210x USB to UART Bridge (COM5) =>
|
||||
Description : Silicon Labs CP210x USB to UART Bridge =>
|
||||
Name : Silicon Labs CP210x USB to UART Bridge (COM5) =>
|
||||
DeviceID : USB\VID_10C4&PID_EA60\0001 =>
|
||||
PNPDeviceID : USB\VID_10C4&PID_EA60\0001 =>
|
||||
HardwareID : {USB\VID_10C4&PID_EA60&REV_0100, USB\VID_10C4&PID_EA60} =>
|
||||
Manufacturer : Silicon Laboratories =>
|
||||
Service : silabser =>
|
||||
FriendlyName : Silicon Labs CP210x USB to UART Bridge (COM5) =>
|
||||
InstanceId : USB\VID_10C4&PID_EA60\0001 =>
|
||||
CompatibleID : {USB\Class_ff&SubClass_00&Prot_00, USB\Class_ff&SubClass_00, USB\Class_ff} =>
|
||||
ClassGuid : {4d36e978-e325-11ce-bfc1-08002be10318} =>
|
||||
PNPClass : Ports =>
|
||||
Class : Ports =>
|
||||
InstallDate : =>
|
||||
Status : OK =>
|
||||
Availability : =>
|
||||
ConfigManagerErrorCode : CM_PROB_NONE =>
|
||||
ConfigManagerUserConfig : False =>
|
||||
CreationClassName : Win32_PnPEntity =>
|
||||
ErrorCleared : =>
|
||||
ErrorDescription : =>
|
||||
LastErrorCode : =>
|
||||
PowerManagementCapabilities : =>
|
||||
PowerManagementSupported : =>
|
||||
StatusInfo : =>
|
||||
SystemCreationClassName : Win32_ComputerSystem =>
|
||||
SystemName : MTI-ATPLT1 =>
|
||||
Present : True =>
|
||||
PSComputerName : =>
|
||||
Problem : CM_PROB_NONE =>
|
||||
ProblemDescription : =>
|
||||
Caption : Microsoft Serial Mouse =>
|
||||
Description : Microsoft Serial Mouse =>
|
||||
InstallDate : =>
|
||||
Name : Microsoft Serial Mouse =>
|
||||
Status : Error =>
|
||||
Availability : =>
|
||||
ConfigManagerErrorCode : CM_PROB_FAILED_START =>
|
||||
ConfigManagerUserConfig : False =>
|
||||
CreationClassName : Win32_PnPEntity =>
|
||||
DeviceID : SILABENM\MOUSE\C&1EBF522&0&0000 =>
|
||||
ErrorCleared : =>
|
||||
ErrorDescription : =>
|
||||
LastErrorCode : =>
|
||||
PNPDeviceID : SILABENM\MOUSE\C&1EBF522&0&0000 =>
|
||||
PowerManagementCapabilities : =>
|
||||
PowerManagementSupported : =>
|
||||
StatusInfo : =>
|
||||
SystemCreationClassName : Win32_ComputerSystem =>
|
||||
SystemName : MTI-ATPLT1 =>
|
||||
ClassGuid : {4d36e96f-e325-11ce-bfc1-08002be10318} =>
|
||||
CompatibleID : {SERIAL_MOUSE} =>
|
||||
HardwareID : {*PNP0F01} =>
|
||||
Manufacturer : Microsoft =>
|
||||
PNPClass : Mouse =>
|
||||
Present : True =>
|
||||
Service : sermouse =>
|
||||
PSComputerName : =>
|
||||
Class : Mouse =>
|
||||
FriendlyName : Microsoft Serial Mouse =>
|
||||
InstanceId : SILABENM\MOUSE\C&1EBF522&0&0000 =>
|
||||
Problem : CM_PROB_FAILED_START =>
|
||||
ProblemDescription : =>
|
||||
=>
|
||||
=>
|
||||
|
||||
@@ -3,11 +3,11 @@
|
||||
|
||||
Primary class: SerialInterface
|
||||
Install with pip: "[pip3 install meshtastic](https://pypi.org/project/meshtastic/)"
|
||||
Source code on [github](https://github.com/meshtastic/Meshtastic-python)
|
||||
Source code on [github](https://github.com/meshtastic/python)
|
||||
|
||||
properties of SerialInterface:
|
||||
|
||||
- radioConfig - Current radio configuration and device settings, if you write to this the new settings will be applied to
|
||||
- localConfig - Current radio configuration and device settings, if you write to this the new settings will be applied to
|
||||
the device.
|
||||
- nodes - The database of received nodes. Includes always up-to-date location and username information for each
|
||||
node in the mesh. This is a read-only datastructure.
|
||||
@@ -62,37 +62,51 @@ import os
|
||||
import platform
|
||||
import random
|
||||
import socket
|
||||
import sys
|
||||
import stat
|
||||
import sys
|
||||
import threading
|
||||
import traceback
|
||||
import time
|
||||
import traceback
|
||||
from datetime import datetime
|
||||
from typing import *
|
||||
import serial
|
||||
import timeago
|
||||
|
||||
import google.protobuf.json_format
|
||||
import pygatt
|
||||
from pubsub import pub
|
||||
from dotmap import DotMap
|
||||
from tabulate import tabulate
|
||||
import serial # type: ignore[import-untyped]
|
||||
import timeago # type: ignore[import-untyped]
|
||||
from dotmap import DotMap # type: ignore[import-untyped]
|
||||
from google.protobuf.json_format import MessageToJson
|
||||
from .util import fixme, catchAndIgnore, stripnl, DeferredExecution, Timeout
|
||||
from .node import Node
|
||||
from . import mesh_pb2, portnums_pb2, apponly_pb2, admin_pb2, environmental_measurement_pb2, remote_hardware_pb2, channel_pb2, radioconfig_pb2, util
|
||||
from pubsub import pub # type: ignore[import-untyped]
|
||||
from tabulate import tabulate
|
||||
|
||||
from meshtastic import (
|
||||
admin_pb2,
|
||||
apponly_pb2,
|
||||
channel_pb2,
|
||||
config_pb2,
|
||||
mesh_pb2,
|
||||
mqtt_pb2,
|
||||
paxcount_pb2,
|
||||
portnums_pb2,
|
||||
remote_hardware_pb2,
|
||||
storeforward_pb2,
|
||||
telemetry_pb2,
|
||||
util,
|
||||
)
|
||||
from meshtastic.node import Node
|
||||
from meshtastic.util import DeferredExecution, Timeout, catchAndIgnore, fixme, stripnl
|
||||
|
||||
# Note: To follow PEP224, comments should be after the module variable.
|
||||
|
||||
LOCAL_ADDR = "^local"
|
||||
"""A special ID that means the local node"""
|
||||
|
||||
BROADCAST_NUM = 0xffffffff
|
||||
"""if using 8 bit nodenums this will be shortend on the target"""
|
||||
BROADCAST_NUM = 0xFFFFFFFF
|
||||
"""if using 8 bit nodenums this will be shortened on the target"""
|
||||
|
||||
BROADCAST_ADDR = "^all"
|
||||
"""A special ID that means broadcast"""
|
||||
|
||||
OUR_APP_VERSION = 20200
|
||||
OUR_APP_VERSION = 20300
|
||||
"""The numeric buildnumber (shared with android apps) specifying the
|
||||
level of device code we are guaranteed to understand
|
||||
|
||||
@@ -104,6 +118,7 @@ publishingThread = DeferredExecution("publishing")
|
||||
|
||||
class ResponseHandler(NamedTuple):
|
||||
"""A pending response callback, waiting for a response to one of our messages"""
|
||||
|
||||
# requestId: int - used only as a key
|
||||
callback: Callable
|
||||
# FIXME, add timestamp and age out old requests
|
||||
@@ -111,12 +126,13 @@ class ResponseHandler(NamedTuple):
|
||||
|
||||
class KnownProtocol(NamedTuple):
|
||||
"""Used to automatically decode known protocol payloads"""
|
||||
|
||||
name: str
|
||||
# portnum: int, now a key
|
||||
# If set, will be called to prase as a protocol buffer
|
||||
protobufFactory: Callable = None
|
||||
protobufFactory: Optional[Callable] = None
|
||||
# If set, invoked as onReceive(interface, packet)
|
||||
onReceive: Callable = None
|
||||
onReceive: Optional[Callable] = None
|
||||
|
||||
|
||||
def _onTextReceive(iface, asDict):
|
||||
@@ -127,6 +143,7 @@ def _onTextReceive(iface, asDict):
|
||||
#
|
||||
# Usually btw this problem is caused by apps sending binary data but setting the payload type to
|
||||
# text.
|
||||
logging.debug(f"in _onTextReceive() asDict:{asDict}")
|
||||
try:
|
||||
asBytes = asDict["decoded"]["payload"]
|
||||
asDict["decoded"]["text"] = asBytes.decode("utf-8")
|
||||
@@ -137,22 +154,30 @@ def _onTextReceive(iface, asDict):
|
||||
|
||||
def _onPositionReceive(iface, asDict):
|
||||
"""Special auto parsing for received messages"""
|
||||
p = asDict["decoded"]["position"]
|
||||
iface._fixupPosition(p)
|
||||
# update node DB as needed
|
||||
iface._getOrCreateByNum(asDict["from"])["position"] = p
|
||||
logging.debug(f"in _onPositionReceive() asDict:{asDict}")
|
||||
if "decoded" in asDict:
|
||||
if "position" in asDict["decoded"] and "from" in asDict:
|
||||
p = asDict["decoded"]["position"]
|
||||
logging.debug(f"p:{p}")
|
||||
p = iface._fixupPosition(p)
|
||||
logging.debug(f"after fixup p:{p}")
|
||||
# update node DB as needed
|
||||
iface._getOrCreateByNum(asDict["from"])["position"] = p
|
||||
|
||||
|
||||
def _onNodeInfoReceive(iface, asDict):
|
||||
"""Special auto parsing for received messages"""
|
||||
p = asDict["decoded"]["user"]
|
||||
# decode user protobufs and update nodedb, provide decoded version as "position" in the published msg
|
||||
# update node DB as needed
|
||||
n = iface._getOrCreateByNum(asDict["from"])
|
||||
n["user"] = p
|
||||
# We now have a node ID, make sure it is uptodate in that table
|
||||
iface.nodes[p["id"]] = n
|
||||
_receiveInfoUpdate(iface, asDict)
|
||||
logging.debug(f"in _onNodeInfoReceive() asDict:{asDict}")
|
||||
if "decoded" in asDict:
|
||||
if "user" in asDict["decoded"] and "from" in asDict:
|
||||
p = asDict["decoded"]["user"]
|
||||
# decode user protobufs and update nodedb, provide decoded version as "position" in the published msg
|
||||
# update node DB as needed
|
||||
n = iface._getOrCreateByNum(asDict["from"])
|
||||
n["user"] = p
|
||||
# We now have a node ID, make sure it is up-to-date in that table
|
||||
iface.nodes[p["id"]] = n
|
||||
_receiveInfoUpdate(iface, asDict)
|
||||
|
||||
|
||||
def _receiveInfoUpdate(iface, asDict):
|
||||
@@ -165,12 +190,37 @@ def _receiveInfoUpdate(iface, asDict):
|
||||
|
||||
"""Well known message payloads can register decoders for automatic protobuf parsing"""
|
||||
protocols = {
|
||||
portnums_pb2.PortNum.TEXT_MESSAGE_APP: KnownProtocol("text", onReceive=_onTextReceive),
|
||||
portnums_pb2.PortNum.POSITION_APP: KnownProtocol("position", mesh_pb2.Position, _onPositionReceive),
|
||||
portnums_pb2.PortNum.NODEINFO_APP: KnownProtocol("user", mesh_pb2.User, _onNodeInfoReceive),
|
||||
portnums_pb2.PortNum.TEXT_MESSAGE_APP: KnownProtocol(
|
||||
"text", onReceive=_onTextReceive
|
||||
),
|
||||
portnums_pb2.PortNum.RANGE_TEST_APP: KnownProtocol(
|
||||
"rangetest", onReceive=_onTextReceive
|
||||
),
|
||||
portnums_pb2.PortNum.DETECTION_SENSOR_APP: KnownProtocol(
|
||||
"detectionsensor", onReceive=_onTextReceive
|
||||
),
|
||||
|
||||
portnums_pb2.PortNum.POSITION_APP: KnownProtocol(
|
||||
"position", mesh_pb2.Position, _onPositionReceive
|
||||
),
|
||||
portnums_pb2.PortNum.NODEINFO_APP: KnownProtocol(
|
||||
"user", mesh_pb2.User, _onNodeInfoReceive
|
||||
),
|
||||
portnums_pb2.PortNum.ADMIN_APP: KnownProtocol("admin", admin_pb2.AdminMessage),
|
||||
portnums_pb2.PortNum.ROUTING_APP: KnownProtocol("routing", mesh_pb2.Routing),
|
||||
portnums_pb2.PortNum.ENVIRONMENTAL_MEASUREMENT_APP: KnownProtocol("environmental", environmental_measurement_pb2.EnvironmentalMeasurement),
|
||||
portnums_pb2.PortNum.TELEMETRY_APP: KnownProtocol(
|
||||
"telemetry", telemetry_pb2.Telemetry
|
||||
),
|
||||
portnums_pb2.PortNum.REMOTE_HARDWARE_APP: KnownProtocol(
|
||||
"remotehw", remote_hardware_pb2.HardwareMessage)
|
||||
"remotehw", remote_hardware_pb2.HardwareMessage
|
||||
),
|
||||
portnums_pb2.PortNum.SIMULATOR_APP: KnownProtocol("simulator", mesh_pb2.Compressed),
|
||||
portnums_pb2.PortNum.TRACEROUTE_APP: KnownProtocol(
|
||||
"traceroute", mesh_pb2.RouteDiscovery
|
||||
),
|
||||
portnums_pb2.PortNum.WAYPOINT_APP: KnownProtocol("waypoint", mesh_pb2.Waypoint),
|
||||
portnums_pb2.PortNum.PAXCOUNTER_APP: KnownProtocol("paxcounter", paxcount_pb2.Paxcount),
|
||||
portnums_pb2.PortNum.STORE_FORWARD_APP: KnownProtocol("storeforward", storeforward_pb2.StoreAndForward),
|
||||
portnums_pb2.PortNum.NEIGHBORINFO_APP: KnownProtocol("neighborinfo", mesh_pb2.NeighborInfo),
|
||||
portnums_pb2.PortNum.MAP_REPORT_APP: KnownProtocol("mapreport", mqtt_pb2.MapReport),
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,205 +1,39 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: admin.proto
|
||||
|
||||
# source: meshtastic/admin.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from google.protobuf import reflection as _reflection
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from . import channel_pb2 as channel__pb2
|
||||
from . import radioconfig_pb2 as radioconfig__pb2
|
||||
from . import mesh_pb2 as mesh__pb2
|
||||
from meshtastic import channel_pb2 as meshtastic_dot_channel__pb2
|
||||
from meshtastic import config_pb2 as meshtastic_dot_config__pb2
|
||||
from meshtastic import connection_status_pb2 as meshtastic_dot_connection__status__pb2
|
||||
from meshtastic import mesh_pb2 as meshtastic_dot_mesh__pb2
|
||||
from meshtastic import module_config_pb2 as meshtastic_dot_module__config__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
||||
name='admin.proto',
|
||||
package='',
|
||||
syntax='proto3',
|
||||
serialized_options=b'\n\023com.geeksville.meshB\013AdminProtosH\003Z!github.com/meshtastic/gomeshproto',
|
||||
serialized_pb=b'\n\x0b\x61\x64min.proto\x1a\rchannel.proto\x1a\x11radioconfig.proto\x1a\nmesh.proto\"\xbd\x03\n\x0c\x41\x64minMessage\x12!\n\tset_radio\x18\x01 \x01(\x0b\x32\x0c.RadioConfigH\x00\x12\x1a\n\tset_owner\x18\x02 \x01(\x0b\x32\x05.UserH\x00\x12\x1f\n\x0bset_channel\x18\x03 \x01(\x0b\x32\x08.ChannelH\x00\x12\x1b\n\x11get_radio_request\x18\x04 \x01(\x08H\x00\x12*\n\x12get_radio_response\x18\x05 \x01(\x0b\x32\x0c.RadioConfigH\x00\x12\x1d\n\x13get_channel_request\x18\x06 \x01(\rH\x00\x12(\n\x14get_channel_response\x18\x07 \x01(\x0b\x32\x08.ChannelH\x00\x12\x1b\n\x11get_owner_request\x18\x08 \x01(\x08H\x00\x12#\n\x12get_owner_response\x18\t \x01(\x0b\x32\x05.UserH\x00\x12\x1d\n\x13\x63onfirm_set_channel\x18 \x01(\x08H\x00\x12\x1b\n\x11\x63onfirm_set_radio\x18! \x01(\x08H\x00\x12\x18\n\x0e\x65xit_simulator\x18\" \x01(\x08H\x00\x12\x18\n\x0ereboot_seconds\x18# \x01(\x05H\x00\x42\t\n\x07variantBG\n\x13\x63om.geeksville.meshB\x0b\x41\x64minProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3'
|
||||
,
|
||||
dependencies=[channel__pb2.DESCRIPTOR,radioconfig__pb2.DESCRIPTOR,mesh__pb2.DESCRIPTOR,])
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16meshtastic/admin.proto\x12\nmeshtastic\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\x1a\"meshtastic/connection_status.proto\x1a\x15meshtastic/mesh.proto\x1a\x1emeshtastic/module_config.proto\"\xce\x11\n\x0c\x41\x64minMessage\x12\x1d\n\x13get_channel_request\x18\x01 \x01(\rH\x00\x12\x33\n\x14get_channel_response\x18\x02 \x01(\x0b\x32\x13.meshtastic.ChannelH\x00\x12\x1b\n\x11get_owner_request\x18\x03 \x01(\x08H\x00\x12.\n\x12get_owner_response\x18\x04 \x01(\x0b\x32\x10.meshtastic.UserH\x00\x12\x41\n\x12get_config_request\x18\x05 \x01(\x0e\x32#.meshtastic.AdminMessage.ConfigTypeH\x00\x12\x31\n\x13get_config_response\x18\x06 \x01(\x0b\x32\x12.meshtastic.ConfigH\x00\x12N\n\x19get_module_config_request\x18\x07 \x01(\x0e\x32).meshtastic.AdminMessage.ModuleConfigTypeH\x00\x12>\n\x1aget_module_config_response\x18\x08 \x01(\x0b\x32\x18.meshtastic.ModuleConfigH\x00\x12\x34\n*get_canned_message_module_messages_request\x18\n \x01(\x08H\x00\x12\x35\n+get_canned_message_module_messages_response\x18\x0b \x01(\tH\x00\x12%\n\x1bget_device_metadata_request\x18\x0c \x01(\x08H\x00\x12\x42\n\x1cget_device_metadata_response\x18\r \x01(\x0b\x32\x1a.meshtastic.DeviceMetadataH\x00\x12\x1e\n\x14get_ringtone_request\x18\x0e \x01(\x08H\x00\x12\x1f\n\x15get_ringtone_response\x18\x0f \x01(\tH\x00\x12.\n$get_device_connection_status_request\x18\x10 \x01(\x08H\x00\x12S\n%get_device_connection_status_response\x18\x11 \x01(\x0b\x32\".meshtastic.DeviceConnectionStatusH\x00\x12\x31\n\x0cset_ham_mode\x18\x12 \x01(\x0b\x32\x19.meshtastic.HamParametersH\x00\x12/\n%get_node_remote_hardware_pins_request\x18\x13 \x01(\x08H\x00\x12\\\n&get_node_remote_hardware_pins_response\x18\x14 \x01(\x0b\x32*.meshtastic.NodeRemoteHardwarePinsResponseH\x00\x12 \n\x16\x65nter_dfu_mode_request\x18\x15 \x01(\x08H\x00\x12\x1d\n\x13\x64\x65lete_file_request\x18\x16 \x01(\tH\x00\x12%\n\tset_owner\x18 \x01(\x0b\x32\x10.meshtastic.UserH\x00\x12*\n\x0bset_channel\x18! \x01(\x0b\x32\x13.meshtastic.ChannelH\x00\x12(\n\nset_config\x18\" \x01(\x0b\x32\x12.meshtastic.ConfigH\x00\x12\x35\n\x11set_module_config\x18# \x01(\x0b\x32\x18.meshtastic.ModuleConfigH\x00\x12,\n\"set_canned_message_module_messages\x18$ \x01(\tH\x00\x12\x1e\n\x14set_ringtone_message\x18% \x01(\tH\x00\x12\x1b\n\x11remove_by_nodenum\x18& \x01(\rH\x00\x12\x1b\n\x11set_favorite_node\x18\' \x01(\rH\x00\x12\x1e\n\x14remove_favorite_node\x18( \x01(\rH\x00\x12\x32\n\x12set_fixed_position\x18) \x01(\x0b\x32\x14.meshtastic.PositionH\x00\x12\x1f\n\x15remove_fixed_position\x18* \x01(\x08H\x00\x12\x1d\n\x13\x62\x65gin_edit_settings\x18@ \x01(\x08H\x00\x12\x1e\n\x14\x63ommit_edit_settings\x18\x41 \x01(\x08H\x00\x12\x1c\n\x12reboot_ota_seconds\x18_ \x01(\x05H\x00\x12\x18\n\x0e\x65xit_simulator\x18` \x01(\x08H\x00\x12\x18\n\x0ereboot_seconds\x18\x61 \x01(\x05H\x00\x12\x1a\n\x10shutdown_seconds\x18\x62 \x01(\x05H\x00\x12\x17\n\rfactory_reset\x18\x63 \x01(\x05H\x00\x12\x16\n\x0cnodedb_reset\x18\x64 \x01(\x05H\x00\"\x95\x01\n\nConfigType\x12\x11\n\rDEVICE_CONFIG\x10\x00\x12\x13\n\x0fPOSITION_CONFIG\x10\x01\x12\x10\n\x0cPOWER_CONFIG\x10\x02\x12\x12\n\x0eNETWORK_CONFIG\x10\x03\x12\x12\n\x0e\x44ISPLAY_CONFIG\x10\x04\x12\x0f\n\x0bLORA_CONFIG\x10\x05\x12\x14\n\x10\x42LUETOOTH_CONFIG\x10\x06\"\xbb\x02\n\x10ModuleConfigType\x12\x0f\n\x0bMQTT_CONFIG\x10\x00\x12\x11\n\rSERIAL_CONFIG\x10\x01\x12\x13\n\x0f\x45XTNOTIF_CONFIG\x10\x02\x12\x17\n\x13STOREFORWARD_CONFIG\x10\x03\x12\x14\n\x10RANGETEST_CONFIG\x10\x04\x12\x14\n\x10TELEMETRY_CONFIG\x10\x05\x12\x14\n\x10\x43\x41NNEDMSG_CONFIG\x10\x06\x12\x10\n\x0c\x41UDIO_CONFIG\x10\x07\x12\x19\n\x15REMOTEHARDWARE_CONFIG\x10\x08\x12\x17\n\x13NEIGHBORINFO_CONFIG\x10\t\x12\x1a\n\x16\x41MBIENTLIGHTING_CONFIG\x10\n\x12\x1a\n\x16\x44\x45TECTIONSENSOR_CONFIG\x10\x0b\x12\x15\n\x11PAXCOUNTER_CONFIG\x10\x0c\x42\x11\n\x0fpayload_variant\"[\n\rHamParameters\x12\x11\n\tcall_sign\x18\x01 \x01(\t\x12\x10\n\x08tx_power\x18\x02 \x01(\x05\x12\x11\n\tfrequency\x18\x03 \x01(\x02\x12\x12\n\nshort_name\x18\x04 \x01(\t\"f\n\x1eNodeRemoteHardwarePinsResponse\x12\x44\n\x19node_remote_hardware_pins\x18\x01 \x03(\x0b\x32!.meshtastic.NodeRemoteHardwarePinB`\n\x13\x63om.geeksville.meshB\x0b\x41\x64minProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.admin_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
|
||||
|
||||
_ADMINMESSAGE = _descriptor.Descriptor(
|
||||
name='AdminMessage',
|
||||
full_name='AdminMessage',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='set_radio', full_name='AdminMessage.set_radio', index=0,
|
||||
number=1, type=11, cpp_type=10, label=1,
|
||||
has_default_value=False, default_value=None,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='set_owner', full_name='AdminMessage.set_owner', index=1,
|
||||
number=2, type=11, cpp_type=10, label=1,
|
||||
has_default_value=False, default_value=None,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='set_channel', full_name='AdminMessage.set_channel', index=2,
|
||||
number=3, type=11, cpp_type=10, label=1,
|
||||
has_default_value=False, default_value=None,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='get_radio_request', full_name='AdminMessage.get_radio_request', index=3,
|
||||
number=4, type=8, cpp_type=7, label=1,
|
||||
has_default_value=False, default_value=False,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='get_radio_response', full_name='AdminMessage.get_radio_response', index=4,
|
||||
number=5, type=11, cpp_type=10, label=1,
|
||||
has_default_value=False, default_value=None,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='get_channel_request', full_name='AdminMessage.get_channel_request', index=5,
|
||||
number=6, type=13, cpp_type=3, label=1,
|
||||
has_default_value=False, default_value=0,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='get_channel_response', full_name='AdminMessage.get_channel_response', index=6,
|
||||
number=7, type=11, cpp_type=10, label=1,
|
||||
has_default_value=False, default_value=None,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='get_owner_request', full_name='AdminMessage.get_owner_request', index=7,
|
||||
number=8, type=8, cpp_type=7, label=1,
|
||||
has_default_value=False, default_value=False,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='get_owner_response', full_name='AdminMessage.get_owner_response', index=8,
|
||||
number=9, type=11, cpp_type=10, label=1,
|
||||
has_default_value=False, default_value=None,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='confirm_set_channel', full_name='AdminMessage.confirm_set_channel', index=9,
|
||||
number=32, type=8, cpp_type=7, label=1,
|
||||
has_default_value=False, default_value=False,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='confirm_set_radio', full_name='AdminMessage.confirm_set_radio', index=10,
|
||||
number=33, type=8, cpp_type=7, label=1,
|
||||
has_default_value=False, default_value=False,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='exit_simulator', full_name='AdminMessage.exit_simulator', index=11,
|
||||
number=34, type=8, cpp_type=7, label=1,
|
||||
has_default_value=False, default_value=False,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='reboot_seconds', full_name='AdminMessage.reboot_seconds', index=12,
|
||||
number=35, type=5, cpp_type=1, label=1,
|
||||
has_default_value=False, default_value=0,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto3',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
_descriptor.OneofDescriptor(
|
||||
name='variant', full_name='AdminMessage.variant',
|
||||
index=0, containing_type=None, fields=[]),
|
||||
],
|
||||
serialized_start=62,
|
||||
serialized_end=507,
|
||||
)
|
||||
|
||||
_ADMINMESSAGE.fields_by_name['set_radio'].message_type = radioconfig__pb2._RADIOCONFIG
|
||||
_ADMINMESSAGE.fields_by_name['set_owner'].message_type = mesh__pb2._USER
|
||||
_ADMINMESSAGE.fields_by_name['set_channel'].message_type = channel__pb2._CHANNEL
|
||||
_ADMINMESSAGE.fields_by_name['get_radio_response'].message_type = radioconfig__pb2._RADIOCONFIG
|
||||
_ADMINMESSAGE.fields_by_name['get_channel_response'].message_type = channel__pb2._CHANNEL
|
||||
_ADMINMESSAGE.fields_by_name['get_owner_response'].message_type = mesh__pb2._USER
|
||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
||||
_ADMINMESSAGE.fields_by_name['set_radio'])
|
||||
_ADMINMESSAGE.fields_by_name['set_radio'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
||||
_ADMINMESSAGE.fields_by_name['set_owner'])
|
||||
_ADMINMESSAGE.fields_by_name['set_owner'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
||||
_ADMINMESSAGE.fields_by_name['set_channel'])
|
||||
_ADMINMESSAGE.fields_by_name['set_channel'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
||||
_ADMINMESSAGE.fields_by_name['get_radio_request'])
|
||||
_ADMINMESSAGE.fields_by_name['get_radio_request'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
||||
_ADMINMESSAGE.fields_by_name['get_radio_response'])
|
||||
_ADMINMESSAGE.fields_by_name['get_radio_response'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
||||
_ADMINMESSAGE.fields_by_name['get_channel_request'])
|
||||
_ADMINMESSAGE.fields_by_name['get_channel_request'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
||||
_ADMINMESSAGE.fields_by_name['get_channel_response'])
|
||||
_ADMINMESSAGE.fields_by_name['get_channel_response'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
||||
_ADMINMESSAGE.fields_by_name['get_owner_request'])
|
||||
_ADMINMESSAGE.fields_by_name['get_owner_request'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
||||
_ADMINMESSAGE.fields_by_name['get_owner_response'])
|
||||
_ADMINMESSAGE.fields_by_name['get_owner_response'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
||||
_ADMINMESSAGE.fields_by_name['confirm_set_channel'])
|
||||
_ADMINMESSAGE.fields_by_name['confirm_set_channel'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
||||
_ADMINMESSAGE.fields_by_name['confirm_set_radio'])
|
||||
_ADMINMESSAGE.fields_by_name['confirm_set_radio'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
||||
_ADMINMESSAGE.fields_by_name['exit_simulator'])
|
||||
_ADMINMESSAGE.fields_by_name['exit_simulator'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
||||
_ADMINMESSAGE.fields_by_name['reboot_seconds'])
|
||||
_ADMINMESSAGE.fields_by_name['reboot_seconds'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
||||
DESCRIPTOR.message_types_by_name['AdminMessage'] = _ADMINMESSAGE
|
||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
||||
|
||||
AdminMessage = _reflection.GeneratedProtocolMessageType('AdminMessage', (_message.Message,), {
|
||||
'DESCRIPTOR' : _ADMINMESSAGE,
|
||||
'__module__' : 'admin_pb2'
|
||||
# @@protoc_insertion_point(class_scope:AdminMessage)
|
||||
})
|
||||
_sym_db.RegisterMessage(AdminMessage)
|
||||
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\013AdminProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_ADMINMESSAGE._serialized_start=181
|
||||
_ADMINMESSAGE._serialized_end=2435
|
||||
_ADMINMESSAGE_CONFIGTYPE._serialized_start=1949
|
||||
_ADMINMESSAGE_CONFIGTYPE._serialized_end=2098
|
||||
_ADMINMESSAGE_MODULECONFIGTYPE._serialized_start=2101
|
||||
_ADMINMESSAGE_MODULECONFIGTYPE._serialized_end=2416
|
||||
_HAMPARAMETERS._serialized_start=2437
|
||||
_HAMPARAMETERS._serialized_end=2528
|
||||
_NODEREMOTEHARDWAREPINSRESPONSE._serialized_start=2530
|
||||
_NODEREMOTEHARDWAREPINSRESPONSE._serialized_end=2632
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
|
||||
557
meshtastic/admin_pb2.pyi
Normal file
557
meshtastic/admin_pb2.pyi
Normal file
@@ -0,0 +1,557 @@
|
||||
"""
|
||||
@generated by mypy-protobuf. Do not edit manually!
|
||||
isort:skip_file
|
||||
"""
|
||||
import builtins
|
||||
import collections.abc
|
||||
import google.protobuf.descriptor
|
||||
import google.protobuf.internal.containers
|
||||
import google.protobuf.internal.enum_type_wrapper
|
||||
import google.protobuf.message
|
||||
import meshtastic.channel_pb2
|
||||
import meshtastic.config_pb2
|
||||
import meshtastic.connection_status_pb2
|
||||
import meshtastic.mesh_pb2
|
||||
import meshtastic.module_config_pb2
|
||||
import sys
|
||||
import typing
|
||||
|
||||
if sys.version_info >= (3, 10):
|
||||
import typing as typing_extensions
|
||||
else:
|
||||
import typing_extensions
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
||||
|
||||
@typing_extensions.final
|
||||
class AdminMessage(google.protobuf.message.Message):
|
||||
"""
|
||||
This message is handled by the Admin module and is responsible for all settings/channel read/write operations.
|
||||
This message is used to do settings operations to both remote AND local nodes.
|
||||
(Prior to 1.2 these operations were done via special ToRadio operations)
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
class _ConfigType:
|
||||
ValueType = typing.NewType("ValueType", builtins.int)
|
||||
V: typing_extensions.TypeAlias = ValueType
|
||||
|
||||
class _ConfigTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[AdminMessage._ConfigType.ValueType], builtins.type):
|
||||
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
|
||||
DEVICE_CONFIG: AdminMessage._ConfigType.ValueType # 0
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
POSITION_CONFIG: AdminMessage._ConfigType.ValueType # 1
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
POWER_CONFIG: AdminMessage._ConfigType.ValueType # 2
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
NETWORK_CONFIG: AdminMessage._ConfigType.ValueType # 3
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
DISPLAY_CONFIG: AdminMessage._ConfigType.ValueType # 4
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
LORA_CONFIG: AdminMessage._ConfigType.ValueType # 5
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
BLUETOOTH_CONFIG: AdminMessage._ConfigType.ValueType # 6
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
|
||||
class ConfigType(_ConfigType, metaclass=_ConfigTypeEnumTypeWrapper):
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
|
||||
DEVICE_CONFIG: AdminMessage.ConfigType.ValueType # 0
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
POSITION_CONFIG: AdminMessage.ConfigType.ValueType # 1
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
POWER_CONFIG: AdminMessage.ConfigType.ValueType # 2
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
NETWORK_CONFIG: AdminMessage.ConfigType.ValueType # 3
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
DISPLAY_CONFIG: AdminMessage.ConfigType.ValueType # 4
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
LORA_CONFIG: AdminMessage.ConfigType.ValueType # 5
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
BLUETOOTH_CONFIG: AdminMessage.ConfigType.ValueType # 6
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
|
||||
class _ModuleConfigType:
|
||||
ValueType = typing.NewType("ValueType", builtins.int)
|
||||
V: typing_extensions.TypeAlias = ValueType
|
||||
|
||||
class _ModuleConfigTypeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[AdminMessage._ModuleConfigType.ValueType], builtins.type):
|
||||
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
|
||||
MQTT_CONFIG: AdminMessage._ModuleConfigType.ValueType # 0
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
SERIAL_CONFIG: AdminMessage._ModuleConfigType.ValueType # 1
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
EXTNOTIF_CONFIG: AdminMessage._ModuleConfigType.ValueType # 2
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
STOREFORWARD_CONFIG: AdminMessage._ModuleConfigType.ValueType # 3
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
RANGETEST_CONFIG: AdminMessage._ModuleConfigType.ValueType # 4
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
TELEMETRY_CONFIG: AdminMessage._ModuleConfigType.ValueType # 5
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
CANNEDMSG_CONFIG: AdminMessage._ModuleConfigType.ValueType # 6
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
AUDIO_CONFIG: AdminMessage._ModuleConfigType.ValueType # 7
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
REMOTEHARDWARE_CONFIG: AdminMessage._ModuleConfigType.ValueType # 8
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
NEIGHBORINFO_CONFIG: AdminMessage._ModuleConfigType.ValueType # 9
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
AMBIENTLIGHTING_CONFIG: AdminMessage._ModuleConfigType.ValueType # 10
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
DETECTIONSENSOR_CONFIG: AdminMessage._ModuleConfigType.ValueType # 11
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
PAXCOUNTER_CONFIG: AdminMessage._ModuleConfigType.ValueType # 12
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
|
||||
class ModuleConfigType(_ModuleConfigType, metaclass=_ModuleConfigTypeEnumTypeWrapper):
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
|
||||
MQTT_CONFIG: AdminMessage.ModuleConfigType.ValueType # 0
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
SERIAL_CONFIG: AdminMessage.ModuleConfigType.ValueType # 1
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
EXTNOTIF_CONFIG: AdminMessage.ModuleConfigType.ValueType # 2
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
STOREFORWARD_CONFIG: AdminMessage.ModuleConfigType.ValueType # 3
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
RANGETEST_CONFIG: AdminMessage.ModuleConfigType.ValueType # 4
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
TELEMETRY_CONFIG: AdminMessage.ModuleConfigType.ValueType # 5
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
CANNEDMSG_CONFIG: AdminMessage.ModuleConfigType.ValueType # 6
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
AUDIO_CONFIG: AdminMessage.ModuleConfigType.ValueType # 7
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
REMOTEHARDWARE_CONFIG: AdminMessage.ModuleConfigType.ValueType # 8
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
NEIGHBORINFO_CONFIG: AdminMessage.ModuleConfigType.ValueType # 9
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
AMBIENTLIGHTING_CONFIG: AdminMessage.ModuleConfigType.ValueType # 10
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
DETECTIONSENSOR_CONFIG: AdminMessage.ModuleConfigType.ValueType # 11
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
PAXCOUNTER_CONFIG: AdminMessage.ModuleConfigType.ValueType # 12
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
|
||||
GET_CHANNEL_REQUEST_FIELD_NUMBER: builtins.int
|
||||
GET_CHANNEL_RESPONSE_FIELD_NUMBER: builtins.int
|
||||
GET_OWNER_REQUEST_FIELD_NUMBER: builtins.int
|
||||
GET_OWNER_RESPONSE_FIELD_NUMBER: builtins.int
|
||||
GET_CONFIG_REQUEST_FIELD_NUMBER: builtins.int
|
||||
GET_CONFIG_RESPONSE_FIELD_NUMBER: builtins.int
|
||||
GET_MODULE_CONFIG_REQUEST_FIELD_NUMBER: builtins.int
|
||||
GET_MODULE_CONFIG_RESPONSE_FIELD_NUMBER: builtins.int
|
||||
GET_CANNED_MESSAGE_MODULE_MESSAGES_REQUEST_FIELD_NUMBER: builtins.int
|
||||
GET_CANNED_MESSAGE_MODULE_MESSAGES_RESPONSE_FIELD_NUMBER: builtins.int
|
||||
GET_DEVICE_METADATA_REQUEST_FIELD_NUMBER: builtins.int
|
||||
GET_DEVICE_METADATA_RESPONSE_FIELD_NUMBER: builtins.int
|
||||
GET_RINGTONE_REQUEST_FIELD_NUMBER: builtins.int
|
||||
GET_RINGTONE_RESPONSE_FIELD_NUMBER: builtins.int
|
||||
GET_DEVICE_CONNECTION_STATUS_REQUEST_FIELD_NUMBER: builtins.int
|
||||
GET_DEVICE_CONNECTION_STATUS_RESPONSE_FIELD_NUMBER: builtins.int
|
||||
SET_HAM_MODE_FIELD_NUMBER: builtins.int
|
||||
GET_NODE_REMOTE_HARDWARE_PINS_REQUEST_FIELD_NUMBER: builtins.int
|
||||
GET_NODE_REMOTE_HARDWARE_PINS_RESPONSE_FIELD_NUMBER: builtins.int
|
||||
ENTER_DFU_MODE_REQUEST_FIELD_NUMBER: builtins.int
|
||||
DELETE_FILE_REQUEST_FIELD_NUMBER: builtins.int
|
||||
SET_OWNER_FIELD_NUMBER: builtins.int
|
||||
SET_CHANNEL_FIELD_NUMBER: builtins.int
|
||||
SET_CONFIG_FIELD_NUMBER: builtins.int
|
||||
SET_MODULE_CONFIG_FIELD_NUMBER: builtins.int
|
||||
SET_CANNED_MESSAGE_MODULE_MESSAGES_FIELD_NUMBER: builtins.int
|
||||
SET_RINGTONE_MESSAGE_FIELD_NUMBER: builtins.int
|
||||
REMOVE_BY_NODENUM_FIELD_NUMBER: builtins.int
|
||||
SET_FAVORITE_NODE_FIELD_NUMBER: builtins.int
|
||||
REMOVE_FAVORITE_NODE_FIELD_NUMBER: builtins.int
|
||||
SET_FIXED_POSITION_FIELD_NUMBER: builtins.int
|
||||
REMOVE_FIXED_POSITION_FIELD_NUMBER: builtins.int
|
||||
BEGIN_EDIT_SETTINGS_FIELD_NUMBER: builtins.int
|
||||
COMMIT_EDIT_SETTINGS_FIELD_NUMBER: builtins.int
|
||||
REBOOT_OTA_SECONDS_FIELD_NUMBER: builtins.int
|
||||
EXIT_SIMULATOR_FIELD_NUMBER: builtins.int
|
||||
REBOOT_SECONDS_FIELD_NUMBER: builtins.int
|
||||
SHUTDOWN_SECONDS_FIELD_NUMBER: builtins.int
|
||||
FACTORY_RESET_FIELD_NUMBER: builtins.int
|
||||
NODEDB_RESET_FIELD_NUMBER: builtins.int
|
||||
get_channel_request: builtins.int
|
||||
"""
|
||||
Send the specified channel in the response to this message
|
||||
NOTE: This field is sent with the channel index + 1 (to ensure we never try to send 'zero' - which protobufs treats as not present)
|
||||
"""
|
||||
@property
|
||||
def get_channel_response(self) -> meshtastic.channel_pb2.Channel:
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
get_owner_request: builtins.bool
|
||||
"""
|
||||
Send the current owner data in the response to this message.
|
||||
"""
|
||||
@property
|
||||
def get_owner_response(self) -> meshtastic.mesh_pb2.User:
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
get_config_request: global___AdminMessage.ConfigType.ValueType
|
||||
"""
|
||||
Ask for the following config data to be sent
|
||||
"""
|
||||
@property
|
||||
def get_config_response(self) -> meshtastic.config_pb2.Config:
|
||||
"""
|
||||
Send the current Config in the response to this message.
|
||||
"""
|
||||
get_module_config_request: global___AdminMessage.ModuleConfigType.ValueType
|
||||
"""
|
||||
Ask for the following config data to be sent
|
||||
"""
|
||||
@property
|
||||
def get_module_config_response(self) -> meshtastic.module_config_pb2.ModuleConfig:
|
||||
"""
|
||||
Send the current Config in the response to this message.
|
||||
"""
|
||||
get_canned_message_module_messages_request: builtins.bool
|
||||
"""
|
||||
Get the Canned Message Module messages in the response to this message.
|
||||
"""
|
||||
get_canned_message_module_messages_response: builtins.str
|
||||
"""
|
||||
Get the Canned Message Module messages in the response to this message.
|
||||
"""
|
||||
get_device_metadata_request: builtins.bool
|
||||
"""
|
||||
Request the node to send device metadata (firmware, protobuf version, etc)
|
||||
"""
|
||||
@property
|
||||
def get_device_metadata_response(self) -> meshtastic.mesh_pb2.DeviceMetadata:
|
||||
"""
|
||||
Device metadata response
|
||||
"""
|
||||
get_ringtone_request: builtins.bool
|
||||
"""
|
||||
Get the Ringtone in the response to this message.
|
||||
"""
|
||||
get_ringtone_response: builtins.str
|
||||
"""
|
||||
Get the Ringtone in the response to this message.
|
||||
"""
|
||||
get_device_connection_status_request: builtins.bool
|
||||
"""
|
||||
Request the node to send it's connection status
|
||||
"""
|
||||
@property
|
||||
def get_device_connection_status_response(self) -> meshtastic.connection_status_pb2.DeviceConnectionStatus:
|
||||
"""
|
||||
Device connection status response
|
||||
"""
|
||||
@property
|
||||
def set_ham_mode(self) -> global___HamParameters:
|
||||
"""
|
||||
Setup a node for licensed amateur (ham) radio operation
|
||||
"""
|
||||
get_node_remote_hardware_pins_request: builtins.bool
|
||||
"""
|
||||
Get the mesh's nodes with their available gpio pins for RemoteHardware module use
|
||||
"""
|
||||
@property
|
||||
def get_node_remote_hardware_pins_response(self) -> global___NodeRemoteHardwarePinsResponse:
|
||||
"""
|
||||
Respond with the mesh's nodes with their available gpio pins for RemoteHardware module use
|
||||
"""
|
||||
enter_dfu_mode_request: builtins.bool
|
||||
"""
|
||||
Enter (UF2) DFU mode
|
||||
Only implemented on NRF52 currently
|
||||
"""
|
||||
delete_file_request: builtins.str
|
||||
"""
|
||||
Delete the file by the specified path from the device
|
||||
"""
|
||||
@property
|
||||
def set_owner(self) -> meshtastic.mesh_pb2.User:
|
||||
"""
|
||||
Set the owner for this node
|
||||
"""
|
||||
@property
|
||||
def set_channel(self) -> meshtastic.channel_pb2.Channel:
|
||||
"""
|
||||
Set channels (using the new API).
|
||||
A special channel is the "primary channel".
|
||||
The other records are secondary channels.
|
||||
Note: only one channel can be marked as primary.
|
||||
If the client sets a particular channel to be primary, the previous channel will be set to SECONDARY automatically.
|
||||
"""
|
||||
@property
|
||||
def set_config(self) -> meshtastic.config_pb2.Config:
|
||||
"""
|
||||
Set the current Config
|
||||
"""
|
||||
@property
|
||||
def set_module_config(self) -> meshtastic.module_config_pb2.ModuleConfig:
|
||||
"""
|
||||
Set the current Config
|
||||
"""
|
||||
set_canned_message_module_messages: builtins.str
|
||||
"""
|
||||
Set the Canned Message Module messages text.
|
||||
"""
|
||||
set_ringtone_message: builtins.str
|
||||
"""
|
||||
Set the ringtone for ExternalNotification.
|
||||
"""
|
||||
remove_by_nodenum: builtins.int
|
||||
"""
|
||||
Remove the node by the specified node-num from the NodeDB on the device
|
||||
"""
|
||||
set_favorite_node: builtins.int
|
||||
"""
|
||||
Set specified node-num to be favorited on the NodeDB on the device
|
||||
"""
|
||||
remove_favorite_node: builtins.int
|
||||
"""
|
||||
Set specified node-num to be un-favorited on the NodeDB on the device
|
||||
"""
|
||||
@property
|
||||
def set_fixed_position(self) -> meshtastic.mesh_pb2.Position:
|
||||
"""
|
||||
Set fixed position data on the node and then set the position.fixed_position = true
|
||||
"""
|
||||
remove_fixed_position: builtins.bool
|
||||
"""
|
||||
Clear fixed position coordinates and then set position.fixed_position = false
|
||||
"""
|
||||
begin_edit_settings: builtins.bool
|
||||
"""
|
||||
Begins an edit transaction for config, module config, owner, and channel settings changes
|
||||
This will delay the standard *implicit* save to the file system and subsequent reboot behavior until committed (commit_edit_settings)
|
||||
"""
|
||||
commit_edit_settings: builtins.bool
|
||||
"""
|
||||
Commits an open transaction for any edits made to config, module config, owner, and channel settings
|
||||
"""
|
||||
reboot_ota_seconds: builtins.int
|
||||
"""
|
||||
Tell the node to reboot into the OTA Firmware in this many seconds (or <0 to cancel reboot)
|
||||
Only Implemented for ESP32 Devices. This needs to be issued to send a new main firmware via bluetooth.
|
||||
"""
|
||||
exit_simulator: builtins.bool
|
||||
"""
|
||||
This message is only supported for the simulator Portduino build.
|
||||
If received the simulator will exit successfully.
|
||||
"""
|
||||
reboot_seconds: builtins.int
|
||||
"""
|
||||
Tell the node to reboot in this many seconds (or <0 to cancel reboot)
|
||||
"""
|
||||
shutdown_seconds: builtins.int
|
||||
"""
|
||||
Tell the node to shutdown in this many seconds (or <0 to cancel shutdown)
|
||||
"""
|
||||
factory_reset: builtins.int
|
||||
"""
|
||||
Tell the node to factory reset, all device settings will be returned to factory defaults.
|
||||
"""
|
||||
nodedb_reset: builtins.int
|
||||
"""
|
||||
Tell the node to reset the nodedb.
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
get_channel_request: builtins.int = ...,
|
||||
get_channel_response: meshtastic.channel_pb2.Channel | None = ...,
|
||||
get_owner_request: builtins.bool = ...,
|
||||
get_owner_response: meshtastic.mesh_pb2.User | None = ...,
|
||||
get_config_request: global___AdminMessage.ConfigType.ValueType = ...,
|
||||
get_config_response: meshtastic.config_pb2.Config | None = ...,
|
||||
get_module_config_request: global___AdminMessage.ModuleConfigType.ValueType = ...,
|
||||
get_module_config_response: meshtastic.module_config_pb2.ModuleConfig | None = ...,
|
||||
get_canned_message_module_messages_request: builtins.bool = ...,
|
||||
get_canned_message_module_messages_response: builtins.str = ...,
|
||||
get_device_metadata_request: builtins.bool = ...,
|
||||
get_device_metadata_response: meshtastic.mesh_pb2.DeviceMetadata | None = ...,
|
||||
get_ringtone_request: builtins.bool = ...,
|
||||
get_ringtone_response: builtins.str = ...,
|
||||
get_device_connection_status_request: builtins.bool = ...,
|
||||
get_device_connection_status_response: meshtastic.connection_status_pb2.DeviceConnectionStatus | None = ...,
|
||||
set_ham_mode: global___HamParameters | None = ...,
|
||||
get_node_remote_hardware_pins_request: builtins.bool = ...,
|
||||
get_node_remote_hardware_pins_response: global___NodeRemoteHardwarePinsResponse | None = ...,
|
||||
enter_dfu_mode_request: builtins.bool = ...,
|
||||
delete_file_request: builtins.str = ...,
|
||||
set_owner: meshtastic.mesh_pb2.User | None = ...,
|
||||
set_channel: meshtastic.channel_pb2.Channel | None = ...,
|
||||
set_config: meshtastic.config_pb2.Config | None = ...,
|
||||
set_module_config: meshtastic.module_config_pb2.ModuleConfig | None = ...,
|
||||
set_canned_message_module_messages: builtins.str = ...,
|
||||
set_ringtone_message: builtins.str = ...,
|
||||
remove_by_nodenum: builtins.int = ...,
|
||||
set_favorite_node: builtins.int = ...,
|
||||
remove_favorite_node: builtins.int = ...,
|
||||
set_fixed_position: meshtastic.mesh_pb2.Position | None = ...,
|
||||
remove_fixed_position: builtins.bool = ...,
|
||||
begin_edit_settings: builtins.bool = ...,
|
||||
commit_edit_settings: builtins.bool = ...,
|
||||
reboot_ota_seconds: builtins.int = ...,
|
||||
exit_simulator: builtins.bool = ...,
|
||||
reboot_seconds: builtins.int = ...,
|
||||
shutdown_seconds: builtins.int = ...,
|
||||
factory_reset: builtins.int = ...,
|
||||
nodedb_reset: builtins.int = ...,
|
||||
) -> None: ...
|
||||
def HasField(self, field_name: typing_extensions.Literal["begin_edit_settings", b"begin_edit_settings", "commit_edit_settings", b"commit_edit_settings", "delete_file_request", b"delete_file_request", "enter_dfu_mode_request", b"enter_dfu_mode_request", "exit_simulator", b"exit_simulator", "factory_reset", b"factory_reset", "get_canned_message_module_messages_request", b"get_canned_message_module_messages_request", "get_canned_message_module_messages_response", b"get_canned_message_module_messages_response", "get_channel_request", b"get_channel_request", "get_channel_response", b"get_channel_response", "get_config_request", b"get_config_request", "get_config_response", b"get_config_response", "get_device_connection_status_request", b"get_device_connection_status_request", "get_device_connection_status_response", b"get_device_connection_status_response", "get_device_metadata_request", b"get_device_metadata_request", "get_device_metadata_response", b"get_device_metadata_response", "get_module_config_request", b"get_module_config_request", "get_module_config_response", b"get_module_config_response", "get_node_remote_hardware_pins_request", b"get_node_remote_hardware_pins_request", "get_node_remote_hardware_pins_response", b"get_node_remote_hardware_pins_response", "get_owner_request", b"get_owner_request", "get_owner_response", b"get_owner_response", "get_ringtone_request", b"get_ringtone_request", "get_ringtone_response", b"get_ringtone_response", "nodedb_reset", b"nodedb_reset", "payload_variant", b"payload_variant", "reboot_ota_seconds", b"reboot_ota_seconds", "reboot_seconds", b"reboot_seconds", "remove_by_nodenum", b"remove_by_nodenum", "remove_favorite_node", b"remove_favorite_node", "remove_fixed_position", b"remove_fixed_position", "set_canned_message_module_messages", b"set_canned_message_module_messages", "set_channel", b"set_channel", "set_config", b"set_config", "set_favorite_node", b"set_favorite_node", "set_fixed_position", b"set_fixed_position", "set_ham_mode", b"set_ham_mode", "set_module_config", b"set_module_config", "set_owner", b"set_owner", "set_ringtone_message", b"set_ringtone_message", "shutdown_seconds", b"shutdown_seconds"]) -> builtins.bool: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["begin_edit_settings", b"begin_edit_settings", "commit_edit_settings", b"commit_edit_settings", "delete_file_request", b"delete_file_request", "enter_dfu_mode_request", b"enter_dfu_mode_request", "exit_simulator", b"exit_simulator", "factory_reset", b"factory_reset", "get_canned_message_module_messages_request", b"get_canned_message_module_messages_request", "get_canned_message_module_messages_response", b"get_canned_message_module_messages_response", "get_channel_request", b"get_channel_request", "get_channel_response", b"get_channel_response", "get_config_request", b"get_config_request", "get_config_response", b"get_config_response", "get_device_connection_status_request", b"get_device_connection_status_request", "get_device_connection_status_response", b"get_device_connection_status_response", "get_device_metadata_request", b"get_device_metadata_request", "get_device_metadata_response", b"get_device_metadata_response", "get_module_config_request", b"get_module_config_request", "get_module_config_response", b"get_module_config_response", "get_node_remote_hardware_pins_request", b"get_node_remote_hardware_pins_request", "get_node_remote_hardware_pins_response", b"get_node_remote_hardware_pins_response", "get_owner_request", b"get_owner_request", "get_owner_response", b"get_owner_response", "get_ringtone_request", b"get_ringtone_request", "get_ringtone_response", b"get_ringtone_response", "nodedb_reset", b"nodedb_reset", "payload_variant", b"payload_variant", "reboot_ota_seconds", b"reboot_ota_seconds", "reboot_seconds", b"reboot_seconds", "remove_by_nodenum", b"remove_by_nodenum", "remove_favorite_node", b"remove_favorite_node", "remove_fixed_position", b"remove_fixed_position", "set_canned_message_module_messages", b"set_canned_message_module_messages", "set_channel", b"set_channel", "set_config", b"set_config", "set_favorite_node", b"set_favorite_node", "set_fixed_position", b"set_fixed_position", "set_ham_mode", b"set_ham_mode", "set_module_config", b"set_module_config", "set_owner", b"set_owner", "set_ringtone_message", b"set_ringtone_message", "shutdown_seconds", b"shutdown_seconds"]) -> None: ...
|
||||
def WhichOneof(self, oneof_group: typing_extensions.Literal["payload_variant", b"payload_variant"]) -> typing_extensions.Literal["get_channel_request", "get_channel_response", "get_owner_request", "get_owner_response", "get_config_request", "get_config_response", "get_module_config_request", "get_module_config_response", "get_canned_message_module_messages_request", "get_canned_message_module_messages_response", "get_device_metadata_request", "get_device_metadata_response", "get_ringtone_request", "get_ringtone_response", "get_device_connection_status_request", "get_device_connection_status_response", "set_ham_mode", "get_node_remote_hardware_pins_request", "get_node_remote_hardware_pins_response", "enter_dfu_mode_request", "delete_file_request", "set_owner", "set_channel", "set_config", "set_module_config", "set_canned_message_module_messages", "set_ringtone_message", "remove_by_nodenum", "set_favorite_node", "remove_favorite_node", "set_fixed_position", "remove_fixed_position", "begin_edit_settings", "commit_edit_settings", "reboot_ota_seconds", "exit_simulator", "reboot_seconds", "shutdown_seconds", "factory_reset", "nodedb_reset"] | None: ...
|
||||
|
||||
global___AdminMessage = AdminMessage
|
||||
|
||||
@typing_extensions.final
|
||||
class HamParameters(google.protobuf.message.Message):
|
||||
"""
|
||||
Parameters for setting up Meshtastic for ameteur radio usage
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
CALL_SIGN_FIELD_NUMBER: builtins.int
|
||||
TX_POWER_FIELD_NUMBER: builtins.int
|
||||
FREQUENCY_FIELD_NUMBER: builtins.int
|
||||
SHORT_NAME_FIELD_NUMBER: builtins.int
|
||||
call_sign: builtins.str
|
||||
"""
|
||||
Amateur radio call sign, eg. KD2ABC
|
||||
"""
|
||||
tx_power: builtins.int
|
||||
"""
|
||||
Transmit power in dBm at the LoRA transceiver, not including any amplification
|
||||
"""
|
||||
frequency: builtins.float
|
||||
"""
|
||||
The selected frequency of LoRA operation
|
||||
Please respect your local laws, regulations, and band plans.
|
||||
Ensure your radio is capable of operating of the selected frequency before setting this.
|
||||
"""
|
||||
short_name: builtins.str
|
||||
"""
|
||||
Optional short name of user
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
call_sign: builtins.str = ...,
|
||||
tx_power: builtins.int = ...,
|
||||
frequency: builtins.float = ...,
|
||||
short_name: builtins.str = ...,
|
||||
) -> None: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["call_sign", b"call_sign", "frequency", b"frequency", "short_name", b"short_name", "tx_power", b"tx_power"]) -> None: ...
|
||||
|
||||
global___HamParameters = HamParameters
|
||||
|
||||
@typing_extensions.final
|
||||
class NodeRemoteHardwarePinsResponse(google.protobuf.message.Message):
|
||||
"""
|
||||
Response envelope for node_remote_hardware_pins
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
NODE_REMOTE_HARDWARE_PINS_FIELD_NUMBER: builtins.int
|
||||
@property
|
||||
def node_remote_hardware_pins(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[meshtastic.mesh_pb2.NodeRemoteHardwarePin]:
|
||||
"""
|
||||
Nodes and their respective remote hardware GPIO pins
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
node_remote_hardware_pins: collections.abc.Iterable[meshtastic.mesh_pb2.NodeRemoteHardwarePin] | None = ...,
|
||||
) -> None: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["node_remote_hardware_pins", b"node_remote_hardware_pins"]) -> None: ...
|
||||
|
||||
global___NodeRemoteHardwarePinsResponse = NodeRemoteHardwarePinsResponse
|
||||
@@ -1,72 +1,28 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: apponly.proto
|
||||
|
||||
# source: meshtastic/apponly.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from google.protobuf import reflection as _reflection
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from . import channel_pb2 as channel__pb2
|
||||
from meshtastic import channel_pb2 as meshtastic_dot_channel__pb2
|
||||
from meshtastic import config_pb2 as meshtastic_dot_config__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
||||
name='apponly.proto',
|
||||
package='',
|
||||
syntax='proto3',
|
||||
serialized_options=b'\n\023com.geeksville.meshB\rAppOnlyProtosH\003Z!github.com/meshtastic/gomeshproto',
|
||||
serialized_pb=b'\n\rapponly.proto\x1a\rchannel.proto\"0\n\nChannelSet\x12\"\n\x08settings\x18\x01 \x03(\x0b\x32\x10.ChannelSettingsBI\n\x13\x63om.geeksville.meshB\rAppOnlyProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3'
|
||||
,
|
||||
dependencies=[channel__pb2.DESCRIPTOR,])
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18meshtastic/apponly.proto\x12\nmeshtastic\x1a\x18meshtastic/channel.proto\x1a\x17meshtastic/config.proto\"o\n\nChannelSet\x12-\n\x08settings\x18\x01 \x03(\x0b\x32\x1b.meshtastic.ChannelSettings\x12\x32\n\x0blora_config\x18\x02 \x01(\x0b\x32\x1d.meshtastic.Config.LoRaConfigBb\n\x13\x63om.geeksville.meshB\rAppOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.apponly_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
|
||||
|
||||
_CHANNELSET = _descriptor.Descriptor(
|
||||
name='ChannelSet',
|
||||
full_name='ChannelSet',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='settings', full_name='ChannelSet.settings', index=0,
|
||||
number=1, type=11, cpp_type=10, label=3,
|
||||
has_default_value=False, default_value=[],
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto3',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=32,
|
||||
serialized_end=80,
|
||||
)
|
||||
|
||||
_CHANNELSET.fields_by_name['settings'].message_type = channel__pb2._CHANNELSETTINGS
|
||||
DESCRIPTOR.message_types_by_name['ChannelSet'] = _CHANNELSET
|
||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
||||
|
||||
ChannelSet = _reflection.GeneratedProtocolMessageType('ChannelSet', (_message.Message,), {
|
||||
'DESCRIPTOR' : _CHANNELSET,
|
||||
'__module__' : 'apponly_pb2'
|
||||
# @@protoc_insertion_point(class_scope:ChannelSet)
|
||||
})
|
||||
_sym_db.RegisterMessage(ChannelSet)
|
||||
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\rAppOnlyProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_CHANNELSET._serialized_start=91
|
||||
_CHANNELSET._serialized_end=202
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
|
||||
54
meshtastic/apponly_pb2.pyi
Normal file
54
meshtastic/apponly_pb2.pyi
Normal file
@@ -0,0 +1,54 @@
|
||||
"""
|
||||
@generated by mypy-protobuf. Do not edit manually!
|
||||
isort:skip_file
|
||||
"""
|
||||
import builtins
|
||||
import collections.abc
|
||||
import google.protobuf.descriptor
|
||||
import google.protobuf.internal.containers
|
||||
import google.protobuf.message
|
||||
import meshtastic.channel_pb2
|
||||
import meshtastic.config_pb2
|
||||
import sys
|
||||
|
||||
if sys.version_info >= (3, 8):
|
||||
import typing as typing_extensions
|
||||
else:
|
||||
import typing_extensions
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
||||
|
||||
@typing_extensions.final
|
||||
class ChannelSet(google.protobuf.message.Message):
|
||||
"""
|
||||
This is the most compact possible representation for a set of channels.
|
||||
It includes only one PRIMARY channel (which must be first) and
|
||||
any SECONDARY channels.
|
||||
No DISABLED channels are included.
|
||||
This abstraction is used only on the the 'app side' of the world (ie python, javascript and android etc) to show a group of Channels as a (long) URL
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
SETTINGS_FIELD_NUMBER: builtins.int
|
||||
LORA_CONFIG_FIELD_NUMBER: builtins.int
|
||||
@property
|
||||
def settings(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[meshtastic.channel_pb2.ChannelSettings]:
|
||||
"""
|
||||
Channel list with settings
|
||||
"""
|
||||
@property
|
||||
def lora_config(self) -> meshtastic.config_pb2.Config.LoRaConfig:
|
||||
"""
|
||||
LoRa config
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
settings: collections.abc.Iterable[meshtastic.channel_pb2.ChannelSettings] | None = ...,
|
||||
lora_config: meshtastic.config_pb2.Config.LoRaConfig | None = ...,
|
||||
) -> None: ...
|
||||
def HasField(self, field_name: typing_extensions.Literal["lora_config", b"lora_config"]) -> builtins.bool: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["lora_config", b"lora_config", "settings", b"settings"]) -> None: ...
|
||||
|
||||
global___ChannelSet = ChannelSet
|
||||
40
meshtastic/atak_pb2.py
Normal file
40
meshtastic/atak_pb2.py
Normal file
@@ -0,0 +1,40 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/atak.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15meshtastic/atak.proto\x12\nmeshtastic\"\xe6\x01\n\tTAKPacket\x12\x15\n\ris_compressed\x18\x01 \x01(\x08\x12$\n\x07\x63ontact\x18\x02 \x01(\x0b\x32\x13.meshtastic.Contact\x12 \n\x05group\x18\x03 \x01(\x0b\x32\x11.meshtastic.Group\x12\"\n\x06status\x18\x04 \x01(\x0b\x32\x12.meshtastic.Status\x12\x1e\n\x03pli\x18\x05 \x01(\x0b\x32\x0f.meshtastic.PLIH\x00\x12#\n\x04\x63hat\x18\x06 \x01(\x0b\x32\x13.meshtastic.GeoChatH\x00\x42\x11\n\x0fpayload_variant\"2\n\x07GeoChat\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x0f\n\x02to\x18\x02 \x01(\tH\x00\x88\x01\x01\x42\x05\n\x03_to\"M\n\x05Group\x12$\n\x04role\x18\x01 \x01(\x0e\x32\x16.meshtastic.MemberRole\x12\x1e\n\x04team\x18\x02 \x01(\x0e\x32\x10.meshtastic.Team\"\x19\n\x06Status\x12\x0f\n\x07\x62\x61ttery\x18\x01 \x01(\r\"4\n\x07\x43ontact\x12\x10\n\x08\x63\x61llsign\x18\x01 \x01(\t\x12\x17\n\x0f\x64\x65vice_callsign\x18\x02 \x01(\t\"_\n\x03PLI\x12\x12\n\nlatitude_i\x18\x01 \x01(\x0f\x12\x13\n\x0blongitude_i\x18\x02 \x01(\x0f\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x05\x12\r\n\x05speed\x18\x04 \x01(\r\x12\x0e\n\x06\x63ourse\x18\x05 \x01(\r*\xc0\x01\n\x04Team\x12\x14\n\x10Unspecifed_Color\x10\x00\x12\t\n\x05White\x10\x01\x12\n\n\x06Yellow\x10\x02\x12\n\n\x06Orange\x10\x03\x12\x0b\n\x07Magenta\x10\x04\x12\x07\n\x03Red\x10\x05\x12\n\n\x06Maroon\x10\x06\x12\n\n\x06Purple\x10\x07\x12\r\n\tDark_Blue\x10\x08\x12\x08\n\x04\x42lue\x10\t\x12\x08\n\x04\x43yan\x10\n\x12\x08\n\x04Teal\x10\x0b\x12\t\n\x05Green\x10\x0c\x12\x0e\n\nDark_Green\x10\r\x12\t\n\x05\x42rown\x10\x0e*\x7f\n\nMemberRole\x12\x0e\n\nUnspecifed\x10\x00\x12\x0e\n\nTeamMember\x10\x01\x12\x0c\n\x08TeamLead\x10\x02\x12\x06\n\x02HQ\x10\x03\x12\n\n\x06Sniper\x10\x04\x12\t\n\x05Medic\x10\x05\x12\x13\n\x0f\x46orwardObserver\x10\x06\x12\x07\n\x03RTO\x10\x07\x12\x06\n\x02K9\x10\x08\x42_\n\x13\x63om.geeksville.meshB\nATAKProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.atak_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\nATAKProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_TEAM._serialized_start=580
|
||||
_TEAM._serialized_end=772
|
||||
_MEMBERROLE._serialized_start=774
|
||||
_MEMBERROLE._serialized_end=901
|
||||
_TAKPACKET._serialized_start=38
|
||||
_TAKPACKET._serialized_end=268
|
||||
_GEOCHAT._serialized_start=270
|
||||
_GEOCHAT._serialized_end=320
|
||||
_GROUP._serialized_start=322
|
||||
_GROUP._serialized_end=399
|
||||
_STATUS._serialized_start=401
|
||||
_STATUS._serialized_end=426
|
||||
_CONTACT._serialized_start=428
|
||||
_CONTACT._serialized_end=480
|
||||
_PLI._serialized_start=482
|
||||
_PLI._serialized_end=577
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
455
meshtastic/atak_pb2.pyi
Normal file
455
meshtastic/atak_pb2.pyi
Normal file
@@ -0,0 +1,455 @@
|
||||
"""
|
||||
@generated by mypy-protobuf. Do not edit manually!
|
||||
isort:skip_file
|
||||
"""
|
||||
import builtins
|
||||
import google.protobuf.descriptor
|
||||
import google.protobuf.internal.enum_type_wrapper
|
||||
import google.protobuf.message
|
||||
import sys
|
||||
import typing
|
||||
|
||||
if sys.version_info >= (3, 10):
|
||||
import typing as typing_extensions
|
||||
else:
|
||||
import typing_extensions
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
||||
|
||||
class _Team:
|
||||
ValueType = typing.NewType("ValueType", builtins.int)
|
||||
V: typing_extensions.TypeAlias = ValueType
|
||||
|
||||
class _TeamEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_Team.ValueType], builtins.type):
|
||||
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
|
||||
Unspecifed_Color: _Team.ValueType # 0
|
||||
"""
|
||||
Unspecifed
|
||||
"""
|
||||
White: _Team.ValueType # 1
|
||||
"""
|
||||
White
|
||||
"""
|
||||
Yellow: _Team.ValueType # 2
|
||||
"""
|
||||
Yellow
|
||||
"""
|
||||
Orange: _Team.ValueType # 3
|
||||
"""
|
||||
Orange
|
||||
"""
|
||||
Magenta: _Team.ValueType # 4
|
||||
"""
|
||||
Magenta
|
||||
"""
|
||||
Red: _Team.ValueType # 5
|
||||
"""
|
||||
Red
|
||||
"""
|
||||
Maroon: _Team.ValueType # 6
|
||||
"""
|
||||
Maroon
|
||||
"""
|
||||
Purple: _Team.ValueType # 7
|
||||
"""
|
||||
Purple
|
||||
"""
|
||||
Dark_Blue: _Team.ValueType # 8
|
||||
"""
|
||||
Dark Blue
|
||||
"""
|
||||
Blue: _Team.ValueType # 9
|
||||
"""
|
||||
Blue
|
||||
"""
|
||||
Cyan: _Team.ValueType # 10
|
||||
"""
|
||||
Cyan
|
||||
"""
|
||||
Teal: _Team.ValueType # 11
|
||||
"""
|
||||
Teal
|
||||
"""
|
||||
Green: _Team.ValueType # 12
|
||||
"""
|
||||
Green
|
||||
"""
|
||||
Dark_Green: _Team.ValueType # 13
|
||||
"""
|
||||
Dark Green
|
||||
"""
|
||||
Brown: _Team.ValueType # 14
|
||||
"""
|
||||
Brown
|
||||
"""
|
||||
|
||||
class Team(_Team, metaclass=_TeamEnumTypeWrapper): ...
|
||||
|
||||
Unspecifed_Color: Team.ValueType # 0
|
||||
"""
|
||||
Unspecifed
|
||||
"""
|
||||
White: Team.ValueType # 1
|
||||
"""
|
||||
White
|
||||
"""
|
||||
Yellow: Team.ValueType # 2
|
||||
"""
|
||||
Yellow
|
||||
"""
|
||||
Orange: Team.ValueType # 3
|
||||
"""
|
||||
Orange
|
||||
"""
|
||||
Magenta: Team.ValueType # 4
|
||||
"""
|
||||
Magenta
|
||||
"""
|
||||
Red: Team.ValueType # 5
|
||||
"""
|
||||
Red
|
||||
"""
|
||||
Maroon: Team.ValueType # 6
|
||||
"""
|
||||
Maroon
|
||||
"""
|
||||
Purple: Team.ValueType # 7
|
||||
"""
|
||||
Purple
|
||||
"""
|
||||
Dark_Blue: Team.ValueType # 8
|
||||
"""
|
||||
Dark Blue
|
||||
"""
|
||||
Blue: Team.ValueType # 9
|
||||
"""
|
||||
Blue
|
||||
"""
|
||||
Cyan: Team.ValueType # 10
|
||||
"""
|
||||
Cyan
|
||||
"""
|
||||
Teal: Team.ValueType # 11
|
||||
"""
|
||||
Teal
|
||||
"""
|
||||
Green: Team.ValueType # 12
|
||||
"""
|
||||
Green
|
||||
"""
|
||||
Dark_Green: Team.ValueType # 13
|
||||
"""
|
||||
Dark Green
|
||||
"""
|
||||
Brown: Team.ValueType # 14
|
||||
"""
|
||||
Brown
|
||||
"""
|
||||
global___Team = Team
|
||||
|
||||
class _MemberRole:
|
||||
ValueType = typing.NewType("ValueType", builtins.int)
|
||||
V: typing_extensions.TypeAlias = ValueType
|
||||
|
||||
class _MemberRoleEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_MemberRole.ValueType], builtins.type):
|
||||
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
|
||||
Unspecifed: _MemberRole.ValueType # 0
|
||||
"""
|
||||
Unspecifed
|
||||
"""
|
||||
TeamMember: _MemberRole.ValueType # 1
|
||||
"""
|
||||
Team Member
|
||||
"""
|
||||
TeamLead: _MemberRole.ValueType # 2
|
||||
"""
|
||||
Team Lead
|
||||
"""
|
||||
HQ: _MemberRole.ValueType # 3
|
||||
"""
|
||||
Headquarters
|
||||
"""
|
||||
Sniper: _MemberRole.ValueType # 4
|
||||
"""
|
||||
Airsoft enthusiast
|
||||
"""
|
||||
Medic: _MemberRole.ValueType # 5
|
||||
"""
|
||||
Medic
|
||||
"""
|
||||
ForwardObserver: _MemberRole.ValueType # 6
|
||||
"""
|
||||
ForwardObserver
|
||||
"""
|
||||
RTO: _MemberRole.ValueType # 7
|
||||
"""
|
||||
Radio Telephone Operator
|
||||
"""
|
||||
K9: _MemberRole.ValueType # 8
|
||||
"""
|
||||
Doggo
|
||||
"""
|
||||
|
||||
class MemberRole(_MemberRole, metaclass=_MemberRoleEnumTypeWrapper):
|
||||
"""
|
||||
Role of the group member
|
||||
"""
|
||||
|
||||
Unspecifed: MemberRole.ValueType # 0
|
||||
"""
|
||||
Unspecifed
|
||||
"""
|
||||
TeamMember: MemberRole.ValueType # 1
|
||||
"""
|
||||
Team Member
|
||||
"""
|
||||
TeamLead: MemberRole.ValueType # 2
|
||||
"""
|
||||
Team Lead
|
||||
"""
|
||||
HQ: MemberRole.ValueType # 3
|
||||
"""
|
||||
Headquarters
|
||||
"""
|
||||
Sniper: MemberRole.ValueType # 4
|
||||
"""
|
||||
Airsoft enthusiast
|
||||
"""
|
||||
Medic: MemberRole.ValueType # 5
|
||||
"""
|
||||
Medic
|
||||
"""
|
||||
ForwardObserver: MemberRole.ValueType # 6
|
||||
"""
|
||||
ForwardObserver
|
||||
"""
|
||||
RTO: MemberRole.ValueType # 7
|
||||
"""
|
||||
Radio Telephone Operator
|
||||
"""
|
||||
K9: MemberRole.ValueType # 8
|
||||
"""
|
||||
Doggo
|
||||
"""
|
||||
global___MemberRole = MemberRole
|
||||
|
||||
@typing_extensions.final
|
||||
class TAKPacket(google.protobuf.message.Message):
|
||||
"""
|
||||
Packets for the official ATAK Plugin
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
IS_COMPRESSED_FIELD_NUMBER: builtins.int
|
||||
CONTACT_FIELD_NUMBER: builtins.int
|
||||
GROUP_FIELD_NUMBER: builtins.int
|
||||
STATUS_FIELD_NUMBER: builtins.int
|
||||
PLI_FIELD_NUMBER: builtins.int
|
||||
CHAT_FIELD_NUMBER: builtins.int
|
||||
is_compressed: builtins.bool
|
||||
"""
|
||||
Are the payloads strings compressed for LoRA transport?
|
||||
"""
|
||||
@property
|
||||
def contact(self) -> global___Contact:
|
||||
"""
|
||||
The contact / callsign for ATAK user
|
||||
"""
|
||||
@property
|
||||
def group(self) -> global___Group:
|
||||
"""
|
||||
The group for ATAK user
|
||||
"""
|
||||
@property
|
||||
def status(self) -> global___Status:
|
||||
"""
|
||||
The status of the ATAK EUD
|
||||
"""
|
||||
@property
|
||||
def pli(self) -> global___PLI:
|
||||
"""
|
||||
TAK position report
|
||||
"""
|
||||
@property
|
||||
def chat(self) -> global___GeoChat:
|
||||
"""
|
||||
ATAK GeoChat message
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
is_compressed: builtins.bool = ...,
|
||||
contact: global___Contact | None = ...,
|
||||
group: global___Group | None = ...,
|
||||
status: global___Status | None = ...,
|
||||
pli: global___PLI | None = ...,
|
||||
chat: global___GeoChat | None = ...,
|
||||
) -> None: ...
|
||||
def HasField(self, field_name: typing_extensions.Literal["chat", b"chat", "contact", b"contact", "group", b"group", "payload_variant", b"payload_variant", "pli", b"pli", "status", b"status"]) -> builtins.bool: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["chat", b"chat", "contact", b"contact", "group", b"group", "is_compressed", b"is_compressed", "payload_variant", b"payload_variant", "pli", b"pli", "status", b"status"]) -> None: ...
|
||||
def WhichOneof(self, oneof_group: typing_extensions.Literal["payload_variant", b"payload_variant"]) -> typing_extensions.Literal["pli", "chat"] | None: ...
|
||||
|
||||
global___TAKPacket = TAKPacket
|
||||
|
||||
@typing_extensions.final
|
||||
class GeoChat(google.protobuf.message.Message):
|
||||
"""
|
||||
ATAK GeoChat message
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
MESSAGE_FIELD_NUMBER: builtins.int
|
||||
TO_FIELD_NUMBER: builtins.int
|
||||
message: builtins.str
|
||||
"""
|
||||
The text message
|
||||
"""
|
||||
to: builtins.str
|
||||
"""
|
||||
Uid recipient of the message
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
message: builtins.str = ...,
|
||||
to: builtins.str | None = ...,
|
||||
) -> None: ...
|
||||
def HasField(self, field_name: typing_extensions.Literal["_to", b"_to", "to", b"to"]) -> builtins.bool: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["_to", b"_to", "message", b"message", "to", b"to"]) -> None: ...
|
||||
def WhichOneof(self, oneof_group: typing_extensions.Literal["_to", b"_to"]) -> typing_extensions.Literal["to"] | None: ...
|
||||
|
||||
global___GeoChat = GeoChat
|
||||
|
||||
@typing_extensions.final
|
||||
class Group(google.protobuf.message.Message):
|
||||
"""
|
||||
ATAK Group
|
||||
<__group role='Team Member' name='Cyan'/>
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
ROLE_FIELD_NUMBER: builtins.int
|
||||
TEAM_FIELD_NUMBER: builtins.int
|
||||
role: global___MemberRole.ValueType
|
||||
"""
|
||||
Role of the group member
|
||||
"""
|
||||
team: global___Team.ValueType
|
||||
"""
|
||||
Team (color)
|
||||
Default Cyan
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
role: global___MemberRole.ValueType = ...,
|
||||
team: global___Team.ValueType = ...,
|
||||
) -> None: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["role", b"role", "team", b"team"]) -> None: ...
|
||||
|
||||
global___Group = Group
|
||||
|
||||
@typing_extensions.final
|
||||
class Status(google.protobuf.message.Message):
|
||||
"""
|
||||
ATAK EUD Status
|
||||
<status battery='100' />
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
BATTERY_FIELD_NUMBER: builtins.int
|
||||
battery: builtins.int
|
||||
"""
|
||||
Battery level
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
battery: builtins.int = ...,
|
||||
) -> None: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["battery", b"battery"]) -> None: ...
|
||||
|
||||
global___Status = Status
|
||||
|
||||
@typing_extensions.final
|
||||
class Contact(google.protobuf.message.Message):
|
||||
"""
|
||||
ATAK Contact
|
||||
<contact endpoint='0.0.0.0:4242:tcp' phone='+12345678' callsign='FALKE'/>
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
CALLSIGN_FIELD_NUMBER: builtins.int
|
||||
DEVICE_CALLSIGN_FIELD_NUMBER: builtins.int
|
||||
callsign: builtins.str
|
||||
"""
|
||||
Callsign
|
||||
"""
|
||||
device_callsign: builtins.str
|
||||
"""
|
||||
Device callsign
|
||||
|
||||
IP address of endpoint in integer form (0.0.0.0 default)
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
callsign: builtins.str = ...,
|
||||
device_callsign: builtins.str = ...,
|
||||
) -> None: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["callsign", b"callsign", "device_callsign", b"device_callsign"]) -> None: ...
|
||||
|
||||
global___Contact = Contact
|
||||
|
||||
@typing_extensions.final
|
||||
class PLI(google.protobuf.message.Message):
|
||||
"""
|
||||
Position Location Information from ATAK
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
LATITUDE_I_FIELD_NUMBER: builtins.int
|
||||
LONGITUDE_I_FIELD_NUMBER: builtins.int
|
||||
ALTITUDE_FIELD_NUMBER: builtins.int
|
||||
SPEED_FIELD_NUMBER: builtins.int
|
||||
COURSE_FIELD_NUMBER: builtins.int
|
||||
latitude_i: builtins.int
|
||||
"""
|
||||
The new preferred location encoding, multiply by 1e-7 to get degrees
|
||||
in floating point
|
||||
"""
|
||||
longitude_i: builtins.int
|
||||
"""
|
||||
The new preferred location encoding, multiply by 1e-7 to get degrees
|
||||
in floating point
|
||||
"""
|
||||
altitude: builtins.int
|
||||
"""
|
||||
Altitude (ATAK prefers HAE)
|
||||
"""
|
||||
speed: builtins.int
|
||||
"""
|
||||
Speed
|
||||
"""
|
||||
course: builtins.int
|
||||
"""
|
||||
Course in degrees
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
latitude_i: builtins.int = ...,
|
||||
longitude_i: builtins.int = ...,
|
||||
altitude: builtins.int = ...,
|
||||
speed: builtins.int = ...,
|
||||
course: builtins.int = ...,
|
||||
) -> None: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["altitude", b"altitude", "course", b"course", "latitude_i", b"latitude_i", "longitude_i", b"longitude_i", "speed", b"speed"]) -> None: ...
|
||||
|
||||
global___PLI = PLI
|
||||
@@ -1,59 +1,238 @@
|
||||
"""Bluetooth interface
|
||||
"""
|
||||
import logging
|
||||
import pygatt
|
||||
import time
|
||||
import struct
|
||||
import asyncio
|
||||
from threading import Thread, Event
|
||||
from typing import Optional
|
||||
|
||||
from bleak import BleakScanner, BleakClient
|
||||
|
||||
from .mesh_interface import MeshInterface
|
||||
from meshtastic.mesh_interface import MeshInterface
|
||||
from meshtastic.util import our_exit
|
||||
|
||||
# Our standard BLE characteristics
|
||||
SERVICE_UUID = "6ba1b218-15a8-461f-9fa8-5dcae273eafd"
|
||||
TORADIO_UUID = "f75c76d2-129e-4dad-a1dd-7866124401e7"
|
||||
FROMRADIO_UUID = "8ba2bcc2-ee02-4a55-a531-c525c5e454d5"
|
||||
FROMRADIO_UUID = "2c55e69e-4993-11ed-b878-0242ac120002"
|
||||
FROMNUM_UUID = "ed9da18c-a800-4f66-a670-aa7547e34453"
|
||||
|
||||
|
||||
class BLEInterface(MeshInterface):
|
||||
"""A not quite ready - FIXME - BLE interface to devices"""
|
||||
"""MeshInterface using BLE to connect to devices"""
|
||||
class BLEError(Exception):
|
||||
"""An exception class for BLE errors"""
|
||||
def __init__(self, message):
|
||||
self.message = message
|
||||
super().__init__(self.message)
|
||||
|
||||
def __init__(self, address, noProto=False, debugOut=None):
|
||||
self.address = address
|
||||
if not noProto:
|
||||
self.adapter = pygatt.GATTToolBackend() # BGAPIBackend()
|
||||
self.adapter.start()
|
||||
logging.debug(f"Connecting to {self.address}")
|
||||
self.device = self.adapter.connect(address)
|
||||
else:
|
||||
self.adapter = None
|
||||
self.device = None
|
||||
logging.debug("Connected to device")
|
||||
# fromradio = self.device.char_read(FROMRADIO_UUID)
|
||||
MeshInterface.__init__(self, debugOut=debugOut, noProto=noProto)
|
||||
class BLEState(): # pylint: disable=C0115
|
||||
THREADS = False
|
||||
BLE = False
|
||||
MESH = False
|
||||
|
||||
self._readFromRadio() # read the initial responses
|
||||
|
||||
def handle_data(handle, data):
|
||||
self._handleFromRadio(data)
|
||||
def __init__(self, address: Optional[str], noProto: bool = False, debugOut = None):
|
||||
self.state = BLEInterface.BLEState()
|
||||
|
||||
if self.device:
|
||||
self.device.subscribe(FROMNUM_UUID, callback=handle_data)
|
||||
if not address:
|
||||
return
|
||||
|
||||
self.should_read = False
|
||||
|
||||
logging.debug("Threads starting")
|
||||
self._receiveThread = Thread(target = self._receiveFromRadioImpl)
|
||||
self._receiveThread_started = Event()
|
||||
self._receiveThread_stopped = Event()
|
||||
self._receiveThread.start()
|
||||
self._receiveThread_started.wait(1)
|
||||
self.state.THREADS = True
|
||||
logging.debug("Threads running")
|
||||
|
||||
try:
|
||||
logging.debug(f"BLE connecting to: {address}")
|
||||
self.client = self.connect(address)
|
||||
self.state.BLE = True
|
||||
logging.debug("BLE connected")
|
||||
except BLEInterface.BLEError as e:
|
||||
self.close()
|
||||
our_exit(e.message, 1)
|
||||
return
|
||||
|
||||
logging.debug("Mesh init starting")
|
||||
MeshInterface.__init__(self, debugOut = debugOut, noProto = noProto)
|
||||
self._startConfig()
|
||||
if not self.noProto:
|
||||
self._waitConnected(timeout = 60.0)
|
||||
self.waitForConfig()
|
||||
self.state.MESH = True
|
||||
logging.debug("Mesh init finished")
|
||||
|
||||
logging.debug("Register FROMNUM notify callback")
|
||||
self.client.start_notify(FROMNUM_UUID, self.from_num_handler)
|
||||
|
||||
|
||||
async def from_num_handler(self, _, b): # pylint: disable=C0116
|
||||
from_num = struct.unpack('<I', bytes(b))[0]
|
||||
logging.debug(f"FROMNUM notify: {from_num}")
|
||||
self.should_read = True
|
||||
|
||||
|
||||
def scan(self):
|
||||
"Scan for available BLE devices"
|
||||
with BLEClient() as client:
|
||||
return [
|
||||
(x[0], x[1]) for x in (client.discover(
|
||||
return_adv = True,
|
||||
service_uuids = [ SERVICE_UUID ]
|
||||
)).values()
|
||||
]
|
||||
|
||||
|
||||
def find_device(self, address):
|
||||
"Find a device by address"
|
||||
meshtastic_devices = self.scan()
|
||||
|
||||
addressed_devices = list(filter(lambda x: address in (x[1].local_name, x[0].name), meshtastic_devices))
|
||||
# If nothing is found try on the address
|
||||
if len(addressed_devices) == 0:
|
||||
addressed_devices = list(filter(
|
||||
lambda x: BLEInterface._sanitize_address(address) == BLEInterface._sanitize_address(x[0].address),
|
||||
meshtastic_devices))
|
||||
|
||||
if len(addressed_devices) == 0:
|
||||
raise BLEInterface.BLEError(f"No Meshtastic BLE peripheral with identifier or address '{address}' found. Try --ble-scan to find it.")
|
||||
if len(addressed_devices) > 1:
|
||||
raise BLEInterface.BLEError(f"More than one Meshtastic BLE peripheral with identifier or address '{address}' found.")
|
||||
return addressed_devices[0][0]
|
||||
|
||||
def _sanitize_address(address): # pylint: disable=E0213
|
||||
"Standardize BLE address by removing extraneous characters and lowercasing"
|
||||
return address \
|
||||
.replace("-", "") \
|
||||
.replace("_", "") \
|
||||
.replace(":", "") \
|
||||
.lower()
|
||||
|
||||
def connect(self, address):
|
||||
"Connect to a device by address"
|
||||
device = self.find_device(address)
|
||||
client = BLEClient(device.address)
|
||||
client.connect()
|
||||
try:
|
||||
client.pair()
|
||||
except NotImplementedError:
|
||||
# Some bluetooth backends do not require explicit pairing.
|
||||
# See Bleak docs for details on this.
|
||||
pass
|
||||
return client
|
||||
|
||||
|
||||
def _receiveFromRadioImpl(self):
|
||||
self._receiveThread_started.set()
|
||||
while self._receiveThread_started.is_set():
|
||||
if self.should_read:
|
||||
self.should_read = False
|
||||
retries = 0
|
||||
while True:
|
||||
b = bytes(self.client.read_gatt_char(FROMRADIO_UUID))
|
||||
if not b:
|
||||
if retries < 5:
|
||||
time.sleep(0.1)
|
||||
retries += 1
|
||||
continue
|
||||
break
|
||||
logging.debug(f"FROMRADIO read: {b.hex()}")
|
||||
self._handleFromRadio(b)
|
||||
else:
|
||||
time.sleep(0.1)
|
||||
self._receiveThread_stopped.set()
|
||||
|
||||
def _sendToRadioImpl(self, toRadio):
|
||||
"""Send a ToRadio protobuf to the device"""
|
||||
#logging.debug(f"Sending: {stripnl(toRadio)}")
|
||||
b = toRadio.SerializeToString()
|
||||
self.device.char_write(TORADIO_UUID, b)
|
||||
if b:
|
||||
logging.debug(f"TORADIO write: {b.hex()}")
|
||||
self.client.write_gatt_char(TORADIO_UUID, b, response = True)
|
||||
# Allow to propagate and then make sure we read
|
||||
time.sleep(0.1)
|
||||
self.should_read = True
|
||||
|
||||
|
||||
def close(self):
|
||||
MeshInterface.close(self)
|
||||
if self.adapter:
|
||||
self.adapter.stop()
|
||||
if self.state.MESH:
|
||||
MeshInterface.close(self)
|
||||
|
||||
def _readFromRadio(self):
|
||||
if not self.noProto:
|
||||
wasEmpty = False
|
||||
while not wasEmpty:
|
||||
if self.device:
|
||||
b = self.device.char_read(FROMRADIO_UUID)
|
||||
wasEmpty = len(b) == 0
|
||||
if not wasEmpty:
|
||||
self._handleFromRadio(b)
|
||||
if self.state.THREADS:
|
||||
self._receiveThread_started.clear()
|
||||
self._receiveThread_stopped.wait(5)
|
||||
|
||||
if self.state.BLE:
|
||||
self.client.disconnect()
|
||||
self.client.close()
|
||||
|
||||
|
||||
class BLEClient():
|
||||
"""Client for managing connection to a BLE device"""
|
||||
def __init__(self, address = None, **kwargs):
|
||||
self._eventThread = Thread(target = self._run_event_loop)
|
||||
self._eventThread_started = Event()
|
||||
self._eventThread_stopped = Event()
|
||||
self._eventThread.start()
|
||||
self._eventThread_started.wait(1)
|
||||
|
||||
if not address:
|
||||
logging.debug("No address provided - only discover method will work.")
|
||||
return
|
||||
|
||||
self.bleak_client = BleakClient(address, **kwargs)
|
||||
|
||||
|
||||
def discover(self, **kwargs): # pylint: disable=C0116
|
||||
return self.async_await(BleakScanner.discover(**kwargs))
|
||||
|
||||
def pair(self, **kwargs): # pylint: disable=C0116
|
||||
return self.async_await(self.bleak_client.pair(**kwargs))
|
||||
|
||||
def connect(self, **kwargs): # pylint: disable=C0116
|
||||
return self.async_await(self.bleak_client.connect(**kwargs))
|
||||
|
||||
def disconnect(self, **kwargs): # pylint: disable=C0116
|
||||
self.async_await(self.bleak_client.disconnect(**kwargs))
|
||||
|
||||
def read_gatt_char(self, *args, **kwargs): # pylint: disable=C0116
|
||||
return self.async_await(self.bleak_client.read_gatt_char(*args, **kwargs))
|
||||
|
||||
def write_gatt_char(self, *args, **kwargs): # pylint: disable=C0116
|
||||
self.async_await(self.bleak_client.write_gatt_char(*args, **kwargs))
|
||||
|
||||
def start_notify(self, *args, **kwargs): # pylint: disable=C0116
|
||||
self.async_await(self.bleak_client.start_notify(*args, **kwargs))
|
||||
|
||||
def close(self): # pylint: disable=C0116
|
||||
self.async_run(self._stop_event_loop())
|
||||
self._eventThread_stopped.wait(5)
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def __exit__(self, _type, _value, _traceback):
|
||||
self.close()
|
||||
|
||||
def async_await(self, coro, timeout = None): # pylint: disable=C0116
|
||||
return self.async_run(coro).result(timeout)
|
||||
|
||||
def async_run(self, coro): # pylint: disable=C0116
|
||||
return asyncio.run_coroutine_threadsafe(coro, self._eventLoop)
|
||||
|
||||
def _run_event_loop(self):
|
||||
# I don't know if the event loop can be initialized in __init__ so silencing pylint
|
||||
self._eventLoop = asyncio.new_event_loop() # pylint: disable=W0201
|
||||
self._eventThread_started.set()
|
||||
try:
|
||||
self._eventLoop.run_forever()
|
||||
finally:
|
||||
self._eventLoop.close()
|
||||
self._eventThread_stopped.set()
|
||||
|
||||
async def _stop_event_loop(self):
|
||||
self._eventLoop.stop()
|
||||
|
||||
26
meshtastic/cannedmessages_pb2.py
Normal file
26
meshtastic/cannedmessages_pb2.py
Normal file
@@ -0,0 +1,26 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/cannedmessages.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1fmeshtastic/cannedmessages.proto\x12\nmeshtastic\"-\n\x19\x43\x61nnedMessageModuleConfig\x12\x10\n\x08messages\x18\x01 \x01(\tBn\n\x13\x63om.geeksville.meshB\x19\x43\x61nnedMessageConfigProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.cannedmessages_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\031CannedMessageConfigProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_CANNEDMESSAGEMODULECONFIG._serialized_start=47
|
||||
_CANNEDMESSAGEMODULECONFIG._serialized_end=92
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
37
meshtastic/cannedmessages_pb2.pyi
Normal file
37
meshtastic/cannedmessages_pb2.pyi
Normal file
@@ -0,0 +1,37 @@
|
||||
"""
|
||||
@generated by mypy-protobuf. Do not edit manually!
|
||||
isort:skip_file
|
||||
"""
|
||||
import builtins
|
||||
import google.protobuf.descriptor
|
||||
import google.protobuf.message
|
||||
import sys
|
||||
|
||||
if sys.version_info >= (3, 8):
|
||||
import typing as typing_extensions
|
||||
else:
|
||||
import typing_extensions
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
||||
|
||||
@typing_extensions.final
|
||||
class CannedMessageModuleConfig(google.protobuf.message.Message):
|
||||
"""
|
||||
Canned message module configuration.
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
MESSAGES_FIELD_NUMBER: builtins.int
|
||||
messages: builtins.str
|
||||
"""
|
||||
Predefined messages for canned message module separated by '|' characters.
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
messages: builtins.str = ...,
|
||||
) -> None: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["messages", b"messages"]) -> None: ...
|
||||
|
||||
global___CannedMessageModuleConfig = CannedMessageModuleConfig
|
||||
@@ -1,10 +1,10 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: channel.proto
|
||||
|
||||
# source: meshtastic/channel.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from google.protobuf import reflection as _reflection
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
@@ -13,251 +13,22 @@ _sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
||||
name='channel.proto',
|
||||
package='',
|
||||
syntax='proto3',
|
||||
serialized_options=b'\n\023com.geeksville.meshB\rChannelProtosH\003Z!github.com/meshtastic/gomeshproto',
|
||||
serialized_pb=b'\n\rchannel.proto\"\x91\x03\n\x0f\x43hannelSettings\x12\x10\n\x08tx_power\x18\x01 \x01(\x05\x12\x32\n\x0cmodem_config\x18\x03 \x01(\x0e\x32\x1c.ChannelSettings.ModemConfig\x12\x11\n\tbandwidth\x18\x06 \x01(\r\x12\x15\n\rspread_factor\x18\x07 \x01(\r\x12\x13\n\x0b\x63oding_rate\x18\x08 \x01(\r\x12\x13\n\x0b\x63hannel_num\x18\t \x01(\r\x12\x0b\n\x03psk\x18\x04 \x01(\x0c\x12\x0c\n\x04name\x18\x05 \x01(\t\x12\n\n\x02id\x18\n \x01(\x07\x12\x16\n\x0euplink_enabled\x18\x10 \x01(\x08\x12\x18\n\x10\x64ownlink_enabled\x18\x11 \x01(\x08\"\x8a\x01\n\x0bModemConfig\x12\x12\n\x0e\x42w125Cr45Sf128\x10\x00\x12\x12\n\x0e\x42w500Cr45Sf128\x10\x01\x12\x14\n\x10\x42w31_25Cr48Sf512\x10\x02\x12\x13\n\x0f\x42w125Cr48Sf4096\x10\x03\x12\x13\n\x0f\x42w250Cr46Sf2048\x10\x04\x12\x13\n\x0f\x42w250Cr47Sf1024\x10\x05\"\x8b\x01\n\x07\x43hannel\x12\r\n\x05index\x18\x01 \x01(\x05\x12\"\n\x08settings\x18\x02 \x01(\x0b\x32\x10.ChannelSettings\x12\x1b\n\x04role\x18\x03 \x01(\x0e\x32\r.Channel.Role\"0\n\x04Role\x12\x0c\n\x08\x44ISABLED\x10\x00\x12\x0b\n\x07PRIMARY\x10\x01\x12\r\n\tSECONDARY\x10\x02\x42I\n\x13\x63om.geeksville.meshB\rChannelProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3'
|
||||
)
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18meshtastic/channel.proto\x12\nmeshtastic\"\xb8\x01\n\x0f\x43hannelSettings\x12\x17\n\x0b\x63hannel_num\x18\x01 \x01(\rB\x02\x18\x01\x12\x0b\n\x03psk\x18\x02 \x01(\x0c\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\n\n\x02id\x18\x04 \x01(\x07\x12\x16\n\x0euplink_enabled\x18\x05 \x01(\x08\x12\x18\n\x10\x64ownlink_enabled\x18\x06 \x01(\x08\x12\x33\n\x0fmodule_settings\x18\x07 \x01(\x0b\x32\x1a.meshtastic.ModuleSettings\"E\n\x0eModuleSettings\x12\x1a\n\x12position_precision\x18\x01 \x01(\r\x12\x17\n\x0fis_client_muted\x18\x02 \x01(\x08\"\xa1\x01\n\x07\x43hannel\x12\r\n\x05index\x18\x01 \x01(\x05\x12-\n\x08settings\x18\x02 \x01(\x0b\x32\x1b.meshtastic.ChannelSettings\x12&\n\x04role\x18\x03 \x01(\x0e\x32\x18.meshtastic.Channel.Role\"0\n\x04Role\x12\x0c\n\x08\x44ISABLED\x10\x00\x12\x0b\n\x07PRIMARY\x10\x01\x12\r\n\tSECONDARY\x10\x02\x42\x62\n\x13\x63om.geeksville.meshB\rChannelProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.channel_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
|
||||
_CHANNELSETTINGS_MODEMCONFIG = _descriptor.EnumDescriptor(
|
||||
name='ModemConfig',
|
||||
full_name='ChannelSettings.ModemConfig',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
values=[
|
||||
_descriptor.EnumValueDescriptor(
|
||||
name='Bw125Cr45Sf128', index=0, number=0,
|
||||
serialized_options=None,
|
||||
type=None),
|
||||
_descriptor.EnumValueDescriptor(
|
||||
name='Bw500Cr45Sf128', index=1, number=1,
|
||||
serialized_options=None,
|
||||
type=None),
|
||||
_descriptor.EnumValueDescriptor(
|
||||
name='Bw31_25Cr48Sf512', index=2, number=2,
|
||||
serialized_options=None,
|
||||
type=None),
|
||||
_descriptor.EnumValueDescriptor(
|
||||
name='Bw125Cr48Sf4096', index=3, number=3,
|
||||
serialized_options=None,
|
||||
type=None),
|
||||
_descriptor.EnumValueDescriptor(
|
||||
name='Bw250Cr46Sf2048', index=4, number=4,
|
||||
serialized_options=None,
|
||||
type=None),
|
||||
_descriptor.EnumValueDescriptor(
|
||||
name='Bw250Cr47Sf1024', index=5, number=5,
|
||||
serialized_options=None,
|
||||
type=None),
|
||||
],
|
||||
containing_type=None,
|
||||
serialized_options=None,
|
||||
serialized_start=281,
|
||||
serialized_end=419,
|
||||
)
|
||||
_sym_db.RegisterEnumDescriptor(_CHANNELSETTINGS_MODEMCONFIG)
|
||||
|
||||
_CHANNEL_ROLE = _descriptor.EnumDescriptor(
|
||||
name='Role',
|
||||
full_name='Channel.Role',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
values=[
|
||||
_descriptor.EnumValueDescriptor(
|
||||
name='DISABLED', index=0, number=0,
|
||||
serialized_options=None,
|
||||
type=None),
|
||||
_descriptor.EnumValueDescriptor(
|
||||
name='PRIMARY', index=1, number=1,
|
||||
serialized_options=None,
|
||||
type=None),
|
||||
_descriptor.EnumValueDescriptor(
|
||||
name='SECONDARY', index=2, number=2,
|
||||
serialized_options=None,
|
||||
type=None),
|
||||
],
|
||||
containing_type=None,
|
||||
serialized_options=None,
|
||||
serialized_start=513,
|
||||
serialized_end=561,
|
||||
)
|
||||
_sym_db.RegisterEnumDescriptor(_CHANNEL_ROLE)
|
||||
|
||||
|
||||
_CHANNELSETTINGS = _descriptor.Descriptor(
|
||||
name='ChannelSettings',
|
||||
full_name='ChannelSettings',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='tx_power', full_name='ChannelSettings.tx_power', index=0,
|
||||
number=1, type=5, cpp_type=1, label=1,
|
||||
has_default_value=False, default_value=0,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='modem_config', full_name='ChannelSettings.modem_config', index=1,
|
||||
number=3, type=14, cpp_type=8, label=1,
|
||||
has_default_value=False, default_value=0,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='bandwidth', full_name='ChannelSettings.bandwidth', index=2,
|
||||
number=6, type=13, cpp_type=3, label=1,
|
||||
has_default_value=False, default_value=0,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='spread_factor', full_name='ChannelSettings.spread_factor', index=3,
|
||||
number=7, type=13, cpp_type=3, label=1,
|
||||
has_default_value=False, default_value=0,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='coding_rate', full_name='ChannelSettings.coding_rate', index=4,
|
||||
number=8, type=13, cpp_type=3, label=1,
|
||||
has_default_value=False, default_value=0,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='channel_num', full_name='ChannelSettings.channel_num', index=5,
|
||||
number=9, type=13, cpp_type=3, label=1,
|
||||
has_default_value=False, default_value=0,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='psk', full_name='ChannelSettings.psk', index=6,
|
||||
number=4, type=12, cpp_type=9, label=1,
|
||||
has_default_value=False, default_value=b"",
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='name', full_name='ChannelSettings.name', index=7,
|
||||
number=5, type=9, cpp_type=9, label=1,
|
||||
has_default_value=False, default_value=b"".decode('utf-8'),
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='id', full_name='ChannelSettings.id', index=8,
|
||||
number=10, type=7, cpp_type=3, label=1,
|
||||
has_default_value=False, default_value=0,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='uplink_enabled', full_name='ChannelSettings.uplink_enabled', index=9,
|
||||
number=16, type=8, cpp_type=7, label=1,
|
||||
has_default_value=False, default_value=False,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='downlink_enabled', full_name='ChannelSettings.downlink_enabled', index=10,
|
||||
number=17, type=8, cpp_type=7, label=1,
|
||||
has_default_value=False, default_value=False,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
_CHANNELSETTINGS_MODEMCONFIG,
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto3',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=18,
|
||||
serialized_end=419,
|
||||
)
|
||||
|
||||
|
||||
_CHANNEL = _descriptor.Descriptor(
|
||||
name='Channel',
|
||||
full_name='Channel',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='index', full_name='Channel.index', index=0,
|
||||
number=1, type=5, cpp_type=1, label=1,
|
||||
has_default_value=False, default_value=0,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='settings', full_name='Channel.settings', index=1,
|
||||
number=2, type=11, cpp_type=10, label=1,
|
||||
has_default_value=False, default_value=None,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='role', full_name='Channel.role', index=2,
|
||||
number=3, type=14, cpp_type=8, label=1,
|
||||
has_default_value=False, default_value=0,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
_CHANNEL_ROLE,
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto3',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=422,
|
||||
serialized_end=561,
|
||||
)
|
||||
|
||||
_CHANNELSETTINGS.fields_by_name['modem_config'].enum_type = _CHANNELSETTINGS_MODEMCONFIG
|
||||
_CHANNELSETTINGS_MODEMCONFIG.containing_type = _CHANNELSETTINGS
|
||||
_CHANNEL.fields_by_name['settings'].message_type = _CHANNELSETTINGS
|
||||
_CHANNEL.fields_by_name['role'].enum_type = _CHANNEL_ROLE
|
||||
_CHANNEL_ROLE.containing_type = _CHANNEL
|
||||
DESCRIPTOR.message_types_by_name['ChannelSettings'] = _CHANNELSETTINGS
|
||||
DESCRIPTOR.message_types_by_name['Channel'] = _CHANNEL
|
||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
||||
|
||||
ChannelSettings = _reflection.GeneratedProtocolMessageType('ChannelSettings', (_message.Message,), {
|
||||
'DESCRIPTOR' : _CHANNELSETTINGS,
|
||||
'__module__' : 'channel_pb2'
|
||||
# @@protoc_insertion_point(class_scope:ChannelSettings)
|
||||
})
|
||||
_sym_db.RegisterMessage(ChannelSettings)
|
||||
|
||||
Channel = _reflection.GeneratedProtocolMessageType('Channel', (_message.Message,), {
|
||||
'DESCRIPTOR' : _CHANNEL,
|
||||
'__module__' : 'channel_pb2'
|
||||
# @@protoc_insertion_point(class_scope:Channel)
|
||||
})
|
||||
_sym_db.RegisterMessage(Channel)
|
||||
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\rChannelProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_CHANNELSETTINGS.fields_by_name['channel_num']._options = None
|
||||
_CHANNELSETTINGS.fields_by_name['channel_num']._serialized_options = b'\030\001'
|
||||
_CHANNELSETTINGS._serialized_start=41
|
||||
_CHANNELSETTINGS._serialized_end=225
|
||||
_MODULESETTINGS._serialized_start=227
|
||||
_MODULESETTINGS._serialized_end=296
|
||||
_CHANNEL._serialized_start=299
|
||||
_CHANNEL._serialized_end=460
|
||||
_CHANNEL_ROLE._serialized_start=412
|
||||
_CHANNEL_ROLE._serialized_end=460
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
|
||||
231
meshtastic/channel_pb2.pyi
Normal file
231
meshtastic/channel_pb2.pyi
Normal file
@@ -0,0 +1,231 @@
|
||||
"""
|
||||
@generated by mypy-protobuf. Do not edit manually!
|
||||
isort:skip_file
|
||||
"""
|
||||
import builtins
|
||||
import google.protobuf.descriptor
|
||||
import google.protobuf.internal.enum_type_wrapper
|
||||
import google.protobuf.message
|
||||
import sys
|
||||
import typing
|
||||
|
||||
if sys.version_info >= (3, 10):
|
||||
import typing as typing_extensions
|
||||
else:
|
||||
import typing_extensions
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
||||
|
||||
@typing_extensions.final
|
||||
class ChannelSettings(google.protobuf.message.Message):
|
||||
"""
|
||||
This information can be encoded as a QRcode/url so that other users can configure
|
||||
their radio to join the same channel.
|
||||
A note about how channel names are shown to users: channelname-X
|
||||
poundsymbol is a prefix used to indicate this is a channel name (idea from @professr).
|
||||
Where X is a letter from A-Z (base 26) representing a hash of the PSK for this
|
||||
channel - so that if the user changes anything about the channel (which does
|
||||
force a new PSK) this letter will also change. Thus preventing user confusion if
|
||||
two friends try to type in a channel name of "BobsChan" and then can't talk
|
||||
because their PSKs will be different.
|
||||
The PSK is hashed into this letter by "0x41 + [xor all bytes of the psk ] modulo 26"
|
||||
This also allows the option of someday if people have the PSK off (zero), the
|
||||
users COULD type in a channel name and be able to talk.
|
||||
FIXME: Add description of multi-channel support and how primary vs secondary channels are used.
|
||||
FIXME: explain how apps use channels for security.
|
||||
explain how remote settings and remote gpio are managed as an example
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
CHANNEL_NUM_FIELD_NUMBER: builtins.int
|
||||
PSK_FIELD_NUMBER: builtins.int
|
||||
NAME_FIELD_NUMBER: builtins.int
|
||||
ID_FIELD_NUMBER: builtins.int
|
||||
UPLINK_ENABLED_FIELD_NUMBER: builtins.int
|
||||
DOWNLINK_ENABLED_FIELD_NUMBER: builtins.int
|
||||
MODULE_SETTINGS_FIELD_NUMBER: builtins.int
|
||||
channel_num: builtins.int
|
||||
"""
|
||||
Deprecated in favor of LoraConfig.channel_num
|
||||
"""
|
||||
psk: builtins.bytes
|
||||
"""
|
||||
A simple pre-shared key for now for crypto.
|
||||
Must be either 0 bytes (no crypto), 16 bytes (AES128), or 32 bytes (AES256).
|
||||
A special shorthand is used for 1 byte long psks.
|
||||
These psks should be treated as only minimally secure,
|
||||
because they are listed in this source code.
|
||||
Those bytes are mapped using the following scheme:
|
||||
`0` = No crypto
|
||||
`1` = The special "default" channel key: {0xd4, 0xf1, 0xbb, 0x3a, 0x20, 0x29, 0x07, 0x59, 0xf0, 0xbc, 0xff, 0xab, 0xcf, 0x4e, 0x69, 0x01}
|
||||
`2` through 10 = The default channel key, except with 1 through 9 added to the last byte.
|
||||
Shown to user as simple1 through 10
|
||||
"""
|
||||
name: builtins.str
|
||||
"""
|
||||
A SHORT name that will be packed into the URL.
|
||||
Less than 12 bytes.
|
||||
Something for end users to call the channel
|
||||
If this is the empty string it is assumed that this channel
|
||||
is the special (minimally secure) "Default"channel.
|
||||
In user interfaces it should be rendered as a local language translation of "X".
|
||||
For channel_num hashing empty string will be treated as "X".
|
||||
Where "X" is selected based on the English words listed above for ModemPreset
|
||||
"""
|
||||
id: builtins.int
|
||||
"""
|
||||
Used to construct a globally unique channel ID.
|
||||
The full globally unique ID will be: "name.id" where ID is shown as base36.
|
||||
Assuming that the number of meshtastic users is below 20K (true for a long time)
|
||||
the chance of this 64 bit random number colliding with anyone else is super low.
|
||||
And the penalty for collision is low as well, it just means that anyone trying to decrypt channel messages might need to
|
||||
try multiple candidate channels.
|
||||
Any time a non wire compatible change is made to a channel, this field should be regenerated.
|
||||
There are a small number of 'special' globally known (and fairly) insecure standard channels.
|
||||
Those channels do not have a numeric id included in the settings, but instead it is pulled from
|
||||
a table of well known IDs.
|
||||
(see Well Known Channels FIXME)
|
||||
"""
|
||||
uplink_enabled: builtins.bool
|
||||
"""
|
||||
If true, messages on the mesh will be sent to the *public* internet by any gateway ndoe
|
||||
"""
|
||||
downlink_enabled: builtins.bool
|
||||
"""
|
||||
If true, messages seen on the internet will be forwarded to the local mesh.
|
||||
"""
|
||||
@property
|
||||
def module_settings(self) -> global___ModuleSettings:
|
||||
"""
|
||||
Per-channel module settings.
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
channel_num: builtins.int = ...,
|
||||
psk: builtins.bytes = ...,
|
||||
name: builtins.str = ...,
|
||||
id: builtins.int = ...,
|
||||
uplink_enabled: builtins.bool = ...,
|
||||
downlink_enabled: builtins.bool = ...,
|
||||
module_settings: global___ModuleSettings | None = ...,
|
||||
) -> None: ...
|
||||
def HasField(self, field_name: typing_extensions.Literal["module_settings", b"module_settings"]) -> builtins.bool: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["channel_num", b"channel_num", "downlink_enabled", b"downlink_enabled", "id", b"id", "module_settings", b"module_settings", "name", b"name", "psk", b"psk", "uplink_enabled", b"uplink_enabled"]) -> None: ...
|
||||
|
||||
global___ChannelSettings = ChannelSettings
|
||||
|
||||
@typing_extensions.final
|
||||
class ModuleSettings(google.protobuf.message.Message):
|
||||
"""
|
||||
This message is specifically for modules to store per-channel configuration data.
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
POSITION_PRECISION_FIELD_NUMBER: builtins.int
|
||||
IS_CLIENT_MUTED_FIELD_NUMBER: builtins.int
|
||||
position_precision: builtins.int
|
||||
"""
|
||||
Bits of precision for the location sent in position packets.
|
||||
"""
|
||||
is_client_muted: builtins.bool
|
||||
"""
|
||||
Controls whether or not the phone / clients should mute the current channel
|
||||
Useful for noisy public channels you don't necessarily want to disable
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
position_precision: builtins.int = ...,
|
||||
is_client_muted: builtins.bool = ...,
|
||||
) -> None: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["is_client_muted", b"is_client_muted", "position_precision", b"position_precision"]) -> None: ...
|
||||
|
||||
global___ModuleSettings = ModuleSettings
|
||||
|
||||
@typing_extensions.final
|
||||
class Channel(google.protobuf.message.Message):
|
||||
"""
|
||||
A pair of a channel number, mode and the (sharable) settings for that channel
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
class _Role:
|
||||
ValueType = typing.NewType("ValueType", builtins.int)
|
||||
V: typing_extensions.TypeAlias = ValueType
|
||||
|
||||
class _RoleEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[Channel._Role.ValueType], builtins.type):
|
||||
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
|
||||
DISABLED: Channel._Role.ValueType # 0
|
||||
"""
|
||||
This channel is not in use right now
|
||||
"""
|
||||
PRIMARY: Channel._Role.ValueType # 1
|
||||
"""
|
||||
This channel is used to set the frequency for the radio - all other enabled channels must be SECONDARY
|
||||
"""
|
||||
SECONDARY: Channel._Role.ValueType # 2
|
||||
"""
|
||||
Secondary channels are only used for encryption/decryption/authentication purposes.
|
||||
Their radio settings (freq etc) are ignored, only psk is used.
|
||||
"""
|
||||
|
||||
class Role(_Role, metaclass=_RoleEnumTypeWrapper):
|
||||
"""
|
||||
How this channel is being used (or not).
|
||||
Note: this field is an enum to give us options for the future.
|
||||
In particular, someday we might make a 'SCANNING' option.
|
||||
SCANNING channels could have different frequencies and the radio would
|
||||
occasionally check that freq to see if anything is being transmitted.
|
||||
For devices that have multiple physical radios attached, we could keep multiple PRIMARY/SCANNING channels active at once to allow
|
||||
cross band routing as needed.
|
||||
If a device has only a single radio (the common case) only one channel can be PRIMARY at a time
|
||||
(but any number of SECONDARY channels can't be sent received on that common frequency)
|
||||
"""
|
||||
|
||||
DISABLED: Channel.Role.ValueType # 0
|
||||
"""
|
||||
This channel is not in use right now
|
||||
"""
|
||||
PRIMARY: Channel.Role.ValueType # 1
|
||||
"""
|
||||
This channel is used to set the frequency for the radio - all other enabled channels must be SECONDARY
|
||||
"""
|
||||
SECONDARY: Channel.Role.ValueType # 2
|
||||
"""
|
||||
Secondary channels are only used for encryption/decryption/authentication purposes.
|
||||
Their radio settings (freq etc) are ignored, only psk is used.
|
||||
"""
|
||||
|
||||
INDEX_FIELD_NUMBER: builtins.int
|
||||
SETTINGS_FIELD_NUMBER: builtins.int
|
||||
ROLE_FIELD_NUMBER: builtins.int
|
||||
index: builtins.int
|
||||
"""
|
||||
The index of this channel in the channel table (from 0 to MAX_NUM_CHANNELS-1)
|
||||
(Someday - not currently implemented) An index of -1 could be used to mean "set by name",
|
||||
in which case the target node will find and set the channel by settings.name.
|
||||
"""
|
||||
@property
|
||||
def settings(self) -> global___ChannelSettings:
|
||||
"""
|
||||
The new settings, or NULL to disable that channel
|
||||
"""
|
||||
role: global___Channel.Role.ValueType
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
index: builtins.int = ...,
|
||||
settings: global___ChannelSettings | None = ...,
|
||||
role: global___Channel.Role.ValueType = ...,
|
||||
) -> None: ...
|
||||
def HasField(self, field_name: typing_extensions.Literal["settings", b"settings"]) -> builtins.bool: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["index", b"index", "role", b"role", "settings", b"settings"]) -> None: ...
|
||||
|
||||
global___Channel = Channel
|
||||
27
meshtastic/clientonly_pb2.py
Normal file
27
meshtastic/clientonly_pb2.py
Normal file
@@ -0,0 +1,27 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/clientonly.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic import localonly_pb2 as meshtastic_dot_localonly__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bmeshtastic/clientonly.proto\x12\nmeshtastic\x1a\x1ameshtastic/localonly.proto\"\x8d\x02\n\rDeviceProfile\x12\x16\n\tlong_name\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x17\n\nshort_name\x18\x02 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x63hannel_url\x18\x03 \x01(\tH\x02\x88\x01\x01\x12,\n\x06\x63onfig\x18\x04 \x01(\x0b\x32\x17.meshtastic.LocalConfigH\x03\x88\x01\x01\x12\x39\n\rmodule_config\x18\x05 \x01(\x0b\x32\x1d.meshtastic.LocalModuleConfigH\x04\x88\x01\x01\x42\x0c\n\n_long_nameB\r\n\x0b_short_nameB\x0e\n\x0c_channel_urlB\t\n\x07_configB\x10\n\x0e_module_configBe\n\x13\x63om.geeksville.meshB\x10\x43lientOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.clientonly_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\020ClientOnlyProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_DEVICEPROFILE._serialized_start=72
|
||||
_DEVICEPROFILE._serialized_end=341
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
77
meshtastic/clientonly_pb2.pyi
Normal file
77
meshtastic/clientonly_pb2.pyi
Normal file
@@ -0,0 +1,77 @@
|
||||
"""
|
||||
@generated by mypy-protobuf. Do not edit manually!
|
||||
isort:skip_file
|
||||
"""
|
||||
import builtins
|
||||
import google.protobuf.descriptor
|
||||
import google.protobuf.message
|
||||
import meshtastic.localonly_pb2
|
||||
import sys
|
||||
import typing
|
||||
|
||||
if sys.version_info >= (3, 8):
|
||||
import typing as typing_extensions
|
||||
else:
|
||||
import typing_extensions
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
||||
|
||||
@typing_extensions.final
|
||||
class DeviceProfile(google.protobuf.message.Message):
|
||||
"""
|
||||
This abstraction is used to contain any configuration for provisioning a node on any client.
|
||||
It is useful for importing and exporting configurations.
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
LONG_NAME_FIELD_NUMBER: builtins.int
|
||||
SHORT_NAME_FIELD_NUMBER: builtins.int
|
||||
CHANNEL_URL_FIELD_NUMBER: builtins.int
|
||||
CONFIG_FIELD_NUMBER: builtins.int
|
||||
MODULE_CONFIG_FIELD_NUMBER: builtins.int
|
||||
long_name: builtins.str
|
||||
"""
|
||||
Long name for the node
|
||||
"""
|
||||
short_name: builtins.str
|
||||
"""
|
||||
Short name of the node
|
||||
"""
|
||||
channel_url: builtins.str
|
||||
"""
|
||||
The url of the channels from our node
|
||||
"""
|
||||
@property
|
||||
def config(self) -> meshtastic.localonly_pb2.LocalConfig:
|
||||
"""
|
||||
The Config of the node
|
||||
"""
|
||||
@property
|
||||
def module_config(self) -> meshtastic.localonly_pb2.LocalModuleConfig:
|
||||
"""
|
||||
The ModuleConfig of the node
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
long_name: builtins.str | None = ...,
|
||||
short_name: builtins.str | None = ...,
|
||||
channel_url: builtins.str | None = ...,
|
||||
config: meshtastic.localonly_pb2.LocalConfig | None = ...,
|
||||
module_config: meshtastic.localonly_pb2.LocalModuleConfig | None = ...,
|
||||
) -> None: ...
|
||||
def HasField(self, field_name: typing_extensions.Literal["_channel_url", b"_channel_url", "_config", b"_config", "_long_name", b"_long_name", "_module_config", b"_module_config", "_short_name", b"_short_name", "channel_url", b"channel_url", "config", b"config", "long_name", b"long_name", "module_config", b"module_config", "short_name", b"short_name"]) -> builtins.bool: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["_channel_url", b"_channel_url", "_config", b"_config", "_long_name", b"_long_name", "_module_config", b"_module_config", "_short_name", b"_short_name", "channel_url", b"channel_url", "config", b"config", "long_name", b"long_name", "module_config", b"module_config", "short_name", b"short_name"]) -> None: ...
|
||||
@typing.overload
|
||||
def WhichOneof(self, oneof_group: typing_extensions.Literal["_channel_url", b"_channel_url"]) -> typing_extensions.Literal["channel_url"] | None: ...
|
||||
@typing.overload
|
||||
def WhichOneof(self, oneof_group: typing_extensions.Literal["_config", b"_config"]) -> typing_extensions.Literal["config"] | None: ...
|
||||
@typing.overload
|
||||
def WhichOneof(self, oneof_group: typing_extensions.Literal["_long_name", b"_long_name"]) -> typing_extensions.Literal["long_name"] | None: ...
|
||||
@typing.overload
|
||||
def WhichOneof(self, oneof_group: typing_extensions.Literal["_module_config", b"_module_config"]) -> typing_extensions.Literal["module_config"] | None: ...
|
||||
@typing.overload
|
||||
def WhichOneof(self, oneof_group: typing_extensions.Literal["_short_name", b"_short_name"]) -> typing_extensions.Literal["short_name"] | None: ...
|
||||
|
||||
global___DeviceProfile = DeviceProfile
|
||||
70
meshtastic/config_pb2.py
Normal file
70
meshtastic/config_pb2.py
Normal file
File diff suppressed because one or more lines are too long
1508
meshtastic/config_pb2.pyi
Normal file
1508
meshtastic/config_pb2.pyi
Normal file
File diff suppressed because it is too large
Load Diff
36
meshtastic/connection_status_pb2.py
Normal file
36
meshtastic/connection_status_pb2.py
Normal file
@@ -0,0 +1,36 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/connection_status.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"meshtastic/connection_status.proto\x12\nmeshtastic\"\xb1\x02\n\x16\x44\x65viceConnectionStatus\x12\x33\n\x04wifi\x18\x01 \x01(\x0b\x32 .meshtastic.WifiConnectionStatusH\x00\x88\x01\x01\x12;\n\x08\x65thernet\x18\x02 \x01(\x0b\x32$.meshtastic.EthernetConnectionStatusH\x01\x88\x01\x01\x12=\n\tbluetooth\x18\x03 \x01(\x0b\x32%.meshtastic.BluetoothConnectionStatusH\x02\x88\x01\x01\x12\x37\n\x06serial\x18\x04 \x01(\x0b\x32\".meshtastic.SerialConnectionStatusH\x03\x88\x01\x01\x42\x07\n\x05_wifiB\x0b\n\t_ethernetB\x0c\n\n_bluetoothB\t\n\x07_serial\"g\n\x14WifiConnectionStatus\x12\x33\n\x06status\x18\x01 \x01(\x0b\x32#.meshtastic.NetworkConnectionStatus\x12\x0c\n\x04ssid\x18\x02 \x01(\t\x12\x0c\n\x04rssi\x18\x03 \x01(\x05\"O\n\x18\x45thernetConnectionStatus\x12\x33\n\x06status\x18\x01 \x01(\x0b\x32#.meshtastic.NetworkConnectionStatus\"{\n\x17NetworkConnectionStatus\x12\x12\n\nip_address\x18\x01 \x01(\x07\x12\x14\n\x0cis_connected\x18\x02 \x01(\x08\x12\x19\n\x11is_mqtt_connected\x18\x03 \x01(\x08\x12\x1b\n\x13is_syslog_connected\x18\x04 \x01(\x08\"L\n\x19\x42luetoothConnectionStatus\x12\x0b\n\x03pin\x18\x01 \x01(\r\x12\x0c\n\x04rssi\x18\x02 \x01(\x05\x12\x14\n\x0cis_connected\x18\x03 \x01(\x08\"<\n\x16SerialConnectionStatus\x12\x0c\n\x04\x62\x61ud\x18\x01 \x01(\r\x12\x14\n\x0cis_connected\x18\x02 \x01(\x08\x42\x65\n\x13\x63om.geeksville.meshB\x10\x43onnStatusProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.connection_status_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\020ConnStatusProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_DEVICECONNECTIONSTATUS._serialized_start=51
|
||||
_DEVICECONNECTIONSTATUS._serialized_end=356
|
||||
_WIFICONNECTIONSTATUS._serialized_start=358
|
||||
_WIFICONNECTIONSTATUS._serialized_end=461
|
||||
_ETHERNETCONNECTIONSTATUS._serialized_start=463
|
||||
_ETHERNETCONNECTIONSTATUS._serialized_end=542
|
||||
_NETWORKCONNECTIONSTATUS._serialized_start=544
|
||||
_NETWORKCONNECTIONSTATUS._serialized_end=667
|
||||
_BLUETOOTHCONNECTIONSTATUS._serialized_start=669
|
||||
_BLUETOOTHCONNECTIONSTATUS._serialized_end=745
|
||||
_SERIALCONNECTIONSTATUS._serialized_start=747
|
||||
_SERIALCONNECTIONSTATUS._serialized_end=807
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
227
meshtastic/connection_status_pb2.pyi
Normal file
227
meshtastic/connection_status_pb2.pyi
Normal file
@@ -0,0 +1,227 @@
|
||||
"""
|
||||
@generated by mypy-protobuf. Do not edit manually!
|
||||
isort:skip_file
|
||||
"""
|
||||
import builtins
|
||||
import google.protobuf.descriptor
|
||||
import google.protobuf.message
|
||||
import sys
|
||||
import typing
|
||||
|
||||
if sys.version_info >= (3, 8):
|
||||
import typing as typing_extensions
|
||||
else:
|
||||
import typing_extensions
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
||||
|
||||
@typing_extensions.final
|
||||
class DeviceConnectionStatus(google.protobuf.message.Message):
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
WIFI_FIELD_NUMBER: builtins.int
|
||||
ETHERNET_FIELD_NUMBER: builtins.int
|
||||
BLUETOOTH_FIELD_NUMBER: builtins.int
|
||||
SERIAL_FIELD_NUMBER: builtins.int
|
||||
@property
|
||||
def wifi(self) -> global___WifiConnectionStatus:
|
||||
"""
|
||||
WiFi Status
|
||||
"""
|
||||
@property
|
||||
def ethernet(self) -> global___EthernetConnectionStatus:
|
||||
"""
|
||||
WiFi Status
|
||||
"""
|
||||
@property
|
||||
def bluetooth(self) -> global___BluetoothConnectionStatus:
|
||||
"""
|
||||
Bluetooth Status
|
||||
"""
|
||||
@property
|
||||
def serial(self) -> global___SerialConnectionStatus:
|
||||
"""
|
||||
Serial Status
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
wifi: global___WifiConnectionStatus | None = ...,
|
||||
ethernet: global___EthernetConnectionStatus | None = ...,
|
||||
bluetooth: global___BluetoothConnectionStatus | None = ...,
|
||||
serial: global___SerialConnectionStatus | None = ...,
|
||||
) -> None: ...
|
||||
def HasField(self, field_name: typing_extensions.Literal["_bluetooth", b"_bluetooth", "_ethernet", b"_ethernet", "_serial", b"_serial", "_wifi", b"_wifi", "bluetooth", b"bluetooth", "ethernet", b"ethernet", "serial", b"serial", "wifi", b"wifi"]) -> builtins.bool: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["_bluetooth", b"_bluetooth", "_ethernet", b"_ethernet", "_serial", b"_serial", "_wifi", b"_wifi", "bluetooth", b"bluetooth", "ethernet", b"ethernet", "serial", b"serial", "wifi", b"wifi"]) -> None: ...
|
||||
@typing.overload
|
||||
def WhichOneof(self, oneof_group: typing_extensions.Literal["_bluetooth", b"_bluetooth"]) -> typing_extensions.Literal["bluetooth"] | None: ...
|
||||
@typing.overload
|
||||
def WhichOneof(self, oneof_group: typing_extensions.Literal["_ethernet", b"_ethernet"]) -> typing_extensions.Literal["ethernet"] | None: ...
|
||||
@typing.overload
|
||||
def WhichOneof(self, oneof_group: typing_extensions.Literal["_serial", b"_serial"]) -> typing_extensions.Literal["serial"] | None: ...
|
||||
@typing.overload
|
||||
def WhichOneof(self, oneof_group: typing_extensions.Literal["_wifi", b"_wifi"]) -> typing_extensions.Literal["wifi"] | None: ...
|
||||
|
||||
global___DeviceConnectionStatus = DeviceConnectionStatus
|
||||
|
||||
@typing_extensions.final
|
||||
class WifiConnectionStatus(google.protobuf.message.Message):
|
||||
"""
|
||||
WiFi connection status
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
STATUS_FIELD_NUMBER: builtins.int
|
||||
SSID_FIELD_NUMBER: builtins.int
|
||||
RSSI_FIELD_NUMBER: builtins.int
|
||||
@property
|
||||
def status(self) -> global___NetworkConnectionStatus:
|
||||
"""
|
||||
Connection status
|
||||
"""
|
||||
ssid: builtins.str
|
||||
"""
|
||||
WiFi access point SSID
|
||||
"""
|
||||
rssi: builtins.int
|
||||
"""
|
||||
RSSI of wireless connection
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
status: global___NetworkConnectionStatus | None = ...,
|
||||
ssid: builtins.str = ...,
|
||||
rssi: builtins.int = ...,
|
||||
) -> None: ...
|
||||
def HasField(self, field_name: typing_extensions.Literal["status", b"status"]) -> builtins.bool: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["rssi", b"rssi", "ssid", b"ssid", "status", b"status"]) -> None: ...
|
||||
|
||||
global___WifiConnectionStatus = WifiConnectionStatus
|
||||
|
||||
@typing_extensions.final
|
||||
class EthernetConnectionStatus(google.protobuf.message.Message):
|
||||
"""
|
||||
Ethernet connection status
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
STATUS_FIELD_NUMBER: builtins.int
|
||||
@property
|
||||
def status(self) -> global___NetworkConnectionStatus:
|
||||
"""
|
||||
Connection status
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
status: global___NetworkConnectionStatus | None = ...,
|
||||
) -> None: ...
|
||||
def HasField(self, field_name: typing_extensions.Literal["status", b"status"]) -> builtins.bool: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["status", b"status"]) -> None: ...
|
||||
|
||||
global___EthernetConnectionStatus = EthernetConnectionStatus
|
||||
|
||||
@typing_extensions.final
|
||||
class NetworkConnectionStatus(google.protobuf.message.Message):
|
||||
"""
|
||||
Ethernet or WiFi connection status
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
IP_ADDRESS_FIELD_NUMBER: builtins.int
|
||||
IS_CONNECTED_FIELD_NUMBER: builtins.int
|
||||
IS_MQTT_CONNECTED_FIELD_NUMBER: builtins.int
|
||||
IS_SYSLOG_CONNECTED_FIELD_NUMBER: builtins.int
|
||||
ip_address: builtins.int
|
||||
"""
|
||||
IP address of device
|
||||
"""
|
||||
is_connected: builtins.bool
|
||||
"""
|
||||
Whether the device has an active connection or not
|
||||
"""
|
||||
is_mqtt_connected: builtins.bool
|
||||
"""
|
||||
Whether the device has an active connection to an MQTT broker or not
|
||||
"""
|
||||
is_syslog_connected: builtins.bool
|
||||
"""
|
||||
Whether the device is actively remote syslogging or not
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
ip_address: builtins.int = ...,
|
||||
is_connected: builtins.bool = ...,
|
||||
is_mqtt_connected: builtins.bool = ...,
|
||||
is_syslog_connected: builtins.bool = ...,
|
||||
) -> None: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["ip_address", b"ip_address", "is_connected", b"is_connected", "is_mqtt_connected", b"is_mqtt_connected", "is_syslog_connected", b"is_syslog_connected"]) -> None: ...
|
||||
|
||||
global___NetworkConnectionStatus = NetworkConnectionStatus
|
||||
|
||||
@typing_extensions.final
|
||||
class BluetoothConnectionStatus(google.protobuf.message.Message):
|
||||
"""
|
||||
Bluetooth connection status
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
PIN_FIELD_NUMBER: builtins.int
|
||||
RSSI_FIELD_NUMBER: builtins.int
|
||||
IS_CONNECTED_FIELD_NUMBER: builtins.int
|
||||
pin: builtins.int
|
||||
"""
|
||||
The pairing PIN for bluetooth
|
||||
"""
|
||||
rssi: builtins.int
|
||||
"""
|
||||
RSSI of bluetooth connection
|
||||
"""
|
||||
is_connected: builtins.bool
|
||||
"""
|
||||
Whether the device has an active connection or not
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
pin: builtins.int = ...,
|
||||
rssi: builtins.int = ...,
|
||||
is_connected: builtins.bool = ...,
|
||||
) -> None: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["is_connected", b"is_connected", "pin", b"pin", "rssi", b"rssi"]) -> None: ...
|
||||
|
||||
global___BluetoothConnectionStatus = BluetoothConnectionStatus
|
||||
|
||||
@typing_extensions.final
|
||||
class SerialConnectionStatus(google.protobuf.message.Message):
|
||||
"""
|
||||
Serial connection status
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
BAUD_FIELD_NUMBER: builtins.int
|
||||
IS_CONNECTED_FIELD_NUMBER: builtins.int
|
||||
baud: builtins.int
|
||||
"""
|
||||
Serial baud rate
|
||||
"""
|
||||
is_connected: builtins.bool
|
||||
"""
|
||||
Whether the device has an active connection or not
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
baud: builtins.int = ...,
|
||||
is_connected: builtins.bool = ...,
|
||||
) -> None: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["baud", b"baud", "is_connected", b"is_connected"]) -> None: ...
|
||||
|
||||
global___SerialConnectionStatus = SerialConnectionStatus
|
||||
@@ -1,255 +1,46 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: deviceonly.proto
|
||||
|
||||
# source: meshtastic/deviceonly.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from google.protobuf import reflection as _reflection
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from . import channel_pb2 as channel__pb2
|
||||
from . import mesh_pb2 as mesh__pb2
|
||||
from . import radioconfig_pb2 as radioconfig__pb2
|
||||
from meshtastic import channel_pb2 as meshtastic_dot_channel__pb2
|
||||
from meshtastic import localonly_pb2 as meshtastic_dot_localonly__pb2
|
||||
from meshtastic import mesh_pb2 as meshtastic_dot_mesh__pb2
|
||||
from meshtastic import module_config_pb2 as meshtastic_dot_module__config__pb2
|
||||
from meshtastic import telemetry_pb2 as meshtastic_dot_telemetry__pb2
|
||||
from . import nanopb_pb2 as nanopb__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
||||
name='deviceonly.proto',
|
||||
package='',
|
||||
syntax='proto3',
|
||||
serialized_options=b'\n\023com.geeksville.meshB\nDeviceOnlyH\003Z!github.com/meshtastic/gomeshproto',
|
||||
serialized_pb=b'\n\x10\x64\x65viceonly.proto\x1a\rchannel.proto\x1a\nmesh.proto\x1a\x11radioconfig.proto\"\x80\x01\n\x11LegacyRadioConfig\x12\x39\n\x0bpreferences\x18\x01 \x01(\x0b\x32$.LegacyRadioConfig.LegacyPreferences\x1a\x30\n\x11LegacyPreferences\x12\x1b\n\x06region\x18\x0f \x01(\x0e\x32\x0b.RegionCode\"\x8f\x02\n\x0b\x44\x65viceState\x12\'\n\x0blegacyRadio\x18\x01 \x01(\x0b\x32\x12.LegacyRadioConfig\x12\x1c\n\x07my_node\x18\x02 \x01(\x0b\x32\x0b.MyNodeInfo\x12\x14\n\x05owner\x18\x03 \x01(\x0b\x32\x05.User\x12\x1a\n\x07node_db\x18\x04 \x03(\x0b\x32\t.NodeInfo\x12\"\n\rreceive_queue\x18\x05 \x03(\x0b\x32\x0b.MeshPacket\x12\x0f\n\x07version\x18\x08 \x01(\r\x12$\n\x0frx_text_message\x18\x07 \x01(\x0b\x32\x0b.MeshPacket\x12\x0f\n\x07no_save\x18\t \x01(\x08\x12\x15\n\rdid_gps_reset\x18\x0b \x01(\x08J\x04\x08\x0c\x10\r\")\n\x0b\x43hannelFile\x12\x1a\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x08.ChannelBF\n\x13\x63om.geeksville.meshB\nDeviceOnlyH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3'
|
||||
,
|
||||
dependencies=[channel__pb2.DESCRIPTOR,mesh__pb2.DESCRIPTOR,radioconfig__pb2.DESCRIPTOR,])
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bmeshtastic/deviceonly.proto\x12\nmeshtastic\x1a\x18meshtastic/channel.proto\x1a\x1ameshtastic/localonly.proto\x1a\x15meshtastic/mesh.proto\x1a\x1emeshtastic/module_config.proto\x1a\x1ameshtastic/telemetry.proto\x1a\x0cnanopb.proto\"\x90\x01\n\x0cPositionLite\x12\x12\n\nlatitude_i\x18\x01 \x01(\x0f\x12\x13\n\x0blongitude_i\x18\x02 \x01(\x0f\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x05\x12\x0c\n\x04time\x18\x04 \x01(\x07\x12\x37\n\x0flocation_source\x18\x05 \x01(\x0e\x32\x1e.meshtastic.Position.LocSource\"\x86\x02\n\x0cNodeInfoLite\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x1e\n\x04user\x18\x02 \x01(\x0b\x32\x10.meshtastic.User\x12*\n\x08position\x18\x03 \x01(\x0b\x32\x18.meshtastic.PositionLite\x12\x0b\n\x03snr\x18\x04 \x01(\x02\x12\x12\n\nlast_heard\x18\x05 \x01(\x07\x12\x31\n\x0e\x64\x65vice_metrics\x18\x06 \x01(\x0b\x32\x19.meshtastic.DeviceMetrics\x12\x0f\n\x07\x63hannel\x18\x07 \x01(\r\x12\x10\n\x08via_mqtt\x18\x08 \x01(\x08\x12\x11\n\thops_away\x18\t \x01(\r\x12\x13\n\x0bis_favorite\x18\n \x01(\x08\"\xc3\x03\n\x0b\x44\x65viceState\x12\'\n\x07my_node\x18\x02 \x01(\x0b\x32\x16.meshtastic.MyNodeInfo\x12\x1f\n\x05owner\x18\x03 \x01(\x0b\x32\x10.meshtastic.User\x12-\n\rreceive_queue\x18\x05 \x03(\x0b\x32\x16.meshtastic.MeshPacket\x12\x0f\n\x07version\x18\x08 \x01(\r\x12/\n\x0frx_text_message\x18\x07 \x01(\x0b\x32\x16.meshtastic.MeshPacket\x12\x13\n\x07no_save\x18\t \x01(\x08\x42\x02\x18\x01\x12\x15\n\rdid_gps_reset\x18\x0b \x01(\x08\x12+\n\x0brx_waypoint\x18\x0c \x01(\x0b\x32\x16.meshtastic.MeshPacket\x12\x44\n\x19node_remote_hardware_pins\x18\r \x03(\x0b\x32!.meshtastic.NodeRemoteHardwarePin\x12Z\n\x0cnode_db_lite\x18\x0e \x03(\x0b\x32\x18.meshtastic.NodeInfoLiteB*\x92?\'\x92\x01$std::vector<meshtastic_NodeInfoLite>\"E\n\x0b\x43hannelFile\x12%\n\x08\x63hannels\x18\x01 \x03(\x0b\x32\x13.meshtastic.Channel\x12\x0f\n\x07version\x18\x02 \x01(\r\"\x97\x02\n\x08OEMStore\x12\x16\n\x0eoem_icon_width\x18\x01 \x01(\r\x12\x17\n\x0foem_icon_height\x18\x02 \x01(\r\x12\x15\n\roem_icon_bits\x18\x03 \x01(\x0c\x12)\n\x08oem_font\x18\x04 \x01(\x0e\x32\x17.meshtastic.ScreenFonts\x12\x10\n\x08oem_text\x18\x05 \x01(\t\x12\x13\n\x0boem_aes_key\x18\x06 \x01(\x0c\x12\x31\n\x10oem_local_config\x18\x07 \x01(\x0b\x32\x17.meshtastic.LocalConfig\x12>\n\x17oem_local_module_config\x18\x08 \x01(\x0b\x32\x1d.meshtastic.LocalModuleConfig*>\n\x0bScreenFonts\x12\x0e\n\nFONT_SMALL\x10\x00\x12\x0f\n\x0b\x46ONT_MEDIUM\x10\x01\x12\x0e\n\nFONT_LARGE\x10\x02\x42m\n\x13\x63om.geeksville.meshB\nDeviceOnlyZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x92?\x0b\xc2\x01\x08<vector>b\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.deviceonly_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
|
||||
|
||||
_LEGACYRADIOCONFIG_LEGACYPREFERENCES = _descriptor.Descriptor(
|
||||
name='LegacyPreferences',
|
||||
full_name='LegacyRadioConfig.LegacyPreferences',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='region', full_name='LegacyRadioConfig.LegacyPreferences.region', index=0,
|
||||
number=15, type=14, cpp_type=8, label=1,
|
||||
has_default_value=False, default_value=0,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto3',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=147,
|
||||
serialized_end=195,
|
||||
)
|
||||
|
||||
_LEGACYRADIOCONFIG = _descriptor.Descriptor(
|
||||
name='LegacyRadioConfig',
|
||||
full_name='LegacyRadioConfig',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='preferences', full_name='LegacyRadioConfig.preferences', index=0,
|
||||
number=1, type=11, cpp_type=10, label=1,
|
||||
has_default_value=False, default_value=None,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[_LEGACYRADIOCONFIG_LEGACYPREFERENCES, ],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto3',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=67,
|
||||
serialized_end=195,
|
||||
)
|
||||
|
||||
|
||||
_DEVICESTATE = _descriptor.Descriptor(
|
||||
name='DeviceState',
|
||||
full_name='DeviceState',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='legacyRadio', full_name='DeviceState.legacyRadio', index=0,
|
||||
number=1, type=11, cpp_type=10, label=1,
|
||||
has_default_value=False, default_value=None,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='my_node', full_name='DeviceState.my_node', index=1,
|
||||
number=2, type=11, cpp_type=10, label=1,
|
||||
has_default_value=False, default_value=None,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='owner', full_name='DeviceState.owner', index=2,
|
||||
number=3, type=11, cpp_type=10, label=1,
|
||||
has_default_value=False, default_value=None,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='node_db', full_name='DeviceState.node_db', index=3,
|
||||
number=4, type=11, cpp_type=10, label=3,
|
||||
has_default_value=False, default_value=[],
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='receive_queue', full_name='DeviceState.receive_queue', index=4,
|
||||
number=5, type=11, cpp_type=10, label=3,
|
||||
has_default_value=False, default_value=[],
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='version', full_name='DeviceState.version', index=5,
|
||||
number=8, type=13, cpp_type=3, label=1,
|
||||
has_default_value=False, default_value=0,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='rx_text_message', full_name='DeviceState.rx_text_message', index=6,
|
||||
number=7, type=11, cpp_type=10, label=1,
|
||||
has_default_value=False, default_value=None,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='no_save', full_name='DeviceState.no_save', index=7,
|
||||
number=9, type=8, cpp_type=7, label=1,
|
||||
has_default_value=False, default_value=False,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='did_gps_reset', full_name='DeviceState.did_gps_reset', index=8,
|
||||
number=11, type=8, cpp_type=7, label=1,
|
||||
has_default_value=False, default_value=False,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto3',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=198,
|
||||
serialized_end=469,
|
||||
)
|
||||
|
||||
|
||||
_CHANNELFILE = _descriptor.Descriptor(
|
||||
name='ChannelFile',
|
||||
full_name='ChannelFile',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='channels', full_name='ChannelFile.channels', index=0,
|
||||
number=1, type=11, cpp_type=10, label=3,
|
||||
has_default_value=False, default_value=[],
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto3',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=471,
|
||||
serialized_end=512,
|
||||
)
|
||||
|
||||
_LEGACYRADIOCONFIG_LEGACYPREFERENCES.fields_by_name['region'].enum_type = radioconfig__pb2._REGIONCODE
|
||||
_LEGACYRADIOCONFIG_LEGACYPREFERENCES.containing_type = _LEGACYRADIOCONFIG
|
||||
_LEGACYRADIOCONFIG.fields_by_name['preferences'].message_type = _LEGACYRADIOCONFIG_LEGACYPREFERENCES
|
||||
_DEVICESTATE.fields_by_name['legacyRadio'].message_type = _LEGACYRADIOCONFIG
|
||||
_DEVICESTATE.fields_by_name['my_node'].message_type = mesh__pb2._MYNODEINFO
|
||||
_DEVICESTATE.fields_by_name['owner'].message_type = mesh__pb2._USER
|
||||
_DEVICESTATE.fields_by_name['node_db'].message_type = mesh__pb2._NODEINFO
|
||||
_DEVICESTATE.fields_by_name['receive_queue'].message_type = mesh__pb2._MESHPACKET
|
||||
_DEVICESTATE.fields_by_name['rx_text_message'].message_type = mesh__pb2._MESHPACKET
|
||||
_CHANNELFILE.fields_by_name['channels'].message_type = channel__pb2._CHANNEL
|
||||
DESCRIPTOR.message_types_by_name['LegacyRadioConfig'] = _LEGACYRADIOCONFIG
|
||||
DESCRIPTOR.message_types_by_name['DeviceState'] = _DEVICESTATE
|
||||
DESCRIPTOR.message_types_by_name['ChannelFile'] = _CHANNELFILE
|
||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
||||
|
||||
LegacyRadioConfig = _reflection.GeneratedProtocolMessageType('LegacyRadioConfig', (_message.Message,), {
|
||||
|
||||
'LegacyPreferences' : _reflection.GeneratedProtocolMessageType('LegacyPreferences', (_message.Message,), {
|
||||
'DESCRIPTOR' : _LEGACYRADIOCONFIG_LEGACYPREFERENCES,
|
||||
'__module__' : 'deviceonly_pb2'
|
||||
# @@protoc_insertion_point(class_scope:LegacyRadioConfig.LegacyPreferences)
|
||||
})
|
||||
,
|
||||
'DESCRIPTOR' : _LEGACYRADIOCONFIG,
|
||||
'__module__' : 'deviceonly_pb2'
|
||||
# @@protoc_insertion_point(class_scope:LegacyRadioConfig)
|
||||
})
|
||||
_sym_db.RegisterMessage(LegacyRadioConfig)
|
||||
_sym_db.RegisterMessage(LegacyRadioConfig.LegacyPreferences)
|
||||
|
||||
DeviceState = _reflection.GeneratedProtocolMessageType('DeviceState', (_message.Message,), {
|
||||
'DESCRIPTOR' : _DEVICESTATE,
|
||||
'__module__' : 'deviceonly_pb2'
|
||||
# @@protoc_insertion_point(class_scope:DeviceState)
|
||||
})
|
||||
_sym_db.RegisterMessage(DeviceState)
|
||||
|
||||
ChannelFile = _reflection.GeneratedProtocolMessageType('ChannelFile', (_message.Message,), {
|
||||
'DESCRIPTOR' : _CHANNELFILE,
|
||||
'__module__' : 'deviceonly_pb2'
|
||||
# @@protoc_insertion_point(class_scope:ChannelFile)
|
||||
})
|
||||
_sym_db.RegisterMessage(ChannelFile)
|
||||
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\nDeviceOnlyZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000\222?\013\302\001\010<vector>'
|
||||
_DEVICESTATE.fields_by_name['no_save']._options = None
|
||||
_DEVICESTATE.fields_by_name['no_save']._serialized_options = b'\030\001'
|
||||
_DEVICESTATE.fields_by_name['node_db_lite']._options = None
|
||||
_DEVICESTATE.fields_by_name['node_db_lite']._serialized_options = b'\222?\'\222\001$std::vector<meshtastic_NodeInfoLite>'
|
||||
_SCREENFONTS._serialized_start=1413
|
||||
_SCREENFONTS._serialized_end=1475
|
||||
_POSITIONLITE._serialized_start=195
|
||||
_POSITIONLITE._serialized_end=339
|
||||
_NODEINFOLITE._serialized_start=342
|
||||
_NODEINFOLITE._serialized_end=604
|
||||
_DEVICESTATE._serialized_start=607
|
||||
_DEVICESTATE._serialized_end=1058
|
||||
_CHANNELFILE._serialized_start=1060
|
||||
_CHANNELFILE._serialized_end=1129
|
||||
_OEMSTORE._serialized_start=1132
|
||||
_OEMSTORE._serialized_end=1411
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
|
||||
386
meshtastic/deviceonly_pb2.pyi
Normal file
386
meshtastic/deviceonly_pb2.pyi
Normal file
@@ -0,0 +1,386 @@
|
||||
"""
|
||||
@generated by mypy-protobuf. Do not edit manually!
|
||||
isort:skip_file
|
||||
"""
|
||||
import builtins
|
||||
import collections.abc
|
||||
import google.protobuf.descriptor
|
||||
import google.protobuf.internal.containers
|
||||
import google.protobuf.internal.enum_type_wrapper
|
||||
import google.protobuf.message
|
||||
import meshtastic.channel_pb2
|
||||
import meshtastic.localonly_pb2
|
||||
import meshtastic.mesh_pb2
|
||||
import meshtastic.telemetry_pb2
|
||||
import sys
|
||||
import typing
|
||||
|
||||
if sys.version_info >= (3, 10):
|
||||
import typing as typing_extensions
|
||||
else:
|
||||
import typing_extensions
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
||||
|
||||
class _ScreenFonts:
|
||||
ValueType = typing.NewType("ValueType", builtins.int)
|
||||
V: typing_extensions.TypeAlias = ValueType
|
||||
|
||||
class _ScreenFontsEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[_ScreenFonts.ValueType], builtins.type):
|
||||
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
|
||||
FONT_SMALL: _ScreenFonts.ValueType # 0
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
FONT_MEDIUM: _ScreenFonts.ValueType # 1
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
FONT_LARGE: _ScreenFonts.ValueType # 2
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
|
||||
class ScreenFonts(_ScreenFonts, metaclass=_ScreenFontsEnumTypeWrapper):
|
||||
"""
|
||||
Font sizes for the device screen
|
||||
"""
|
||||
|
||||
FONT_SMALL: ScreenFonts.ValueType # 0
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
FONT_MEDIUM: ScreenFonts.ValueType # 1
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
FONT_LARGE: ScreenFonts.ValueType # 2
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
global___ScreenFonts = ScreenFonts
|
||||
|
||||
@typing_extensions.final
|
||||
class PositionLite(google.protobuf.message.Message):
|
||||
"""
|
||||
Position with static location information only for NodeDBLite
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
LATITUDE_I_FIELD_NUMBER: builtins.int
|
||||
LONGITUDE_I_FIELD_NUMBER: builtins.int
|
||||
ALTITUDE_FIELD_NUMBER: builtins.int
|
||||
TIME_FIELD_NUMBER: builtins.int
|
||||
LOCATION_SOURCE_FIELD_NUMBER: builtins.int
|
||||
latitude_i: builtins.int
|
||||
"""
|
||||
The new preferred location encoding, multiply by 1e-7 to get degrees
|
||||
in floating point
|
||||
"""
|
||||
longitude_i: builtins.int
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
altitude: builtins.int
|
||||
"""
|
||||
In meters above MSL (but see issue #359)
|
||||
"""
|
||||
time: builtins.int
|
||||
"""
|
||||
This is usually not sent over the mesh (to save space), but it is sent
|
||||
from the phone so that the local device can set its RTC If it is sent over
|
||||
the mesh (because there are devices on the mesh without GPS), it will only
|
||||
be sent by devices which has a hardware GPS clock.
|
||||
seconds since 1970
|
||||
"""
|
||||
location_source: meshtastic.mesh_pb2.Position.LocSource.ValueType
|
||||
"""
|
||||
TODO: REPLACE
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
latitude_i: builtins.int = ...,
|
||||
longitude_i: builtins.int = ...,
|
||||
altitude: builtins.int = ...,
|
||||
time: builtins.int = ...,
|
||||
location_source: meshtastic.mesh_pb2.Position.LocSource.ValueType = ...,
|
||||
) -> None: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["altitude", b"altitude", "latitude_i", b"latitude_i", "location_source", b"location_source", "longitude_i", b"longitude_i", "time", b"time"]) -> None: ...
|
||||
|
||||
global___PositionLite = PositionLite
|
||||
|
||||
@typing_extensions.final
|
||||
class NodeInfoLite(google.protobuf.message.Message):
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
NUM_FIELD_NUMBER: builtins.int
|
||||
USER_FIELD_NUMBER: builtins.int
|
||||
POSITION_FIELD_NUMBER: builtins.int
|
||||
SNR_FIELD_NUMBER: builtins.int
|
||||
LAST_HEARD_FIELD_NUMBER: builtins.int
|
||||
DEVICE_METRICS_FIELD_NUMBER: builtins.int
|
||||
CHANNEL_FIELD_NUMBER: builtins.int
|
||||
VIA_MQTT_FIELD_NUMBER: builtins.int
|
||||
HOPS_AWAY_FIELD_NUMBER: builtins.int
|
||||
IS_FAVORITE_FIELD_NUMBER: builtins.int
|
||||
num: builtins.int
|
||||
"""
|
||||
The node number
|
||||
"""
|
||||
@property
|
||||
def user(self) -> meshtastic.mesh_pb2.User:
|
||||
"""
|
||||
The user info for this node
|
||||
"""
|
||||
@property
|
||||
def position(self) -> global___PositionLite:
|
||||
"""
|
||||
This position data. Note: before 1.2.14 we would also store the last time we've heard from this node in position.time, that is no longer true.
|
||||
Position.time now indicates the last time we received a POSITION from that node.
|
||||
"""
|
||||
snr: builtins.float
|
||||
"""
|
||||
Returns the Signal-to-noise ratio (SNR) of the last received message,
|
||||
as measured by the receiver. Return SNR of the last received message in dB
|
||||
"""
|
||||
last_heard: builtins.int
|
||||
"""
|
||||
Set to indicate the last time we received a packet from this node
|
||||
"""
|
||||
@property
|
||||
def device_metrics(self) -> meshtastic.telemetry_pb2.DeviceMetrics:
|
||||
"""
|
||||
The latest device metrics for the node.
|
||||
"""
|
||||
channel: builtins.int
|
||||
"""
|
||||
local channel index we heard that node on. Only populated if its not the default channel.
|
||||
"""
|
||||
via_mqtt: builtins.bool
|
||||
"""
|
||||
True if we witnessed the node over MQTT instead of LoRA transport
|
||||
"""
|
||||
hops_away: builtins.int
|
||||
"""
|
||||
Number of hops away from us this node is (0 if adjacent)
|
||||
"""
|
||||
is_favorite: builtins.bool
|
||||
"""
|
||||
True if node is in our favorites list
|
||||
Persists between NodeDB internal clean ups
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
num: builtins.int = ...,
|
||||
user: meshtastic.mesh_pb2.User | None = ...,
|
||||
position: global___PositionLite | None = ...,
|
||||
snr: builtins.float = ...,
|
||||
last_heard: builtins.int = ...,
|
||||
device_metrics: meshtastic.telemetry_pb2.DeviceMetrics | None = ...,
|
||||
channel: builtins.int = ...,
|
||||
via_mqtt: builtins.bool = ...,
|
||||
hops_away: builtins.int = ...,
|
||||
is_favorite: builtins.bool = ...,
|
||||
) -> None: ...
|
||||
def HasField(self, field_name: typing_extensions.Literal["device_metrics", b"device_metrics", "position", b"position", "user", b"user"]) -> builtins.bool: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["channel", b"channel", "device_metrics", b"device_metrics", "hops_away", b"hops_away", "is_favorite", b"is_favorite", "last_heard", b"last_heard", "num", b"num", "position", b"position", "snr", b"snr", "user", b"user", "via_mqtt", b"via_mqtt"]) -> None: ...
|
||||
|
||||
global___NodeInfoLite = NodeInfoLite
|
||||
|
||||
@typing_extensions.final
|
||||
class DeviceState(google.protobuf.message.Message):
|
||||
"""
|
||||
This message is never sent over the wire, but it is used for serializing DB
|
||||
state to flash in the device code
|
||||
FIXME, since we write this each time we enter deep sleep (and have infinite
|
||||
flash) it would be better to use some sort of append only data structure for
|
||||
the receive queue and use the preferences store for the other stuff
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
MY_NODE_FIELD_NUMBER: builtins.int
|
||||
OWNER_FIELD_NUMBER: builtins.int
|
||||
RECEIVE_QUEUE_FIELD_NUMBER: builtins.int
|
||||
VERSION_FIELD_NUMBER: builtins.int
|
||||
RX_TEXT_MESSAGE_FIELD_NUMBER: builtins.int
|
||||
NO_SAVE_FIELD_NUMBER: builtins.int
|
||||
DID_GPS_RESET_FIELD_NUMBER: builtins.int
|
||||
RX_WAYPOINT_FIELD_NUMBER: builtins.int
|
||||
NODE_REMOTE_HARDWARE_PINS_FIELD_NUMBER: builtins.int
|
||||
NODE_DB_LITE_FIELD_NUMBER: builtins.int
|
||||
@property
|
||||
def my_node(self) -> meshtastic.mesh_pb2.MyNodeInfo:
|
||||
"""
|
||||
Read only settings/info about this node
|
||||
"""
|
||||
@property
|
||||
def owner(self) -> meshtastic.mesh_pb2.User:
|
||||
"""
|
||||
My owner info
|
||||
"""
|
||||
@property
|
||||
def receive_queue(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[meshtastic.mesh_pb2.MeshPacket]:
|
||||
"""
|
||||
Received packets saved for delivery to the phone
|
||||
"""
|
||||
version: builtins.int
|
||||
"""
|
||||
A version integer used to invalidate old save files when we make
|
||||
incompatible changes This integer is set at build time and is private to
|
||||
NodeDB.cpp in the device code.
|
||||
"""
|
||||
@property
|
||||
def rx_text_message(self) -> meshtastic.mesh_pb2.MeshPacket:
|
||||
"""
|
||||
We keep the last received text message (only) stored in the device flash,
|
||||
so we can show it on the screen.
|
||||
Might be null
|
||||
"""
|
||||
no_save: builtins.bool
|
||||
"""
|
||||
Used only during development.
|
||||
Indicates developer is testing and changes should never be saved to flash.
|
||||
Deprecated in 2.3.1
|
||||
"""
|
||||
did_gps_reset: builtins.bool
|
||||
"""
|
||||
Some GPS receivers seem to have bogus settings from the factory, so we always do one factory reset.
|
||||
"""
|
||||
@property
|
||||
def rx_waypoint(self) -> meshtastic.mesh_pb2.MeshPacket:
|
||||
"""
|
||||
We keep the last received waypoint stored in the device flash,
|
||||
so we can show it on the screen.
|
||||
Might be null
|
||||
"""
|
||||
@property
|
||||
def node_remote_hardware_pins(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[meshtastic.mesh_pb2.NodeRemoteHardwarePin]:
|
||||
"""
|
||||
The mesh's nodes with their available gpio pins for RemoteHardware module
|
||||
"""
|
||||
@property
|
||||
def node_db_lite(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___NodeInfoLite]:
|
||||
"""
|
||||
New lite version of NodeDB to decrease memory footprint
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
my_node: meshtastic.mesh_pb2.MyNodeInfo | None = ...,
|
||||
owner: meshtastic.mesh_pb2.User | None = ...,
|
||||
receive_queue: collections.abc.Iterable[meshtastic.mesh_pb2.MeshPacket] | None = ...,
|
||||
version: builtins.int = ...,
|
||||
rx_text_message: meshtastic.mesh_pb2.MeshPacket | None = ...,
|
||||
no_save: builtins.bool = ...,
|
||||
did_gps_reset: builtins.bool = ...,
|
||||
rx_waypoint: meshtastic.mesh_pb2.MeshPacket | None = ...,
|
||||
node_remote_hardware_pins: collections.abc.Iterable[meshtastic.mesh_pb2.NodeRemoteHardwarePin] | None = ...,
|
||||
node_db_lite: collections.abc.Iterable[global___NodeInfoLite] | None = ...,
|
||||
) -> None: ...
|
||||
def HasField(self, field_name: typing_extensions.Literal["my_node", b"my_node", "owner", b"owner", "rx_text_message", b"rx_text_message", "rx_waypoint", b"rx_waypoint"]) -> builtins.bool: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["did_gps_reset", b"did_gps_reset", "my_node", b"my_node", "no_save", b"no_save", "node_db_lite", b"node_db_lite", "node_remote_hardware_pins", b"node_remote_hardware_pins", "owner", b"owner", "receive_queue", b"receive_queue", "rx_text_message", b"rx_text_message", "rx_waypoint", b"rx_waypoint", "version", b"version"]) -> None: ...
|
||||
|
||||
global___DeviceState = DeviceState
|
||||
|
||||
@typing_extensions.final
|
||||
class ChannelFile(google.protobuf.message.Message):
|
||||
"""
|
||||
The on-disk saved channels
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
CHANNELS_FIELD_NUMBER: builtins.int
|
||||
VERSION_FIELD_NUMBER: builtins.int
|
||||
@property
|
||||
def channels(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[meshtastic.channel_pb2.Channel]:
|
||||
"""
|
||||
The channels our node knows about
|
||||
"""
|
||||
version: builtins.int
|
||||
"""
|
||||
A version integer used to invalidate old save files when we make
|
||||
incompatible changes This integer is set at build time and is private to
|
||||
NodeDB.cpp in the device code.
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
channels: collections.abc.Iterable[meshtastic.channel_pb2.Channel] | None = ...,
|
||||
version: builtins.int = ...,
|
||||
) -> None: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["channels", b"channels", "version", b"version"]) -> None: ...
|
||||
|
||||
global___ChannelFile = ChannelFile
|
||||
|
||||
@typing_extensions.final
|
||||
class OEMStore(google.protobuf.message.Message):
|
||||
"""
|
||||
This can be used for customizing the firmware distribution. If populated,
|
||||
show a secondary bootup screen with custom logo and text for 2.5 seconds.
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
OEM_ICON_WIDTH_FIELD_NUMBER: builtins.int
|
||||
OEM_ICON_HEIGHT_FIELD_NUMBER: builtins.int
|
||||
OEM_ICON_BITS_FIELD_NUMBER: builtins.int
|
||||
OEM_FONT_FIELD_NUMBER: builtins.int
|
||||
OEM_TEXT_FIELD_NUMBER: builtins.int
|
||||
OEM_AES_KEY_FIELD_NUMBER: builtins.int
|
||||
OEM_LOCAL_CONFIG_FIELD_NUMBER: builtins.int
|
||||
OEM_LOCAL_MODULE_CONFIG_FIELD_NUMBER: builtins.int
|
||||
oem_icon_width: builtins.int
|
||||
"""
|
||||
The Logo width in Px
|
||||
"""
|
||||
oem_icon_height: builtins.int
|
||||
"""
|
||||
The Logo height in Px
|
||||
"""
|
||||
oem_icon_bits: builtins.bytes
|
||||
"""
|
||||
The Logo in XBM bytechar format
|
||||
"""
|
||||
oem_font: global___ScreenFonts.ValueType
|
||||
"""
|
||||
Use this font for the OEM text.
|
||||
"""
|
||||
oem_text: builtins.str
|
||||
"""
|
||||
Use this font for the OEM text.
|
||||
"""
|
||||
oem_aes_key: builtins.bytes
|
||||
"""
|
||||
The default device encryption key, 16 or 32 byte
|
||||
"""
|
||||
@property
|
||||
def oem_local_config(self) -> meshtastic.localonly_pb2.LocalConfig:
|
||||
"""
|
||||
A Preset LocalConfig to apply during factory reset
|
||||
"""
|
||||
@property
|
||||
def oem_local_module_config(self) -> meshtastic.localonly_pb2.LocalModuleConfig:
|
||||
"""
|
||||
A Preset LocalModuleConfig to apply during factory reset
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
oem_icon_width: builtins.int = ...,
|
||||
oem_icon_height: builtins.int = ...,
|
||||
oem_icon_bits: builtins.bytes = ...,
|
||||
oem_font: global___ScreenFonts.ValueType = ...,
|
||||
oem_text: builtins.str = ...,
|
||||
oem_aes_key: builtins.bytes = ...,
|
||||
oem_local_config: meshtastic.localonly_pb2.LocalConfig | None = ...,
|
||||
oem_local_module_config: meshtastic.localonly_pb2.LocalModuleConfig | None = ...,
|
||||
) -> None: ...
|
||||
def HasField(self, field_name: typing_extensions.Literal["oem_local_config", b"oem_local_config", "oem_local_module_config", b"oem_local_module_config"]) -> builtins.bool: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["oem_aes_key", b"oem_aes_key", "oem_font", b"oem_font", "oem_icon_bits", b"oem_icon_bits", "oem_icon_height", b"oem_icon_height", "oem_icon_width", b"oem_icon_width", "oem_local_config", b"oem_local_config", "oem_local_module_config", b"oem_local_module_config", "oem_text", b"oem_text"]) -> None: ...
|
||||
|
||||
global___OEMStore = OEMStore
|
||||
@@ -1,83 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: environmental_measurement.proto
|
||||
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from google.protobuf import reflection as _reflection
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
||||
name='environmental_measurement.proto',
|
||||
package='',
|
||||
syntax='proto3',
|
||||
serialized_options=b'Z!github.com/meshtastic/gomeshproto',
|
||||
serialized_pb=b'\n\x1f\x65nvironmental_measurement.proto\"g\n\x18\x45nvironmentalMeasurement\x12\x13\n\x0btemperature\x18\x01 \x01(\x02\x12\x19\n\x11relative_humidity\x18\x02 \x01(\x02\x12\x1b\n\x13\x62\x61rometric_pressure\x18\x03 \x01(\x02\x42#Z!github.com/meshtastic/gomeshprotob\x06proto3'
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
_ENVIRONMENTALMEASUREMENT = _descriptor.Descriptor(
|
||||
name='EnvironmentalMeasurement',
|
||||
full_name='EnvironmentalMeasurement',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='temperature', full_name='EnvironmentalMeasurement.temperature', index=0,
|
||||
number=1, type=2, cpp_type=6, label=1,
|
||||
has_default_value=False, default_value=float(0),
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='relative_humidity', full_name='EnvironmentalMeasurement.relative_humidity', index=1,
|
||||
number=2, type=2, cpp_type=6, label=1,
|
||||
has_default_value=False, default_value=float(0),
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='barometric_pressure', full_name='EnvironmentalMeasurement.barometric_pressure', index=2,
|
||||
number=3, type=2, cpp_type=6, label=1,
|
||||
has_default_value=False, default_value=float(0),
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto3',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=35,
|
||||
serialized_end=138,
|
||||
)
|
||||
|
||||
DESCRIPTOR.message_types_by_name['EnvironmentalMeasurement'] = _ENVIRONMENTALMEASUREMENT
|
||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
||||
|
||||
EnvironmentalMeasurement = _reflection.GeneratedProtocolMessageType('EnvironmentalMeasurement', (_message.Message,), {
|
||||
'DESCRIPTOR' : _ENVIRONMENTALMEASUREMENT,
|
||||
'__module__' : 'environmental_measurement_pb2'
|
||||
# @@protoc_insertion_point(class_scope:EnvironmentalMeasurement)
|
||||
})
|
||||
_sym_db.RegisterMessage(EnvironmentalMeasurement)
|
||||
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
@@ -1,81 +0,0 @@
|
||||
"""Globals singleton class.
|
||||
|
||||
Instead of using a global, stuff your variables in this "trash can".
|
||||
This is not much better than using python's globals, but it allows
|
||||
us to better test meshtastic. Plus, there are some weird python
|
||||
global issues/gotcha that we can hopefully avoid by using this
|
||||
class instead.
|
||||
|
||||
"""
|
||||
|
||||
class Globals:
|
||||
"""Globals class is a Singleton."""
|
||||
__instance = None
|
||||
|
||||
@staticmethod
|
||||
def getInstance():
|
||||
"""Get an instance of the Globals class."""
|
||||
if Globals.__instance is None:
|
||||
Globals()
|
||||
return Globals.__instance
|
||||
|
||||
def __init__(self):
|
||||
"""Constructor for the Globals CLass"""
|
||||
if Globals.__instance is not None:
|
||||
raise Exception("This class is a singleton")
|
||||
else:
|
||||
Globals.__instance = self
|
||||
self.args = None
|
||||
self.parser = None
|
||||
self.target_node = None
|
||||
self.channel_index = None
|
||||
self.logfile = None
|
||||
|
||||
def reset(self):
|
||||
"""Reset all of our globals. If you add a member, add it to this method, too."""
|
||||
self.args = None
|
||||
self.parser = None
|
||||
self.target_node = None
|
||||
self.channel_index = None
|
||||
|
||||
# setters
|
||||
def set_args(self, args):
|
||||
"""Set the args"""
|
||||
self.args = args
|
||||
|
||||
def set_parser(self, parser):
|
||||
"""Set the parser"""
|
||||
self.parser = parser
|
||||
|
||||
def set_target_node(self, target_node):
|
||||
"""Set the target_node"""
|
||||
self.target_node = target_node
|
||||
|
||||
def set_channel_index(self, channel_index):
|
||||
"""Set the channel_index"""
|
||||
self.channel_index = channel_index
|
||||
|
||||
def set_logfile(self, logfile):
|
||||
"""Set the logfile"""
|
||||
self.logfile = logfile
|
||||
|
||||
# getters
|
||||
def get_args(self):
|
||||
"""Get args"""
|
||||
return self.args
|
||||
|
||||
def get_parser(self):
|
||||
"""Get parser"""
|
||||
return self.parser
|
||||
|
||||
def get_target_node(self):
|
||||
"""Get target_node"""
|
||||
return self.target_node
|
||||
|
||||
def get_channel_index(self):
|
||||
"""Get channel_index"""
|
||||
return self.channel_index
|
||||
|
||||
def get_logfile(self):
|
||||
"""Get logfile"""
|
||||
return self.logfile
|
||||
30
meshtastic/localonly_pb2.py
Normal file
30
meshtastic/localonly_pb2.py
Normal file
@@ -0,0 +1,30 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: meshtastic/localonly.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from meshtastic import config_pb2 as meshtastic_dot_config__pb2
|
||||
from meshtastic import module_config_pb2 as meshtastic_dot_module__config__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1ameshtastic/localonly.proto\x12\nmeshtastic\x1a\x17meshtastic/config.proto\x1a\x1emeshtastic/module_config.proto\"\xfd\x02\n\x0bLocalConfig\x12/\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32\x1f.meshtastic.Config.DeviceConfig\x12\x33\n\x08position\x18\x02 \x01(\x0b\x32!.meshtastic.Config.PositionConfig\x12-\n\x05power\x18\x03 \x01(\x0b\x32\x1e.meshtastic.Config.PowerConfig\x12\x31\n\x07network\x18\x04 \x01(\x0b\x32 .meshtastic.Config.NetworkConfig\x12\x31\n\x07\x64isplay\x18\x05 \x01(\x0b\x32 .meshtastic.Config.DisplayConfig\x12+\n\x04lora\x18\x06 \x01(\x0b\x32\x1d.meshtastic.Config.LoRaConfig\x12\x35\n\tbluetooth\x18\x07 \x01(\x0b\x32\".meshtastic.Config.BluetoothConfig\x12\x0f\n\x07version\x18\x08 \x01(\r\"\xfb\x06\n\x11LocalModuleConfig\x12\x31\n\x04mqtt\x18\x01 \x01(\x0b\x32#.meshtastic.ModuleConfig.MQTTConfig\x12\x35\n\x06serial\x18\x02 \x01(\x0b\x32%.meshtastic.ModuleConfig.SerialConfig\x12R\n\x15\x65xternal_notification\x18\x03 \x01(\x0b\x32\x33.meshtastic.ModuleConfig.ExternalNotificationConfig\x12\x42\n\rstore_forward\x18\x04 \x01(\x0b\x32+.meshtastic.ModuleConfig.StoreForwardConfig\x12<\n\nrange_test\x18\x05 \x01(\x0b\x32(.meshtastic.ModuleConfig.RangeTestConfig\x12;\n\ttelemetry\x18\x06 \x01(\x0b\x32(.meshtastic.ModuleConfig.TelemetryConfig\x12\x44\n\x0e\x63\x61nned_message\x18\x07 \x01(\x0b\x32,.meshtastic.ModuleConfig.CannedMessageConfig\x12\x33\n\x05\x61udio\x18\t \x01(\x0b\x32$.meshtastic.ModuleConfig.AudioConfig\x12\x46\n\x0fremote_hardware\x18\n \x01(\x0b\x32-.meshtastic.ModuleConfig.RemoteHardwareConfig\x12\x42\n\rneighbor_info\x18\x0b \x01(\x0b\x32+.meshtastic.ModuleConfig.NeighborInfoConfig\x12H\n\x10\x61mbient_lighting\x18\x0c \x01(\x0b\x32..meshtastic.ModuleConfig.AmbientLightingConfig\x12H\n\x10\x64\x65tection_sensor\x18\r \x01(\x0b\x32..meshtastic.ModuleConfig.DetectionSensorConfig\x12=\n\npaxcounter\x18\x0e \x01(\x0b\x32).meshtastic.ModuleConfig.PaxcounterConfig\x12\x0f\n\x07version\x18\x08 \x01(\rBd\n\x13\x63om.geeksville.meshB\x0fLocalOnlyProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.localonly_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\017LocalOnlyProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_LOCALCONFIG._serialized_start=100
|
||||
_LOCALCONFIG._serialized_end=481
|
||||
_LOCALMODULECONFIG._serialized_start=484
|
||||
_LOCALMODULECONFIG._serialized_end=1375
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
204
meshtastic/localonly_pb2.pyi
Normal file
204
meshtastic/localonly_pb2.pyi
Normal file
@@ -0,0 +1,204 @@
|
||||
"""
|
||||
@generated by mypy-protobuf. Do not edit manually!
|
||||
isort:skip_file
|
||||
"""
|
||||
import builtins
|
||||
import google.protobuf.descriptor
|
||||
import google.protobuf.message
|
||||
import meshtastic.config_pb2
|
||||
import meshtastic.module_config_pb2
|
||||
import sys
|
||||
|
||||
if sys.version_info >= (3, 8):
|
||||
import typing as typing_extensions
|
||||
else:
|
||||
import typing_extensions
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
||||
|
||||
@typing_extensions.final
|
||||
class LocalConfig(google.protobuf.message.Message):
|
||||
"""
|
||||
Protobuf structures common to apponly.proto and deviceonly.proto
|
||||
This is never sent over the wire, only for local use
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
DEVICE_FIELD_NUMBER: builtins.int
|
||||
POSITION_FIELD_NUMBER: builtins.int
|
||||
POWER_FIELD_NUMBER: builtins.int
|
||||
NETWORK_FIELD_NUMBER: builtins.int
|
||||
DISPLAY_FIELD_NUMBER: builtins.int
|
||||
LORA_FIELD_NUMBER: builtins.int
|
||||
BLUETOOTH_FIELD_NUMBER: builtins.int
|
||||
VERSION_FIELD_NUMBER: builtins.int
|
||||
@property
|
||||
def device(self) -> meshtastic.config_pb2.Config.DeviceConfig:
|
||||
"""
|
||||
The part of the config that is specific to the Device
|
||||
"""
|
||||
@property
|
||||
def position(self) -> meshtastic.config_pb2.Config.PositionConfig:
|
||||
"""
|
||||
The part of the config that is specific to the GPS Position
|
||||
"""
|
||||
@property
|
||||
def power(self) -> meshtastic.config_pb2.Config.PowerConfig:
|
||||
"""
|
||||
The part of the config that is specific to the Power settings
|
||||
"""
|
||||
@property
|
||||
def network(self) -> meshtastic.config_pb2.Config.NetworkConfig:
|
||||
"""
|
||||
The part of the config that is specific to the Wifi Settings
|
||||
"""
|
||||
@property
|
||||
def display(self) -> meshtastic.config_pb2.Config.DisplayConfig:
|
||||
"""
|
||||
The part of the config that is specific to the Display
|
||||
"""
|
||||
@property
|
||||
def lora(self) -> meshtastic.config_pb2.Config.LoRaConfig:
|
||||
"""
|
||||
The part of the config that is specific to the Lora Radio
|
||||
"""
|
||||
@property
|
||||
def bluetooth(self) -> meshtastic.config_pb2.Config.BluetoothConfig:
|
||||
"""
|
||||
The part of the config that is specific to the Bluetooth settings
|
||||
"""
|
||||
version: builtins.int
|
||||
"""
|
||||
A version integer used to invalidate old save files when we make
|
||||
incompatible changes This integer is set at build time and is private to
|
||||
NodeDB.cpp in the device code.
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
device: meshtastic.config_pb2.Config.DeviceConfig | None = ...,
|
||||
position: meshtastic.config_pb2.Config.PositionConfig | None = ...,
|
||||
power: meshtastic.config_pb2.Config.PowerConfig | None = ...,
|
||||
network: meshtastic.config_pb2.Config.NetworkConfig | None = ...,
|
||||
display: meshtastic.config_pb2.Config.DisplayConfig | None = ...,
|
||||
lora: meshtastic.config_pb2.Config.LoRaConfig | None = ...,
|
||||
bluetooth: meshtastic.config_pb2.Config.BluetoothConfig | None = ...,
|
||||
version: builtins.int = ...,
|
||||
) -> None: ...
|
||||
def HasField(self, field_name: typing_extensions.Literal["bluetooth", b"bluetooth", "device", b"device", "display", b"display", "lora", b"lora", "network", b"network", "position", b"position", "power", b"power"]) -> builtins.bool: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["bluetooth", b"bluetooth", "device", b"device", "display", b"display", "lora", b"lora", "network", b"network", "position", b"position", "power", b"power", "version", b"version"]) -> None: ...
|
||||
|
||||
global___LocalConfig = LocalConfig
|
||||
|
||||
@typing_extensions.final
|
||||
class LocalModuleConfig(google.protobuf.message.Message):
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
MQTT_FIELD_NUMBER: builtins.int
|
||||
SERIAL_FIELD_NUMBER: builtins.int
|
||||
EXTERNAL_NOTIFICATION_FIELD_NUMBER: builtins.int
|
||||
STORE_FORWARD_FIELD_NUMBER: builtins.int
|
||||
RANGE_TEST_FIELD_NUMBER: builtins.int
|
||||
TELEMETRY_FIELD_NUMBER: builtins.int
|
||||
CANNED_MESSAGE_FIELD_NUMBER: builtins.int
|
||||
AUDIO_FIELD_NUMBER: builtins.int
|
||||
REMOTE_HARDWARE_FIELD_NUMBER: builtins.int
|
||||
NEIGHBOR_INFO_FIELD_NUMBER: builtins.int
|
||||
AMBIENT_LIGHTING_FIELD_NUMBER: builtins.int
|
||||
DETECTION_SENSOR_FIELD_NUMBER: builtins.int
|
||||
PAXCOUNTER_FIELD_NUMBER: builtins.int
|
||||
VERSION_FIELD_NUMBER: builtins.int
|
||||
@property
|
||||
def mqtt(self) -> meshtastic.module_config_pb2.ModuleConfig.MQTTConfig:
|
||||
"""
|
||||
The part of the config that is specific to the MQTT module
|
||||
"""
|
||||
@property
|
||||
def serial(self) -> meshtastic.module_config_pb2.ModuleConfig.SerialConfig:
|
||||
"""
|
||||
The part of the config that is specific to the Serial module
|
||||
"""
|
||||
@property
|
||||
def external_notification(self) -> meshtastic.module_config_pb2.ModuleConfig.ExternalNotificationConfig:
|
||||
"""
|
||||
The part of the config that is specific to the ExternalNotification module
|
||||
"""
|
||||
@property
|
||||
def store_forward(self) -> meshtastic.module_config_pb2.ModuleConfig.StoreForwardConfig:
|
||||
"""
|
||||
The part of the config that is specific to the Store & Forward module
|
||||
"""
|
||||
@property
|
||||
def range_test(self) -> meshtastic.module_config_pb2.ModuleConfig.RangeTestConfig:
|
||||
"""
|
||||
The part of the config that is specific to the RangeTest module
|
||||
"""
|
||||
@property
|
||||
def telemetry(self) -> meshtastic.module_config_pb2.ModuleConfig.TelemetryConfig:
|
||||
"""
|
||||
The part of the config that is specific to the Telemetry module
|
||||
"""
|
||||
@property
|
||||
def canned_message(self) -> meshtastic.module_config_pb2.ModuleConfig.CannedMessageConfig:
|
||||
"""
|
||||
The part of the config that is specific to the Canned Message module
|
||||
"""
|
||||
@property
|
||||
def audio(self) -> meshtastic.module_config_pb2.ModuleConfig.AudioConfig:
|
||||
"""
|
||||
The part of the config that is specific to the Audio module
|
||||
"""
|
||||
@property
|
||||
def remote_hardware(self) -> meshtastic.module_config_pb2.ModuleConfig.RemoteHardwareConfig:
|
||||
"""
|
||||
The part of the config that is specific to the Remote Hardware module
|
||||
"""
|
||||
@property
|
||||
def neighbor_info(self) -> meshtastic.module_config_pb2.ModuleConfig.NeighborInfoConfig:
|
||||
"""
|
||||
The part of the config that is specific to the Neighbor Info module
|
||||
"""
|
||||
@property
|
||||
def ambient_lighting(self) -> meshtastic.module_config_pb2.ModuleConfig.AmbientLightingConfig:
|
||||
"""
|
||||
The part of the config that is specific to the Ambient Lighting module
|
||||
"""
|
||||
@property
|
||||
def detection_sensor(self) -> meshtastic.module_config_pb2.ModuleConfig.DetectionSensorConfig:
|
||||
"""
|
||||
The part of the config that is specific to the Detection Sensor module
|
||||
"""
|
||||
@property
|
||||
def paxcounter(self) -> meshtastic.module_config_pb2.ModuleConfig.PaxcounterConfig:
|
||||
"""
|
||||
Paxcounter Config
|
||||
"""
|
||||
version: builtins.int
|
||||
"""
|
||||
A version integer used to invalidate old save files when we make
|
||||
incompatible changes This integer is set at build time and is private to
|
||||
NodeDB.cpp in the device code.
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
mqtt: meshtastic.module_config_pb2.ModuleConfig.MQTTConfig | None = ...,
|
||||
serial: meshtastic.module_config_pb2.ModuleConfig.SerialConfig | None = ...,
|
||||
external_notification: meshtastic.module_config_pb2.ModuleConfig.ExternalNotificationConfig | None = ...,
|
||||
store_forward: meshtastic.module_config_pb2.ModuleConfig.StoreForwardConfig | None = ...,
|
||||
range_test: meshtastic.module_config_pb2.ModuleConfig.RangeTestConfig | None = ...,
|
||||
telemetry: meshtastic.module_config_pb2.ModuleConfig.TelemetryConfig | None = ...,
|
||||
canned_message: meshtastic.module_config_pb2.ModuleConfig.CannedMessageConfig | None = ...,
|
||||
audio: meshtastic.module_config_pb2.ModuleConfig.AudioConfig | None = ...,
|
||||
remote_hardware: meshtastic.module_config_pb2.ModuleConfig.RemoteHardwareConfig | None = ...,
|
||||
neighbor_info: meshtastic.module_config_pb2.ModuleConfig.NeighborInfoConfig | None = ...,
|
||||
ambient_lighting: meshtastic.module_config_pb2.ModuleConfig.AmbientLightingConfig | None = ...,
|
||||
detection_sensor: meshtastic.module_config_pb2.ModuleConfig.DetectionSensorConfig | None = ...,
|
||||
paxcounter: meshtastic.module_config_pb2.ModuleConfig.PaxcounterConfig | None = ...,
|
||||
version: builtins.int = ...,
|
||||
) -> None: ...
|
||||
def HasField(self, field_name: typing_extensions.Literal["ambient_lighting", b"ambient_lighting", "audio", b"audio", "canned_message", b"canned_message", "detection_sensor", b"detection_sensor", "external_notification", b"external_notification", "mqtt", b"mqtt", "neighbor_info", b"neighbor_info", "paxcounter", b"paxcounter", "range_test", b"range_test", "remote_hardware", b"remote_hardware", "serial", b"serial", "store_forward", b"store_forward", "telemetry", b"telemetry"]) -> builtins.bool: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["ambient_lighting", b"ambient_lighting", "audio", b"audio", "canned_message", b"canned_message", "detection_sensor", b"detection_sensor", "external_notification", b"external_notification", "mqtt", b"mqtt", "neighbor_info", b"neighbor_info", "paxcounter", b"paxcounter", "range_test", b"range_test", "remote_hardware", b"remote_hardware", "serial", b"serial", "store_forward", b"store_forward", "telemetry", b"telemetry", "version", b"version"]) -> None: ...
|
||||
|
||||
global___LocalModuleConfig = LocalModuleConfig
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
2409
meshtastic/mesh_pb2.pyi
Normal file
2409
meshtastic/mesh_pb2.pyi
Normal file
File diff suppressed because it is too large
Load Diff
66
meshtastic/module_config_pb2.py
Normal file
66
meshtastic/module_config_pb2.py
Normal file
File diff suppressed because one or more lines are too long
1172
meshtastic/module_config_pb2.pyi
Normal file
1172
meshtastic/module_config_pb2.pyi
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,86 +1,30 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: mqtt.proto
|
||||
|
||||
# source: meshtastic/mqtt.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import message as _message
|
||||
from google.protobuf import reflection as _reflection
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from . import mesh_pb2 as mesh__pb2
|
||||
from meshtastic import config_pb2 as meshtastic_dot_config__pb2
|
||||
from meshtastic import mesh_pb2 as meshtastic_dot_mesh__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
||||
name='mqtt.proto',
|
||||
package='',
|
||||
syntax='proto3',
|
||||
serialized_options=b'\n\023com.geeksville.meshB\nMQTTProtosH\003Z!github.com/meshtastic/gomeshproto',
|
||||
serialized_pb=b'\n\nmqtt.proto\x1a\nmesh.proto\"V\n\x0fServiceEnvelope\x12\x1b\n\x06packet\x18\x01 \x01(\x0b\x32\x0b.MeshPacket\x12\x12\n\nchannel_id\x18\x02 \x01(\t\x12\x12\n\ngateway_id\x18\x03 \x01(\tBF\n\x13\x63om.geeksville.meshB\nMQTTProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3'
|
||||
,
|
||||
dependencies=[mesh__pb2.DESCRIPTOR,])
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15meshtastic/mqtt.proto\x12\nmeshtastic\x1a\x17meshtastic/config.proto\x1a\x15meshtastic/mesh.proto\"a\n\x0fServiceEnvelope\x12&\n\x06packet\x18\x01 \x01(\x0b\x32\x16.meshtastic.MeshPacket\x12\x12\n\nchannel_id\x18\x02 \x01(\t\x12\x12\n\ngateway_id\x18\x03 \x01(\t\"\xbc\x03\n\tMapReport\x12\x11\n\tlong_name\x18\x01 \x01(\t\x12\x12\n\nshort_name\x18\x02 \x01(\t\x12\x32\n\x04role\x18\x03 \x01(\x0e\x32$.meshtastic.Config.DeviceConfig.Role\x12+\n\x08hw_model\x18\x04 \x01(\x0e\x32\x19.meshtastic.HardwareModel\x12\x18\n\x10\x66irmware_version\x18\x05 \x01(\t\x12\x38\n\x06region\x18\x06 \x01(\x0e\x32(.meshtastic.Config.LoRaConfig.RegionCode\x12?\n\x0cmodem_preset\x18\x07 \x01(\x0e\x32).meshtastic.Config.LoRaConfig.ModemPreset\x12\x1b\n\x13has_default_channel\x18\x08 \x01(\x08\x12\x12\n\nlatitude_i\x18\t \x01(\x0f\x12\x13\n\x0blongitude_i\x18\n \x01(\x0f\x12\x10\n\x08\x61ltitude\x18\x0b \x01(\x05\x12\x1a\n\x12position_precision\x18\x0c \x01(\r\x12\x1e\n\x16num_online_local_nodes\x18\r \x01(\rB_\n\x13\x63om.geeksville.meshB\nMQTTProtosZ\"github.com/meshtastic/go/generated\xaa\x02\x14Meshtastic.Protobufs\xba\x02\x00\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'meshtastic.mqtt_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
|
||||
|
||||
_SERVICEENVELOPE = _descriptor.Descriptor(
|
||||
name='ServiceEnvelope',
|
||||
full_name='ServiceEnvelope',
|
||||
filename=None,
|
||||
file=DESCRIPTOR,
|
||||
containing_type=None,
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='packet', full_name='ServiceEnvelope.packet', index=0,
|
||||
number=1, type=11, cpp_type=10, label=1,
|
||||
has_default_value=False, default_value=None,
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='channel_id', full_name='ServiceEnvelope.channel_id', index=1,
|
||||
number=2, type=9, cpp_type=9, label=1,
|
||||
has_default_value=False, default_value=b"".decode('utf-8'),
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='gateway_id', full_name='ServiceEnvelope.gateway_id', index=2,
|
||||
number=3, type=9, cpp_type=9, label=1,
|
||||
has_default_value=False, default_value=b"".decode('utf-8'),
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
nested_types=[],
|
||||
enum_types=[
|
||||
],
|
||||
serialized_options=None,
|
||||
is_extendable=False,
|
||||
syntax='proto3',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=26,
|
||||
serialized_end=112,
|
||||
)
|
||||
|
||||
_SERVICEENVELOPE.fields_by_name['packet'].message_type = mesh__pb2._MESHPACKET
|
||||
DESCRIPTOR.message_types_by_name['ServiceEnvelope'] = _SERVICEENVELOPE
|
||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
||||
|
||||
ServiceEnvelope = _reflection.GeneratedProtocolMessageType('ServiceEnvelope', (_message.Message,), {
|
||||
'DESCRIPTOR' : _SERVICEENVELOPE,
|
||||
'__module__' : 'mqtt_pb2'
|
||||
# @@protoc_insertion_point(class_scope:ServiceEnvelope)
|
||||
})
|
||||
_sym_db.RegisterMessage(ServiceEnvelope)
|
||||
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\nMQTTProtosZ\"github.com/meshtastic/go/generated\252\002\024Meshtastic.Protobufs\272\002\000'
|
||||
_SERVICEENVELOPE._serialized_start=85
|
||||
_SERVICEENVELOPE._serialized_end=182
|
||||
_MAPREPORT._serialized_start=185
|
||||
_MAPREPORT._serialized_end=629
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
|
||||
151
meshtastic/mqtt_pb2.pyi
Normal file
151
meshtastic/mqtt_pb2.pyi
Normal file
@@ -0,0 +1,151 @@
|
||||
"""
|
||||
@generated by mypy-protobuf. Do not edit manually!
|
||||
isort:skip_file
|
||||
"""
|
||||
import builtins
|
||||
import google.protobuf.descriptor
|
||||
import google.protobuf.message
|
||||
import meshtastic.config_pb2
|
||||
import meshtastic.mesh_pb2
|
||||
import sys
|
||||
|
||||
if sys.version_info >= (3, 8):
|
||||
import typing as typing_extensions
|
||||
else:
|
||||
import typing_extensions
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
||||
|
||||
@typing_extensions.final
|
||||
class ServiceEnvelope(google.protobuf.message.Message):
|
||||
"""
|
||||
This message wraps a MeshPacket with extra metadata about the sender and how it arrived.
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
PACKET_FIELD_NUMBER: builtins.int
|
||||
CHANNEL_ID_FIELD_NUMBER: builtins.int
|
||||
GATEWAY_ID_FIELD_NUMBER: builtins.int
|
||||
@property
|
||||
def packet(self) -> meshtastic.mesh_pb2.MeshPacket:
|
||||
"""
|
||||
The (probably encrypted) packet
|
||||
"""
|
||||
channel_id: builtins.str
|
||||
"""
|
||||
The global channel ID it was sent on
|
||||
"""
|
||||
gateway_id: builtins.str
|
||||
"""
|
||||
The sending gateway node ID. Can we use this to authenticate/prevent fake
|
||||
nodeid impersonation for senders? - i.e. use gateway/mesh id (which is authenticated) + local node id as
|
||||
the globally trusted nodenum
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
packet: meshtastic.mesh_pb2.MeshPacket | None = ...,
|
||||
channel_id: builtins.str = ...,
|
||||
gateway_id: builtins.str = ...,
|
||||
) -> None: ...
|
||||
def HasField(self, field_name: typing_extensions.Literal["packet", b"packet"]) -> builtins.bool: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["channel_id", b"channel_id", "gateway_id", b"gateway_id", "packet", b"packet"]) -> None: ...
|
||||
|
||||
global___ServiceEnvelope = ServiceEnvelope
|
||||
|
||||
@typing_extensions.final
|
||||
class MapReport(google.protobuf.message.Message):
|
||||
"""
|
||||
Information about a node intended to be reported unencrypted to a map using MQTT.
|
||||
"""
|
||||
|
||||
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
||||
|
||||
LONG_NAME_FIELD_NUMBER: builtins.int
|
||||
SHORT_NAME_FIELD_NUMBER: builtins.int
|
||||
ROLE_FIELD_NUMBER: builtins.int
|
||||
HW_MODEL_FIELD_NUMBER: builtins.int
|
||||
FIRMWARE_VERSION_FIELD_NUMBER: builtins.int
|
||||
REGION_FIELD_NUMBER: builtins.int
|
||||
MODEM_PRESET_FIELD_NUMBER: builtins.int
|
||||
HAS_DEFAULT_CHANNEL_FIELD_NUMBER: builtins.int
|
||||
LATITUDE_I_FIELD_NUMBER: builtins.int
|
||||
LONGITUDE_I_FIELD_NUMBER: builtins.int
|
||||
ALTITUDE_FIELD_NUMBER: builtins.int
|
||||
POSITION_PRECISION_FIELD_NUMBER: builtins.int
|
||||
NUM_ONLINE_LOCAL_NODES_FIELD_NUMBER: builtins.int
|
||||
long_name: builtins.str
|
||||
"""
|
||||
A full name for this user, i.e. "Kevin Hester"
|
||||
"""
|
||||
short_name: builtins.str
|
||||
"""
|
||||
A VERY short name, ideally two characters.
|
||||
Suitable for a tiny OLED screen
|
||||
"""
|
||||
role: meshtastic.config_pb2.Config.DeviceConfig.Role.ValueType
|
||||
"""
|
||||
Role of the node that applies specific settings for a particular use-case
|
||||
"""
|
||||
hw_model: meshtastic.mesh_pb2.HardwareModel.ValueType
|
||||
"""
|
||||
Hardware model of the node, i.e. T-Beam, Heltec V3, etc...
|
||||
"""
|
||||
firmware_version: builtins.str
|
||||
"""
|
||||
Device firmware version string
|
||||
"""
|
||||
region: meshtastic.config_pb2.Config.LoRaConfig.RegionCode.ValueType
|
||||
"""
|
||||
The region code for the radio (US, CN, EU433, etc...)
|
||||
"""
|
||||
modem_preset: meshtastic.config_pb2.Config.LoRaConfig.ModemPreset.ValueType
|
||||
"""
|
||||
Modem preset used by the radio (LongFast, MediumSlow, etc...)
|
||||
"""
|
||||
has_default_channel: builtins.bool
|
||||
"""
|
||||
Whether the node has a channel with default PSK and name (LongFast, MediumSlow, etc...)
|
||||
and it uses the default frequency slot given the region and modem preset.
|
||||
"""
|
||||
latitude_i: builtins.int
|
||||
"""
|
||||
Latitude: multiply by 1e-7 to get degrees in floating point
|
||||
"""
|
||||
longitude_i: builtins.int
|
||||
"""
|
||||
Longitude: multiply by 1e-7 to get degrees in floating point
|
||||
"""
|
||||
altitude: builtins.int
|
||||
"""
|
||||
Altitude in meters above MSL
|
||||
"""
|
||||
position_precision: builtins.int
|
||||
"""
|
||||
Indicates the bits of precision for latitude and longitude set by the sending node
|
||||
"""
|
||||
num_online_local_nodes: builtins.int
|
||||
"""
|
||||
Number of online nodes (heard in the last 2 hours) this node has in its list that were received locally (not via MQTT)
|
||||
"""
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
long_name: builtins.str = ...,
|
||||
short_name: builtins.str = ...,
|
||||
role: meshtastic.config_pb2.Config.DeviceConfig.Role.ValueType = ...,
|
||||
hw_model: meshtastic.mesh_pb2.HardwareModel.ValueType = ...,
|
||||
firmware_version: builtins.str = ...,
|
||||
region: meshtastic.config_pb2.Config.LoRaConfig.RegionCode.ValueType = ...,
|
||||
modem_preset: meshtastic.config_pb2.Config.LoRaConfig.ModemPreset.ValueType = ...,
|
||||
has_default_channel: builtins.bool = ...,
|
||||
latitude_i: builtins.int = ...,
|
||||
longitude_i: builtins.int = ...,
|
||||
altitude: builtins.int = ...,
|
||||
position_precision: builtins.int = ...,
|
||||
num_online_local_nodes: builtins.int = ...,
|
||||
) -> None: ...
|
||||
def ClearField(self, field_name: typing_extensions.Literal["altitude", b"altitude", "firmware_version", b"firmware_version", "has_default_channel", b"has_default_channel", "hw_model", b"hw_model", "latitude_i", b"latitude_i", "long_name", b"long_name", "longitude_i", b"longitude_i", "modem_preset", b"modem_preset", "num_online_local_nodes", b"num_online_local_nodes", "position_precision", b"position_precision", "region", b"region", "role", b"role", "short_name", b"short_name"]) -> None: ...
|
||||
|
||||
global___MapReport = MapReport
|
||||
37
meshtastic/mt_config.py
Normal file
37
meshtastic/mt_config.py
Normal file
@@ -0,0 +1,37 @@
|
||||
"""
|
||||
Globals singleton class.
|
||||
|
||||
The Global object is gone, as are all its setters and getters. Instead the
|
||||
module itself is the singleton namespace, which can be imported into
|
||||
whichever module is used. The associated tests have also been removed,
|
||||
since we now rely on built in Python mechanisms.
|
||||
|
||||
This is intended to make the Python read more naturally, and to make the
|
||||
intention of the code clearer and more compact. It is merely a sticking
|
||||
plaster over the use of shared mt_config, but the coupling issues wil be dealt
|
||||
with rather more easily once the code is simplified by this change.
|
||||
|
||||
"""
|
||||
|
||||
def reset():
|
||||
"""
|
||||
Restore the namespace to pristine condition.
|
||||
"""
|
||||
# pylint: disable=W0603
|
||||
global args, parser, channel_index, logfile, tunnelInstance, camel_case
|
||||
args = None
|
||||
parser = None
|
||||
channel_index = None
|
||||
logfile = None
|
||||
tunnelInstance = None
|
||||
# TODO: to migrate to camel_case for v1.3 change this value to True
|
||||
camel_case = False
|
||||
|
||||
# These assignments are used instead of calling reset()
|
||||
# purely to shut pylint up.
|
||||
args = None
|
||||
parser = None
|
||||
channel_index = None
|
||||
logfile = None
|
||||
tunnelInstance = None
|
||||
camel_case = False
|
||||
39
meshtastic/nanopb_pb2.py
Normal file
39
meshtastic/nanopb_pb2.py
Normal file
@@ -0,0 +1,39 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: nanopb.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cnanopb.proto\x1a google/protobuf/descriptor.proto\"\xa4\x07\n\rNanoPBOptions\x12\x10\n\x08max_size\x18\x01 \x01(\x05\x12\x12\n\nmax_length\x18\x0e \x01(\x05\x12\x11\n\tmax_count\x18\x02 \x01(\x05\x12&\n\x08int_size\x18\x07 \x01(\x0e\x32\x08.IntSize:\nIS_DEFAULT\x12$\n\x04type\x18\x03 \x01(\x0e\x32\n.FieldType:\nFT_DEFAULT\x12\x18\n\nlong_names\x18\x04 \x01(\x08:\x04true\x12\x1c\n\rpacked_struct\x18\x05 \x01(\x08:\x05\x66\x61lse\x12\x1a\n\x0bpacked_enum\x18\n \x01(\x08:\x05\x66\x61lse\x12\x1b\n\x0cskip_message\x18\x06 \x01(\x08:\x05\x66\x61lse\x12\x18\n\tno_unions\x18\x08 \x01(\x08:\x05\x66\x61lse\x12\r\n\x05msgid\x18\t \x01(\r\x12\x1e\n\x0f\x61nonymous_oneof\x18\x0b \x01(\x08:\x05\x66\x61lse\x12\x15\n\x06proto3\x18\x0c \x01(\x08:\x05\x66\x61lse\x12#\n\x14proto3_singular_msgs\x18\x15 \x01(\x08:\x05\x66\x61lse\x12\x1d\n\x0e\x65num_to_string\x18\r \x01(\x08:\x05\x66\x61lse\x12\x1b\n\x0c\x66ixed_length\x18\x0f \x01(\x08:\x05\x66\x61lse\x12\x1a\n\x0b\x66ixed_count\x18\x10 \x01(\x08:\x05\x66\x61lse\x12\x1e\n\x0fsubmsg_callback\x18\x16 \x01(\x08:\x05\x66\x61lse\x12/\n\x0cmangle_names\x18\x11 \x01(\x0e\x32\x11.TypenameMangling:\x06M_NONE\x12(\n\x11\x63\x61llback_datatype\x18\x12 \x01(\t:\rpb_callback_t\x12\x34\n\x11\x63\x61llback_function\x18\x13 \x01(\t:\x19pb_default_field_callback\x12\x30\n\x0e\x64\x65scriptorsize\x18\x14 \x01(\x0e\x32\x0f.DescriptorSize:\x07\x44S_AUTO\x12\x1a\n\x0b\x64\x65\x66\x61ult_has\x18\x17 \x01(\x08:\x05\x66\x61lse\x12\x0f\n\x07include\x18\x18 \x03(\t\x12\x0f\n\x07\x65xclude\x18\x1a \x03(\t\x12\x0f\n\x07package\x18\x19 \x01(\t\x12\x41\n\rtype_override\x18\x1b \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.Type\x12\x19\n\x0bsort_by_tag\x18\x1c \x01(\x08:\x04true\x12.\n\rfallback_type\x18\x1d \x01(\x0e\x32\n.FieldType:\x0b\x46T_CALLBACK*i\n\tFieldType\x12\x0e\n\nFT_DEFAULT\x10\x00\x12\x0f\n\x0b\x46T_CALLBACK\x10\x01\x12\x0e\n\nFT_POINTER\x10\x04\x12\r\n\tFT_STATIC\x10\x02\x12\r\n\tFT_IGNORE\x10\x03\x12\r\n\tFT_INLINE\x10\x05*D\n\x07IntSize\x12\x0e\n\nIS_DEFAULT\x10\x00\x12\x08\n\x04IS_8\x10\x08\x12\t\n\x05IS_16\x10\x10\x12\t\n\x05IS_32\x10 \x12\t\n\x05IS_64\x10@*Z\n\x10TypenameMangling\x12\n\n\x06M_NONE\x10\x00\x12\x13\n\x0fM_STRIP_PACKAGE\x10\x01\x12\r\n\tM_FLATTEN\x10\x02\x12\x16\n\x12M_PACKAGE_INITIALS\x10\x03*E\n\x0e\x44\x65scriptorSize\x12\x0b\n\x07\x44S_AUTO\x10\x00\x12\x08\n\x04\x44S_1\x10\x01\x12\x08\n\x04\x44S_2\x10\x02\x12\x08\n\x04\x44S_4\x10\x04\x12\x08\n\x04\x44S_8\x10\x08:E\n\x0enanopb_fileopt\x12\x1c.google.protobuf.FileOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:G\n\rnanopb_msgopt\x12\x1f.google.protobuf.MessageOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:E\n\x0enanopb_enumopt\x12\x1c.google.protobuf.EnumOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptions:>\n\x06nanopb\x12\x1d.google.protobuf.FieldOptions\x18\xf2\x07 \x01(\x0b\x32\x0e.NanoPBOptionsB\x1a\n\x18\x66i.kapsi.koti.jpa.nanopb')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'nanopb_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
google_dot_protobuf_dot_descriptor__pb2.FileOptions.RegisterExtension(nanopb_fileopt)
|
||||
google_dot_protobuf_dot_descriptor__pb2.MessageOptions.RegisterExtension(nanopb_msgopt)
|
||||
google_dot_protobuf_dot_descriptor__pb2.EnumOptions.RegisterExtension(nanopb_enumopt)
|
||||
google_dot_protobuf_dot_descriptor__pb2.FieldOptions.RegisterExtension(nanopb)
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
DESCRIPTOR._serialized_options = b'\n\030fi.kapsi.koti.jpa.nanopb'
|
||||
_FIELDTYPE._serialized_start=985
|
||||
_FIELDTYPE._serialized_end=1090
|
||||
_INTSIZE._serialized_start=1092
|
||||
_INTSIZE._serialized_end=1160
|
||||
_TYPENAMEMANGLING._serialized_start=1162
|
||||
_TYPENAMEMANGLING._serialized_end=1252
|
||||
_DESCRIPTORSIZE._serialized_start=1254
|
||||
_DESCRIPTORSIZE._serialized_end=1323
|
||||
_NANOPBOPTIONS._serialized_start=51
|
||||
_NANOPBOPTIONS._serialized_end=983
|
||||
# @@protoc_insertion_point(module_scope)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user