mirror of
https://github.com/meshtastic/python.git
synced 2025-12-26 09:27:52 -05:00
Compare commits
79 Commits
1.3alpha.1
...
patch-1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
8
.github/workflows/ci.yml
vendored
8
.github/workflows/ci.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: Linting and Tests
|
name: CI
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
@@ -42,14 +42,14 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
pytest --cov=meshtastic --cov-report=xml
|
pytest --cov=meshtastic --cov-report=xml
|
||||||
- name: Upload coverage to Codecov
|
- name: Upload coverage to Codecov
|
||||||
uses: codecov/codecov-action@v1
|
uses: codecov/codecov-action@v2
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
file: ./coverage.xml
|
files: ./coverage.xml
|
||||||
flags: unittests
|
flags: unittests
|
||||||
name: codecov-umbrella
|
name: codecov-umbrella
|
||||||
yml: ./codecov.yml
|
|
||||||
fail_ci_if_error: true
|
fail_ci_if_error: true
|
||||||
|
verbose: true
|
||||||
validate:
|
validate:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
|
|||||||
6
.github/workflows/update_protobufs.yml
vendored
6
.github/workflows/update_protobufs.yml
vendored
@@ -18,9 +18,9 @@ jobs:
|
|||||||
|
|
||||||
- name: Download nanopb
|
- name: Download nanopb
|
||||||
run: |
|
run: |
|
||||||
wget https://jpa.kapsi.fi/nanopb/download/nanopb-0.4.4-linux-x86.tar.gz
|
wget https://jpa.kapsi.fi/nanopb/download/nanopb-0.4.6-linux-x86.tar.gz
|
||||||
tar xvzf nanopb-0.4.4-linux-x86.tar.gz
|
tar xvzf nanopb-0.4.6-linux-x86.tar.gz
|
||||||
mv nanopb-0.4.4-linux-x86 nanopb-0.4.4
|
mv nanopb-0.4.6-linux-x86 nanopb-0.4.6
|
||||||
|
|
||||||
- name: Re-generate protocol buffers
|
- name: Re-generate protocol buffers
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -5,8 +5,7 @@ dist
|
|||||||
*.egg-info
|
*.egg-info
|
||||||
log_*
|
log_*
|
||||||
.eggs
|
.eggs
|
||||||
nanopb-0.4.4
|
nanopb-*
|
||||||
nanopb-0.4.5
|
|
||||||
.*swp
|
.*swp
|
||||||
.coverage
|
.coverage
|
||||||
*.py-E
|
*.py-E
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
# Add files or directories matching the regex patterns to the blacklist. The
|
# Add files or directories matching the regex patterns to the blacklist. The
|
||||||
# regex matches against base names, not paths.
|
# regex matches against base names, not paths.
|
||||||
ignore-patterns=mqtt_pb2.py,channel_pb2.py,telemetry_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,cannedmessages_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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -25,7 +25,6 @@ ignore-patterns=mqtt_pb2.py,channel_pb2.py,telemetry_pb2.py,admin_pb2.py,radioco
|
|||||||
#
|
#
|
||||||
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,broad-except,no-else-return,no-else-raise,bare-except,too-many-public-methods
|
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,broad-except,no-else-return,no-else-raise,bare-except,too-many-public-methods
|
||||||
|
|
||||||
|
|
||||||
[BASIC]
|
[BASIC]
|
||||||
|
|
||||||
# Good variable names which should always be accepted, separated by a comma
|
# Good variable names which should always be accepted, separated by a comma
|
||||||
@@ -41,7 +40,7 @@ bad-names=foo,bar,baz,toto,tutu,tata
|
|||||||
max-line-length=150
|
max-line-length=150
|
||||||
|
|
||||||
# Maximum number of lines in a module
|
# Maximum number of lines in a module
|
||||||
max-module-lines=1400
|
max-module-lines=1600
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
20
.vscode/launch.json
vendored
20
.vscode/launch.json
vendored
@@ -42,7 +42,23 @@
|
|||||||
"request": "launch",
|
"request": "launch",
|
||||||
"module": "meshtastic",
|
"module": "meshtastic",
|
||||||
"justMyCode": true,
|
"justMyCode": true,
|
||||||
"args": ["--debug" ]
|
"args": ["--debug"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "meshtastic debug getPref",
|
||||||
|
"type": "python",
|
||||||
|
"request": "launch",
|
||||||
|
"module": "meshtastic",
|
||||||
|
"justMyCode": true,
|
||||||
|
"args": ["--debug", "--get", "power.is_power_saving"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "meshtastic debug setPref",
|
||||||
|
"type": "python",
|
||||||
|
"request": "launch",
|
||||||
|
"module": "meshtastic",
|
||||||
|
"justMyCode": true,
|
||||||
|
"args": ["--debug", "--set", "power.is_power_saving", "1"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "meshtastic setpref",
|
"name": "meshtastic setpref",
|
||||||
@@ -92,7 +108,7 @@
|
|||||||
"module": "meshtastic",
|
"module": "meshtastic",
|
||||||
"justMyCode": true,
|
"justMyCode": true,
|
||||||
"args": ["--debug", "--sendtext", "pytest"]
|
"args": ["--debug", "--sendtext", "pytest"]
|
||||||
}
|
},
|
||||||
{
|
{
|
||||||
"name": "meshtastic showNodes",
|
"name": "meshtastic showNodes",
|
||||||
"type": "python",
|
"type": "python",
|
||||||
|
|||||||
4
Makefile
4
Makefile
@@ -6,6 +6,10 @@ test:
|
|||||||
virt:
|
virt:
|
||||||
pytest -m smokevirt
|
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
|
# local install
|
||||||
install:
|
install:
|
||||||
pip install .
|
pip install .
|
||||||
|
|||||||
26
README.md
26
README.md
@@ -1,15 +1,25 @@
|
|||||||
# Meshtastic-python
|
# Meshtastic Python
|
||||||
|
|
||||||
[](https://open.vscode.dev/meshtastic/Meshtastic-python)
|
|
||||||

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

|

|
||||||
|
[](https://github.com/meshtastic/Meshtastic-python/actions/workflows/ci.yml)
|
||||||
|
[](https://cla-assistant.io/meshtastic/Meshtastic-python)
|
||||||
|
[](https://opencollective.com/meshtastic/)
|
||||||
|
[](https://vercel.com?utm_source=meshtastic&utm_campaign=oss)
|
||||||
|
|
||||||
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.
|
||||||
The library api is documented [here](https://meshtastic-python.vercel.app/meshtastic/index.html)
|
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.
|
||||||
|
|
||||||
|
|
||||||
[](https://vercel.com?utm_source=meshtastic&utm_campaign=oss)
|
**[Getting Started Guide](https://meshtastic.org/docs/software/python/python-installation)**
|
||||||
|
|
||||||
|
**[Documentation/API Reference](https://python.meshtastic.org/)**
|
||||||
|
|
||||||
|
|
||||||
|
## Stats
|
||||||
|
|
||||||
|

|
||||||
|
|||||||
2
TODO.md
2
TODO.md
@@ -34,7 +34,7 @@ Basic functionality is complete now.
|
|||||||
- DONE add fromId and toId to received messages dictionaries
|
- DONE add fromId and toId to received messages dictionaries
|
||||||
- make command line options for displaying/changing config
|
- make command line options for displaying/changing config
|
||||||
- update nodedb as nodes change
|
- 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
|
- let user change radio params via commandline options
|
||||||
- keep nodedb up-to-date based on received MeshPackets
|
- 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
|
- handle radio reboots and redownload db when that happens. Look for a special FromRadio.rebooted packet
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
./nanopb-0.4.5/generator-bin/protoc -I=proto --python_out meshtastic `ls proto/*.proto`
|
./nanopb-0.4.6/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
|
# workaround for import bug in protoc https://github.com/protocolbuffers/protobuf/issues/1491#issuecomment-690618628
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,5 @@ location:
|
|||||||
userPrefs:
|
userPrefs:
|
||||||
region: 1
|
region: 1
|
||||||
isAlwaysPowered: 'true'
|
isAlwaysPowered: 'true'
|
||||||
sendOwnerInterval: 2
|
|
||||||
screenOnSecs: 31536000
|
screenOnSecs: 31536000
|
||||||
waitBluetoothSecs: 31536000
|
waitBluetoothSecs: 31536000
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ location:
|
|||||||
user_prefs:
|
user_prefs:
|
||||||
region: 1
|
region: 1
|
||||||
is_always_powered: 'true'
|
is_always_powered: 'true'
|
||||||
send_owner_interval: 2
|
|
||||||
screen_on_secs: 31536000
|
screen_on_secs: 31536000
|
||||||
wait_bluetooth_secs: 31536000
|
wait_bluetooth_secs: 31536000
|
||||||
location_share: 'LocEnabled'
|
location_share: 'LocEnabled'
|
||||||
|
|||||||
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
|
||||||
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
|
||||||
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 : =>
|
||||||
|
=>
|
||||||
@@ -7,7 +7,7 @@ Source code on [github](https://github.com/meshtastic/Meshtastic-python)
|
|||||||
|
|
||||||
properties of SerialInterface:
|
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.
|
the device.
|
||||||
- nodes - The database of received nodes. Includes always up-to-date location and username information for each
|
- 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.
|
node in the mesh. This is a read-only datastructure.
|
||||||
@@ -80,7 +80,7 @@ from meshtastic.util import fixme, catchAndIgnore, stripnl, DeferredExecution, T
|
|||||||
from meshtastic.node import Node
|
from meshtastic.node import Node
|
||||||
from meshtastic import (mesh_pb2, portnums_pb2, apponly_pb2, admin_pb2,
|
from meshtastic import (mesh_pb2, portnums_pb2, apponly_pb2, admin_pb2,
|
||||||
telemetry_pb2, remote_hardware_pb2,
|
telemetry_pb2, remote_hardware_pb2,
|
||||||
channel_pb2, radioconfig_pb2, util)
|
channel_pb2, config_pb2, util)
|
||||||
|
|
||||||
|
|
||||||
# Note: To follow PEP224, comments should be after the module variable.
|
# Note: To follow PEP224, comments should be after the module variable.
|
||||||
@@ -94,7 +94,7 @@ BROADCAST_NUM = 0xffffffff
|
|||||||
BROADCAST_ADDR = "^all"
|
BROADCAST_ADDR = "^all"
|
||||||
"""A special ID that means broadcast"""
|
"""A special ID that means broadcast"""
|
||||||
|
|
||||||
OUR_APP_VERSION = 20200
|
OUR_APP_VERSION = 20300
|
||||||
"""The numeric buildnumber (shared with android apps) specifying the
|
"""The numeric buildnumber (shared with android apps) specifying the
|
||||||
level of device code we are guaranteed to understand
|
level of device code we are guaranteed to understand
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import meshtastic.util
|
|||||||
import meshtastic.test
|
import meshtastic.test
|
||||||
from meshtastic import remote_hardware
|
from meshtastic import remote_hardware
|
||||||
from meshtastic.ble_interface import BLEInterface
|
from meshtastic.ble_interface import BLEInterface
|
||||||
from meshtastic import portnums_pb2, channel_pb2, radioconfig_pb2
|
from meshtastic import portnums_pb2, channel_pb2, config_pb2
|
||||||
from meshtastic.globals import Globals
|
from meshtastic.globals import Globals
|
||||||
from meshtastic.__init__ import BROADCAST_ADDR
|
from meshtastic.__init__ import BROADCAST_ADDR
|
||||||
|
|
||||||
@@ -52,66 +52,91 @@ def onConnection(interface, topic=pub.AUTO_TOPIC): # pylint: disable=W0613
|
|||||||
print(f"Connection changed: {topic.getName()}")
|
print(f"Connection changed: {topic.getName()}")
|
||||||
|
|
||||||
|
|
||||||
def getPref(attributes, name):
|
def getPref(attributes, comp_name):
|
||||||
"""Get a channel or preferences value"""
|
"""Get a channel or preferences value"""
|
||||||
|
|
||||||
camel_name = meshtastic.util.snake_to_camel(name)
|
name = comp_name.split(".",1)
|
||||||
|
if len(name) != 2:
|
||||||
|
name[0]=comp_name
|
||||||
|
name.append(comp_name)
|
||||||
|
|
||||||
|
camel_name = meshtastic.util.snake_to_camel(name[1])
|
||||||
# Note: protobufs has the keys in snake_case, so snake internally
|
# Note: protobufs has the keys in snake_case, so snake internally
|
||||||
snake_name = meshtastic.util.camel_to_snake(name)
|
snake_name = meshtastic.util.camel_to_snake(name[1])
|
||||||
logging.debug(f'snake_name:{snake_name} camel_name:{camel_name}')
|
logging.debug(f'snake_name:{snake_name} camel_name:{camel_name}')
|
||||||
logging.debug(f'use camel:{Globals.getInstance().get_camel_case()}')
|
logging.debug(f'use camel:{Globals.getInstance().get_camel_case()}')
|
||||||
|
|
||||||
objDesc = attributes.DESCRIPTOR
|
objDesc = attributes.DESCRIPTOR
|
||||||
field = objDesc.fields_by_name.get(snake_name)
|
config_type = objDesc.fields_by_name.get(name[0])
|
||||||
if not field:
|
pref = False
|
||||||
|
if config_type:
|
||||||
|
pref = config_type.message_type.fields_by_name.get(snake_name)
|
||||||
|
|
||||||
|
if (not pref) or (not config_type):
|
||||||
if Globals.getInstance().get_camel_case():
|
if Globals.getInstance().get_camel_case():
|
||||||
print(f"{attributes.__class__.__name__} does not have an attribute called {camel_name}, so you can not get it.")
|
print(f"{attributes.__class__.__name__} does not have an attribute called {name[0]}.{camel_name}, so you can not get it.")
|
||||||
else:
|
else:
|
||||||
print(f"{attributes.__class__.__name__} does not have an attribute called {snake_name}, so you can not get it.")
|
print(f"{attributes.__class__.__name__} does not have an attribute called {name[0]}.{snake_name}, so you can not get it.")
|
||||||
print(f"Choices in sorted order are:")
|
print(f"Choices in sorted order are:")
|
||||||
names = []
|
names = []
|
||||||
for f in objDesc.fields:
|
for f in objDesc.fields:
|
||||||
tmp_name = f'{f.name}'
|
tmp_path = f'{f.name}'
|
||||||
if Globals.getInstance().get_camel_case():
|
if(f.message_type):
|
||||||
tmp_name = meshtastic.util.snake_to_camel(tmp_name)
|
for ff in f.message_type.fields:
|
||||||
names.append(tmp_name)
|
tmp_name = f'{ff.name}'
|
||||||
|
if Globals.getInstance().get_camel_case():
|
||||||
|
tmp_name = meshtastic.util.snake_to_camel(tmp_name)
|
||||||
|
names.append(tmp_path + "." +tmp_name)
|
||||||
for temp_name in sorted(names):
|
for temp_name in sorted(names):
|
||||||
print(f" {temp_name}")
|
print(f" {temp_name}")
|
||||||
return
|
return
|
||||||
|
|
||||||
# read the value
|
# read the value
|
||||||
val = getattr(attributes, snake_name)
|
config_values = getattr(attributes, config_type.name)
|
||||||
|
pref_value = getattr(config_values, pref.name)
|
||||||
|
|
||||||
if Globals.getInstance().get_camel_case():
|
if Globals.getInstance().get_camel_case():
|
||||||
print(f"{camel_name}: {str(val)}")
|
print(f"{str(config_type.name)}.{camel_name}: {str(pref_value)}")
|
||||||
logging.debug(f"{camel_name}: {str(val)}")
|
logging.debug(f"{str(config_type.name)}.{camel_name}: {str(pref_value)}")
|
||||||
else:
|
else:
|
||||||
print(f"{snake_name}: {str(val)}")
|
print(f"{str(config_type.name)}.{snake_name}: {str(pref_value)}")
|
||||||
logging.debug(f"{snake_name}: {str(val)}")
|
logging.debug(f"{str(config_type.name)}.{snake_name}: {str(pref_value)}")
|
||||||
|
|
||||||
|
|
||||||
def setPref(attributes, name, valStr):
|
def setPref(attributes, comp_name, valStr):
|
||||||
"""Set a channel or preferences value"""
|
"""Set a channel or preferences value"""
|
||||||
|
|
||||||
snake_name = meshtastic.util.camel_to_snake(name)
|
name = comp_name.split(".",1)
|
||||||
camel_name = meshtastic.util.snake_to_camel(name)
|
if len(name) != 2:
|
||||||
|
name[0]=comp_name
|
||||||
|
name.append(comp_name)
|
||||||
|
|
||||||
|
snake_name = meshtastic.util.camel_to_snake(name[1])
|
||||||
|
camel_name = meshtastic.util.snake_to_camel(name[1])
|
||||||
logging.debug(f'snake_name:{snake_name}')
|
logging.debug(f'snake_name:{snake_name}')
|
||||||
logging.debug(f'camel_name:{camel_name}')
|
logging.debug(f'camel_name:{camel_name}')
|
||||||
|
|
||||||
objDesc = attributes.DESCRIPTOR
|
objDesc = attributes.DESCRIPTOR
|
||||||
field = objDesc.fields_by_name.get(snake_name)
|
config_type = objDesc.fields_by_name.get(name[0])
|
||||||
if not field:
|
pref = False
|
||||||
|
if config_type:
|
||||||
|
pref = config_type.message_type.fields_by_name.get(snake_name)
|
||||||
|
|
||||||
|
if (not pref) or (not config_type):
|
||||||
if Globals.getInstance().get_camel_case():
|
if Globals.getInstance().get_camel_case():
|
||||||
print(f"{attributes.__class__.__name__} does not have an attribute called {camel_name}, so you can not set it.")
|
print(f"{attributes.__class__.__name__} does not have an attribute called {name[0]}.{camel_name}, so you can not set it.")
|
||||||
else:
|
else:
|
||||||
print(f"{attributes.__class__.__name__} does not have an attribute called {snake_name}, so you can not set it.")
|
print(f"{attributes.__class__.__name__} does not have an attribute called {name[0]}.{snake_name}, so you can not set it.")
|
||||||
print(f"Choices in sorted order are:")
|
print(f"Choices in sorted order are:")
|
||||||
names = []
|
names = []
|
||||||
for f in objDesc.fields:
|
for f in objDesc.fields:
|
||||||
tmp_name = f'{f.name}'
|
tmp_path = f'{f.name}'
|
||||||
if Globals.getInstance().get_camel_case():
|
if(f.message_type):
|
||||||
tmp_name = meshtastic.util.snake_to_camel(tmp_name)
|
for ff in f.message_type.fields:
|
||||||
names.append(tmp_name)
|
tmp_name = f'{ff.name}'
|
||||||
|
if Globals.getInstance().get_camel_case():
|
||||||
|
tmp_name = meshtastic.util.snake_to_camel(tmp_name)
|
||||||
|
names.append(tmp_path + "." + tmp_name)
|
||||||
for temp_name in sorted(names):
|
for temp_name in sorted(names):
|
||||||
print(f" {temp_name}")
|
print(f" {temp_name}")
|
||||||
return
|
return
|
||||||
@@ -119,11 +144,11 @@ def setPref(attributes, name, valStr):
|
|||||||
val = meshtastic.util.fromStr(valStr)
|
val = meshtastic.util.fromStr(valStr)
|
||||||
logging.debug(f'valStr:{valStr} val:{val}')
|
logging.debug(f'valStr:{valStr} val:{val}')
|
||||||
|
|
||||||
if snake_name == 'wifi_password' and len(valStr) < 8:
|
if snake_name == 'psk' and len(valStr) < 8:
|
||||||
print(f"Warning: wifi_password must be 8 or more characters.")
|
print(f"Warning: wifi.psk must be 8 or more characters.")
|
||||||
return
|
return
|
||||||
|
|
||||||
enumType = field.enum_type
|
enumType = pref.enum_type
|
||||||
# pylint: disable=C0123
|
# pylint: disable=C0123
|
||||||
if enumType and type(val) == str:
|
if enumType and type(val) == str:
|
||||||
# We've failed so far to convert this string into an enum, try to find it by reflection
|
# We've failed so far to convert this string into an enum, try to find it by reflection
|
||||||
@@ -132,9 +157,9 @@ def setPref(attributes, name, valStr):
|
|||||||
val = e.number
|
val = e.number
|
||||||
else:
|
else:
|
||||||
if Globals.getInstance().get_camel_case():
|
if Globals.getInstance().get_camel_case():
|
||||||
print(f"{camel_name} does not have an enum called {val}, so you can not set it.")
|
print(f"{name[0]}.{camel_name} does not have an enum called {val}, so you can not set it.")
|
||||||
else:
|
else:
|
||||||
print(f"{snake_name} does not have an enum called {val}, so you can not set it.")
|
print(f"{name[0]}.{snake_name} does not have an enum called {val}, so you can not set it.")
|
||||||
print(f"Choices in sorted order are:")
|
print(f"Choices in sorted order are:")
|
||||||
names = []
|
names = []
|
||||||
for f in enumType.values:
|
for f in enumType.values:
|
||||||
@@ -147,23 +172,25 @@ def setPref(attributes, name, valStr):
|
|||||||
# note: 'ignore_incoming' is a repeating field
|
# note: 'ignore_incoming' is a repeating field
|
||||||
if snake_name != 'ignore_incoming':
|
if snake_name != 'ignore_incoming':
|
||||||
try:
|
try:
|
||||||
setattr(attributes, snake_name, val)
|
config_values = getattr(attributes, config_type.name)
|
||||||
|
setattr(config_values, pref.name, val)
|
||||||
except TypeError:
|
except TypeError:
|
||||||
# The setter didn't like our arg type guess try again as a string
|
# The setter didn't like our arg type guess try again as a string
|
||||||
setattr(attributes, snake_name, valStr)
|
config_values = getattr(attributes, config_type.name)
|
||||||
|
setattr(config_values, pref.name, valStr)
|
||||||
else:
|
else:
|
||||||
if val == 0:
|
if val == 0:
|
||||||
# clear values
|
# clear values
|
||||||
print("Clearing ignore_incoming list")
|
print("Clearing ignore_incoming list")
|
||||||
del attributes.ignore_incoming[:]
|
del config_type.message_type.ignore_incoming[:]
|
||||||
else:
|
else:
|
||||||
print(f"Adding '{val}' to the ignore_incoming list")
|
print(f"Adding '{val}' to the ignore_incoming list")
|
||||||
attributes.ignore_incoming.extend([val])
|
config_type.message_type.ignore_incoming.extend([val])
|
||||||
|
|
||||||
if Globals.getInstance().get_camel_case():
|
if Globals.getInstance().get_camel_case():
|
||||||
print(f"Set {camel_name} to {valStr}")
|
print(f"Set {name[0]}.{camel_name} to {valStr}")
|
||||||
else:
|
else:
|
||||||
print(f"Set {snake_name} to {valStr}")
|
print(f"Set {name[0]}.{snake_name} to {valStr}")
|
||||||
|
|
||||||
|
|
||||||
def onConnected(interface):
|
def onConnected(interface):
|
||||||
@@ -183,7 +210,7 @@ def onConnected(interface):
|
|||||||
alt = 0
|
alt = 0
|
||||||
lat = 0.0
|
lat = 0.0
|
||||||
lon = 0.0
|
lon = 0.0
|
||||||
prefs = interface.localNode.radioConfig.preferences
|
prefs = interface.localNode.localConfig
|
||||||
if args.setalt:
|
if args.setalt:
|
||||||
alt = int(args.setalt)
|
alt = int(args.setalt)
|
||||||
prefs.fixed_position = True
|
prefs.fixed_position = True
|
||||||
@@ -224,17 +251,17 @@ def onConnected(interface):
|
|||||||
if args.pos_fields:
|
if args.pos_fields:
|
||||||
# If --pos-fields invoked with args, set position fields
|
# If --pos-fields invoked with args, set position fields
|
||||||
closeNow = True
|
closeNow = True
|
||||||
prefs = interface.getNode(args.dest).radioConfig.preferences
|
prefs = interface.getNode(args.dest).localConfig
|
||||||
allFields = 0
|
allFields = 0
|
||||||
|
|
||||||
try:
|
try:
|
||||||
for field in args.pos_fields:
|
for field in args.pos_fields:
|
||||||
v_field = radioconfig_pb2.PositionFlags.Value(field)
|
v_field = config_pb2.PositionFlags.Value(field)
|
||||||
allFields |= v_field
|
allFields |= v_field
|
||||||
|
|
||||||
except ValueError:
|
except ValueError:
|
||||||
print("ERROR: supported position fields are:")
|
print("ERROR: supported position fields are:")
|
||||||
print(radioconfig_pb2.PositionFlags.keys())
|
print(config_pb2.PositionFlags.keys())
|
||||||
print("If no fields are specified, will read and display current value.")
|
print("If no fields are specified, will read and display current value.")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
@@ -246,27 +273,14 @@ def onConnected(interface):
|
|||||||
elif args.pos_fields is not None:
|
elif args.pos_fields is not None:
|
||||||
# If --pos-fields invoked without args, read and display current value
|
# If --pos-fields invoked without args, read and display current value
|
||||||
closeNow = True
|
closeNow = True
|
||||||
prefs = interface.getNode(args.dest).radioConfig.preferences
|
prefs = interface.getNode(args.dest).localConfig
|
||||||
|
|
||||||
fieldNames = []
|
fieldNames = []
|
||||||
for bit in radioconfig_pb2.PositionFlags.values():
|
for bit in config_pb2.PositionFlags.values():
|
||||||
if prefs.position_flags & bit:
|
if prefs.position_flags & bit:
|
||||||
fieldNames.append(radioconfig_pb2.PositionFlags.Name(bit))
|
fieldNames.append(config_pb2.PositionFlags.Name(bit))
|
||||||
print(' '.join(fieldNames))
|
print(' '.join(fieldNames))
|
||||||
|
|
||||||
if args.set_team:
|
|
||||||
closeNow = True
|
|
||||||
try:
|
|
||||||
v_team = meshtastic.mesh_pb2.Team.Value(args.set_team.upper())
|
|
||||||
except ValueError:
|
|
||||||
v_team = 0
|
|
||||||
print(f"ERROR: Team \'{args.set_team}\' not found.")
|
|
||||||
print("Try a team name from the sorted list below, or use 'CLEAR' for unaffiliated:")
|
|
||||||
print(sorted(meshtastic.mesh_pb2.Team.keys()))
|
|
||||||
else:
|
|
||||||
print(f"Setting team to {meshtastic.mesh_pb2.Team.Name(v_team)}")
|
|
||||||
interface.getNode(args.dest).setOwner(team=v_team)
|
|
||||||
|
|
||||||
if args.set_ham:
|
if args.set_ham:
|
||||||
closeNow = True
|
closeNow = True
|
||||||
print(f"Setting Ham ID to {args.set_ham} and turning off encryption")
|
print(f"Setting Ham ID to {args.set_ham} and turning off encryption")
|
||||||
@@ -339,7 +353,7 @@ def onConnected(interface):
|
|||||||
# handle settings
|
# handle settings
|
||||||
if args.set:
|
if args.set:
|
||||||
closeNow = True
|
closeNow = True
|
||||||
prefs = interface.getNode(args.dest).radioConfig.preferences
|
prefs = interface.getNode(args.dest).localConfig
|
||||||
|
|
||||||
# Handle the int/float/bool arguments
|
# Handle the int/float/bool arguments
|
||||||
for pref in args.set:
|
for pref in args.set:
|
||||||
@@ -377,7 +391,7 @@ def onConnected(interface):
|
|||||||
alt = 0
|
alt = 0
|
||||||
lat = 0.0
|
lat = 0.0
|
||||||
lon = 0.0
|
lon = 0.0
|
||||||
prefs = interface.localNode.radioConfig.preferences
|
prefs = interface.localNode.localConfig
|
||||||
|
|
||||||
if 'alt' in configuration['location']:
|
if 'alt' in configuration['location']:
|
||||||
alt = int(configuration['location']['alt'])
|
alt = int(configuration['location']['alt'])
|
||||||
@@ -396,14 +410,14 @@ def onConnected(interface):
|
|||||||
interface.localNode.writeConfig()
|
interface.localNode.writeConfig()
|
||||||
|
|
||||||
if 'user_prefs' in configuration:
|
if 'user_prefs' in configuration:
|
||||||
prefs = interface.getNode(args.dest).radioConfig.preferences
|
prefs = interface.getNode(args.dest).localConfig
|
||||||
for pref in configuration['user_prefs']:
|
for pref in configuration['user_prefs']:
|
||||||
setPref(prefs, pref, str(configuration['user_prefs'][pref]))
|
setPref(prefs, pref, str(configuration['user_prefs'][pref]))
|
||||||
print("Writing modified preferences to device")
|
print("Writing modified preferences to device")
|
||||||
interface.getNode(args.dest).writeConfig()
|
interface.getNode(args.dest).writeConfig()
|
||||||
|
|
||||||
if 'userPrefs' in configuration:
|
if 'userPrefs' in configuration:
|
||||||
prefs = interface.getNode(args.dest).radioConfig.preferences
|
prefs = interface.getNode(args.dest).localConfig
|
||||||
for pref in configuration['userPrefs']:
|
for pref in configuration['userPrefs']:
|
||||||
setPref(prefs, pref, str(configuration['userPrefs'][pref]))
|
setPref(prefs, pref, str(configuration['userPrefs'][pref]))
|
||||||
print("Writing modified preferences to device")
|
print("Writing modified preferences to device")
|
||||||
@@ -454,69 +468,56 @@ def onConnected(interface):
|
|||||||
print(f"Deleting channel {channelIndex}")
|
print(f"Deleting channel {channelIndex}")
|
||||||
ch = interface.getNode(args.dest).deleteChannel(channelIndex)
|
ch = interface.getNode(args.dest).deleteChannel(channelIndex)
|
||||||
|
|
||||||
ch_changes = [args.ch_vlongslow, args.ch_longslow, args.ch_longfast,
|
def setSimpleConfig(modem_preset):
|
||||||
args.ch_midslow, args.ch_midfast,
|
"""Set one of the simple modem_config"""
|
||||||
args.ch_shortslow, args.ch_shortfast]
|
# Completely new radio settings
|
||||||
any_primary_channel_changes = any(x for x in ch_changes)
|
chs = config_pb2.Config.LoRaConfig()
|
||||||
if args.ch_set or any_primary_channel_changes or args.ch_enable or args.ch_disable:
|
chs.modem_preset = modem_preset
|
||||||
|
prefs = interface.getNode(args.dest).localConfig
|
||||||
|
prefs.lora.CopyFrom(chs)
|
||||||
|
interface.getNode(args.dest).writeConfig()
|
||||||
|
|
||||||
|
# handle the simple radio set commands
|
||||||
|
if args.ch_vlongslow:
|
||||||
|
setSimpleConfig(config_pb2.Config.LoRaConfig.ModemPreset.VLongSlow)
|
||||||
|
|
||||||
|
if args.ch_longslow:
|
||||||
|
setSimpleConfig(config_pb2.Config.LoRaConfig.ModemPreset.LongSlow)
|
||||||
|
|
||||||
|
if args.ch_longfast:
|
||||||
|
setSimpleConfig(config_pb2.Config.LoRaConfig.ModemPreset.LongFast)
|
||||||
|
|
||||||
|
if args.ch_midslow:
|
||||||
|
setSimpleConfig(config_pb2.Config.LoRaConfig.ModemPreset.MidSlow)
|
||||||
|
|
||||||
|
if args.ch_midfast:
|
||||||
|
setSimpleConfig(config_pb2.Config.LoRaConfig.ModemPreset.MidFast)
|
||||||
|
|
||||||
|
if args.ch_shortslow:
|
||||||
|
setSimpleConfig(config_pb2.Config.LoRaConfig.ModemPreset.ShortSlow)
|
||||||
|
|
||||||
|
if args.ch_shortfast:
|
||||||
|
setSimpleConfig(config_pb2.Config.LoRaConfig.ModemPreset.ShortFast)
|
||||||
|
|
||||||
|
if args.ch_set or args.ch_enable or args.ch_disable:
|
||||||
closeNow = True
|
closeNow = True
|
||||||
|
|
||||||
channelIndex = our_globals.get_channel_index()
|
channelIndex = our_globals.get_channel_index()
|
||||||
if channelIndex is None:
|
if channelIndex is None:
|
||||||
if any_primary_channel_changes:
|
meshtastic.util.our_exit("Warning: Need to specify '--ch-index'.", 1)
|
||||||
# we assume that they want the primary channel if they're setting range values
|
|
||||||
channelIndex = 0
|
|
||||||
else:
|
|
||||||
meshtastic.util.our_exit("Warning: Need to specify '--ch-index'.", 1)
|
|
||||||
ch = interface.getNode(args.dest).channels[channelIndex]
|
ch = interface.getNode(args.dest).channels[channelIndex]
|
||||||
|
|
||||||
if any_primary_channel_changes or args.ch_enable or args.ch_disable:
|
if args.ch_enable or args.ch_disable:
|
||||||
|
|
||||||
if channelIndex == 0 and not any_primary_channel_changes:
|
if channelIndex == 0:
|
||||||
meshtastic.util.our_exit("Warning: Cannot enable/disable PRIMARY channel.")
|
meshtastic.util.our_exit("Warning: Cannot enable/disable PRIMARY channel.")
|
||||||
|
|
||||||
if channelIndex != 0:
|
|
||||||
if any_primary_channel_changes:
|
|
||||||
meshtastic.util.our_exit("Warning: Standard channel settings can only be applied to the PRIMARY channel")
|
|
||||||
|
|
||||||
enable = True # default to enable
|
enable = True # default to enable
|
||||||
if args.ch_enable:
|
if args.ch_enable:
|
||||||
enable = True
|
enable = True
|
||||||
if args.ch_disable:
|
if args.ch_disable:
|
||||||
enable = False
|
enable = False
|
||||||
|
|
||||||
def setSimpleChannel(modem_config):
|
|
||||||
"""Set one of the simple modem_config only based channels"""
|
|
||||||
|
|
||||||
# Completely new channel settings
|
|
||||||
chs = channel_pb2.ChannelSettings()
|
|
||||||
chs.modem_config = modem_config
|
|
||||||
chs.psk = bytes([1]) # Use default channel psk 1
|
|
||||||
|
|
||||||
ch.settings.CopyFrom(chs)
|
|
||||||
|
|
||||||
# handle the simple channel set commands
|
|
||||||
if args.ch_vlongslow:
|
|
||||||
setSimpleChannel(channel_pb2.ChannelSettings.ModemConfig.VLongSlow)
|
|
||||||
|
|
||||||
if args.ch_longslow:
|
|
||||||
setSimpleChannel(channel_pb2.ChannelSettings.ModemConfig.LongSlow)
|
|
||||||
|
|
||||||
if args.ch_longfast:
|
|
||||||
setSimpleChannel(channel_pb2.ChannelSettings.ModemConfig.LongFast)
|
|
||||||
|
|
||||||
if args.ch_midslow:
|
|
||||||
setSimpleChannel(channel_pb2.ChannelSettings.ModemConfig.MidSlow)
|
|
||||||
|
|
||||||
if args.ch_midfast:
|
|
||||||
setSimpleChannel(channel_pb2.ChannelSettings.ModemConfig.MidFast)
|
|
||||||
|
|
||||||
if args.ch_shortslow:
|
|
||||||
setSimpleChannel(channel_pb2.ChannelSettings.ModemConfig.ShortSlow)
|
|
||||||
|
|
||||||
if args.ch_shortfast:
|
|
||||||
setSimpleChannel(channel_pb2.ChannelSettings.ModemConfig.ShortFast)
|
|
||||||
|
|
||||||
# Handle the channel settings
|
# Handle the channel settings
|
||||||
for pref in (args.ch_set or []):
|
for pref in (args.ch_set or []):
|
||||||
if pref[0] == "psk":
|
if pref[0] == "psk":
|
||||||
@@ -552,7 +553,7 @@ def onConnected(interface):
|
|||||||
|
|
||||||
if args.get:
|
if args.get:
|
||||||
closeNow = True
|
closeNow = True
|
||||||
prefs = interface.getNode(args.dest).radioConfig.preferences
|
prefs = interface.getNode(args.dest).localConfig
|
||||||
|
|
||||||
# Handle the int/float/bool arguments
|
# Handle the int/float/bool arguments
|
||||||
for pref in args.get:
|
for pref in args.get:
|
||||||
@@ -641,7 +642,7 @@ def export_config(interface):
|
|||||||
if alt:
|
if alt:
|
||||||
config += f" alt: {alt}\n"
|
config += f" alt: {alt}\n"
|
||||||
config += "\n"
|
config += "\n"
|
||||||
preferences = f'{interface.localNode.radioConfig.preferences}'
|
preferences = f'{interface.localNode.localConfig}'
|
||||||
prefs = preferences.splitlines()
|
prefs = preferences.splitlines()
|
||||||
if prefs:
|
if prefs:
|
||||||
if Globals.getInstance().get_camel_case():
|
if Globals.getInstance().get_camel_case():
|
||||||
@@ -849,9 +850,6 @@ def initParser():
|
|||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--set-owner-short", help="Set device owner short name", action="store")
|
"--set-owner-short", help="Set device owner short name", action="store")
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"--set-team", help="Set team affiliation (an invalid team will list valid values)", action="store")
|
|
||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--set-ham", help="Set licensed Ham ID and turn off encryption", action="store")
|
"--set-ham", help="Set licensed Ham ID and turn off encryption", action="store")
|
||||||
|
|
||||||
@@ -913,13 +911,6 @@ def initParser():
|
|||||||
parser.add_argument("--noproto", help="Don't start the API, just function as a dumb serial terminal.",
|
parser.add_argument("--noproto", help="Don't start the API, just function as a dumb serial terminal.",
|
||||||
action="store_true")
|
action="store_true")
|
||||||
|
|
||||||
parser.add_argument('--setchan', dest='deprecated', nargs=2, action='append',
|
|
||||||
help='Deprecated, use "--ch-set param value" instead')
|
|
||||||
parser.add_argument('--set-router', dest='deprecated',
|
|
||||||
action='store_true', help='Deprecated, use "--set is_router true" instead')
|
|
||||||
parser.add_argument('--unset-router', dest='deprecated',
|
|
||||||
action='store_false', help='Deprecated, use "--set is_router false" instead')
|
|
||||||
|
|
||||||
have_tunnel = platform.system() == 'Linux'
|
have_tunnel = platform.system() == 'Linux'
|
||||||
if have_tunnel:
|
if have_tunnel:
|
||||||
parser.add_argument('--tunnel', action='store_true',
|
parser.add_argument('--tunnel', action='store_true',
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
# source: admin.proto
|
# source: admin.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
from google.protobuf import descriptor as _descriptor
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||||
from google.protobuf import message as _message
|
from google.protobuf import message as _message
|
||||||
from google.protobuf import reflection as _reflection
|
from google.protobuf import reflection as _reflection
|
||||||
from google.protobuf import symbol_database as _symbol_database
|
from google.protobuf import symbol_database as _symbol_database
|
||||||
@@ -12,317 +13,18 @@ _sym_db = _symbol_database.Default()
|
|||||||
|
|
||||||
|
|
||||||
from . import channel_pb2 as channel__pb2
|
from . import channel_pb2 as channel__pb2
|
||||||
|
from . import config_pb2 as config__pb2
|
||||||
from . import mesh_pb2 as mesh__pb2
|
from . import mesh_pb2 as mesh__pb2
|
||||||
from . import radioconfig_pb2 as radioconfig__pb2
|
from . import module_config_pb2 as module__config__pb2
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0b\x61\x64min.proto\x1a\rchannel.proto\x1a\x0c\x63onfig.proto\x1a\nmesh.proto\x1a\x13module_config.proto\"\xc4\x0c\n\x0c\x41\x64minMessage\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\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\x36\n\x12get_config_request\x18\n \x01(\x0e\x32\x18.AdminMessage.ConfigTypeH\x00\x12&\n\x13get_config_response\x18\x0b \x01(\x0b\x32\x07.ConfigH\x00\x12\x1d\n\nset_config\x18\x0c \x01(\x0b\x32\x07.ConfigH\x00\x12\x1c\n\x12\x63onfirm_set_config\x18\r \x01(\x08H\x00\x12\x43\n\x19get_module_config_request\x18\x0e \x01(\x0e\x32\x1e.AdminMessage.ModuleConfigTypeH\x00\x12\x33\n\x1aget_module_config_response\x18\x0f \x01(\x0b\x32\r.ModuleConfigH\x00\x12*\n\x11set_module_config\x18\x10 \x01(\x0b\x32\r.ModuleConfigH\x00\x12#\n\x19\x63onfirm_set_module_config\x18\x11 \x01(\x08H\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\x12\x31\n\'get_canned_message_module_part1_request\x18$ \x01(\x08H\x00\x12\x32\n(get_canned_message_module_part1_response\x18% \x01(\tH\x00\x12\x31\n\'get_canned_message_module_part2_request\x18& \x01(\x08H\x00\x12\x32\n(get_canned_message_module_part2_response\x18\' \x01(\tH\x00\x12\x31\n\'get_canned_message_module_part3_request\x18( \x01(\x08H\x00\x12\x32\n(get_canned_message_module_part3_response\x18) \x01(\tH\x00\x12\x31\n\'get_canned_message_module_part4_request\x18* \x01(\x08H\x00\x12\x32\n(get_canned_message_module_part4_response\x18+ \x01(\tH\x00\x12)\n\x1fset_canned_message_module_part1\x18, \x01(\tH\x00\x12)\n\x1fset_canned_message_module_part2\x18- \x01(\tH\x00\x12)\n\x1fset_canned_message_module_part3\x18. \x01(\tH\x00\x12)\n\x1fset_canned_message_module_part4\x18/ \x01(\tH\x00\x12\x1a\n\x10shutdown_seconds\x18\x33 \x01(\x05H\x00\"|\n\nConfigType\x12\x11\n\rDEVICE_CONFIG\x10\x00\x12\x13\n\x0fPOSITION_CONFIG\x10\x01\x12\x10\n\x0cPOWER_CONFIG\x10\x02\x12\x0f\n\x0bWIFI_CONFIG\x10\x03\x12\x12\n\x0e\x44ISPLAY_CONFIG\x10\x04\x12\x0f\n\x0bLORA_CONFIG\x10\x05\"\xa6\x01\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\x42\t\n\x07variantBG\n\x13\x63om.geeksville.meshB\x0b\x41\x64minProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3')
|
||||||
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\nmesh.proto\x1a\x11radioconfig.proto\"\xa1\x08\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\x12\x31\n\'get_canned_message_module_part1_request\x18$ \x01(\x08H\x00\x12\x32\n(get_canned_message_module_part1_response\x18% \x01(\tH\x00\x12\x31\n\'get_canned_message_module_part2_request\x18& \x01(\x08H\x00\x12\x32\n(get_canned_message_module_part2_response\x18\' \x01(\tH\x00\x12\x31\n\'get_canned_message_module_part3_request\x18( \x01(\x08H\x00\x12\x32\n(get_canned_message_module_part3_response\x18) \x01(\tH\x00\x12\x31\n\'get_canned_message_module_part4_request\x18* \x01(\x08H\x00\x12\x32\n(get_canned_message_module_part4_response\x18+ \x01(\tH\x00\x12)\n\x1fset_canned_message_module_part1\x18, \x01(\tH\x00\x12)\n\x1fset_canned_message_module_part2\x18- \x01(\tH\x00\x12)\n\x1fset_canned_message_module_part3\x18. \x01(\tH\x00\x12)\n\x1fset_canned_message_module_part4\x18/ \x01(\tH\x00\x12\x1a\n\x10shutdown_seconds\x18\x33 \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,mesh__pb2.DESCRIPTOR,radioconfig__pb2.DESCRIPTOR,])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_ADMINMESSAGE = DESCRIPTOR.message_types_by_name['AdminMessage']
|
||||||
_ADMINMESSAGE = _descriptor.Descriptor(
|
_ADMINMESSAGE_CONFIGTYPE = _ADMINMESSAGE.enum_types_by_name['ConfigType']
|
||||||
name='AdminMessage',
|
_ADMINMESSAGE_MODULECONFIGTYPE = _ADMINMESSAGE.enum_types_by_name['ModuleConfigType']
|
||||||
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),
|
|
||||||
_descriptor.FieldDescriptor(
|
|
||||||
name='get_canned_message_module_part1_request', full_name='AdminMessage.get_canned_message_module_part1_request', index=13,
|
|
||||||
number=36, 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_canned_message_module_part1_response', full_name='AdminMessage.get_canned_message_module_part1_response', index=14,
|
|
||||||
number=37, 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='get_canned_message_module_part2_request', full_name='AdminMessage.get_canned_message_module_part2_request', index=15,
|
|
||||||
number=38, 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_canned_message_module_part2_response', full_name='AdminMessage.get_canned_message_module_part2_response', index=16,
|
|
||||||
number=39, 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='get_canned_message_module_part3_request', full_name='AdminMessage.get_canned_message_module_part3_request', index=17,
|
|
||||||
number=40, 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_canned_message_module_part3_response', full_name='AdminMessage.get_canned_message_module_part3_response', index=18,
|
|
||||||
number=41, 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='get_canned_message_module_part4_request', full_name='AdminMessage.get_canned_message_module_part4_request', index=19,
|
|
||||||
number=42, 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_canned_message_module_part4_response', full_name='AdminMessage.get_canned_message_module_part4_response', index=20,
|
|
||||||
number=43, 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='set_canned_message_module_part1', full_name='AdminMessage.set_canned_message_module_part1', index=21,
|
|
||||||
number=44, 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='set_canned_message_module_part2', full_name='AdminMessage.set_canned_message_module_part2', index=22,
|
|
||||||
number=45, 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='set_canned_message_module_part3', full_name='AdminMessage.set_canned_message_module_part3', index=23,
|
|
||||||
number=46, 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='set_canned_message_module_part4', full_name='AdminMessage.set_canned_message_module_part4', index=24,
|
|
||||||
number=47, 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='shutdown_seconds', full_name='AdminMessage.shutdown_seconds', index=25,
|
|
||||||
number=51, 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=1119,
|
|
||||||
)
|
|
||||||
|
|
||||||
_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']
|
|
||||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
|
||||||
_ADMINMESSAGE.fields_by_name['get_canned_message_module_part1_request'])
|
|
||||||
_ADMINMESSAGE.fields_by_name['get_canned_message_module_part1_request'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
|
||||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
|
||||||
_ADMINMESSAGE.fields_by_name['get_canned_message_module_part1_response'])
|
|
||||||
_ADMINMESSAGE.fields_by_name['get_canned_message_module_part1_response'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
|
||||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
|
||||||
_ADMINMESSAGE.fields_by_name['get_canned_message_module_part2_request'])
|
|
||||||
_ADMINMESSAGE.fields_by_name['get_canned_message_module_part2_request'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
|
||||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
|
||||||
_ADMINMESSAGE.fields_by_name['get_canned_message_module_part2_response'])
|
|
||||||
_ADMINMESSAGE.fields_by_name['get_canned_message_module_part2_response'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
|
||||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
|
||||||
_ADMINMESSAGE.fields_by_name['get_canned_message_module_part3_request'])
|
|
||||||
_ADMINMESSAGE.fields_by_name['get_canned_message_module_part3_request'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
|
||||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
|
||||||
_ADMINMESSAGE.fields_by_name['get_canned_message_module_part3_response'])
|
|
||||||
_ADMINMESSAGE.fields_by_name['get_canned_message_module_part3_response'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
|
||||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
|
||||||
_ADMINMESSAGE.fields_by_name['get_canned_message_module_part4_request'])
|
|
||||||
_ADMINMESSAGE.fields_by_name['get_canned_message_module_part4_request'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
|
||||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
|
||||||
_ADMINMESSAGE.fields_by_name['get_canned_message_module_part4_response'])
|
|
||||||
_ADMINMESSAGE.fields_by_name['get_canned_message_module_part4_response'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
|
||||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
|
||||||
_ADMINMESSAGE.fields_by_name['set_canned_message_module_part1'])
|
|
||||||
_ADMINMESSAGE.fields_by_name['set_canned_message_module_part1'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
|
||||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
|
||||||
_ADMINMESSAGE.fields_by_name['set_canned_message_module_part2'])
|
|
||||||
_ADMINMESSAGE.fields_by_name['set_canned_message_module_part2'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
|
||||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
|
||||||
_ADMINMESSAGE.fields_by_name['set_canned_message_module_part3'])
|
|
||||||
_ADMINMESSAGE.fields_by_name['set_canned_message_module_part3'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
|
||||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
|
||||||
_ADMINMESSAGE.fields_by_name['set_canned_message_module_part4'])
|
|
||||||
_ADMINMESSAGE.fields_by_name['set_canned_message_module_part4'].containing_oneof = _ADMINMESSAGE.oneofs_by_name['variant']
|
|
||||||
_ADMINMESSAGE.oneofs_by_name['variant'].fields.append(
|
|
||||||
_ADMINMESSAGE.fields_by_name['shutdown_seconds'])
|
|
||||||
_ADMINMESSAGE.fields_by_name['shutdown_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,), {
|
AdminMessage = _reflection.GeneratedProtocolMessageType('AdminMessage', (_message.Message,), {
|
||||||
'DESCRIPTOR' : _ADMINMESSAGE,
|
'DESCRIPTOR' : _ADMINMESSAGE,
|
||||||
'__module__' : 'admin_pb2'
|
'__module__' : 'admin_pb2'
|
||||||
@@ -330,6 +32,14 @@ AdminMessage = _reflection.GeneratedProtocolMessageType('AdminMessage', (_messag
|
|||||||
})
|
})
|
||||||
_sym_db.RegisterMessage(AdminMessage)
|
_sym_db.RegisterMessage(AdminMessage)
|
||||||
|
|
||||||
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
|
|
||||||
DESCRIPTOR._options = None
|
DESCRIPTOR._options = None
|
||||||
|
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\013AdminProtosH\003Z!github.com/meshtastic/gomeshproto'
|
||||||
|
_ADMINMESSAGE._serialized_start=78
|
||||||
|
_ADMINMESSAGE._serialized_end=1682
|
||||||
|
_ADMINMESSAGE_CONFIGTYPE._serialized_start=1378
|
||||||
|
_ADMINMESSAGE_CONFIGTYPE._serialized_end=1502
|
||||||
|
_ADMINMESSAGE_MODULECONFIGTYPE._serialized_start=1505
|
||||||
|
_ADMINMESSAGE_MODULECONFIGTYPE._serialized_end=1671
|
||||||
# @@protoc_insertion_point(module_scope)
|
# @@protoc_insertion_point(module_scope)
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
# source: apponly.proto
|
# source: apponly.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
from google.protobuf import descriptor as _descriptor
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||||
from google.protobuf import message as _message
|
from google.protobuf import message as _message
|
||||||
from google.protobuf import reflection as _reflection
|
from google.protobuf import reflection as _reflection
|
||||||
from google.protobuf import symbol_database as _symbol_database
|
from google.protobuf import symbol_database as _symbol_database
|
||||||
@@ -12,54 +13,14 @@ _sym_db = _symbol_database.Default()
|
|||||||
|
|
||||||
|
|
||||||
from . import channel_pb2 as channel__pb2
|
from . import channel_pb2 as channel__pb2
|
||||||
|
from . import config_pb2 as config__pb2
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rapponly.proto\x1a\rchannel.proto\x1a\x0c\x63onfig.proto\"Y\n\nChannelSet\x12\"\n\x08settings\x18\x01 \x03(\x0b\x32\x10.ChannelSettings\x12\'\n\x0blora_config\x18\x02 \x01(\x0b\x32\x12.Config.LoRaConfigBI\n\x13\x63om.geeksville.meshB\rAppOnlyProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3')
|
||||||
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,])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_CHANNELSET = DESCRIPTOR.message_types_by_name['ChannelSet']
|
||||||
_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,), {
|
ChannelSet = _reflection.GeneratedProtocolMessageType('ChannelSet', (_message.Message,), {
|
||||||
'DESCRIPTOR' : _CHANNELSET,
|
'DESCRIPTOR' : _CHANNELSET,
|
||||||
'__module__' : 'apponly_pb2'
|
'__module__' : 'apponly_pb2'
|
||||||
@@ -67,6 +28,10 @@ ChannelSet = _reflection.GeneratedProtocolMessageType('ChannelSet', (_message.Me
|
|||||||
})
|
})
|
||||||
_sym_db.RegisterMessage(ChannelSet)
|
_sym_db.RegisterMessage(ChannelSet)
|
||||||
|
|
||||||
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
|
|
||||||
DESCRIPTOR._options = None
|
DESCRIPTOR._options = None
|
||||||
|
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\rAppOnlyProtosH\003Z!github.com/meshtastic/gomeshproto'
|
||||||
|
_CHANNELSET._serialized_start=46
|
||||||
|
_CHANNELSET._serialized_end=135
|
||||||
# @@protoc_insertion_point(module_scope)
|
# @@protoc_insertion_point(module_scope)
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
# source: cannedmessages.proto
|
# source: cannedmessages.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
from google.protobuf import descriptor as _descriptor
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||||
from google.protobuf import message as _message
|
from google.protobuf import message as _message
|
||||||
from google.protobuf import reflection as _reflection
|
from google.protobuf import reflection as _reflection
|
||||||
from google.protobuf import symbol_database as _symbol_database
|
from google.protobuf import symbol_database as _symbol_database
|
||||||
@@ -13,71 +14,11 @@ _sym_db = _symbol_database.Default()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x63\x61nnedmessages.proto\"w\n\x19\x43\x61nnedMessageModuleConfig\x12\x15\n\rmessagesPart1\x18\x0b \x01(\t\x12\x15\n\rmessagesPart2\x18\x0c \x01(\t\x12\x15\n\rmessagesPart3\x18\r \x01(\t\x12\x15\n\rmessagesPart4\x18\x0e \x01(\tBU\n\x13\x63om.geeksville.meshB\x19\x43\x61nnedMessageConfigProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3')
|
||||||
name='cannedmessages.proto',
|
|
||||||
package='',
|
|
||||||
syntax='proto3',
|
|
||||||
serialized_options=b'\n\023com.geeksville.meshB\031CannedMessageConfigProtosH\003Z!github.com/meshtastic/gomeshproto',
|
|
||||||
serialized_pb=b'\n\x14\x63\x61nnedmessages.proto\"w\n\x19\x43\x61nnedMessageModuleConfig\x12\x15\n\rmessagesPart1\x18\x0b \x01(\t\x12\x15\n\rmessagesPart2\x18\x0c \x01(\t\x12\x15\n\rmessagesPart3\x18\r \x01(\t\x12\x15\n\rmessagesPart4\x18\x0e \x01(\tBU\n\x13\x63om.geeksville.meshB\x19\x43\x61nnedMessageConfigProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_CANNEDMESSAGEMODULECONFIG = DESCRIPTOR.message_types_by_name['CannedMessageModuleConfig']
|
||||||
_CANNEDMESSAGEMODULECONFIG = _descriptor.Descriptor(
|
|
||||||
name='CannedMessageModuleConfig',
|
|
||||||
full_name='CannedMessageModuleConfig',
|
|
||||||
filename=None,
|
|
||||||
file=DESCRIPTOR,
|
|
||||||
containing_type=None,
|
|
||||||
fields=[
|
|
||||||
_descriptor.FieldDescriptor(
|
|
||||||
name='messagesPart1', full_name='CannedMessageModuleConfig.messagesPart1', index=0,
|
|
||||||
number=11, 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='messagesPart2', full_name='CannedMessageModuleConfig.messagesPart2', index=1,
|
|
||||||
number=12, 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='messagesPart3', full_name='CannedMessageModuleConfig.messagesPart3', index=2,
|
|
||||||
number=13, 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='messagesPart4', full_name='CannedMessageModuleConfig.messagesPart4', index=3,
|
|
||||||
number=14, 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=24,
|
|
||||||
serialized_end=143,
|
|
||||||
)
|
|
||||||
|
|
||||||
DESCRIPTOR.message_types_by_name['CannedMessageModuleConfig'] = _CANNEDMESSAGEMODULECONFIG
|
|
||||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
|
||||||
|
|
||||||
CannedMessageModuleConfig = _reflection.GeneratedProtocolMessageType('CannedMessageModuleConfig', (_message.Message,), {
|
CannedMessageModuleConfig = _reflection.GeneratedProtocolMessageType('CannedMessageModuleConfig', (_message.Message,), {
|
||||||
'DESCRIPTOR' : _CANNEDMESSAGEMODULECONFIG,
|
'DESCRIPTOR' : _CANNEDMESSAGEMODULECONFIG,
|
||||||
'__module__' : 'cannedmessages_pb2'
|
'__module__' : 'cannedmessages_pb2'
|
||||||
@@ -85,6 +26,10 @@ CannedMessageModuleConfig = _reflection.GeneratedProtocolMessageType('CannedMess
|
|||||||
})
|
})
|
||||||
_sym_db.RegisterMessage(CannedMessageModuleConfig)
|
_sym_db.RegisterMessage(CannedMessageModuleConfig)
|
||||||
|
|
||||||
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
|
|
||||||
DESCRIPTOR._options = None
|
DESCRIPTOR._options = None
|
||||||
|
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\031CannedMessageConfigProtosH\003Z!github.com/meshtastic/gomeshproto'
|
||||||
|
_CANNEDMESSAGEMODULECONFIG._serialized_start=24
|
||||||
|
_CANNEDMESSAGEMODULECONFIG._serialized_end=143
|
||||||
# @@protoc_insertion_point(module_scope)
|
# @@protoc_insertion_point(module_scope)
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
# source: channel.proto
|
# source: channel.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
from google.protobuf import descriptor as _descriptor
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||||
from google.protobuf import message as _message
|
from google.protobuf import message as _message
|
||||||
from google.protobuf import reflection as _reflection
|
from google.protobuf import reflection as _reflection
|
||||||
from google.protobuf import symbol_database as _symbol_database
|
from google.protobuf import symbol_database as _symbol_database
|
||||||
@@ -13,241 +14,13 @@ _sym_db = _symbol_database.Default()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rchannel.proto\"\x7f\n\x0f\x43hannelSettings\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\"\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')
|
||||||
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\"\xf6\x02\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\"p\n\x0bModemConfig\x12\r\n\tVLongSlow\x10\x00\x12\x0c\n\x08LongSlow\x10\x01\x12\x0c\n\x08LongFast\x10\x02\x12\x0b\n\x07MidSlow\x10\x03\x12\x0b\n\x07MidFast\x10\x04\x12\r\n\tShortSlow\x10\x05\x12\r\n\tShortFast\x10\x06\"\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'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_CHANNELSETTINGS_MODEMCONFIG = _descriptor.EnumDescriptor(
|
_CHANNELSETTINGS = DESCRIPTOR.message_types_by_name['ChannelSettings']
|
||||||
name='ModemConfig',
|
_CHANNEL = DESCRIPTOR.message_types_by_name['Channel']
|
||||||
full_name='ChannelSettings.ModemConfig',
|
_CHANNEL_ROLE = _CHANNEL.enum_types_by_name['Role']
|
||||||
filename=None,
|
|
||||||
file=DESCRIPTOR,
|
|
||||||
values=[
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='VLongSlow', index=0, number=0,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='LongSlow', index=1, number=1,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='LongFast', index=2, number=2,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='MidSlow', index=3, number=3,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='MidFast', index=4, number=4,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='ShortSlow', index=5, number=5,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='ShortFast', index=6, number=6,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
],
|
|
||||||
containing_type=None,
|
|
||||||
serialized_options=None,
|
|
||||||
serialized_start=280,
|
|
||||||
serialized_end=392,
|
|
||||||
)
|
|
||||||
_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=486,
|
|
||||||
serialized_end=534,
|
|
||||||
)
|
|
||||||
_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=392,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
_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=395,
|
|
||||||
serialized_end=534,
|
|
||||||
)
|
|
||||||
|
|
||||||
_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,), {
|
ChannelSettings = _reflection.GeneratedProtocolMessageType('ChannelSettings', (_message.Message,), {
|
||||||
'DESCRIPTOR' : _CHANNELSETTINGS,
|
'DESCRIPTOR' : _CHANNELSETTINGS,
|
||||||
'__module__' : 'channel_pb2'
|
'__module__' : 'channel_pb2'
|
||||||
@@ -262,6 +35,14 @@ Channel = _reflection.GeneratedProtocolMessageType('Channel', (_message.Message,
|
|||||||
})
|
})
|
||||||
_sym_db.RegisterMessage(Channel)
|
_sym_db.RegisterMessage(Channel)
|
||||||
|
|
||||||
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
|
|
||||||
DESCRIPTOR._options = None
|
DESCRIPTOR._options = None
|
||||||
|
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\rChannelProtosH\003Z!github.com/meshtastic/gomeshproto'
|
||||||
|
_CHANNELSETTINGS._serialized_start=17
|
||||||
|
_CHANNELSETTINGS._serialized_end=144
|
||||||
|
_CHANNEL._serialized_start=147
|
||||||
|
_CHANNEL._serialized_end=286
|
||||||
|
_CHANNEL_ROLE._serialized_start=238
|
||||||
|
_CHANNEL_ROLE._serialized_end=286
|
||||||
# @@protoc_insertion_point(module_scope)
|
# @@protoc_insertion_point(module_scope)
|
||||||
|
|||||||
119
meshtastic/config_pb2.py
Normal file
119
meshtastic/config_pb2.py
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
|
# source: config.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||||
|
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_pool.Default().AddSerializedFile(b'\n\x0c\x63onfig.proto\"\xd6\x11\n\x06\x43onfig\x12&\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32\x14.Config.DeviceConfigH\x00\x12*\n\x08position\x18\x02 \x01(\x0b\x32\x16.Config.PositionConfigH\x00\x12$\n\x05power\x18\x03 \x01(\x0b\x32\x13.Config.PowerConfigH\x00\x12\"\n\x04wifi\x18\x04 \x01(\x0b\x32\x12.Config.WiFiConfigH\x00\x12(\n\x07\x64isplay\x18\x05 \x01(\x0b\x32\x15.Config.DisplayConfigH\x00\x12\"\n\x04lora\x18\x06 \x01(\x0b\x32\x12.Config.LoRaConfigH\x00\x1a\xd8\x01\n\x0c\x44\x65viceConfig\x12\'\n\x04role\x18\x01 \x01(\x0e\x32\x19.Config.DeviceConfig.Role\x12\x17\n\x0fserial_disabled\x18\x02 \x01(\x08\x12\x15\n\rfactory_reset\x18\x03 \x01(\x08\x12\x19\n\x11\x64\x65\x62ug_log_enabled\x18\x04 \x01(\x08\x12\x12\n\nntp_server\x18\x05 \x01(\t\"@\n\x04Role\x12\n\n\x06\x43lient\x10\x00\x12\x0e\n\nClientMute\x10\x01\x12\n\n\x06Router\x10\x02\x12\x10\n\x0cRouterClient\x10\x03\x1a\x86\x03\n\x0ePositionConfig\x12\x1f\n\x17position_broadcast_secs\x18\x01 \x01(\r\x12)\n!position_broadcast_smart_disabled\x18\x02 \x01(\x08\x12\x16\n\x0e\x66ixed_position\x18\x03 \x01(\x08\x12\x14\n\x0cgps_disabled\x18\x05 \x01(\x08\x12\x1b\n\x13gps_update_interval\x18\x06 \x01(\r\x12\x18\n\x10gps_attempt_time\x18\x07 \x01(\r\x12\x16\n\x0eposition_flags\x18\n \x01(\r\"\xaa\x01\n\rPositionFlags\x12\x11\n\rPOS_UNDEFINED\x10\x00\x12\x10\n\x0cPOS_ALTITUDE\x10\x01\x12\x0f\n\x0bPOS_ALT_MSL\x10\x02\x12\x0f\n\x0bPOS_GEO_SEP\x10\x04\x12\x0b\n\x07POS_DOP\x10\x08\x12\r\n\tPOS_HVDOP\x10\x10\x12\x11\n\rPOS_SATINVIEW\x10 \x12\x0f\n\x0bPOS_SEQ_NOS\x10@\x12\x12\n\rPOS_TIMESTAMP\x10\x80\x01\x1a\xf4\x03\n\x0bPowerConfig\x12\x39\n\x0e\x63harge_current\x18\x01 \x01(\x0e\x32!.Config.PowerConfig.ChargeCurrent\x12\x17\n\x0fis_power_saving\x18\x02 \x01(\x08\x12&\n\x1eon_battery_shutdown_after_secs\x18\x04 \x01(\r\x12\x1f\n\x17\x61\x64\x63_multiplier_override\x18\x06 \x01(\x02\x12\x1b\n\x13wait_bluetooth_secs\x18\x07 \x01(\r\x12\x1d\n\x15mesh_sds_timeout_secs\x18\t \x01(\r\x12\x10\n\x08sds_secs\x18\n \x01(\r\x12\x0f\n\x07ls_secs\x18\x0b \x01(\r\x12\x15\n\rmin_wake_secs\x18\x0c \x01(\r\"\xd1\x01\n\rChargeCurrent\x12\x0b\n\x07MAUnset\x10\x00\x12\t\n\x05MA100\x10\x01\x12\t\n\x05MA190\x10\x02\x12\t\n\x05MA280\x10\x03\x12\t\n\x05MA360\x10\x04\x12\t\n\x05MA450\x10\x05\x12\t\n\x05MA550\x10\x06\x12\t\n\x05MA630\x10\x07\x12\t\n\x05MA700\x10\x08\x12\t\n\x05MA780\x10\t\x12\t\n\x05MA880\x10\n\x12\t\n\x05MA960\x10\x0b\x12\n\n\x06MA1000\x10\x0c\x12\n\n\x06MA1080\x10\r\x12\n\n\x06MA1160\x10\x0e\x12\n\n\x06MA1240\x10\x0f\x12\n\n\x06MA1320\x10\x10\x1aK\n\nWiFiConfig\x12\x0c\n\x04ssid\x18\x01 \x01(\t\x12\x0b\n\x03psk\x18\x02 \x01(\t\x12\x0f\n\x07\x61p_mode\x18\x03 \x01(\x08\x12\x11\n\tap_hidden\x18\x04 \x01(\x08\x1a\x8f\x02\n\rDisplayConfig\x12\x16\n\x0escreen_on_secs\x18\x01 \x01(\r\x12=\n\ngps_format\x18\x02 \x01(\x0e\x32).Config.DisplayConfig.GpsCoordinateFormat\x12!\n\x19\x61uto_screen_carousel_secs\x18\x03 \x01(\r\"\x83\x01\n\x13GpsCoordinateFormat\x12\x10\n\x0cGpsFormatDec\x10\x00\x12\x10\n\x0cGpsFormatDMS\x10\x01\x12\x10\n\x0cGpsFormatUTM\x10\x02\x12\x11\n\rGpsFormatMGRS\x10\x03\x12\x10\n\x0cGpsFormatOLC\x10\x04\x12\x11\n\rGpsFormatOSGR\x10\x05\x1a\x93\x04\n\nLoRaConfig\x12\x10\n\x08tx_power\x18\x01 \x01(\x05\x12\x34\n\x0cmodem_preset\x18\x02 \x01(\x0e\x32\x1e.Config.LoRaConfig.ModemPreset\x12\x11\n\tbandwidth\x18\x03 \x01(\r\x12\x15\n\rspread_factor\x18\x04 \x01(\r\x12\x13\n\x0b\x63oding_rate\x18\x05 \x01(\r\x12\x18\n\x10\x66requency_offset\x18\x06 \x01(\x02\x12-\n\x06region\x18\x07 \x01(\x0e\x32\x1d.Config.LoRaConfig.RegionCode\x12\x11\n\thop_limit\x18\x08 \x01(\r\x12\x13\n\x0btx_disabled\x18\t \x01(\x08\x12\x17\n\x0fignore_incoming\x18g \x03(\r\"\x81\x01\n\nRegionCode\x12\t\n\x05Unset\x10\x00\x12\x06\n\x02US\x10\x01\x12\t\n\x05\x45U433\x10\x02\x12\t\n\x05\x45U868\x10\x03\x12\x06\n\x02\x43N\x10\x04\x12\x06\n\x02JP\x10\x05\x12\x07\n\x03\x41NZ\x10\x06\x12\x06\n\x02KR\x10\x07\x12\x06\n\x02TW\x10\x08\x12\x06\n\x02RU\x10\t\x12\x06\n\x02IN\x10\n\x12\t\n\x05NZ865\x10\x0b\x12\x06\n\x02TH\x10\x0c\"p\n\x0bModemPreset\x12\x0c\n\x08LongFast\x10\x00\x12\x0c\n\x08LongSlow\x10\x01\x12\r\n\tVLongSlow\x10\x02\x12\x0b\n\x07MidSlow\x10\x03\x12\x0b\n\x07MidFast\x10\x04\x12\r\n\tShortSlow\x10\x05\x12\r\n\tShortFast\x10\x06\x42\x10\n\x0epayloadVariantBH\n\x13\x63om.geeksville.meshB\x0c\x43onfigProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_CONFIG = DESCRIPTOR.message_types_by_name['Config']
|
||||||
|
_CONFIG_DEVICECONFIG = _CONFIG.nested_types_by_name['DeviceConfig']
|
||||||
|
_CONFIG_POSITIONCONFIG = _CONFIG.nested_types_by_name['PositionConfig']
|
||||||
|
_CONFIG_POWERCONFIG = _CONFIG.nested_types_by_name['PowerConfig']
|
||||||
|
_CONFIG_WIFICONFIG = _CONFIG.nested_types_by_name['WiFiConfig']
|
||||||
|
_CONFIG_DISPLAYCONFIG = _CONFIG.nested_types_by_name['DisplayConfig']
|
||||||
|
_CONFIG_LORACONFIG = _CONFIG.nested_types_by_name['LoRaConfig']
|
||||||
|
_CONFIG_DEVICECONFIG_ROLE = _CONFIG_DEVICECONFIG.enum_types_by_name['Role']
|
||||||
|
_CONFIG_POSITIONCONFIG_POSITIONFLAGS = _CONFIG_POSITIONCONFIG.enum_types_by_name['PositionFlags']
|
||||||
|
_CONFIG_POWERCONFIG_CHARGECURRENT = _CONFIG_POWERCONFIG.enum_types_by_name['ChargeCurrent']
|
||||||
|
_CONFIG_DISPLAYCONFIG_GPSCOORDINATEFORMAT = _CONFIG_DISPLAYCONFIG.enum_types_by_name['GpsCoordinateFormat']
|
||||||
|
_CONFIG_LORACONFIG_REGIONCODE = _CONFIG_LORACONFIG.enum_types_by_name['RegionCode']
|
||||||
|
_CONFIG_LORACONFIG_MODEMPRESET = _CONFIG_LORACONFIG.enum_types_by_name['ModemPreset']
|
||||||
|
Config = _reflection.GeneratedProtocolMessageType('Config', (_message.Message,), {
|
||||||
|
|
||||||
|
'DeviceConfig' : _reflection.GeneratedProtocolMessageType('DeviceConfig', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _CONFIG_DEVICECONFIG,
|
||||||
|
'__module__' : 'config_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:Config.DeviceConfig)
|
||||||
|
})
|
||||||
|
,
|
||||||
|
|
||||||
|
'PositionConfig' : _reflection.GeneratedProtocolMessageType('PositionConfig', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _CONFIG_POSITIONCONFIG,
|
||||||
|
'__module__' : 'config_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:Config.PositionConfig)
|
||||||
|
})
|
||||||
|
,
|
||||||
|
|
||||||
|
'PowerConfig' : _reflection.GeneratedProtocolMessageType('PowerConfig', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _CONFIG_POWERCONFIG,
|
||||||
|
'__module__' : 'config_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:Config.PowerConfig)
|
||||||
|
})
|
||||||
|
,
|
||||||
|
|
||||||
|
'WiFiConfig' : _reflection.GeneratedProtocolMessageType('WiFiConfig', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _CONFIG_WIFICONFIG,
|
||||||
|
'__module__' : 'config_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:Config.WiFiConfig)
|
||||||
|
})
|
||||||
|
,
|
||||||
|
|
||||||
|
'DisplayConfig' : _reflection.GeneratedProtocolMessageType('DisplayConfig', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _CONFIG_DISPLAYCONFIG,
|
||||||
|
'__module__' : 'config_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:Config.DisplayConfig)
|
||||||
|
})
|
||||||
|
,
|
||||||
|
|
||||||
|
'LoRaConfig' : _reflection.GeneratedProtocolMessageType('LoRaConfig', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _CONFIG_LORACONFIG,
|
||||||
|
'__module__' : 'config_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:Config.LoRaConfig)
|
||||||
|
})
|
||||||
|
,
|
||||||
|
'DESCRIPTOR' : _CONFIG,
|
||||||
|
'__module__' : 'config_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:Config)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(Config)
|
||||||
|
_sym_db.RegisterMessage(Config.DeviceConfig)
|
||||||
|
_sym_db.RegisterMessage(Config.PositionConfig)
|
||||||
|
_sym_db.RegisterMessage(Config.PowerConfig)
|
||||||
|
_sym_db.RegisterMessage(Config.WiFiConfig)
|
||||||
|
_sym_db.RegisterMessage(Config.DisplayConfig)
|
||||||
|
_sym_db.RegisterMessage(Config.LoRaConfig)
|
||||||
|
|
||||||
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
|
|
||||||
|
DESCRIPTOR._options = None
|
||||||
|
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\014ConfigProtosH\003Z!github.com/meshtastic/gomeshproto'
|
||||||
|
_CONFIG._serialized_start=17
|
||||||
|
_CONFIG._serialized_end=2279
|
||||||
|
_CONFIG_DEVICECONFIG._serialized_start=264
|
||||||
|
_CONFIG_DEVICECONFIG._serialized_end=480
|
||||||
|
_CONFIG_DEVICECONFIG_ROLE._serialized_start=416
|
||||||
|
_CONFIG_DEVICECONFIG_ROLE._serialized_end=480
|
||||||
|
_CONFIG_POSITIONCONFIG._serialized_start=483
|
||||||
|
_CONFIG_POSITIONCONFIG._serialized_end=873
|
||||||
|
_CONFIG_POSITIONCONFIG_POSITIONFLAGS._serialized_start=703
|
||||||
|
_CONFIG_POSITIONCONFIG_POSITIONFLAGS._serialized_end=873
|
||||||
|
_CONFIG_POWERCONFIG._serialized_start=876
|
||||||
|
_CONFIG_POWERCONFIG._serialized_end=1376
|
||||||
|
_CONFIG_POWERCONFIG_CHARGECURRENT._serialized_start=1167
|
||||||
|
_CONFIG_POWERCONFIG_CHARGECURRENT._serialized_end=1376
|
||||||
|
_CONFIG_WIFICONFIG._serialized_start=1378
|
||||||
|
_CONFIG_WIFICONFIG._serialized_end=1453
|
||||||
|
_CONFIG_DISPLAYCONFIG._serialized_start=1456
|
||||||
|
_CONFIG_DISPLAYCONFIG._serialized_end=1727
|
||||||
|
_CONFIG_DISPLAYCONFIG_GPSCOORDINATEFORMAT._serialized_start=1596
|
||||||
|
_CONFIG_DISPLAYCONFIG_GPSCOORDINATEFORMAT._serialized_end=1727
|
||||||
|
_CONFIG_LORACONFIG._serialized_start=1730
|
||||||
|
_CONFIG_LORACONFIG._serialized_end=2261
|
||||||
|
_CONFIG_LORACONFIG_REGIONCODE._serialized_start=2018
|
||||||
|
_CONFIG_LORACONFIG_REGIONCODE._serialized_end=2147
|
||||||
|
_CONFIG_LORACONFIG_MODEMPRESET._serialized_start=2149
|
||||||
|
_CONFIG_LORACONFIG_MODEMPRESET._serialized_end=2261
|
||||||
|
# @@protoc_insertion_point(module_scope)
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
# source: deviceonly.proto
|
# source: deviceonly.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
|
from google.protobuf.internal import enum_type_wrapper
|
||||||
from google.protobuf import descriptor as _descriptor
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||||
from google.protobuf import message as _message
|
from google.protobuf import message as _message
|
||||||
from google.protobuf import reflection as _reflection
|
from google.protobuf import reflection as _reflection
|
||||||
from google.protobuf import symbol_database as _symbol_database
|
from google.protobuf import symbol_database as _symbol_database
|
||||||
@@ -15,138 +17,18 @@ from . import channel_pb2 as channel__pb2
|
|||||||
from . import mesh_pb2 as mesh__pb2
|
from . import mesh_pb2 as mesh__pb2
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x64\x65viceonly.proto\x1a\rchannel.proto\x1a\nmesh.proto\"\xe6\x01\n\x0b\x44\x65viceState\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.Channel\x12\x0f\n\x07version\x18\x02 \x01(\r\"\x84\x01\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\x1e\n\x08oem_font\x18\x04 \x01(\x0e\x32\x0c.ScreenFonts\x12\x10\n\x08oem_text\x18\x05 \x01(\t*>\n\x0bScreenFonts\x12\x0e\n\nFONT_SMALL\x10\x00\x12\x0f\n\x0b\x46ONT_MEDIUM\x10\x01\x12\x0e\n\nFONT_LARGE\x10\x02\x42\x46\n\x13\x63om.geeksville.meshB\nDeviceOnlyH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3')
|
||||||
name='deviceonly.proto',
|
|
||||||
package='',
|
_SCREENFONTS = DESCRIPTOR.enum_types_by_name['ScreenFonts']
|
||||||
syntax='proto3',
|
ScreenFonts = enum_type_wrapper.EnumTypeWrapper(_SCREENFONTS)
|
||||||
serialized_options=b'\n\023com.geeksville.meshB\nDeviceOnlyH\003Z!github.com/meshtastic/gomeshproto',
|
FONT_SMALL = 0
|
||||||
serialized_pb=b'\n\x10\x64\x65viceonly.proto\x1a\rchannel.proto\x1a\nmesh.proto\"\xe6\x01\n\x0b\x44\x65viceState\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'
|
FONT_MEDIUM = 1
|
||||||
,
|
FONT_LARGE = 2
|
||||||
dependencies=[channel__pb2.DESCRIPTOR,mesh__pb2.DESCRIPTOR,])
|
|
||||||
|
|
||||||
|
|
||||||
|
_DEVICESTATE = DESCRIPTOR.message_types_by_name['DeviceState']
|
||||||
|
_CHANNELFILE = DESCRIPTOR.message_types_by_name['ChannelFile']
|
||||||
_DEVICESTATE = _descriptor.Descriptor(
|
_OEMSTORE = DESCRIPTOR.message_types_by_name['OEMStore']
|
||||||
name='DeviceState',
|
|
||||||
full_name='DeviceState',
|
|
||||||
filename=None,
|
|
||||||
file=DESCRIPTOR,
|
|
||||||
containing_type=None,
|
|
||||||
fields=[
|
|
||||||
_descriptor.FieldDescriptor(
|
|
||||||
name='my_node', full_name='DeviceState.my_node', index=0,
|
|
||||||
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=1,
|
|
||||||
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=2,
|
|
||||||
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=3,
|
|
||||||
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=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='rx_text_message', full_name='DeviceState.rx_text_message', index=5,
|
|
||||||
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=6,
|
|
||||||
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=7,
|
|
||||||
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=48,
|
|
||||||
serialized_end=278,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
_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=280,
|
|
||||||
serialized_end=321,
|
|
||||||
)
|
|
||||||
|
|
||||||
_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['DeviceState'] = _DEVICESTATE
|
|
||||||
DESCRIPTOR.message_types_by_name['ChannelFile'] = _CHANNELFILE
|
|
||||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
|
||||||
|
|
||||||
DeviceState = _reflection.GeneratedProtocolMessageType('DeviceState', (_message.Message,), {
|
DeviceState = _reflection.GeneratedProtocolMessageType('DeviceState', (_message.Message,), {
|
||||||
'DESCRIPTOR' : _DEVICESTATE,
|
'DESCRIPTOR' : _DEVICESTATE,
|
||||||
'__module__' : 'deviceonly_pb2'
|
'__module__' : 'deviceonly_pb2'
|
||||||
@@ -161,6 +43,23 @@ ChannelFile = _reflection.GeneratedProtocolMessageType('ChannelFile', (_message.
|
|||||||
})
|
})
|
||||||
_sym_db.RegisterMessage(ChannelFile)
|
_sym_db.RegisterMessage(ChannelFile)
|
||||||
|
|
||||||
|
OEMStore = _reflection.GeneratedProtocolMessageType('OEMStore', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _OEMSTORE,
|
||||||
|
'__module__' : 'deviceonly_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:OEMStore)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(OEMStore)
|
||||||
|
|
||||||
DESCRIPTOR._options = None
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
|
|
||||||
|
DESCRIPTOR._options = None
|
||||||
|
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\nDeviceOnlyH\003Z!github.com/meshtastic/gomeshproto'
|
||||||
|
_SCREENFONTS._serialized_start=475
|
||||||
|
_SCREENFONTS._serialized_end=537
|
||||||
|
_DEVICESTATE._serialized_start=48
|
||||||
|
_DEVICESTATE._serialized_end=278
|
||||||
|
_CHANNELFILE._serialized_start=280
|
||||||
|
_CHANNELFILE._serialized_end=338
|
||||||
|
_OEMSTORE._serialized_start=341
|
||||||
|
_OEMSTORE._serialized_end=473
|
||||||
# @@protoc_insertion_point(module_scope)
|
# @@protoc_insertion_point(module_scope)
|
||||||
|
|||||||
47
meshtastic/localonly_pb2.py
Normal file
47
meshtastic/localonly_pb2.py
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
|
# source: localonly.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||||
|
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()
|
||||||
|
|
||||||
|
|
||||||
|
from . import config_pb2 as config__pb2
|
||||||
|
from . import module_config_pb2 as module__config__pb2
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0flocalonly.proto\x1a\x0c\x63onfig.proto\x1a\x13module_config.proto\"\xfe\x01\n\x0bLocalConfig\x12$\n\x06\x64\x65vice\x18\x01 \x01(\x0b\x32\x14.Config.DeviceConfig\x12(\n\x08position\x18\x02 \x01(\x0b\x32\x16.Config.PositionConfig\x12\"\n\x05power\x18\x03 \x01(\x0b\x32\x13.Config.PowerConfig\x12 \n\x04wifi\x18\x04 \x01(\x0b\x32\x12.Config.WiFiConfig\x12&\n\x07\x64isplay\x18\x05 \x01(\x0b\x32\x15.Config.DisplayConfig\x12 \n\x04lora\x18\x06 \x01(\x0b\x32\x12.Config.LoRaConfig\x12\x0f\n\x07version\x18\x07 \x01(\r\"\x9a\x03\n\x11LocalModuleConfig\x12&\n\x04mqtt\x18\x01 \x01(\x0b\x32\x18.ModuleConfig.MQTTConfig\x12*\n\x06serial\x18\x02 \x01(\x0b\x32\x1a.ModuleConfig.SerialConfig\x12G\n\x15\x65xternal_notification\x18\x03 \x01(\x0b\x32(.ModuleConfig.ExternalNotificationConfig\x12\x37\n\rstore_forward\x18\x04 \x01(\x0b\x32 .ModuleConfig.StoreForwardConfig\x12\x31\n\nrange_test\x18\x05 \x01(\x0b\x32\x1d.ModuleConfig.RangeTestConfig\x12\x30\n\ttelemetry\x18\x06 \x01(\x0b\x32\x1d.ModuleConfig.TelemetryConfig\x12\x39\n\x0e\x63\x61nned_message\x18\x07 \x01(\x0b\x32!.ModuleConfig.CannedMessageConfig\x12\x0f\n\x07version\x18\x08 \x01(\rBK\n\x13\x63om.geeksville.meshB\x0fLocalOnlyProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_LOCALCONFIG = DESCRIPTOR.message_types_by_name['LocalConfig']
|
||||||
|
_LOCALMODULECONFIG = DESCRIPTOR.message_types_by_name['LocalModuleConfig']
|
||||||
|
LocalConfig = _reflection.GeneratedProtocolMessageType('LocalConfig', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _LOCALCONFIG,
|
||||||
|
'__module__' : 'localonly_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:LocalConfig)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(LocalConfig)
|
||||||
|
|
||||||
|
LocalModuleConfig = _reflection.GeneratedProtocolMessageType('LocalModuleConfig', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _LOCALMODULECONFIG,
|
||||||
|
'__module__' : 'localonly_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:LocalModuleConfig)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(LocalModuleConfig)
|
||||||
|
|
||||||
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
|
|
||||||
|
DESCRIPTOR._options = None
|
||||||
|
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\017LocalOnlyProtosH\003Z!github.com/meshtastic/gomeshproto'
|
||||||
|
_LOCALCONFIG._serialized_start=55
|
||||||
|
_LOCALCONFIG._serialized_end=309
|
||||||
|
_LOCALMODULECONFIG._serialized_start=312
|
||||||
|
_LOCALMODULECONFIG._serialized_end=722
|
||||||
|
# @@protoc_insertion_point(module_scope)
|
||||||
@@ -422,8 +422,8 @@ class MeshInterface:
|
|||||||
"""We need to send a heartbeat message to the device every X seconds"""
|
"""We need to send a heartbeat message to the device every X seconds"""
|
||||||
def callback():
|
def callback():
|
||||||
self.heartbeatTimer = None
|
self.heartbeatTimer = None
|
||||||
prefs = self.localNode.radioConfig.preferences
|
prefs = self.localNode.localConfig
|
||||||
i = prefs.phone_timeout_secs / 2
|
i = prefs.power.ls_secs / 2
|
||||||
logging.debug(f"Sending heartbeat, interval {i}")
|
logging.debug(f"Sending heartbeat, interval {i}")
|
||||||
if i != 0:
|
if i != 0:
|
||||||
self.heartbeatTimer = threading.Timer(i, callback)
|
self.heartbeatTimer = threading.Timer(i, callback)
|
||||||
@@ -540,6 +540,19 @@ class MeshInterface:
|
|||||||
MeshInterface._disconnected(self)
|
MeshInterface._disconnected(self)
|
||||||
|
|
||||||
self._startConfig() # redownload the node db etc...
|
self._startConfig() # redownload the node db etc...
|
||||||
|
elif fromRadio.config:
|
||||||
|
if fromRadio.config.HasField("device"):
|
||||||
|
self.localNode.localConfig.device.CopyFrom(fromRadio.config.device)
|
||||||
|
elif fromRadio.config.HasField("position"):
|
||||||
|
self.localNode.localConfig.position.CopyFrom(fromRadio.config.position)
|
||||||
|
elif fromRadio.config.HasField("power"):
|
||||||
|
self.localNode.localConfig.power.CopyFrom(fromRadio.config.power)
|
||||||
|
elif fromRadio.config.HasField("wifi"):
|
||||||
|
self.localNode.localConfig.wifi.CopyFrom(fromRadio.config.wifi)
|
||||||
|
elif fromRadio.config.HasField("display"):
|
||||||
|
self.localNode.localConfig.display.CopyFrom(fromRadio.config.display)
|
||||||
|
elif fromRadio.config.HasField("lora"):
|
||||||
|
self.localNode.localConfig.lora.CopyFrom(fromRadio.config.lora)
|
||||||
else:
|
else:
|
||||||
logging.debug("Unexpected FromRadio payload")
|
logging.debug("Unexpected FromRadio payload")
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
122
meshtastic/module_config_pb2.py
Normal file
122
meshtastic/module_config_pb2.py
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
|
# source: module_config.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||||
|
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()
|
||||||
|
|
||||||
|
|
||||||
|
from . import telemetry_pb2 as telemetry__pb2
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x13module_config.proto\x1a\x0ftelemetry.proto\"\xd7\x12\n\x0cModuleConfig\x12(\n\x04mqtt\x18\x01 \x01(\x0b\x32\x18.ModuleConfig.MQTTConfigH\x00\x12,\n\x06serial\x18\x02 \x01(\x0b\x32\x1a.ModuleConfig.SerialConfigH\x00\x12I\n\x15\x65xternal_notification\x18\x03 \x01(\x0b\x32(.ModuleConfig.ExternalNotificationConfigH\x00\x12\x39\n\rstore_forward\x18\x04 \x01(\x0b\x32 .ModuleConfig.StoreForwardConfigH\x00\x12\x33\n\nrange_test\x18\x05 \x01(\x0b\x32\x1d.ModuleConfig.RangeTestConfigH\x00\x12\x32\n\ttelemetry\x18\x06 \x01(\x0b\x32\x1d.ModuleConfig.TelemetryConfigH\x00\x12;\n\x0e\x63\x61nned_message\x18\x07 \x01(\x0b\x32!.ModuleConfig.CannedMessageConfigH\x00\x1ao\n\nMQTTConfig\x12\x10\n\x08\x64isabled\x18\x01 \x01(\x08\x12\x0f\n\x07\x61\x64\x64ress\x18\x02 \x01(\t\x12\x10\n\x08username\x18\x03 \x01(\t\x12\x10\n\x08password\x18\x04 \x01(\t\x12\x1a\n\x12\x65ncryption_enabled\x18\x05 \x01(\x08\x1a\x93\x04\n\x0cSerialConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0c\n\x04\x65\x63ho\x18\x02 \x01(\x08\x12\x0b\n\x03rxd\x18\x03 \x01(\r\x12\x0b\n\x03txd\x18\x04 \x01(\r\x12\x34\n\x04\x62\x61ud\x18\x05 \x01(\x0e\x32&.ModuleConfig.SerialConfig.Serial_Baud\x12\x0f\n\x07timeout\x18\x06 \x01(\r\x12\x34\n\x04mode\x18\x07 \x01(\x0e\x32&.ModuleConfig.SerialConfig.Serial_Mode\"\x8a\x02\n\x0bSerial_Baud\x12\x10\n\x0c\x42\x41UD_Default\x10\x00\x12\x0c\n\x08\x42\x41UD_110\x10\x01\x12\x0c\n\x08\x42\x41UD_300\x10\x02\x12\x0c\n\x08\x42\x41UD_600\x10\x03\x12\r\n\tBAUD_1200\x10\x04\x12\r\n\tBAUD_2400\x10\x05\x12\r\n\tBAUD_4800\x10\x06\x12\r\n\tBAUD_9600\x10\x07\x12\x0e\n\nBAUD_19200\x10\x08\x12\x0e\n\nBAUD_38400\x10\t\x12\x0e\n\nBAUD_57600\x10\n\x12\x0f\n\x0b\x42\x41UD_115200\x10\x0b\x12\x0f\n\x0b\x42\x41UD_230400\x10\x0c\x12\x0f\n\x0b\x42\x41UD_460800\x10\r\x12\x0f\n\x0b\x42\x41UD_576000\x10\x0e\x12\x0f\n\x0b\x42\x41UD_921600\x10\x0f\"@\n\x0bSerial_Mode\x12\x10\n\x0cMODE_Default\x10\x00\x12\x0f\n\x0bMODE_SIMPLE\x10\x01\x12\x0e\n\nMODE_PROTO\x10\x02\x1a\x8b\x01\n\x1a\x45xternalNotificationConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x11\n\toutput_ms\x18\x02 \x01(\r\x12\x0e\n\x06output\x18\x03 \x01(\r\x12\x0e\n\x06\x61\x63tive\x18\x04 \x01(\x08\x12\x15\n\ralert_message\x18\x05 \x01(\x08\x12\x12\n\nalert_bell\x18\x06 \x01(\x08\x1a\x84\x01\n\x12StoreForwardConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x11\n\theartbeat\x18\x02 \x01(\x08\x12\x0f\n\x07records\x18\x03 \x01(\r\x12\x1a\n\x12history_return_max\x18\x04 \x01(\r\x12\x1d\n\x15history_return_window\x18\x05 \x01(\r\x1a@\n\x0fRangeTestConfig\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x0e\n\x06sender\x18\x02 \x01(\r\x12\x0c\n\x04save\x18\x03 \x01(\x08\x1a\xf9\x02\n\x0fTelemetryConfig\x12\x1e\n\x16\x64\x65vice_update_interval\x18\x01 \x01(\r\x12#\n\x1b\x65nvironment_update_interval\x18\x02 \x01(\r\x12\'\n\x1f\x65nvironment_measurement_enabled\x18\x03 \x01(\x08\x12\"\n\x1a\x65nvironment_screen_enabled\x18\x04 \x01(\x08\x12.\n&environment_read_error_count_threshold\x18\x05 \x01(\r\x12%\n\x1d\x65nvironment_recovery_interval\x18\x06 \x01(\r\x12&\n\x1e\x65nvironment_display_fahrenheit\x18\x07 \x01(\x08\x12\x35\n\x17\x65nvironment_sensor_type\x18\x08 \x01(\x0e\x32\x14.TelemetrySensorType\x12\x1e\n\x16\x65nvironment_sensor_pin\x18\t \x01(\r\x1a\xd6\x04\n\x13\x43\x61nnedMessageConfig\x12\x17\n\x0frotary1_enabled\x18\x01 \x01(\x08\x12\x19\n\x11inputbroker_pin_a\x18\x02 \x01(\r\x12\x19\n\x11inputbroker_pin_b\x18\x03 \x01(\r\x12\x1d\n\x15inputbroker_pin_press\x18\x04 \x01(\r\x12N\n\x14inputbroker_event_cw\x18\x05 \x01(\x0e\x32\x30.ModuleConfig.CannedMessageConfig.InputEventChar\x12O\n\x15inputbroker_event_ccw\x18\x06 \x01(\x0e\x32\x30.ModuleConfig.CannedMessageConfig.InputEventChar\x12Q\n\x17inputbroker_event_press\x18\x07 \x01(\x0e\x32\x30.ModuleConfig.CannedMessageConfig.InputEventChar\x12\x17\n\x0fupdown1_enabled\x18\x08 \x01(\x08\x12\x0f\n\x07\x65nabled\x18\t \x01(\x08\x12\x1a\n\x12\x61llow_input_source\x18\n \x01(\t\x12\x11\n\tsend_bell\x18\x0b \x01(\x08\"\x83\x01\n\x0eInputEventChar\x12\x0c\n\x08KEY_NONE\x10\x00\x12\n\n\x06KEY_UP\x10\x11\x12\x0c\n\x08KEY_DOWN\x10\x12\x12\x0c\n\x08KEY_LEFT\x10\x13\x12\r\n\tKEY_RIGHT\x10\x14\x12\x0e\n\nKEY_SELECT\x10\n\x12\x0c\n\x08KEY_BACK\x10\x1b\x12\x0e\n\nKEY_CANCEL\x10\x18\x42\x10\n\x0epayloadVariantBN\n\x13\x63om.geeksville.meshB\x12ModuleConfigProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_MODULECONFIG = DESCRIPTOR.message_types_by_name['ModuleConfig']
|
||||||
|
_MODULECONFIG_MQTTCONFIG = _MODULECONFIG.nested_types_by_name['MQTTConfig']
|
||||||
|
_MODULECONFIG_SERIALCONFIG = _MODULECONFIG.nested_types_by_name['SerialConfig']
|
||||||
|
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG = _MODULECONFIG.nested_types_by_name['ExternalNotificationConfig']
|
||||||
|
_MODULECONFIG_STOREFORWARDCONFIG = _MODULECONFIG.nested_types_by_name['StoreForwardConfig']
|
||||||
|
_MODULECONFIG_RANGETESTCONFIG = _MODULECONFIG.nested_types_by_name['RangeTestConfig']
|
||||||
|
_MODULECONFIG_TELEMETRYCONFIG = _MODULECONFIG.nested_types_by_name['TelemetryConfig']
|
||||||
|
_MODULECONFIG_CANNEDMESSAGECONFIG = _MODULECONFIG.nested_types_by_name['CannedMessageConfig']
|
||||||
|
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD = _MODULECONFIG_SERIALCONFIG.enum_types_by_name['Serial_Baud']
|
||||||
|
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE = _MODULECONFIG_SERIALCONFIG.enum_types_by_name['Serial_Mode']
|
||||||
|
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR = _MODULECONFIG_CANNEDMESSAGECONFIG.enum_types_by_name['InputEventChar']
|
||||||
|
ModuleConfig = _reflection.GeneratedProtocolMessageType('ModuleConfig', (_message.Message,), {
|
||||||
|
|
||||||
|
'MQTTConfig' : _reflection.GeneratedProtocolMessageType('MQTTConfig', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _MODULECONFIG_MQTTCONFIG,
|
||||||
|
'__module__' : 'module_config_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:ModuleConfig.MQTTConfig)
|
||||||
|
})
|
||||||
|
,
|
||||||
|
|
||||||
|
'SerialConfig' : _reflection.GeneratedProtocolMessageType('SerialConfig', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _MODULECONFIG_SERIALCONFIG,
|
||||||
|
'__module__' : 'module_config_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:ModuleConfig.SerialConfig)
|
||||||
|
})
|
||||||
|
,
|
||||||
|
|
||||||
|
'ExternalNotificationConfig' : _reflection.GeneratedProtocolMessageType('ExternalNotificationConfig', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _MODULECONFIG_EXTERNALNOTIFICATIONCONFIG,
|
||||||
|
'__module__' : 'module_config_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:ModuleConfig.ExternalNotificationConfig)
|
||||||
|
})
|
||||||
|
,
|
||||||
|
|
||||||
|
'StoreForwardConfig' : _reflection.GeneratedProtocolMessageType('StoreForwardConfig', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _MODULECONFIG_STOREFORWARDCONFIG,
|
||||||
|
'__module__' : 'module_config_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:ModuleConfig.StoreForwardConfig)
|
||||||
|
})
|
||||||
|
,
|
||||||
|
|
||||||
|
'RangeTestConfig' : _reflection.GeneratedProtocolMessageType('RangeTestConfig', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _MODULECONFIG_RANGETESTCONFIG,
|
||||||
|
'__module__' : 'module_config_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:ModuleConfig.RangeTestConfig)
|
||||||
|
})
|
||||||
|
,
|
||||||
|
|
||||||
|
'TelemetryConfig' : _reflection.GeneratedProtocolMessageType('TelemetryConfig', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _MODULECONFIG_TELEMETRYCONFIG,
|
||||||
|
'__module__' : 'module_config_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:ModuleConfig.TelemetryConfig)
|
||||||
|
})
|
||||||
|
,
|
||||||
|
|
||||||
|
'CannedMessageConfig' : _reflection.GeneratedProtocolMessageType('CannedMessageConfig', (_message.Message,), {
|
||||||
|
'DESCRIPTOR' : _MODULECONFIG_CANNEDMESSAGECONFIG,
|
||||||
|
'__module__' : 'module_config_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:ModuleConfig.CannedMessageConfig)
|
||||||
|
})
|
||||||
|
,
|
||||||
|
'DESCRIPTOR' : _MODULECONFIG,
|
||||||
|
'__module__' : 'module_config_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:ModuleConfig)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(ModuleConfig)
|
||||||
|
_sym_db.RegisterMessage(ModuleConfig.MQTTConfig)
|
||||||
|
_sym_db.RegisterMessage(ModuleConfig.SerialConfig)
|
||||||
|
_sym_db.RegisterMessage(ModuleConfig.ExternalNotificationConfig)
|
||||||
|
_sym_db.RegisterMessage(ModuleConfig.StoreForwardConfig)
|
||||||
|
_sym_db.RegisterMessage(ModuleConfig.RangeTestConfig)
|
||||||
|
_sym_db.RegisterMessage(ModuleConfig.TelemetryConfig)
|
||||||
|
_sym_db.RegisterMessage(ModuleConfig.CannedMessageConfig)
|
||||||
|
|
||||||
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
|
|
||||||
|
DESCRIPTOR._options = None
|
||||||
|
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\022ModuleConfigProtosH\003Z!github.com/meshtastic/gomeshproto'
|
||||||
|
_MODULECONFIG._serialized_start=41
|
||||||
|
_MODULECONFIG._serialized_end=2432
|
||||||
|
_MODULECONFIG_MQTTCONFIG._serialized_start=445
|
||||||
|
_MODULECONFIG_MQTTCONFIG._serialized_end=556
|
||||||
|
_MODULECONFIG_SERIALCONFIG._serialized_start=559
|
||||||
|
_MODULECONFIG_SERIALCONFIG._serialized_end=1090
|
||||||
|
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD._serialized_start=758
|
||||||
|
_MODULECONFIG_SERIALCONFIG_SERIAL_BAUD._serialized_end=1024
|
||||||
|
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE._serialized_start=1026
|
||||||
|
_MODULECONFIG_SERIALCONFIG_SERIAL_MODE._serialized_end=1090
|
||||||
|
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG._serialized_start=1093
|
||||||
|
_MODULECONFIG_EXTERNALNOTIFICATIONCONFIG._serialized_end=1232
|
||||||
|
_MODULECONFIG_STOREFORWARDCONFIG._serialized_start=1235
|
||||||
|
_MODULECONFIG_STOREFORWARDCONFIG._serialized_end=1367
|
||||||
|
_MODULECONFIG_RANGETESTCONFIG._serialized_start=1369
|
||||||
|
_MODULECONFIG_RANGETESTCONFIG._serialized_end=1433
|
||||||
|
_MODULECONFIG_TELEMETRYCONFIG._serialized_start=1436
|
||||||
|
_MODULECONFIG_TELEMETRYCONFIG._serialized_end=1813
|
||||||
|
_MODULECONFIG_CANNEDMESSAGECONFIG._serialized_start=1816
|
||||||
|
_MODULECONFIG_CANNEDMESSAGECONFIG._serialized_end=2414
|
||||||
|
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR._serialized_start=2283
|
||||||
|
_MODULECONFIG_CANNEDMESSAGECONFIG_INPUTEVENTCHAR._serialized_end=2414
|
||||||
|
# @@protoc_insertion_point(module_scope)
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
# source: mqtt.proto
|
# source: mqtt.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
from google.protobuf import descriptor as _descriptor
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||||
from google.protobuf import message as _message
|
from google.protobuf import message as _message
|
||||||
from google.protobuf import reflection as _reflection
|
from google.protobuf import reflection as _reflection
|
||||||
from google.protobuf import symbol_database as _symbol_database
|
from google.protobuf import symbol_database as _symbol_database
|
||||||
@@ -14,66 +15,11 @@ _sym_db = _symbol_database.Default()
|
|||||||
from . import mesh_pb2 as mesh__pb2
|
from . import mesh_pb2 as mesh__pb2
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(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')
|
||||||
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,])
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_SERVICEENVELOPE = DESCRIPTOR.message_types_by_name['ServiceEnvelope']
|
||||||
_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,), {
|
ServiceEnvelope = _reflection.GeneratedProtocolMessageType('ServiceEnvelope', (_message.Message,), {
|
||||||
'DESCRIPTOR' : _SERVICEENVELOPE,
|
'DESCRIPTOR' : _SERVICEENVELOPE,
|
||||||
'__module__' : 'mqtt_pb2'
|
'__module__' : 'mqtt_pb2'
|
||||||
@@ -81,6 +27,10 @@ ServiceEnvelope = _reflection.GeneratedProtocolMessageType('ServiceEnvelope', (_
|
|||||||
})
|
})
|
||||||
_sym_db.RegisterMessage(ServiceEnvelope)
|
_sym_db.RegisterMessage(ServiceEnvelope)
|
||||||
|
|
||||||
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
|
|
||||||
DESCRIPTOR._options = None
|
DESCRIPTOR._options = None
|
||||||
|
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\nMQTTProtosH\003Z!github.com/meshtastic/gomeshproto'
|
||||||
|
_SERVICEENVELOPE._serialized_start=26
|
||||||
|
_SERVICEENVELOPE._serialized_end=112
|
||||||
# @@protoc_insertion_point(module_scope)
|
# @@protoc_insertion_point(module_scope)
|
||||||
|
|||||||
@@ -5,21 +5,21 @@ import logging
|
|||||||
import base64
|
import base64
|
||||||
import time
|
import time
|
||||||
from google.protobuf.json_format import MessageToJson
|
from google.protobuf.json_format import MessageToJson
|
||||||
from meshtastic import portnums_pb2, apponly_pb2, admin_pb2, channel_pb2
|
from meshtastic import portnums_pb2, apponly_pb2, admin_pb2, channel_pb2, localonly_pb2
|
||||||
from meshtastic.util import pskToString, stripnl, Timeout, our_exit, fromPSK
|
from meshtastic.util import pskToString, stripnl, Timeout, our_exit, fromPSK
|
||||||
|
|
||||||
|
|
||||||
class Node:
|
class Node:
|
||||||
"""A model of a (local or remote) node in the mesh
|
"""A model of a (local or remote) node in the mesh
|
||||||
|
|
||||||
Includes methods for radioConfig and channels
|
Includes methods for localConfig and channels
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, iface, nodeNum, noProto=False):
|
def __init__(self, iface, nodeNum, noProto=False):
|
||||||
"""Constructor"""
|
"""Constructor"""
|
||||||
self.iface = iface
|
self.iface = iface
|
||||||
self.nodeNum = nodeNum
|
self.nodeNum = nodeNum
|
||||||
self.radioConfig = None
|
self.localConfig = localonly_pb2.LocalConfig()
|
||||||
self.channels = None
|
self.channels = None
|
||||||
self._timeout = Timeout(maxSecs=300)
|
self._timeout = Timeout(maxSecs=300)
|
||||||
self.partialChannels = None
|
self.partialChannels = None
|
||||||
@@ -54,27 +54,18 @@ class Node:
|
|||||||
def showInfo(self):
|
def showInfo(self):
|
||||||
"""Show human readable description of our node"""
|
"""Show human readable description of our node"""
|
||||||
prefs = ""
|
prefs = ""
|
||||||
if self.radioConfig and self.radioConfig.preferences:
|
if self.localConfig:
|
||||||
prefs = stripnl(MessageToJson(self.radioConfig.preferences))
|
prefs = stripnl(MessageToJson(self.localConfig))
|
||||||
print(f"Preferences: {prefs}\n")
|
print(f"Preferences: {prefs}\n")
|
||||||
self.showChannels()
|
self.showChannels()
|
||||||
|
|
||||||
def requestConfig(self):
|
def requestConfig(self):
|
||||||
"""Send regular MeshPackets to ask for settings and channels."""
|
"""Send regular MeshPackets to ask for settings and channels."""
|
||||||
logging.debug(f"requestConfig for nodeNum:{self.nodeNum}")
|
logging.debug(f"requestConfig for nodeNum:{self.nodeNum}")
|
||||||
self.radioConfig = None
|
|
||||||
self.channels = None
|
self.channels = None
|
||||||
self.partialChannels = [] # We keep our channels in a temp array until finished
|
self.partialChannels = [] # We keep our channels in a temp array until finished
|
||||||
|
|
||||||
# Note: We do not get the canned plugin message, unless get_canned_message() is called
|
self._requestChannel(0)
|
||||||
self.cannedPluginMessage = None
|
|
||||||
|
|
||||||
self.cannedPluginMessagePart1 = None
|
|
||||||
self.cannedPluginMessagePart2 = None
|
|
||||||
self.cannedPluginMessagePart3 = None
|
|
||||||
self.cannedPluginMessagePart4 = None
|
|
||||||
|
|
||||||
self._requestSettings()
|
|
||||||
|
|
||||||
def turnOffEncryptionOnPrimaryChannel(self):
|
def turnOffEncryptionOnPrimaryChannel(self):
|
||||||
"""Turn off encryption on primary channel."""
|
"""Turn off encryption on primary channel."""
|
||||||
@@ -84,18 +75,48 @@ class Node:
|
|||||||
|
|
||||||
def waitForConfig(self, attribute='channels'):
|
def waitForConfig(self, attribute='channels'):
|
||||||
"""Block until radio config is received. Returns True if config has been received."""
|
"""Block until radio config is received. Returns True if config has been received."""
|
||||||
return self._timeout.waitForSet(self, attrs=('radioConfig', attribute))
|
return self._timeout.waitForSet(self, attrs=('localConfig', attribute))
|
||||||
|
|
||||||
def writeConfig(self):
|
def writeConfig(self):
|
||||||
"""Write the current (edited) radioConfig to the device"""
|
"""Write the current (edited) localConfig to the device"""
|
||||||
if self.radioConfig is None:
|
if self.localConfig is None:
|
||||||
our_exit("Error: No RadioConfig has been read")
|
our_exit("Error: No localConfig has been read")
|
||||||
|
|
||||||
p = admin_pb2.AdminMessage()
|
if self.localConfig.device:
|
||||||
p.set_radio.CopyFrom(self.radioConfig)
|
p = admin_pb2.AdminMessage()
|
||||||
|
p.set_config.device.CopyFrom(self.localConfig.device)
|
||||||
|
self._sendAdmin(p)
|
||||||
|
logging.debug("Wrote device")
|
||||||
|
|
||||||
self._sendAdmin(p)
|
if self.localConfig.position:
|
||||||
logging.debug("Wrote config")
|
p = admin_pb2.AdminMessage()
|
||||||
|
p.set_config.position.CopyFrom(self.localConfig.position)
|
||||||
|
self._sendAdmin(p)
|
||||||
|
logging.debug("Wrote position")
|
||||||
|
|
||||||
|
if self.localConfig.power:
|
||||||
|
p = admin_pb2.AdminMessage()
|
||||||
|
p.set_config.power.CopyFrom(self.localConfig.power)
|
||||||
|
self._sendAdmin(p)
|
||||||
|
logging.debug("Wrote power")
|
||||||
|
|
||||||
|
if self.localConfig.wifi:
|
||||||
|
p = admin_pb2.AdminMessage()
|
||||||
|
p.set_config.wifi.CopyFrom(self.localConfig.wifi)
|
||||||
|
self._sendAdmin(p)
|
||||||
|
logging.debug("Wrote wifi")
|
||||||
|
|
||||||
|
if self.localConfig.display:
|
||||||
|
p = admin_pb2.AdminMessage()
|
||||||
|
p.set_config.display.CopyFrom(self.localConfig.display)
|
||||||
|
self._sendAdmin(p)
|
||||||
|
logging.debug("Wrote display")
|
||||||
|
|
||||||
|
if self.localConfig.lora:
|
||||||
|
p = admin_pb2.AdminMessage()
|
||||||
|
p.set_config.lora.CopyFrom(self.localConfig.lora)
|
||||||
|
self._sendAdmin(p)
|
||||||
|
logging.debug("Wrote lora")
|
||||||
|
|
||||||
def writeChannel(self, channelIndex, adminIndex=0):
|
def writeChannel(self, channelIndex, adminIndex=0):
|
||||||
"""Write the current (edited) channel to the device"""
|
"""Write the current (edited) channel to the device"""
|
||||||
@@ -163,7 +184,7 @@ class Node:
|
|||||||
else:
|
else:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
def setOwner(self, long_name=None, short_name=None, is_licensed=False, team=None):
|
def setOwner(self, long_name=None, short_name=None, is_licensed=False):
|
||||||
"""Set device owner name"""
|
"""Set device owner name"""
|
||||||
logging.debug(f"in setOwner nodeNum:{self.nodeNum}")
|
logging.debug(f"in setOwner nodeNum:{self.nodeNum}")
|
||||||
nChars = 3
|
nChars = 3
|
||||||
@@ -192,14 +213,11 @@ class Node:
|
|||||||
short_name = short_name[:nChars]
|
short_name = short_name[:nChars]
|
||||||
p.set_owner.short_name = short_name
|
p.set_owner.short_name = short_name
|
||||||
p.set_owner.is_licensed = is_licensed
|
p.set_owner.is_licensed = is_licensed
|
||||||
if team is not None:
|
|
||||||
p.set_owner.team = team
|
|
||||||
|
|
||||||
# Note: These debug lines are used in unit tests
|
# Note: These debug lines are used in unit tests
|
||||||
logging.debug(f'p.set_owner.long_name:{p.set_owner.long_name}:')
|
logging.debug(f'p.set_owner.long_name:{p.set_owner.long_name}:')
|
||||||
logging.debug(f'p.set_owner.short_name:{p.set_owner.short_name}:')
|
logging.debug(f'p.set_owner.short_name:{p.set_owner.short_name}:')
|
||||||
logging.debug(f'p.set_owner.is_licensed:{p.set_owner.is_licensed}')
|
logging.debug(f'p.set_owner.is_licensed:{p.set_owner.is_licensed}')
|
||||||
logging.debug(f'p.set_owner.team:{p.set_owner.team}')
|
|
||||||
return self._sendAdmin(p)
|
return self._sendAdmin(p)
|
||||||
|
|
||||||
def getURL(self, includeAll: bool = True):
|
def getURL(self, includeAll: bool = True):
|
||||||
@@ -212,12 +230,12 @@ class Node:
|
|||||||
channelSet.settings.append(c.settings)
|
channelSet.settings.append(c.settings)
|
||||||
some_bytes = channelSet.SerializeToString()
|
some_bytes = channelSet.SerializeToString()
|
||||||
s = base64.urlsafe_b64encode(some_bytes).decode('ascii')
|
s = base64.urlsafe_b64encode(some_bytes).decode('ascii')
|
||||||
return f"https://www.meshtastic.org/d/#{s}".replace("=", "")
|
return f"https://www.meshtastic.org/e/#{s}".replace("=", "")
|
||||||
|
|
||||||
def setURL(self, url):
|
def setURL(self, url):
|
||||||
"""Set mesh network URL"""
|
"""Set mesh network URL"""
|
||||||
if self.radioConfig is None:
|
if self.localConfig is None:
|
||||||
our_exit("Warning: No RadioConfig has been read")
|
our_exit("Warning: No Config has been read")
|
||||||
|
|
||||||
# URLs are of the form https://www.meshtastic.org/d/#{base64_channel_set}
|
# URLs are of the form https://www.meshtastic.org/d/#{base64_channel_set}
|
||||||
# Split on '/#' to find the base64 encoded channel settings
|
# Split on '/#' to find the base64 encoded channel settings
|
||||||
@@ -250,42 +268,6 @@ class Node:
|
|||||||
self.writeChannel(ch.index)
|
self.writeChannel(ch.index)
|
||||||
i = i + 1
|
i = i + 1
|
||||||
|
|
||||||
|
|
||||||
def onResponseRequestSettings(self, p):
|
|
||||||
"""Handle the response packet for requesting settings _requestSettings()"""
|
|
||||||
logging.debug(f'onResponseRequestSetting() p:{p}')
|
|
||||||
errorFound = False
|
|
||||||
if "routing" in p["decoded"]:
|
|
||||||
if p["decoded"]["routing"]["errorReason"] != "NONE":
|
|
||||||
errorFound = True
|
|
||||||
print(f'Error on response: {p["decoded"]["routing"]["errorReason"]}')
|
|
||||||
if errorFound is False:
|
|
||||||
self.radioConfig = p["decoded"]["admin"]["raw"].get_radio_response
|
|
||||||
logging.debug(f'self.radioConfig:{self.radioConfig}')
|
|
||||||
logging.debug("Received radio config, now fetching channels...")
|
|
||||||
self._timeout.reset() # We made foreward progress
|
|
||||||
self._requestChannel(0) # now start fetching channels
|
|
||||||
|
|
||||||
|
|
||||||
def _requestSettings(self):
|
|
||||||
"""Done with initial config messages, now send regular
|
|
||||||
MeshPackets to ask for settings."""
|
|
||||||
p = admin_pb2.AdminMessage()
|
|
||||||
p.get_radio_request = True
|
|
||||||
|
|
||||||
# TODO: should we check that localNode has an 'admin' channel?
|
|
||||||
# Show progress message for super slow operations
|
|
||||||
if self != self.iface.localNode:
|
|
||||||
print("Requesting preferences from remote node.")
|
|
||||||
print("Be sure:")
|
|
||||||
print(" 1. There is a SECONDARY channel named 'admin'.")
|
|
||||||
print(" 2. The '--seturl' was used to configure.")
|
|
||||||
print(" 3. All devices have the same modem config. (i.e., '--ch-longfast')")
|
|
||||||
print(" 4. All devices have been rebooted after all of the above. (optional, but recommended)")
|
|
||||||
print("Note: This could take a while (it requests remote channel configs, then writes config)")
|
|
||||||
|
|
||||||
return self._sendAdmin(p, wantResponse=True, onResponse=self.onResponseRequestSettings)
|
|
||||||
|
|
||||||
def onResponseRequestCannedMessagePluginMessagePart1(self, p):
|
def onResponseRequestCannedMessagePluginMessagePart1(self, p):
|
||||||
"""Handle the response packet for requesting canned message plugin message part 1"""
|
"""Handle the response packet for requesting canned message plugin message part 1"""
|
||||||
logging.debug(f'onResponseRequestCannedMessagePluginMessagePart1() p:{p}')
|
logging.debug(f'onResponseRequestCannedMessagePluginMessagePart1() p:{p}')
|
||||||
@@ -298,7 +280,7 @@ class Node:
|
|||||||
if "decoded" in p:
|
if "decoded" in p:
|
||||||
if "admin" in p["decoded"]:
|
if "admin" in p["decoded"]:
|
||||||
if "raw" in p["decoded"]["admin"]:
|
if "raw" in p["decoded"]["admin"]:
|
||||||
self.cannedPluginMessagePart1 = p["decoded"]["admin"]["raw"].get_canned_message_plugin_part1_response
|
self.cannedPluginMessagePart1 = p["decoded"]["admin"]["raw"].get_canned_message_module_part1_response
|
||||||
logging.debug(f'self.cannedPluginMessagePart1:{self.cannedPluginMessagePart1}')
|
logging.debug(f'self.cannedPluginMessagePart1:{self.cannedPluginMessagePart1}')
|
||||||
self.gotResponse = True
|
self.gotResponse = True
|
||||||
|
|
||||||
@@ -314,7 +296,7 @@ class Node:
|
|||||||
if "decoded" in p:
|
if "decoded" in p:
|
||||||
if "admin" in p["decoded"]:
|
if "admin" in p["decoded"]:
|
||||||
if "raw" in p["decoded"]["admin"]:
|
if "raw" in p["decoded"]["admin"]:
|
||||||
self.cannedPluginMessagePart2 = p["decoded"]["admin"]["raw"].get_canned_message_plugin_part2_response
|
self.cannedPluginMessagePart2 = p["decoded"]["admin"]["raw"].get_canned_message_module_part2_response
|
||||||
logging.debug(f'self.cannedPluginMessagePart2:{self.cannedPluginMessagePart2}')
|
logging.debug(f'self.cannedPluginMessagePart2:{self.cannedPluginMessagePart2}')
|
||||||
self.gotResponse = True
|
self.gotResponse = True
|
||||||
|
|
||||||
@@ -330,7 +312,7 @@ class Node:
|
|||||||
if "decoded" in p:
|
if "decoded" in p:
|
||||||
if "admin" in p["decoded"]:
|
if "admin" in p["decoded"]:
|
||||||
if "raw" in p["decoded"]["admin"]:
|
if "raw" in p["decoded"]["admin"]:
|
||||||
self.cannedPluginMessagePart3 = p["decoded"]["admin"]["raw"].get_canned_message_plugin_part3_response
|
self.cannedPluginMessagePart3 = p["decoded"]["admin"]["raw"].get_canned_message_module_part3_response
|
||||||
logging.debug(f'self.cannedPluginMessagePart3:{self.cannedPluginMessagePart3}')
|
logging.debug(f'self.cannedPluginMessagePart3:{self.cannedPluginMessagePart3}')
|
||||||
self.gotResponse = True
|
self.gotResponse = True
|
||||||
|
|
||||||
@@ -346,7 +328,7 @@ class Node:
|
|||||||
if "decoded" in p:
|
if "decoded" in p:
|
||||||
if "admin" in p["decoded"]:
|
if "admin" in p["decoded"]:
|
||||||
if "raw" in p["decoded"]["admin"]:
|
if "raw" in p["decoded"]["admin"]:
|
||||||
self.cannedPluginMessagePart4 = p["decoded"]["admin"]["raw"].get_canned_message_plugin_part4_response
|
self.cannedPluginMessagePart4 = p["decoded"]["admin"]["raw"].get_canned_message_module_part4_response
|
||||||
logging.debug(f'self.cannedPluginMessagePart4:{self.cannedPluginMessagePart4}')
|
logging.debug(f'self.cannedPluginMessagePart4:{self.cannedPluginMessagePart4}')
|
||||||
self.gotResponse = True
|
self.gotResponse = True
|
||||||
|
|
||||||
@@ -356,28 +338,28 @@ class Node:
|
|||||||
if not self.cannedPluginMessage:
|
if not self.cannedPluginMessage:
|
||||||
|
|
||||||
p1 = admin_pb2.AdminMessage()
|
p1 = admin_pb2.AdminMessage()
|
||||||
p1.get_canned_message_plugin_part1_request = True
|
p1.get_canned_message_module_part1_request = True
|
||||||
self.gotResponse = False
|
self.gotResponse = False
|
||||||
self._sendAdmin(p1, wantResponse=True, onResponse=self.onResponseRequestCannedMessagePluginMessagePart1)
|
self._sendAdmin(p1, wantResponse=True, onResponse=self.onResponseRequestCannedMessagePluginMessagePart1)
|
||||||
while self.gotResponse is False:
|
while self.gotResponse is False:
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
|
|
||||||
p2 = admin_pb2.AdminMessage()
|
p2 = admin_pb2.AdminMessage()
|
||||||
p2.get_canned_message_plugin_part2_request = True
|
p2.get_canned_message_module_part2_request = True
|
||||||
self.gotResponse = False
|
self.gotResponse = False
|
||||||
self._sendAdmin(p2, wantResponse=True, onResponse=self.onResponseRequestCannedMessagePluginMessagePart2)
|
self._sendAdmin(p2, wantResponse=True, onResponse=self.onResponseRequestCannedMessagePluginMessagePart2)
|
||||||
while self.gotResponse is False:
|
while self.gotResponse is False:
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
|
|
||||||
p3 = admin_pb2.AdminMessage()
|
p3 = admin_pb2.AdminMessage()
|
||||||
p3.get_canned_message_plugin_part3_request = True
|
p3.get_canned_message_module_part3_request = True
|
||||||
self.gotResponse = False
|
self.gotResponse = False
|
||||||
self._sendAdmin(p3, wantResponse=True, onResponse=self.onResponseRequestCannedMessagePluginMessagePart3)
|
self._sendAdmin(p3, wantResponse=True, onResponse=self.onResponseRequestCannedMessagePluginMessagePart3)
|
||||||
while self.gotResponse is False:
|
while self.gotResponse is False:
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
|
|
||||||
p4 = admin_pb2.AdminMessage()
|
p4 = admin_pb2.AdminMessage()
|
||||||
p4.get_canned_message_plugin_part4_request = True
|
p4.get_canned_message_module_part4_request = True
|
||||||
self.gotResponse = False
|
self.gotResponse = False
|
||||||
self._sendAdmin(p4, wantResponse=True, onResponse=self.onResponseRequestCannedMessagePluginMessagePart4)
|
self._sendAdmin(p4, wantResponse=True, onResponse=self.onResponseRequestCannedMessagePluginMessagePart4)
|
||||||
while self.gotResponse is False:
|
while self.gotResponse is False:
|
||||||
@@ -425,13 +407,13 @@ class Node:
|
|||||||
|
|
||||||
# TODO: should be a way to improve this
|
# TODO: should be a way to improve this
|
||||||
if i == 0:
|
if i == 0:
|
||||||
p.set_canned_message_plugin_part1 = chunk
|
p.set_canned_message_module_part1 = chunk
|
||||||
elif i == 1:
|
elif i == 1:
|
||||||
p.set_canned_message_plugin_part2 = chunk
|
p.set_canned_message_module_part2 = chunk
|
||||||
elif i == 2:
|
elif i == 2:
|
||||||
p.set_canned_message_plugin_part3 = chunk
|
p.set_canned_message_module_part3 = chunk
|
||||||
elif i == 3:
|
elif i == 3:
|
||||||
p.set_canned_message_plugin_part4 = chunk
|
p.set_canned_message_module_part4 = chunk
|
||||||
|
|
||||||
logging.debug(f"Setting canned message '{chunk}' part {i+1}")
|
logging.debug(f"Setting canned message '{chunk}' part {i+1}")
|
||||||
self._sendAdmin(p)
|
self._sendAdmin(p)
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
# source: portnums.proto
|
# source: portnums.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
from google.protobuf.internal import enum_type_wrapper
|
from google.protobuf.internal import enum_type_wrapper
|
||||||
from google.protobuf import descriptor as _descriptor
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||||
from google.protobuf import message as _message
|
from google.protobuf import message as _message
|
||||||
from google.protobuf import reflection as _reflection
|
from google.protobuf import reflection as _reflection
|
||||||
from google.protobuf import symbol_database as _symbol_database
|
from google.protobuf import symbol_database as _symbol_database
|
||||||
@@ -14,96 +15,9 @@ _sym_db = _symbol_database.Default()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0eportnums.proto*\xee\x02\n\x07PortNum\x12\x0f\n\x0bUNKNOWN_APP\x10\x00\x12\x14\n\x10TEXT_MESSAGE_APP\x10\x01\x12\x17\n\x13REMOTE_HARDWARE_APP\x10\x02\x12\x10\n\x0cPOSITION_APP\x10\x03\x12\x10\n\x0cNODEINFO_APP\x10\x04\x12\x0f\n\x0bROUTING_APP\x10\x05\x12\r\n\tADMIN_APP\x10\x06\x12\x1f\n\x1bTEXT_MESSAGE_COMPRESSED_APP\x10\x07\x12\x10\n\x0cWAYPOINT_APP\x10\x08\x12\r\n\tREPLY_APP\x10 \x12\x11\n\rIP_TUNNEL_APP\x10!\x12\x0e\n\nSERIAL_APP\x10@\x12\x15\n\x11STORE_FORWARD_APP\x10\x41\x12\x12\n\x0eRANGE_TEST_APP\x10\x42\x12\x11\n\rTELEMETRY_APP\x10\x43\x12\x0b\n\x07ZPS_APP\x10\x44\x12\x10\n\x0bPRIVATE_APP\x10\x80\x02\x12\x13\n\x0e\x41TAK_FORWARDER\x10\x81\x02\x12\x08\n\x03MAX\x10\xff\x03\x42\x44\n\x13\x63om.geeksville.meshB\x08PortnumsH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3')
|
||||||
name='portnums.proto',
|
|
||||||
package='',
|
|
||||||
syntax='proto3',
|
|
||||||
serialized_options=b'\n\023com.geeksville.meshB\010PortnumsH\003Z!github.com/meshtastic/gomeshproto',
|
|
||||||
serialized_pb=b'\n\x0eportnums.proto*\xbb\x02\n\x07PortNum\x12\x0f\n\x0bUNKNOWN_APP\x10\x00\x12\x14\n\x10TEXT_MESSAGE_APP\x10\x01\x12\x17\n\x13REMOTE_HARDWARE_APP\x10\x02\x12\x10\n\x0cPOSITION_APP\x10\x03\x12\x10\n\x0cNODEINFO_APP\x10\x04\x12\x0f\n\x0bROUTING_APP\x10\x05\x12\r\n\tADMIN_APP\x10\x06\x12\r\n\tREPLY_APP\x10 \x12\x11\n\rIP_TUNNEL_APP\x10!\x12\x0e\n\nSERIAL_APP\x10@\x12\x15\n\x11STORE_FORWARD_APP\x10\x41\x12\x12\n\x0eRANGE_TEST_APP\x10\x42\x12\x11\n\rTELEMETRY_APP\x10\x43\x12\x0b\n\x07ZPS_APP\x10\x44\x12\x10\n\x0bPRIVATE_APP\x10\x80\x02\x12\x13\n\x0e\x41TAK_FORWARDER\x10\x81\x02\x12\x08\n\x03MAX\x10\xff\x03\x42\x44\n\x13\x63om.geeksville.meshB\x08PortnumsH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3'
|
|
||||||
)
|
|
||||||
|
|
||||||
_PORTNUM = _descriptor.EnumDescriptor(
|
|
||||||
name='PortNum',
|
|
||||||
full_name='PortNum',
|
|
||||||
filename=None,
|
|
||||||
file=DESCRIPTOR,
|
|
||||||
values=[
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='UNKNOWN_APP', index=0, number=0,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='TEXT_MESSAGE_APP', index=1, number=1,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='REMOTE_HARDWARE_APP', index=2, number=2,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='POSITION_APP', index=3, number=3,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='NODEINFO_APP', index=4, number=4,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='ROUTING_APP', index=5, number=5,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='ADMIN_APP', index=6, number=6,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='REPLY_APP', index=7, number=32,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='IP_TUNNEL_APP', index=8, number=33,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='SERIAL_APP', index=9, number=64,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='STORE_FORWARD_APP', index=10, number=65,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='RANGE_TEST_APP', index=11, number=66,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='TELEMETRY_APP', index=12, number=67,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='ZPS_APP', index=13, number=68,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='PRIVATE_APP', index=14, number=256,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='ATAK_FORWARDER', index=15, number=257,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='MAX', index=16, number=511,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
],
|
|
||||||
containing_type=None,
|
|
||||||
serialized_options=None,
|
|
||||||
serialized_start=19,
|
|
||||||
serialized_end=334,
|
|
||||||
)
|
|
||||||
_sym_db.RegisterEnumDescriptor(_PORTNUM)
|
|
||||||
|
|
||||||
|
_PORTNUM = DESCRIPTOR.enum_types_by_name['PortNum']
|
||||||
PortNum = enum_type_wrapper.EnumTypeWrapper(_PORTNUM)
|
PortNum = enum_type_wrapper.EnumTypeWrapper(_PORTNUM)
|
||||||
UNKNOWN_APP = 0
|
UNKNOWN_APP = 0
|
||||||
TEXT_MESSAGE_APP = 1
|
TEXT_MESSAGE_APP = 1
|
||||||
@@ -112,6 +26,8 @@ POSITION_APP = 3
|
|||||||
NODEINFO_APP = 4
|
NODEINFO_APP = 4
|
||||||
ROUTING_APP = 5
|
ROUTING_APP = 5
|
||||||
ADMIN_APP = 6
|
ADMIN_APP = 6
|
||||||
|
TEXT_MESSAGE_COMPRESSED_APP = 7
|
||||||
|
WAYPOINT_APP = 8
|
||||||
REPLY_APP = 32
|
REPLY_APP = 32
|
||||||
IP_TUNNEL_APP = 33
|
IP_TUNNEL_APP = 33
|
||||||
SERIAL_APP = 64
|
SERIAL_APP = 64
|
||||||
@@ -124,9 +40,10 @@ ATAK_FORWARDER = 257
|
|||||||
MAX = 511
|
MAX = 511
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTOR.enum_types_by_name['PortNum'] = _PORTNUM
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
|
||||||
|
|
||||||
|
DESCRIPTOR._options = None
|
||||||
DESCRIPTOR._options = None
|
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\010PortnumsH\003Z!github.com/meshtastic/gomeshproto'
|
||||||
|
_PORTNUM._serialized_start=19
|
||||||
|
_PORTNUM._serialized_end=385
|
||||||
# @@protoc_insertion_point(module_scope)
|
# @@protoc_insertion_point(module_scope)
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -1,8 +1,9 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
# source: remote_hardware.proto
|
# source: remote_hardware.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
from google.protobuf import descriptor as _descriptor
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||||
from google.protobuf import message as _message
|
from google.protobuf import message as _message
|
||||||
from google.protobuf import reflection as _reflection
|
from google.protobuf import reflection as _reflection
|
||||||
from google.protobuf import symbol_database as _symbol_database
|
from google.protobuf import symbol_database as _symbol_database
|
||||||
@@ -13,105 +14,12 @@ _sym_db = _symbol_database.Default()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15remote_hardware.proto\"\xca\x01\n\x0fHardwareMessage\x12\"\n\x03typ\x18\x01 \x01(\x0e\x32\x15.HardwareMessage.Type\x12\x11\n\tgpio_mask\x18\x02 \x01(\x04\x12\x12\n\ngpio_value\x18\x03 \x01(\x04\"l\n\x04Type\x12\t\n\x05UNSET\x10\x00\x12\x0f\n\x0bWRITE_GPIOS\x10\x01\x12\x0f\n\x0bWATCH_GPIOS\x10\x02\x12\x11\n\rGPIOS_CHANGED\x10\x03\x12\x0e\n\nREAD_GPIOS\x10\x04\x12\x14\n\x10READ_GPIOS_REPLY\x10\x05\x42J\n\x13\x63om.geeksville.meshB\x0eRemoteHardwareH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3')
|
||||||
name='remote_hardware.proto',
|
|
||||||
package='',
|
|
||||||
syntax='proto3',
|
|
||||||
serialized_options=b'\n\023com.geeksville.meshB\016RemoteHardwareH\003Z!github.com/meshtastic/gomeshproto',
|
|
||||||
serialized_pb=b'\n\x15remote_hardware.proto\"\xca\x01\n\x0fHardwareMessage\x12\"\n\x03typ\x18\x01 \x01(\x0e\x32\x15.HardwareMessage.Type\x12\x11\n\tgpio_mask\x18\x02 \x01(\x04\x12\x12\n\ngpio_value\x18\x03 \x01(\x04\"l\n\x04Type\x12\t\n\x05UNSET\x10\x00\x12\x0f\n\x0bWRITE_GPIOS\x10\x01\x12\x0f\n\x0bWATCH_GPIOS\x10\x02\x12\x11\n\rGPIOS_CHANGED\x10\x03\x12\x0e\n\nREAD_GPIOS\x10\x04\x12\x14\n\x10READ_GPIOS_REPLY\x10\x05\x42J\n\x13\x63om.geeksville.meshB\x0eRemoteHardwareH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_HARDWAREMESSAGE_TYPE = _descriptor.EnumDescriptor(
|
_HARDWAREMESSAGE = DESCRIPTOR.message_types_by_name['HardwareMessage']
|
||||||
name='Type',
|
_HARDWAREMESSAGE_TYPE = _HARDWAREMESSAGE.enum_types_by_name['Type']
|
||||||
full_name='HardwareMessage.Type',
|
|
||||||
filename=None,
|
|
||||||
file=DESCRIPTOR,
|
|
||||||
values=[
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='UNSET', index=0, number=0,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='WRITE_GPIOS', index=1, number=1,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='WATCH_GPIOS', index=2, number=2,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='GPIOS_CHANGED', index=3, number=3,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='READ_GPIOS', index=4, number=4,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='READ_GPIOS_REPLY', index=5, number=5,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
],
|
|
||||||
containing_type=None,
|
|
||||||
serialized_options=None,
|
|
||||||
serialized_start=120,
|
|
||||||
serialized_end=228,
|
|
||||||
)
|
|
||||||
_sym_db.RegisterEnumDescriptor(_HARDWAREMESSAGE_TYPE)
|
|
||||||
|
|
||||||
|
|
||||||
_HARDWAREMESSAGE = _descriptor.Descriptor(
|
|
||||||
name='HardwareMessage',
|
|
||||||
full_name='HardwareMessage',
|
|
||||||
filename=None,
|
|
||||||
file=DESCRIPTOR,
|
|
||||||
containing_type=None,
|
|
||||||
fields=[
|
|
||||||
_descriptor.FieldDescriptor(
|
|
||||||
name='typ', full_name='HardwareMessage.typ', index=0,
|
|
||||||
number=1, 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='gpio_mask', full_name='HardwareMessage.gpio_mask', index=1,
|
|
||||||
number=2, type=4, cpp_type=4, 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='gpio_value', full_name='HardwareMessage.gpio_value', index=2,
|
|
||||||
number=3, type=4, cpp_type=4, 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=[
|
|
||||||
_HARDWAREMESSAGE_TYPE,
|
|
||||||
],
|
|
||||||
serialized_options=None,
|
|
||||||
is_extendable=False,
|
|
||||||
syntax='proto3',
|
|
||||||
extension_ranges=[],
|
|
||||||
oneofs=[
|
|
||||||
],
|
|
||||||
serialized_start=26,
|
|
||||||
serialized_end=228,
|
|
||||||
)
|
|
||||||
|
|
||||||
_HARDWAREMESSAGE.fields_by_name['typ'].enum_type = _HARDWAREMESSAGE_TYPE
|
|
||||||
_HARDWAREMESSAGE_TYPE.containing_type = _HARDWAREMESSAGE
|
|
||||||
DESCRIPTOR.message_types_by_name['HardwareMessage'] = _HARDWAREMESSAGE
|
|
||||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
|
||||||
|
|
||||||
HardwareMessage = _reflection.GeneratedProtocolMessageType('HardwareMessage', (_message.Message,), {
|
HardwareMessage = _reflection.GeneratedProtocolMessageType('HardwareMessage', (_message.Message,), {
|
||||||
'DESCRIPTOR' : _HARDWAREMESSAGE,
|
'DESCRIPTOR' : _HARDWAREMESSAGE,
|
||||||
'__module__' : 'remote_hardware_pb2'
|
'__module__' : 'remote_hardware_pb2'
|
||||||
@@ -119,6 +27,12 @@ HardwareMessage = _reflection.GeneratedProtocolMessageType('HardwareMessage', (_
|
|||||||
})
|
})
|
||||||
_sym_db.RegisterMessage(HardwareMessage)
|
_sym_db.RegisterMessage(HardwareMessage)
|
||||||
|
|
||||||
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
|
|
||||||
DESCRIPTOR._options = None
|
DESCRIPTOR._options = None
|
||||||
|
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\016RemoteHardwareH\003Z!github.com/meshtastic/gomeshproto'
|
||||||
|
_HARDWAREMESSAGE._serialized_start=26
|
||||||
|
_HARDWAREMESSAGE._serialized_end=228
|
||||||
|
_HARDWAREMESSAGE_TYPE._serialized_start=120
|
||||||
|
_HARDWAREMESSAGE_TYPE._serialized_end=228
|
||||||
# @@protoc_insertion_point(module_scope)
|
# @@protoc_insertion_point(module_scope)
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ class SerialInterface(StreamInterface):
|
|||||||
f.close()
|
f.close()
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
|
|
||||||
self.stream = serial.Serial(self.devPath, 921600, exclusive=True, timeout=0.5, write_timeout=0)
|
self.stream = serial.Serial(self.devPath, 115200, exclusive=True, timeout=0.5, write_timeout=0)
|
||||||
self.stream.flush()
|
self.stream.flush()
|
||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
# source: storeforward.proto
|
# source: storeforward.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
from google.protobuf import descriptor as _descriptor
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||||
from google.protobuf import message as _message
|
from google.protobuf import message as _message
|
||||||
from google.protobuf import reflection as _reflection
|
from google.protobuf import reflection as _reflection
|
||||||
from google.protobuf import symbol_database as _symbol_database
|
from google.protobuf import symbol_database as _symbol_database
|
||||||
@@ -13,313 +14,15 @@ _sym_db = _symbol_database.Default()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x12storeforward.proto\"\x8a\x06\n\x0fStoreAndForward\x12,\n\x02rr\x18\x01 \x01(\x0e\x32 .StoreAndForward.RequestResponse\x12*\n\x05stats\x18\x02 \x01(\x0b\x32\x1b.StoreAndForward.Statistics\x12)\n\x07history\x18\x03 \x01(\x0b\x32\x18.StoreAndForward.History\x12-\n\theartbeat\x18\x04 \x01(\x0b\x32\x1a.StoreAndForward.Heartbeat\x1a\xcd\x01\n\nStatistics\x12\x16\n\x0emessages_total\x18\x01 \x01(\r\x12\x16\n\x0emessages_saved\x18\x02 \x01(\r\x12\x14\n\x0cmessages_max\x18\x03 \x01(\r\x12\x0f\n\x07up_time\x18\x04 \x01(\r\x12\x10\n\x08requests\x18\x05 \x01(\r\x12\x18\n\x10requests_history\x18\x06 \x01(\r\x12\x11\n\theartbeat\x18\x07 \x01(\x08\x12\x12\n\nreturn_max\x18\x08 \x01(\r\x12\x15\n\rreturn_window\x18\t \x01(\r\x1aI\n\x07History\x12\x18\n\x10history_messages\x18\x01 \x01(\r\x12\x0e\n\x06window\x18\x02 \x01(\r\x12\x14\n\x0clast_request\x18\x03 \x01(\r\x1a.\n\tHeartbeat\x12\x0e\n\x06period\x18\x01 \x01(\r\x12\x11\n\tsecondary\x18\x02 \x01(\r\"\xf7\x01\n\x0fRequestResponse\x12\t\n\x05UNSET\x10\x00\x12\x10\n\x0cROUTER_ERROR\x10\x01\x12\x14\n\x10ROUTER_HEARTBEAT\x10\x02\x12\x0f\n\x0bROUTER_PING\x10\x03\x12\x0f\n\x0bROUTER_PONG\x10\x04\x12\x0f\n\x0bROUTER_BUSY\x10\x05\x12\x12\n\x0eROUTER_HISTORY\x10\x06\x12\x10\n\x0c\x43LIENT_ERROR\x10\x65\x12\x12\n\x0e\x43LIENT_HISTORY\x10\x66\x12\x10\n\x0c\x43LIENT_STATS\x10g\x12\x0f\n\x0b\x43LIENT_PING\x10h\x12\x0f\n\x0b\x43LIENT_PONG\x10i\x12\x10\n\x0c\x43LIENT_ABORT\x10jBQ\n\x13\x63om.geeksville.meshB\x15StoreAndForwardProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3')
|
||||||
name='storeforward.proto',
|
|
||||||
package='',
|
|
||||||
syntax='proto3',
|
|
||||||
serialized_options=b'\n\023com.geeksville.meshB\025StoreAndForwardProtosH\003Z!github.com/meshtastic/gomeshproto',
|
|
||||||
serialized_pb=b'\n\x12storeforward.proto\"\x8a\x06\n\x0fStoreAndForward\x12,\n\x02rr\x18\x01 \x01(\x0e\x32 .StoreAndForward.RequestResponse\x12*\n\x05stats\x18\x02 \x01(\x0b\x32\x1b.StoreAndForward.Statistics\x12)\n\x07history\x18\x03 \x01(\x0b\x32\x18.StoreAndForward.History\x12-\n\theartbeat\x18\x04 \x01(\x0b\x32\x1a.StoreAndForward.Heartbeat\x1a\xcd\x01\n\nStatistics\x12\x16\n\x0emessages_total\x18\x01 \x01(\r\x12\x16\n\x0emessages_saved\x18\x02 \x01(\r\x12\x14\n\x0cmessages_max\x18\x03 \x01(\r\x12\x0f\n\x07up_time\x18\x04 \x01(\r\x12\x10\n\x08requests\x18\x05 \x01(\r\x12\x18\n\x10requests_history\x18\x06 \x01(\r\x12\x11\n\theartbeat\x18\x07 \x01(\x08\x12\x12\n\nreturn_max\x18\x08 \x01(\r\x12\x15\n\rreturn_window\x18\t \x01(\r\x1aI\n\x07History\x12\x18\n\x10history_messages\x18\x01 \x01(\r\x12\x0e\n\x06window\x18\x02 \x01(\r\x12\x14\n\x0clast_request\x18\x03 \x01(\r\x1a.\n\tHeartbeat\x12\x0e\n\x06period\x18\x01 \x01(\r\x12\x11\n\tsecondary\x18\x02 \x01(\r\"\xf7\x01\n\x0fRequestResponse\x12\t\n\x05UNSET\x10\x00\x12\x10\n\x0cROUTER_ERROR\x10\x01\x12\x14\n\x10ROUTER_HEARTBEAT\x10\x02\x12\x0f\n\x0bROUTER_PING\x10\x03\x12\x0f\n\x0bROUTER_PONG\x10\x04\x12\x0f\n\x0bROUTER_BUSY\x10\x05\x12\x12\n\x0eROUTER_HISTORY\x10\x06\x12\x10\n\x0c\x43LIENT_ERROR\x10\x65\x12\x12\n\x0e\x43LIENT_HISTORY\x10\x66\x12\x10\n\x0c\x43LIENT_STATS\x10g\x12\x0f\n\x0b\x43LIENT_PING\x10h\x12\x0f\n\x0b\x43LIENT_PONG\x10i\x12\x10\n\x0c\x43LIENT_ABORT\x10jBQ\n\x13\x63om.geeksville.meshB\x15StoreAndForwardProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_STOREANDFORWARD_REQUESTRESPONSE = _descriptor.EnumDescriptor(
|
_STOREANDFORWARD = DESCRIPTOR.message_types_by_name['StoreAndForward']
|
||||||
name='RequestResponse',
|
_STOREANDFORWARD_STATISTICS = _STOREANDFORWARD.nested_types_by_name['Statistics']
|
||||||
full_name='StoreAndForward.RequestResponse',
|
_STOREANDFORWARD_HISTORY = _STOREANDFORWARD.nested_types_by_name['History']
|
||||||
filename=None,
|
_STOREANDFORWARD_HEARTBEAT = _STOREANDFORWARD.nested_types_by_name['Heartbeat']
|
||||||
file=DESCRIPTOR,
|
_STOREANDFORWARD_REQUESTRESPONSE = _STOREANDFORWARD.enum_types_by_name['RequestResponse']
|
||||||
values=[
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='UNSET', index=0, number=0,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='ROUTER_ERROR', index=1, number=1,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='ROUTER_HEARTBEAT', index=2, number=2,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='ROUTER_PING', index=3, number=3,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='ROUTER_PONG', index=4, number=4,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='ROUTER_BUSY', index=5, number=5,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='ROUTER_HISTORY', index=6, number=6,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='CLIENT_ERROR', index=7, number=101,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='CLIENT_HISTORY', index=8, number=102,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='CLIENT_STATS', index=9, number=103,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='CLIENT_PING', index=10, number=104,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='CLIENT_PONG', index=11, number=105,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
_descriptor.EnumValueDescriptor(
|
|
||||||
name='CLIENT_ABORT', index=12, number=106,
|
|
||||||
serialized_options=None,
|
|
||||||
type=None),
|
|
||||||
],
|
|
||||||
containing_type=None,
|
|
||||||
serialized_options=None,
|
|
||||||
serialized_start=554,
|
|
||||||
serialized_end=801,
|
|
||||||
)
|
|
||||||
_sym_db.RegisterEnumDescriptor(_STOREANDFORWARD_REQUESTRESPONSE)
|
|
||||||
|
|
||||||
|
|
||||||
_STOREANDFORWARD_STATISTICS = _descriptor.Descriptor(
|
|
||||||
name='Statistics',
|
|
||||||
full_name='StoreAndForward.Statistics',
|
|
||||||
filename=None,
|
|
||||||
file=DESCRIPTOR,
|
|
||||||
containing_type=None,
|
|
||||||
fields=[
|
|
||||||
_descriptor.FieldDescriptor(
|
|
||||||
name='messages_total', full_name='StoreAndForward.Statistics.messages_total', index=0,
|
|
||||||
number=1, 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='messages_saved', full_name='StoreAndForward.Statistics.messages_saved', index=1,
|
|
||||||
number=2, 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='messages_max', full_name='StoreAndForward.Statistics.messages_max', index=2,
|
|
||||||
number=3, 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='up_time', full_name='StoreAndForward.Statistics.up_time', index=3,
|
|
||||||
number=4, 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='requests', full_name='StoreAndForward.Statistics.requests', index=4,
|
|
||||||
number=5, 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='requests_history', full_name='StoreAndForward.Statistics.requests_history', 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='heartbeat', full_name='StoreAndForward.Statistics.heartbeat', index=6,
|
|
||||||
number=7, 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='return_max', full_name='StoreAndForward.Statistics.return_max', index=7,
|
|
||||||
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='return_window', full_name='StoreAndForward.Statistics.return_window', index=8,
|
|
||||||
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),
|
|
||||||
],
|
|
||||||
extensions=[
|
|
||||||
],
|
|
||||||
nested_types=[],
|
|
||||||
enum_types=[
|
|
||||||
],
|
|
||||||
serialized_options=None,
|
|
||||||
is_extendable=False,
|
|
||||||
syntax='proto3',
|
|
||||||
extension_ranges=[],
|
|
||||||
oneofs=[
|
|
||||||
],
|
|
||||||
serialized_start=223,
|
|
||||||
serialized_end=428,
|
|
||||||
)
|
|
||||||
|
|
||||||
_STOREANDFORWARD_HISTORY = _descriptor.Descriptor(
|
|
||||||
name='History',
|
|
||||||
full_name='StoreAndForward.History',
|
|
||||||
filename=None,
|
|
||||||
file=DESCRIPTOR,
|
|
||||||
containing_type=None,
|
|
||||||
fields=[
|
|
||||||
_descriptor.FieldDescriptor(
|
|
||||||
name='history_messages', full_name='StoreAndForward.History.history_messages', index=0,
|
|
||||||
number=1, 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='window', full_name='StoreAndForward.History.window', index=1,
|
|
||||||
number=2, 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='last_request', full_name='StoreAndForward.History.last_request', index=2,
|
|
||||||
number=3, 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),
|
|
||||||
],
|
|
||||||
extensions=[
|
|
||||||
],
|
|
||||||
nested_types=[],
|
|
||||||
enum_types=[
|
|
||||||
],
|
|
||||||
serialized_options=None,
|
|
||||||
is_extendable=False,
|
|
||||||
syntax='proto3',
|
|
||||||
extension_ranges=[],
|
|
||||||
oneofs=[
|
|
||||||
],
|
|
||||||
serialized_start=430,
|
|
||||||
serialized_end=503,
|
|
||||||
)
|
|
||||||
|
|
||||||
_STOREANDFORWARD_HEARTBEAT = _descriptor.Descriptor(
|
|
||||||
name='Heartbeat',
|
|
||||||
full_name='StoreAndForward.Heartbeat',
|
|
||||||
filename=None,
|
|
||||||
file=DESCRIPTOR,
|
|
||||||
containing_type=None,
|
|
||||||
fields=[
|
|
||||||
_descriptor.FieldDescriptor(
|
|
||||||
name='period', full_name='StoreAndForward.Heartbeat.period', index=0,
|
|
||||||
number=1, 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='secondary', full_name='StoreAndForward.Heartbeat.secondary', index=1,
|
|
||||||
number=2, 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),
|
|
||||||
],
|
|
||||||
extensions=[
|
|
||||||
],
|
|
||||||
nested_types=[],
|
|
||||||
enum_types=[
|
|
||||||
],
|
|
||||||
serialized_options=None,
|
|
||||||
is_extendable=False,
|
|
||||||
syntax='proto3',
|
|
||||||
extension_ranges=[],
|
|
||||||
oneofs=[
|
|
||||||
],
|
|
||||||
serialized_start=505,
|
|
||||||
serialized_end=551,
|
|
||||||
)
|
|
||||||
|
|
||||||
_STOREANDFORWARD = _descriptor.Descriptor(
|
|
||||||
name='StoreAndForward',
|
|
||||||
full_name='StoreAndForward',
|
|
||||||
filename=None,
|
|
||||||
file=DESCRIPTOR,
|
|
||||||
containing_type=None,
|
|
||||||
fields=[
|
|
||||||
_descriptor.FieldDescriptor(
|
|
||||||
name='rr', full_name='StoreAndForward.rr', index=0,
|
|
||||||
number=1, 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='stats', full_name='StoreAndForward.stats', 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='history', full_name='StoreAndForward.history', 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='heartbeat', full_name='StoreAndForward.heartbeat', index=3,
|
|
||||||
number=4, 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=[_STOREANDFORWARD_STATISTICS, _STOREANDFORWARD_HISTORY, _STOREANDFORWARD_HEARTBEAT, ],
|
|
||||||
enum_types=[
|
|
||||||
_STOREANDFORWARD_REQUESTRESPONSE,
|
|
||||||
],
|
|
||||||
serialized_options=None,
|
|
||||||
is_extendable=False,
|
|
||||||
syntax='proto3',
|
|
||||||
extension_ranges=[],
|
|
||||||
oneofs=[
|
|
||||||
],
|
|
||||||
serialized_start=23,
|
|
||||||
serialized_end=801,
|
|
||||||
)
|
|
||||||
|
|
||||||
_STOREANDFORWARD_STATISTICS.containing_type = _STOREANDFORWARD
|
|
||||||
_STOREANDFORWARD_HISTORY.containing_type = _STOREANDFORWARD
|
|
||||||
_STOREANDFORWARD_HEARTBEAT.containing_type = _STOREANDFORWARD
|
|
||||||
_STOREANDFORWARD.fields_by_name['rr'].enum_type = _STOREANDFORWARD_REQUESTRESPONSE
|
|
||||||
_STOREANDFORWARD.fields_by_name['stats'].message_type = _STOREANDFORWARD_STATISTICS
|
|
||||||
_STOREANDFORWARD.fields_by_name['history'].message_type = _STOREANDFORWARD_HISTORY
|
|
||||||
_STOREANDFORWARD.fields_by_name['heartbeat'].message_type = _STOREANDFORWARD_HEARTBEAT
|
|
||||||
_STOREANDFORWARD_REQUESTRESPONSE.containing_type = _STOREANDFORWARD
|
|
||||||
DESCRIPTOR.message_types_by_name['StoreAndForward'] = _STOREANDFORWARD
|
|
||||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
|
||||||
|
|
||||||
StoreAndForward = _reflection.GeneratedProtocolMessageType('StoreAndForward', (_message.Message,), {
|
StoreAndForward = _reflection.GeneratedProtocolMessageType('StoreAndForward', (_message.Message,), {
|
||||||
|
|
||||||
'Statistics' : _reflection.GeneratedProtocolMessageType('Statistics', (_message.Message,), {
|
'Statistics' : _reflection.GeneratedProtocolMessageType('Statistics', (_message.Message,), {
|
||||||
@@ -351,6 +54,18 @@ _sym_db.RegisterMessage(StoreAndForward.Statistics)
|
|||||||
_sym_db.RegisterMessage(StoreAndForward.History)
|
_sym_db.RegisterMessage(StoreAndForward.History)
|
||||||
_sym_db.RegisterMessage(StoreAndForward.Heartbeat)
|
_sym_db.RegisterMessage(StoreAndForward.Heartbeat)
|
||||||
|
|
||||||
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
|
|
||||||
DESCRIPTOR._options = None
|
DESCRIPTOR._options = None
|
||||||
|
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\025StoreAndForwardProtosH\003Z!github.com/meshtastic/gomeshproto'
|
||||||
|
_STOREANDFORWARD._serialized_start=23
|
||||||
|
_STOREANDFORWARD._serialized_end=801
|
||||||
|
_STOREANDFORWARD_STATISTICS._serialized_start=223
|
||||||
|
_STOREANDFORWARD_STATISTICS._serialized_end=428
|
||||||
|
_STOREANDFORWARD_HISTORY._serialized_start=430
|
||||||
|
_STOREANDFORWARD_HISTORY._serialized_end=503
|
||||||
|
_STOREANDFORWARD_HEARTBEAT._serialized_start=505
|
||||||
|
_STOREANDFORWARD_HEARTBEAT._serialized_end=551
|
||||||
|
_STOREANDFORWARD_REQUESTRESPONSE._serialized_start=554
|
||||||
|
_STOREANDFORWARD_REQUESTRESPONSE._serialized_end=801
|
||||||
# @@protoc_insertion_point(module_scope)
|
# @@protoc_insertion_point(module_scope)
|
||||||
|
|||||||
@@ -131,9 +131,9 @@ class StreamInterface(MeshInterface):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
while not self._wantExit:
|
while not self._wantExit:
|
||||||
logging.debug("reading character")
|
#logging.debug("reading character")
|
||||||
b = self._readBytes(1)
|
b = self._readBytes(1)
|
||||||
logging.debug("In reader loop")
|
#logging.debug("In reader loop")
|
||||||
#logging.debug(f"read returned {b}")
|
#logging.debug(f"read returned {b}")
|
||||||
if len(b) > 0:
|
if len(b) > 0:
|
||||||
c = b[0]
|
c = b[0]
|
||||||
|
|||||||
@@ -72,19 +72,22 @@ techo_1 = SupportedDevice(name="T-Echo", version="1", for_firmware="t-echo-1", d
|
|||||||
rak4631_5005 = SupportedDevice(name="RAK 4631 5005", version="", for_firmware="rak4631_5005",
|
rak4631_5005 = SupportedDevice(name="RAK 4631 5005", version="", for_firmware="rak4631_5005",
|
||||||
device_class="nrf52",
|
device_class="nrf52",
|
||||||
baseport_on_linux="ttyACM", baseport_on_mac="cu.usbmodem",
|
baseport_on_linux="ttyACM", baseport_on_mac="cu.usbmodem",
|
||||||
usb_vendor_id_in_hex="239a", usb_product_id_in_hex="8029")
|
usb_vendor_id_in_hex="239a", usb_product_id_in_hex="0029")
|
||||||
rak4631_5005_epaper = SupportedDevice(name="RAK 4631 5005 14000 epaper", version="", for_firmware="rak4631_5005_epaper",
|
rak4631_5005_epaper = SupportedDevice(name="RAK 4631 5005 14000 epaper", version="", for_firmware="rak4631_5005_epaper",
|
||||||
device_class="nrf52",
|
device_class="nrf52",
|
||||||
baseport_on_linux="ttyACM", baseport_on_mac="cu.usbmodem",
|
baseport_on_linux="ttyACM", baseport_on_mac="cu.usbmodem",
|
||||||
usb_vendor_id_in_hex="239a", usb_product_id_in_hex="8029")
|
usb_vendor_id_in_hex="239a", usb_product_id_in_hex="0029")
|
||||||
# Note: The 19003 reports same product id as 5005 in boot mode
|
# Note: The 19003 reports same product id as 5005 in boot mode
|
||||||
rak4631_19003 = SupportedDevice(name="RAK 4631 19003", version="", for_firmware="rak4631_19003",
|
rak4631_19003 = SupportedDevice(name="RAK 4631 19003", version="", for_firmware="rak4631_19003",
|
||||||
device_class="nrf52",
|
device_class="nrf52",
|
||||||
baseport_on_linux="ttyACM", baseport_on_mac="cu.usbmodem",
|
baseport_on_linux="ttyACM", baseport_on_mac="cu.usbmodem",
|
||||||
usb_vendor_id_in_hex="239a", usb_product_id_in_hex="8029")
|
usb_vendor_id_in_hex="239a", usb_product_id_in_hex="8029")
|
||||||
|
nano_g1 = SupportedDevice(name="Nano G1", version="", for_firmware="nano-g1",
|
||||||
|
baseport_on_linux="ttyACM", baseport_on_mac="cu.usbmodem",
|
||||||
|
usb_vendor_id_in_hex="1a86", usb_product_id_in_hex="55d4")
|
||||||
|
|
||||||
supported_devices = [tbeam_v0_7, tbeam_v1_1, tbeam_M8N, tbeam_M8N_SX1262,
|
supported_devices = [tbeam_v0_7, tbeam_v1_1, tbeam_M8N, tbeam_M8N_SX1262,
|
||||||
tlora_v1, tlora_v1_3, tlora_v2, tlora_v2_1_1_6,
|
tlora_v1, tlora_v1_3, tlora_v2, tlora_v2_1_1_6,
|
||||||
heltec_v1, heltec_v2_0, heltec_v2_1,
|
heltec_v1, heltec_v2_0, heltec_v2_1,
|
||||||
meshtastic_diy_v1, techo_1, rak4631_5005, rak4631_5005_epaper, rak4631_19003,
|
meshtastic_diy_v1, techo_1, rak4631_5005, rak4631_5005_epaper, rak4631_19003,
|
||||||
rak11200]
|
rak11200, nano_g1]
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
# source: telemetry.proto
|
# source: telemetry.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
|
from google.protobuf.internal import enum_type_wrapper
|
||||||
from google.protobuf import descriptor as _descriptor
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||||
from google.protobuf import message as _message
|
from google.protobuf import message as _message
|
||||||
from google.protobuf import reflection as _reflection
|
from google.protobuf import reflection as _reflection
|
||||||
from google.protobuf import symbol_database as _symbol_database
|
from google.protobuf import symbol_database as _symbol_database
|
||||||
@@ -13,195 +15,27 @@ _sym_db = _symbol_database.Default()
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTOR = _descriptor.FileDescriptor(
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0ftelemetry.proto\"i\n\rDeviceMetrics\x12\x15\n\rbattery_level\x18\x01 \x01(\r\x12\x0f\n\x07voltage\x18\x02 \x01(\x02\x12\x1b\n\x13\x63hannel_utilization\x18\x03 \x01(\x02\x12\x13\n\x0b\x61ir_util_tx\x18\x04 \x01(\x02\"\x9b\x01\n\x12\x45nvironmentMetrics\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\x12\x16\n\x0egas_resistance\x18\x04 \x01(\x02\x12\x0f\n\x07voltage\x18\x05 \x01(\x02\x12\x0f\n\x07\x63urrent\x18\x06 \x01(\x02\"\x82\x01\n\tTelemetry\x12\x0c\n\x04time\x18\x01 \x01(\x07\x12(\n\x0e\x64\x65vice_metrics\x18\x02 \x01(\x0b\x32\x0e.DeviceMetricsH\x00\x12\x32\n\x13\x65nvironment_metrics\x18\x03 \x01(\x0b\x32\x13.EnvironmentMetricsH\x00\x42\t\n\x07variant*\xa2\x01\n\x13TelemetrySensorType\x12\n\n\x06NotSet\x10\x00\x12\t\n\x05\x44HT11\x10\x01\x12\x0b\n\x07\x44S18B20\x10\x02\x12\t\n\x05\x44HT12\x10\x03\x12\t\n\x05\x44HT21\x10\x04\x12\t\n\x05\x44HT22\x10\x05\x12\n\n\x06\x42ME280\x10\x06\x12\n\n\x06\x42ME680\x10\x07\x12\x0b\n\x07MCP9808\x10\x08\x12\t\n\x05SHTC3\x10\t\x12\n\n\x06INA260\x10\n\x12\n\n\x06INA219\x10\x0b\x42K\n\x13\x63om.geeksville.meshB\x0fTelemetryProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3')
|
||||||
name='telemetry.proto',
|
|
||||||
package='',
|
_TELEMETRYSENSORTYPE = DESCRIPTOR.enum_types_by_name['TelemetrySensorType']
|
||||||
syntax='proto3',
|
TelemetrySensorType = enum_type_wrapper.EnumTypeWrapper(_TELEMETRYSENSORTYPE)
|
||||||
serialized_options=b'\n\023com.geeksville.meshB\017TelemetryProtosH\003Z!github.com/meshtastic/gomeshproto',
|
NotSet = 0
|
||||||
serialized_pb=b'\n\x0ftelemetry.proto\"i\n\rDeviceMetrics\x12\x15\n\rbattery_level\x18\x01 \x01(\r\x12\x0f\n\x07voltage\x18\x02 \x01(\x02\x12\x1b\n\x13\x63hannel_utilization\x18\x03 \x01(\x02\x12\x13\n\x0b\x61ir_util_tx\x18\x04 \x01(\x02\"\x9b\x01\n\x12\x45nvironmentMetrics\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\x12\x16\n\x0egas_resistance\x18\x04 \x01(\x02\x12\x0f\n\x07voltage\x18\x05 \x01(\x02\x12\x0f\n\x07\x63urrent\x18\x06 \x01(\x02\"\x82\x01\n\tTelemetry\x12\x0c\n\x04time\x18\x01 \x01(\x07\x12(\n\x0e\x64\x65vice_metrics\x18\x02 \x01(\x0b\x32\x0e.DeviceMetricsH\x00\x12\x32\n\x13\x65nvironment_metrics\x18\x03 \x01(\x0b\x32\x13.EnvironmentMetricsH\x00\x42\t\n\x07variantBK\n\x13\x63om.geeksville.meshB\x0fTelemetryProtosH\x03Z!github.com/meshtastic/gomeshprotob\x06proto3'
|
DHT11 = 1
|
||||||
)
|
DS18B20 = 2
|
||||||
|
DHT12 = 3
|
||||||
|
DHT21 = 4
|
||||||
|
DHT22 = 5
|
||||||
|
BME280 = 6
|
||||||
|
BME680 = 7
|
||||||
|
MCP9808 = 8
|
||||||
|
SHTC3 = 9
|
||||||
|
INA260 = 10
|
||||||
|
INA219 = 11
|
||||||
|
|
||||||
|
|
||||||
|
_DEVICEMETRICS = DESCRIPTOR.message_types_by_name['DeviceMetrics']
|
||||||
|
_ENVIRONMENTMETRICS = DESCRIPTOR.message_types_by_name['EnvironmentMetrics']
|
||||||
_DEVICEMETRICS = _descriptor.Descriptor(
|
_TELEMETRY = DESCRIPTOR.message_types_by_name['Telemetry']
|
||||||
name='DeviceMetrics',
|
|
||||||
full_name='DeviceMetrics',
|
|
||||||
filename=None,
|
|
||||||
file=DESCRIPTOR,
|
|
||||||
containing_type=None,
|
|
||||||
fields=[
|
|
||||||
_descriptor.FieldDescriptor(
|
|
||||||
name='battery_level', full_name='DeviceMetrics.battery_level', index=0,
|
|
||||||
number=1, 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='voltage', full_name='DeviceMetrics.voltage', 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='channel_utilization', full_name='DeviceMetrics.channel_utilization', 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),
|
|
||||||
_descriptor.FieldDescriptor(
|
|
||||||
name='air_util_tx', full_name='DeviceMetrics.air_util_tx', index=3,
|
|
||||||
number=4, 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=19,
|
|
||||||
serialized_end=124,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
_ENVIRONMENTMETRICS = _descriptor.Descriptor(
|
|
||||||
name='EnvironmentMetrics',
|
|
||||||
full_name='EnvironmentMetrics',
|
|
||||||
filename=None,
|
|
||||||
file=DESCRIPTOR,
|
|
||||||
containing_type=None,
|
|
||||||
fields=[
|
|
||||||
_descriptor.FieldDescriptor(
|
|
||||||
name='temperature', full_name='EnvironmentMetrics.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='EnvironmentMetrics.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='EnvironmentMetrics.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),
|
|
||||||
_descriptor.FieldDescriptor(
|
|
||||||
name='gas_resistance', full_name='EnvironmentMetrics.gas_resistance', index=3,
|
|
||||||
number=4, 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='voltage', full_name='EnvironmentMetrics.voltage', index=4,
|
|
||||||
number=5, 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='current', full_name='EnvironmentMetrics.current', index=5,
|
|
||||||
number=6, 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=127,
|
|
||||||
serialized_end=282,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
_TELEMETRY = _descriptor.Descriptor(
|
|
||||||
name='Telemetry',
|
|
||||||
full_name='Telemetry',
|
|
||||||
filename=None,
|
|
||||||
file=DESCRIPTOR,
|
|
||||||
containing_type=None,
|
|
||||||
fields=[
|
|
||||||
_descriptor.FieldDescriptor(
|
|
||||||
name='time', full_name='Telemetry.time', index=0,
|
|
||||||
number=1, 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='device_metrics', full_name='Telemetry.device_metrics', 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='environment_metrics', full_name='Telemetry.environment_metrics', 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),
|
|
||||||
],
|
|
||||||
extensions=[
|
|
||||||
],
|
|
||||||
nested_types=[],
|
|
||||||
enum_types=[
|
|
||||||
],
|
|
||||||
serialized_options=None,
|
|
||||||
is_extendable=False,
|
|
||||||
syntax='proto3',
|
|
||||||
extension_ranges=[],
|
|
||||||
oneofs=[
|
|
||||||
_descriptor.OneofDescriptor(
|
|
||||||
name='variant', full_name='Telemetry.variant',
|
|
||||||
index=0, containing_type=None, fields=[]),
|
|
||||||
],
|
|
||||||
serialized_start=285,
|
|
||||||
serialized_end=415,
|
|
||||||
)
|
|
||||||
|
|
||||||
_TELEMETRY.fields_by_name['device_metrics'].message_type = _DEVICEMETRICS
|
|
||||||
_TELEMETRY.fields_by_name['environment_metrics'].message_type = _ENVIRONMENTMETRICS
|
|
||||||
_TELEMETRY.oneofs_by_name['variant'].fields.append(
|
|
||||||
_TELEMETRY.fields_by_name['device_metrics'])
|
|
||||||
_TELEMETRY.fields_by_name['device_metrics'].containing_oneof = _TELEMETRY.oneofs_by_name['variant']
|
|
||||||
_TELEMETRY.oneofs_by_name['variant'].fields.append(
|
|
||||||
_TELEMETRY.fields_by_name['environment_metrics'])
|
|
||||||
_TELEMETRY.fields_by_name['environment_metrics'].containing_oneof = _TELEMETRY.oneofs_by_name['variant']
|
|
||||||
DESCRIPTOR.message_types_by_name['DeviceMetrics'] = _DEVICEMETRICS
|
|
||||||
DESCRIPTOR.message_types_by_name['EnvironmentMetrics'] = _ENVIRONMENTMETRICS
|
|
||||||
DESCRIPTOR.message_types_by_name['Telemetry'] = _TELEMETRY
|
|
||||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR)
|
|
||||||
|
|
||||||
DeviceMetrics = _reflection.GeneratedProtocolMessageType('DeviceMetrics', (_message.Message,), {
|
DeviceMetrics = _reflection.GeneratedProtocolMessageType('DeviceMetrics', (_message.Message,), {
|
||||||
'DESCRIPTOR' : _DEVICEMETRICS,
|
'DESCRIPTOR' : _DEVICEMETRICS,
|
||||||
'__module__' : 'telemetry_pb2'
|
'__module__' : 'telemetry_pb2'
|
||||||
@@ -223,6 +57,16 @@ Telemetry = _reflection.GeneratedProtocolMessageType('Telemetry', (_message.Mess
|
|||||||
})
|
})
|
||||||
_sym_db.RegisterMessage(Telemetry)
|
_sym_db.RegisterMessage(Telemetry)
|
||||||
|
|
||||||
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
|
|
||||||
DESCRIPTOR._options = None
|
DESCRIPTOR._options = None
|
||||||
|
DESCRIPTOR._serialized_options = b'\n\023com.geeksville.meshB\017TelemetryProtosH\003Z!github.com/meshtastic/gomeshproto'
|
||||||
|
_TELEMETRYSENSORTYPE._serialized_start=418
|
||||||
|
_TELEMETRYSENSORTYPE._serialized_end=580
|
||||||
|
_DEVICEMETRICS._serialized_start=19
|
||||||
|
_DEVICEMETRICS._serialized_end=124
|
||||||
|
_ENVIRONMENTMETRICS._serialized_start=127
|
||||||
|
_ENVIRONMENTMETRICS._serialized_end=282
|
||||||
|
_TELEMETRY._serialized_start=285
|
||||||
|
_TELEMETRY._serialized_end=415
|
||||||
# @@protoc_insertion_point(module_scope)
|
# @@protoc_insertion_point(module_scope)
|
||||||
|
|||||||
@@ -12,14 +12,14 @@ import pytest
|
|||||||
|
|
||||||
from meshtastic.__main__ import initParser, main, Globals, onReceive, onConnection, export_config, getPref, setPref, onNode, tunnelMain
|
from meshtastic.__main__ import initParser, main, Globals, onReceive, onConnection, export_config, getPref, setPref, onNode, tunnelMain
|
||||||
#from ..radioconfig_pb2 import UserPreferences
|
#from ..radioconfig_pb2 import UserPreferences
|
||||||
import meshtastic.radioconfig_pb2
|
#import meshtastic.config_pb2
|
||||||
from ..serial_interface import SerialInterface
|
from ..serial_interface import SerialInterface
|
||||||
from ..tcp_interface import TCPInterface
|
from ..tcp_interface import TCPInterface
|
||||||
#from ..ble_interface import BLEInterface
|
#from ..ble_interface import BLEInterface
|
||||||
from ..node import Node
|
from ..node import Node
|
||||||
from ..channel_pb2 import Channel
|
from ..channel_pb2 import Channel
|
||||||
from ..remote_hardware import onGPIOreceive
|
#from ..remote_hardware import onGPIOreceive
|
||||||
from ..radioconfig_pb2 import RadioConfig
|
#from ..config_pb2 import Config
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
@pytest.mark.unit
|
||||||
@@ -789,61 +789,6 @@ def test_main_setalt(capsys):
|
|||||||
assert err == ''
|
assert err == ''
|
||||||
mo.assert_called()
|
mo.assert_called()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
|
||||||
def test_main_set_team_valid(capsys):
|
|
||||||
"""Test --set-team"""
|
|
||||||
sys.argv = ['', '--set-team', 'CYAN']
|
|
||||||
Globals.getInstance().set_args(sys.argv)
|
|
||||||
|
|
||||||
mocked_node = MagicMock(autospec=Node)
|
|
||||||
def mock_setOwner(team):
|
|
||||||
print('inside mocked setOwner')
|
|
||||||
print(f'{team}')
|
|
||||||
mocked_node.setOwner.side_effect = mock_setOwner
|
|
||||||
|
|
||||||
iface = MagicMock(autospec=SerialInterface)
|
|
||||||
iface.localNode.return_value = mocked_node
|
|
||||||
|
|
||||||
with patch('meshtastic.serial_interface.SerialInterface', return_value=iface) as mo:
|
|
||||||
with patch('meshtastic.mesh_pb2.Team') as mm:
|
|
||||||
mm.Name.return_value = 'FAKENAME'
|
|
||||||
mm.Value.return_value = 'FAKEVAL'
|
|
||||||
main()
|
|
||||||
out, err = capsys.readouterr()
|
|
||||||
assert re.search(r'Connected to radio', out, re.MULTILINE)
|
|
||||||
assert re.search(r'Setting team to', out, re.MULTILINE)
|
|
||||||
assert err == ''
|
|
||||||
mo.assert_called()
|
|
||||||
mm.Name.assert_called()
|
|
||||||
mm.Value.assert_called()
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
|
||||||
def test_main_set_team_invalid(capsys):
|
|
||||||
"""Test --set-team using an invalid team name"""
|
|
||||||
sys.argv = ['', '--set-team', 'NOTCYAN']
|
|
||||||
Globals.getInstance().set_args(sys.argv)
|
|
||||||
|
|
||||||
iface = MagicMock(autospec=SerialInterface)
|
|
||||||
|
|
||||||
def throw_an_exception(exc):
|
|
||||||
raise ValueError("Fake exception.")
|
|
||||||
|
|
||||||
with patch('meshtastic.serial_interface.SerialInterface', return_value=iface) as mo:
|
|
||||||
with patch('meshtastic.mesh_pb2.Team') as mm:
|
|
||||||
mm.Value.side_effect = throw_an_exception
|
|
||||||
main()
|
|
||||||
out, err = capsys.readouterr()
|
|
||||||
assert re.search(r'Connected to radio', out, re.MULTILINE)
|
|
||||||
assert re.search(r'ERROR: Team', out, re.MULTILINE)
|
|
||||||
assert err == ''
|
|
||||||
mo.assert_called()
|
|
||||||
mm.Value.assert_called()
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
@pytest.mark.unit
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
@pytest.mark.usefixtures("reset_globals")
|
||||||
def test_main_seturl(capsys):
|
def test_main_seturl(capsys):
|
||||||
@@ -1302,28 +1247,29 @@ def test_main_ch_enable_primary_channel(capsys):
|
|||||||
mo.assert_called()
|
mo.assert_called()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unit
|
||||||
def test_main_ch_range_options(capsys):
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
"""Test changing the various range options."""
|
#def test_main_ch_range_options(capsys):
|
||||||
range_options = ['--ch-vlongslow', '--ch-longslow', '--ch-longfast', '--ch-midslow',
|
# """Test changing the various range options."""
|
||||||
'--ch-midfast', '--ch-shortslow', '--ch-shortfast']
|
# range_options = ['--ch-vlongslow', '--ch-longslow', '--ch-longfast', '--ch-midslow',
|
||||||
for range_option in range_options:
|
# '--ch-midfast', '--ch-shortslow', '--ch-shortfast']
|
||||||
sys.argv = ['', f"{range_option}" ]
|
# for range_option in range_options:
|
||||||
Globals.getInstance().set_args(sys.argv)
|
# sys.argv = ['', f"{range_option}" ]
|
||||||
|
# Globals.getInstance().set_args(sys.argv)
|
||||||
mocked_node = MagicMock(autospec=Node)
|
#
|
||||||
|
# mocked_node = MagicMock(autospec=Node)
|
||||||
iface = MagicMock(autospec=SerialInterface)
|
#
|
||||||
iface.getNode.return_value = mocked_node
|
# iface = MagicMock(autospec=SerialInterface)
|
||||||
|
# iface.getNode.return_value = mocked_node
|
||||||
with patch('meshtastic.serial_interface.SerialInterface', return_value=iface) as mo:
|
#
|
||||||
main()
|
# with patch('meshtastic.serial_interface.SerialInterface', return_value=iface) as mo:
|
||||||
out, err = capsys.readouterr()
|
# main()
|
||||||
assert re.search(r'Connected to radio', out, re.MULTILINE)
|
# out, err = capsys.readouterr()
|
||||||
assert re.search(r'Writing modified channels', out, re.MULTILINE)
|
# assert re.search(r'Connected to radio', out, re.MULTILINE)
|
||||||
assert err == ''
|
# assert re.search(r'Writing modified channels', out, re.MULTILINE)
|
||||||
mo.assert_called()
|
# assert err == ''
|
||||||
|
# mo.assert_called()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
@pytest.mark.unit
|
||||||
@@ -1364,121 +1310,125 @@ def test_main_ch_longsfast_on_non_primary_channel(capsys):
|
|||||||
# POS_SEQ_NOS 128
|
# POS_SEQ_NOS 128
|
||||||
# POS_TIMESTAMP 256
|
# POS_TIMESTAMP 256
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unit
|
||||||
def test_main_pos_fields_no_args(capsys):
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
"""Test --pos-fields no args (which shows settings)"""
|
#def test_main_pos_fields_no_args(capsys):
|
||||||
sys.argv = ['', '--pos-fields']
|
# """Test --pos-fields no args (which shows settings)"""
|
||||||
Globals.getInstance().set_args(sys.argv)
|
# sys.argv = ['', '--pos-fields']
|
||||||
|
# Globals.getInstance().set_args(sys.argv)
|
||||||
pos_flags = MagicMock(autospec=meshtastic.radioconfig_pb2.PositionFlags)
|
#
|
||||||
|
# pos_flags = MagicMock(autospec=meshtastic.radioconfig_pb2.PositionFlags)
|
||||||
with patch('meshtastic.serial_interface.SerialInterface') as mo:
|
#
|
||||||
mo().getNode().radioConfig.preferences.position_flags = 35
|
# with patch('meshtastic.serial_interface.SerialInterface') as mo:
|
||||||
with patch('meshtastic.radioconfig_pb2.PositionFlags', return_value=pos_flags) as mrc:
|
# mo().getNode().radioConfig.preferences.position_flags = 35
|
||||||
|
# with patch('meshtastic.radioconfig_pb2.PositionFlags', return_value=pos_flags) as mrc:
|
||||||
mrc.values.return_value = [0, 1, 2, 4, 8, 16, 32, 64, 128, 256]
|
#
|
||||||
# Note: When you use side_effect and a list, each call will use a value from the front of the list then
|
# mrc.values.return_value = [0, 1, 2, 4, 8, 16, 32, 64, 128, 256]
|
||||||
# remove that value from the list. If there are three values in the list, we expect it to be called
|
# # Note: When you use side_effect and a list, each call will use a value from the front of the list then
|
||||||
# three times.
|
# # remove that value from the list. If there are three values in the list, we expect it to be called
|
||||||
mrc.Name.side_effect = ['POS_ALTITUDE', 'POS_ALT_MSL', 'POS_BATTERY']
|
# # three times.
|
||||||
|
# mrc.Name.side_effect = ['POS_ALTITUDE', 'POS_ALT_MSL', 'POS_BATTERY']
|
||||||
main()
|
#
|
||||||
|
# main()
|
||||||
mrc.Name.assert_called()
|
#
|
||||||
mrc.values.assert_called()
|
# mrc.Name.assert_called()
|
||||||
mo.assert_called()
|
# mrc.values.assert_called()
|
||||||
|
# mo.assert_called()
|
||||||
out, err = capsys.readouterr()
|
#
|
||||||
assert re.search(r'Connected to radio', out, re.MULTILINE)
|
# out, err = capsys.readouterr()
|
||||||
assert re.search(r'POS_ALTITUDE POS_ALT_MSL POS_BATTERY', out, re.MULTILINE)
|
# assert re.search(r'Connected to radio', out, re.MULTILINE)
|
||||||
assert err == ''
|
# assert re.search(r'POS_ALTITUDE POS_ALT_MSL POS_BATTERY', out, re.MULTILINE)
|
||||||
|
# assert err == ''
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unit
|
||||||
def test_main_pos_fields_arg_of_zero(capsys):
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
"""Test --pos-fields an arg of 0 (which shows list)"""
|
#def test_main_pos_fields_arg_of_zero(capsys):
|
||||||
sys.argv = ['', '--pos-fields', '0']
|
# """Test --pos-fields an arg of 0 (which shows list)"""
|
||||||
Globals.getInstance().set_args(sys.argv)
|
# sys.argv = ['', '--pos-fields', '0']
|
||||||
|
# Globals.getInstance().set_args(sys.argv)
|
||||||
pos_flags = MagicMock(autospec=meshtastic.radioconfig_pb2.PositionFlags)
|
#
|
||||||
|
# pos_flags = MagicMock(autospec=meshtastic.radioconfig_pb2.PositionFlags)
|
||||||
with patch('meshtastic.serial_interface.SerialInterface') as mo:
|
#
|
||||||
with patch('meshtastic.radioconfig_pb2.PositionFlags', return_value=pos_flags) as mrc:
|
# with patch('meshtastic.serial_interface.SerialInterface') as mo:
|
||||||
|
# with patch('meshtastic.radioconfig_pb2.PositionFlags', return_value=pos_flags) as mrc:
|
||||||
def throw_value_error_exception(exc):
|
#
|
||||||
raise ValueError()
|
# def throw_value_error_exception(exc):
|
||||||
mrc.Value.side_effect = throw_value_error_exception
|
# raise ValueError()
|
||||||
mrc.keys.return_value = [ 'POS_UNDEFINED', 'POS_ALTITUDE', 'POS_ALT_MSL',
|
# mrc.Value.side_effect = throw_value_error_exception
|
||||||
'POS_GEO_SEP', 'POS_DOP', 'POS_HVDOP', 'POS_BATTERY',
|
# mrc.keys.return_value = [ 'POS_UNDEFINED', 'POS_ALTITUDE', 'POS_ALT_MSL',
|
||||||
'POS_SATINVIEW', 'POS_SEQ_NOS', 'POS_TIMESTAMP']
|
# 'POS_GEO_SEP', 'POS_DOP', 'POS_HVDOP', 'POS_BATTERY',
|
||||||
|
# 'POS_SATINVIEW', 'POS_SEQ_NOS', 'POS_TIMESTAMP']
|
||||||
main()
|
#
|
||||||
|
# main()
|
||||||
mrc.Value.assert_called()
|
#
|
||||||
mrc.keys.assert_called()
|
# mrc.Value.assert_called()
|
||||||
mo.assert_called()
|
# mrc.keys.assert_called()
|
||||||
|
# mo.assert_called()
|
||||||
out, err = capsys.readouterr()
|
#
|
||||||
assert re.search(r'Connected to radio', out, re.MULTILINE)
|
# out, err = capsys.readouterr()
|
||||||
assert re.search(r'ERROR: supported position fields are:', out, re.MULTILINE)
|
# assert re.search(r'Connected to radio', out, re.MULTILINE)
|
||||||
assert re.search(r"['POS_UNDEFINED', 'POS_ALTITUDE', 'POS_ALT_MSL', 'POS_GEO_SEP',"\
|
# assert re.search(r'ERROR: supported position fields are:', out, re.MULTILINE)
|
||||||
"'POS_DOP', 'POS_HVDOP', 'POS_BATTERY', 'POS_SATINVIEW', 'POS_SEQ_NOS',"\
|
# assert re.search(r"['POS_UNDEFINED', 'POS_ALTITUDE', 'POS_ALT_MSL', 'POS_GEO_SEP',"\
|
||||||
"'POS_TIMESTAMP']", out, re.MULTILINE)
|
# "'POS_DOP', 'POS_HVDOP', 'POS_BATTERY', 'POS_SATINVIEW', 'POS_SEQ_NOS',"\
|
||||||
assert err == ''
|
# "'POS_TIMESTAMP']", out, re.MULTILINE)
|
||||||
|
# assert err == ''
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unit
|
||||||
def test_main_pos_fields_valid_values(capsys):
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
"""Test --pos-fields with valid values"""
|
#def test_main_pos_fields_valid_values(capsys):
|
||||||
sys.argv = ['', '--pos-fields', 'POS_GEO_SEP', 'POS_ALT_MSL']
|
# """Test --pos-fields with valid values"""
|
||||||
Globals.getInstance().set_args(sys.argv)
|
# sys.argv = ['', '--pos-fields', 'POS_GEO_SEP', 'POS_ALT_MSL']
|
||||||
|
# Globals.getInstance().set_args(sys.argv)
|
||||||
pos_flags = MagicMock(autospec=meshtastic.radioconfig_pb2.PositionFlags)
|
#
|
||||||
|
# pos_flags = MagicMock(autospec=meshtastic.radioconfig_pb2.PositionFlags)
|
||||||
with patch('meshtastic.serial_interface.SerialInterface') as mo:
|
#
|
||||||
with patch('meshtastic.radioconfig_pb2.PositionFlags', return_value=pos_flags) as mrc:
|
# with patch('meshtastic.serial_interface.SerialInterface') as mo:
|
||||||
|
# with patch('meshtastic.radioconfig_pb2.PositionFlags', return_value=pos_flags) as mrc:
|
||||||
mrc.Value.side_effect = [ 4, 2 ]
|
#
|
||||||
|
# mrc.Value.side_effect = [ 4, 2 ]
|
||||||
main()
|
#
|
||||||
|
# main()
|
||||||
mrc.Value.assert_called()
|
#
|
||||||
mo.assert_called()
|
# mrc.Value.assert_called()
|
||||||
|
# mo.assert_called()
|
||||||
out, err = capsys.readouterr()
|
#
|
||||||
assert re.search(r'Connected to radio', out, re.MULTILINE)
|
# out, err = capsys.readouterr()
|
||||||
assert re.search(r'Setting position fields to 6', out, re.MULTILINE)
|
# assert re.search(r'Connected to radio', out, re.MULTILINE)
|
||||||
assert re.search(r'Set position_flags to 6', out, re.MULTILINE)
|
# assert re.search(r'Setting position fields to 6', out, re.MULTILINE)
|
||||||
assert re.search(r'Writing modified preferences to device', out, re.MULTILINE)
|
# assert re.search(r'Set position_flags to 6', out, re.MULTILINE)
|
||||||
assert err == ''
|
# assert re.search(r'Writing modified preferences to device', out, re.MULTILINE)
|
||||||
|
# assert err == ''
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unit
|
||||||
def test_main_get_with_valid_values(capsys):
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
"""Test --get with valid values (with string, number, boolean)"""
|
#def test_main_get_with_valid_values(capsys):
|
||||||
sys.argv = ['', '--get', 'ls_secs', '--get', 'wifi_ssid', '--get', 'fixed_position']
|
# """Test --get with valid values (with string, number, boolean)"""
|
||||||
Globals.getInstance().set_args(sys.argv)
|
# sys.argv = ['', '--get', 'ls_secs', '--get', 'wifi_ssid', '--get', 'fixed_position']
|
||||||
|
# Globals.getInstance().set_args(sys.argv)
|
||||||
with patch('meshtastic.serial_interface.SerialInterface') as mo:
|
#
|
||||||
|
# with patch('meshtastic.serial_interface.SerialInterface') as mo:
|
||||||
mo().getNode().radioConfig.preferences.wifi_ssid = 'foo'
|
#
|
||||||
mo().getNode().radioConfig.preferences.ls_secs = 300
|
# mo().getNode().radioConfig.preferences.wifi_ssid = 'foo'
|
||||||
mo().getNode().radioConfig.preferences.fixed_position = False
|
# mo().getNode().radioConfig.preferences.ls_secs = 300
|
||||||
|
# mo().getNode().radioConfig.preferences.fixed_position = False
|
||||||
main()
|
#
|
||||||
|
# main()
|
||||||
mo.assert_called()
|
#
|
||||||
|
# mo.assert_called()
|
||||||
out, err = capsys.readouterr()
|
#
|
||||||
assert re.search(r'Connected to radio', out, re.MULTILINE)
|
# out, err = capsys.readouterr()
|
||||||
assert re.search(r'ls_secs: 300', out, re.MULTILINE)
|
# assert re.search(r'Connected to radio', out, re.MULTILINE)
|
||||||
assert re.search(r'wifi_ssid: foo', out, re.MULTILINE)
|
# assert re.search(r'ls_secs: 300', out, re.MULTILINE)
|
||||||
assert re.search(r'fixed_position: False', out, re.MULTILINE)
|
# assert re.search(r'wifi_ssid: foo', out, re.MULTILINE)
|
||||||
assert err == ''
|
# assert re.search(r'fixed_position: False', out, re.MULTILINE)
|
||||||
|
# assert err == ''
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
@pytest.mark.unit
|
||||||
@@ -1534,24 +1484,6 @@ def test_main_get_with_invalid(capsys):
|
|||||||
mo.assert_called()
|
mo.assert_called()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
|
||||||
def test_main_setchan(capsys):
|
|
||||||
"""Test --setchan (deprecated)"""
|
|
||||||
sys.argv = ['', '--setchan', 'a', 'b']
|
|
||||||
Globals.getInstance().set_args(sys.argv)
|
|
||||||
|
|
||||||
iface = MagicMock(autospec=SerialInterface)
|
|
||||||
|
|
||||||
with patch('meshtastic.serial_interface.SerialInterface', return_value=iface):
|
|
||||||
with pytest.raises(SystemExit) as pytest_wrapped_e:
|
|
||||||
main()
|
|
||||||
assert pytest_wrapped_e.type == SystemExit
|
|
||||||
assert pytest_wrapped_e.value.code == 1
|
|
||||||
_, err = capsys.readouterr()
|
|
||||||
assert re.search(r'usage:', err, re.MULTILINE)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
@pytest.mark.unit
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
@pytest.mark.usefixtures("reset_globals")
|
||||||
def test_main_onReceive_empty(caplog, capsys):
|
def test_main_onReceive_empty(caplog, capsys):
|
||||||
@@ -1811,207 +1743,212 @@ def test_main_gpio_rd_no_dest(capsys):
|
|||||||
assert err == ''
|
assert err == ''
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unit
|
||||||
@patch('time.sleep')
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
def test_main_gpio_rd(caplog, capsys):
|
#@patch('time.sleep')
|
||||||
"""Test --gpio_rd with a named gpio channel"""
|
#def test_main_gpio_rd(caplog, capsys):
|
||||||
# Note: On the Heltec v2.1, there is a GPIO pin GPIO 13 that does not have a
|
# """Test --gpio_rd with a named gpio channel"""
|
||||||
# red arrow (meaning ok to use for our purposes)
|
# # Note: On the Heltec v2.1, there is a GPIO pin GPIO 13 that does not have a
|
||||||
# See https://resource.heltec.cn/download/WiFi_LoRa_32/WIFI_LoRa_32_V2.pdf
|
# # red arrow (meaning ok to use for our purposes)
|
||||||
# To find out the mask for GPIO 13, let us assign n as 13.
|
# # See https://resource.heltec.cn/download/WiFi_LoRa_32/WIFI_LoRa_32_V2.pdf
|
||||||
# 1. Find the 2^n or 2^13 (8192)
|
# # To find out the mask for GPIO 13, let us assign n as 13.
|
||||||
# 2. Convert 8192 decimal to hex (0x2000)
|
# # 1. Find the 2^n or 2^13 (8192)
|
||||||
# You can use python:
|
# # 2. Convert 8192 decimal to hex (0x2000)
|
||||||
# >>> print(hex(2**13))
|
# # You can use python:
|
||||||
# 0x2000
|
# # >>> print(hex(2**13))
|
||||||
sys.argv = ['', '--gpio-rd', '0x1000', '--dest', '!1234']
|
# # 0x2000
|
||||||
Globals.getInstance().set_args(sys.argv)
|
# sys.argv = ['', '--gpio-rd', '0x1000', '--dest', '!1234']
|
||||||
|
# Globals.getInstance().set_args(sys.argv)
|
||||||
channel = Channel(index=1, role=1)
|
#
|
||||||
channel.settings.modem_config = 3
|
# channel = Channel(index=1, role=1)
|
||||||
channel.settings.psk = b'\x01'
|
# channel.settings.modem_config = 3
|
||||||
|
# channel.settings.psk = b'\x01'
|
||||||
packet = {
|
#
|
||||||
|
# packet = {
|
||||||
'from': 682968668,
|
#
|
||||||
'to': 682968612,
|
# 'from': 682968668,
|
||||||
'channel': 1,
|
# 'to': 682968612,
|
||||||
'decoded': {
|
# 'channel': 1,
|
||||||
'portnum': 'REMOTE_HARDWARE_APP',
|
# 'decoded': {
|
||||||
'payload': b'\x08\x05\x18\x80 ',
|
# 'portnum': 'REMOTE_HARDWARE_APP',
|
||||||
'requestId': 1629980484,
|
# 'payload': b'\x08\x05\x18\x80 ',
|
||||||
'remotehw': {
|
# 'requestId': 1629980484,
|
||||||
'typ': 'READ_GPIOS_REPLY',
|
# 'remotehw': {
|
||||||
'gpioValue': '4096',
|
# 'typ': 'READ_GPIOS_REPLY',
|
||||||
'raw': 'faked',
|
# 'gpioValue': '4096',
|
||||||
'id': 1693085229,
|
# 'raw': 'faked',
|
||||||
'rxTime': 1640294262,
|
# 'id': 1693085229,
|
||||||
'rxSnr': 4.75,
|
# 'rxTime': 1640294262,
|
||||||
'hopLimit': 3,
|
# 'rxSnr': 4.75,
|
||||||
'wantAck': True,
|
# 'hopLimit': 3,
|
||||||
}
|
# 'wantAck': True,
|
||||||
}
|
# }
|
||||||
}
|
# }
|
||||||
|
# }
|
||||||
iface = MagicMock(autospec=SerialInterface)
|
#
|
||||||
iface.localNode.getChannelByName.return_value = channel
|
# iface = MagicMock(autospec=SerialInterface)
|
||||||
with patch('meshtastic.serial_interface.SerialInterface', return_value=iface) as mo:
|
# iface.localNode.getChannelByName.return_value = channel
|
||||||
with caplog.at_level(logging.DEBUG):
|
# with patch('meshtastic.serial_interface.SerialInterface', return_value=iface) as mo:
|
||||||
main()
|
# with caplog.at_level(logging.DEBUG):
|
||||||
onGPIOreceive(packet, mo)
|
# main()
|
||||||
out, err = capsys.readouterr()
|
# onGPIOreceive(packet, mo)
|
||||||
assert re.search(r'Connected to radio', out, re.MULTILINE)
|
# out, err = capsys.readouterr()
|
||||||
assert re.search(r'Reading GPIO mask 0x1000 ', out, re.MULTILINE)
|
# assert re.search(r'Connected to radio', out, re.MULTILINE)
|
||||||
assert re.search(r'Received RemoteHardware typ=READ_GPIOS_REPLY, gpio_value=4096', out, re.MULTILINE)
|
# assert re.search(r'Reading GPIO mask 0x1000 ', out, re.MULTILINE)
|
||||||
assert err == ''
|
# assert re.search(r'Received RemoteHardware typ=READ_GPIOS_REPLY, gpio_value=4096', out, re.MULTILINE)
|
||||||
|
# assert err == ''
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unit
|
||||||
@patch('time.sleep')
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
def test_main_gpio_rd_with_no_gpioMask(caplog, capsys):
|
#@patch('time.sleep')
|
||||||
"""Test --gpio_rd with a named gpio channel"""
|
#def test_main_gpio_rd_with_no_gpioMask(caplog, capsys):
|
||||||
sys.argv = ['', '--gpio-rd', '0x1000', '--dest', '!1234']
|
# """Test --gpio_rd with a named gpio channel"""
|
||||||
Globals.getInstance().set_args(sys.argv)
|
# sys.argv = ['', '--gpio-rd', '0x1000', '--dest', '!1234']
|
||||||
|
# Globals.getInstance().set_args(sys.argv)
|
||||||
channel = Channel(index=1, role=1)
|
#
|
||||||
channel.settings.modem_config = 3
|
# channel = Channel(index=1, role=1)
|
||||||
channel.settings.psk = b'\x01'
|
# channel.settings.modem_config = 3
|
||||||
|
# channel.settings.psk = b'\x01'
|
||||||
# Note: Intentionally do not have gpioValue in response as that is the
|
#
|
||||||
# default value
|
# # Note: Intentionally do not have gpioValue in response as that is the
|
||||||
packet = {
|
# # default value
|
||||||
'from': 682968668,
|
# packet = {
|
||||||
'to': 682968612,
|
# 'from': 682968668,
|
||||||
'channel': 1,
|
# 'to': 682968612,
|
||||||
'decoded': {
|
# 'channel': 1,
|
||||||
'portnum': 'REMOTE_HARDWARE_APP',
|
# 'decoded': {
|
||||||
'payload': b'\x08\x05\x18\x80 ',
|
# 'portnum': 'REMOTE_HARDWARE_APP',
|
||||||
'requestId': 1629980484,
|
# 'payload': b'\x08\x05\x18\x80 ',
|
||||||
'remotehw': {
|
# 'requestId': 1629980484,
|
||||||
'typ': 'READ_GPIOS_REPLY',
|
# 'remotehw': {
|
||||||
'raw': 'faked',
|
# 'typ': 'READ_GPIOS_REPLY',
|
||||||
'id': 1693085229,
|
# 'raw': 'faked',
|
||||||
'rxTime': 1640294262,
|
# 'id': 1693085229,
|
||||||
'rxSnr': 4.75,
|
# 'rxTime': 1640294262,
|
||||||
'hopLimit': 3,
|
# 'rxSnr': 4.75,
|
||||||
'wantAck': True,
|
# 'hopLimit': 3,
|
||||||
}
|
# 'wantAck': True,
|
||||||
}
|
# }
|
||||||
}
|
# }
|
||||||
|
# }
|
||||||
iface = MagicMock(autospec=SerialInterface)
|
#
|
||||||
iface.localNode.getChannelByName.return_value = channel
|
# iface = MagicMock(autospec=SerialInterface)
|
||||||
with patch('meshtastic.serial_interface.SerialInterface', return_value=iface) as mo:
|
# iface.localNode.getChannelByName.return_value = channel
|
||||||
with caplog.at_level(logging.DEBUG):
|
# with patch('meshtastic.serial_interface.SerialInterface', return_value=iface) as mo:
|
||||||
main()
|
# with caplog.at_level(logging.DEBUG):
|
||||||
onGPIOreceive(packet, mo)
|
# main()
|
||||||
out, err = capsys.readouterr()
|
# onGPIOreceive(packet, mo)
|
||||||
assert re.search(r'Connected to radio', out, re.MULTILINE)
|
# out, err = capsys.readouterr()
|
||||||
assert re.search(r'Reading GPIO mask 0x1000 ', out, re.MULTILINE)
|
# assert re.search(r'Connected to radio', out, re.MULTILINE)
|
||||||
assert re.search(r'Received RemoteHardware typ=READ_GPIOS_REPLY, gpio_value=0', out, re.MULTILINE)
|
# assert re.search(r'Reading GPIO mask 0x1000 ', out, re.MULTILINE)
|
||||||
assert err == ''
|
# assert re.search(r'Received RemoteHardware typ=READ_GPIOS_REPLY, gpio_value=0', out, re.MULTILINE)
|
||||||
|
# assert err == ''
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unit
|
||||||
def test_main_gpio_watch(caplog, capsys):
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
"""Test --gpio_watch with a named gpio channel"""
|
#def test_main_gpio_watch(caplog, capsys):
|
||||||
sys.argv = ['', '--gpio-watch', '0x1000', '--dest', '!1234']
|
# """Test --gpio_watch with a named gpio channel"""
|
||||||
Globals.getInstance().set_args(sys.argv)
|
# sys.argv = ['', '--gpio-watch', '0x1000', '--dest', '!1234']
|
||||||
|
# Globals.getInstance().set_args(sys.argv)
|
||||||
def my_sleep(amount):
|
#
|
||||||
print(f'{amount}')
|
# def my_sleep(amount):
|
||||||
sys.exit(3)
|
# print(f'{amount}')
|
||||||
|
# sys.exit(3)
|
||||||
channel = Channel(index=1, role=1)
|
#
|
||||||
channel.settings.modem_config = 3
|
# channel = Channel(index=1, role=1)
|
||||||
channel.settings.psk = b'\x01'
|
# channel.settings.modem_config = 3
|
||||||
|
# channel.settings.psk = b'\x01'
|
||||||
packet = {
|
#
|
||||||
|
# packet = {
|
||||||
'from': 682968668,
|
#
|
||||||
'to': 682968612,
|
# 'from': 682968668,
|
||||||
'channel': 1,
|
# 'to': 682968612,
|
||||||
'decoded': {
|
# 'channel': 1,
|
||||||
'portnum': 'REMOTE_HARDWARE_APP',
|
# 'decoded': {
|
||||||
'payload': b'\x08\x05\x18\x80 ',
|
# 'portnum': 'REMOTE_HARDWARE_APP',
|
||||||
'requestId': 1629980484,
|
# 'payload': b'\x08\x05\x18\x80 ',
|
||||||
'remotehw': {
|
# 'requestId': 1629980484,
|
||||||
'typ': 'READ_GPIOS_REPLY',
|
# 'remotehw': {
|
||||||
'gpioValue': '4096',
|
# 'typ': 'READ_GPIOS_REPLY',
|
||||||
'raw': 'faked',
|
# 'gpioValue': '4096',
|
||||||
'id': 1693085229,
|
# 'raw': 'faked',
|
||||||
'rxTime': 1640294262,
|
# 'id': 1693085229,
|
||||||
'rxSnr': 4.75,
|
# 'rxTime': 1640294262,
|
||||||
'hopLimit': 3,
|
# 'rxSnr': 4.75,
|
||||||
'wantAck': True,
|
# 'hopLimit': 3,
|
||||||
}
|
# 'wantAck': True,
|
||||||
}
|
# }
|
||||||
}
|
# }
|
||||||
|
# }
|
||||||
with patch('time.sleep', side_effect=my_sleep):
|
#
|
||||||
with pytest.raises(SystemExit) as pytest_wrapped_e:
|
# with patch('time.sleep', side_effect=my_sleep):
|
||||||
iface = MagicMock(autospec=SerialInterface)
|
# with pytest.raises(SystemExit) as pytest_wrapped_e:
|
||||||
iface.localNode.getChannelByName.return_value = channel
|
# iface = MagicMock(autospec=SerialInterface)
|
||||||
with patch('meshtastic.serial_interface.SerialInterface', return_value=iface) as mo:
|
# iface.localNode.getChannelByName.return_value = channel
|
||||||
with caplog.at_level(logging.DEBUG):
|
# with patch('meshtastic.serial_interface.SerialInterface', return_value=iface) as mo:
|
||||||
main()
|
# with caplog.at_level(logging.DEBUG):
|
||||||
onGPIOreceive(packet, mo)
|
# main()
|
||||||
assert pytest_wrapped_e.type == SystemExit
|
# onGPIOreceive(packet, mo)
|
||||||
assert pytest_wrapped_e.value.code == 3
|
# assert pytest_wrapped_e.type == SystemExit
|
||||||
out, err = capsys.readouterr()
|
# assert pytest_wrapped_e.value.code == 3
|
||||||
assert re.search(r'Connected to radio', out, re.MULTILINE)
|
# out, err = capsys.readouterr()
|
||||||
assert re.search(r'Watching GPIO mask 0x1000 ', out, re.MULTILINE)
|
# assert re.search(r'Connected to radio', out, re.MULTILINE)
|
||||||
assert err == ''
|
# assert re.search(r'Watching GPIO mask 0x1000 ', out, re.MULTILINE)
|
||||||
|
# assert err == ''
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unit
|
||||||
def test_main_gpio_wrb(caplog, capsys):
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
"""Test --gpio_wrb with a named gpio channel"""
|
#def test_main_gpio_wrb(caplog, capsys):
|
||||||
sys.argv = ['', '--gpio-wrb', '4', '1', '--dest', '!1234']
|
# """Test --gpio_wrb with a named gpio channel"""
|
||||||
Globals.getInstance().set_args(sys.argv)
|
# sys.argv = ['', '--gpio-wrb', '4', '1', '--dest', '!1234']
|
||||||
|
# Globals.getInstance().set_args(sys.argv)
|
||||||
|
#
|
||||||
|
# channel = Channel(index=1, role=1)
|
||||||
|
# channel.settings.modem_config = 3
|
||||||
|
# channel.settings.psk = b'\x01'
|
||||||
|
#
|
||||||
|
# packet = {
|
||||||
|
#
|
||||||
|
# 'from': 682968668,
|
||||||
|
# 'to': 682968612,
|
||||||
|
# 'channel': 1,
|
||||||
|
# 'decoded': {
|
||||||
|
# 'portnum': 'REMOTE_HARDWARE_APP',
|
||||||
|
# 'payload': b'\x08\x05\x18\x80 ',
|
||||||
|
# 'requestId': 1629980484,
|
||||||
|
# 'remotehw': {
|
||||||
|
# 'typ': 'READ_GPIOS_REPLY',
|
||||||
|
# 'gpioValue': '16',
|
||||||
|
# 'raw': 'faked',
|
||||||
|
# 'id': 1693085229,
|
||||||
|
# 'rxTime': 1640294262,
|
||||||
|
# 'rxSnr': 4.75,
|
||||||
|
# 'hopLimit': 3,
|
||||||
|
# 'wantAck': True,
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
#
|
||||||
|
# iface = MagicMock(autospec=SerialInterface)
|
||||||
|
# iface.localNode.getChannelByName.return_value = channel
|
||||||
|
# with patch('meshtastic.serial_interface.SerialInterface', return_value=iface) as mo:
|
||||||
|
# with caplog.at_level(logging.DEBUG):
|
||||||
|
# main()
|
||||||
|
# onGPIOreceive(packet, mo)
|
||||||
|
# out, err = capsys.readouterr()
|
||||||
|
# assert re.search(r'Connected to radio', out, re.MULTILINE)
|
||||||
|
# assert re.search(r'Writing GPIO mask 0x10 with value 0x10 to !1234', out, re.MULTILINE)
|
||||||
|
# assert re.search(r'Received RemoteHardware typ=READ_GPIOS_REPLY, gpio_value=16 value=0', out, re.MULTILINE)
|
||||||
|
# assert err == ''
|
||||||
|
|
||||||
channel = Channel(index=1, role=1)
|
|
||||||
channel.settings.modem_config = 3
|
|
||||||
channel.settings.psk = b'\x01'
|
|
||||||
|
|
||||||
packet = {
|
|
||||||
|
|
||||||
'from': 682968668,
|
|
||||||
'to': 682968612,
|
|
||||||
'channel': 1,
|
|
||||||
'decoded': {
|
|
||||||
'portnum': 'REMOTE_HARDWARE_APP',
|
|
||||||
'payload': b'\x08\x05\x18\x80 ',
|
|
||||||
'requestId': 1629980484,
|
|
||||||
'remotehw': {
|
|
||||||
'typ': 'READ_GPIOS_REPLY',
|
|
||||||
'gpioValue': '16',
|
|
||||||
'raw': 'faked',
|
|
||||||
'id': 1693085229,
|
|
||||||
'rxTime': 1640294262,
|
|
||||||
'rxSnr': 4.75,
|
|
||||||
'hopLimit': 3,
|
|
||||||
'wantAck': True,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
iface = MagicMock(autospec=SerialInterface)
|
|
||||||
iface.localNode.getChannelByName.return_value = channel
|
|
||||||
with patch('meshtastic.serial_interface.SerialInterface', return_value=iface) as mo:
|
|
||||||
with caplog.at_level(logging.DEBUG):
|
|
||||||
main()
|
|
||||||
onGPIOreceive(packet, mo)
|
|
||||||
out, err = capsys.readouterr()
|
|
||||||
assert re.search(r'Connected to radio', out, re.MULTILINE)
|
|
||||||
assert re.search(r'Writing GPIO mask 0x10 with value 0x10 to !1234', out, re.MULTILINE)
|
|
||||||
assert re.search(r'Received RemoteHardware typ=READ_GPIOS_REPLY, gpio_value=16 value=0', out, re.MULTILINE)
|
|
||||||
assert err == ''
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
@pytest.mark.unit
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
@pytest.mark.usefixtures("reset_globals")
|
||||||
@@ -2199,93 +2136,98 @@ def test_main_setPref_valid_field_int_as_string(capsys):
|
|||||||
assert err == ''
|
assert err == ''
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unit
|
||||||
def test_main_setPref_valid_field_invalid_enum(capsys, caplog):
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
"""Test setPref() with a valid field but invalid enum value"""
|
#def test_main_setPref_valid_field_invalid_enum(capsys, caplog):
|
||||||
|
# """Test setPref() with a valid field but invalid enum value"""
|
||||||
radioConfig = RadioConfig()
|
#
|
||||||
prefs = radioConfig.preferences
|
# radioConfig = RadioConfig()
|
||||||
|
# prefs = radioConfig.preferences
|
||||||
with caplog.at_level(logging.DEBUG):
|
#
|
||||||
setPref(prefs, 'charge_current', 'foo')
|
# with caplog.at_level(logging.DEBUG):
|
||||||
out, err = capsys.readouterr()
|
# setPref(prefs, 'charge_current', 'foo')
|
||||||
assert re.search(r'charge_current does not have an enum called foo', out, re.MULTILINE)
|
# out, err = capsys.readouterr()
|
||||||
assert re.search(r'Choices in sorted order are', out, re.MULTILINE)
|
# assert re.search(r'charge_current does not have an enum called foo', out, re.MULTILINE)
|
||||||
assert re.search(r'MA100', out, re.MULTILINE)
|
# assert re.search(r'Choices in sorted order are', out, re.MULTILINE)
|
||||||
assert re.search(r'MA280', out, re.MULTILINE)
|
# assert re.search(r'MA100', out, re.MULTILINE)
|
||||||
assert err == ''
|
# assert re.search(r'MA280', out, re.MULTILINE)
|
||||||
|
# assert err == ''
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unit
|
||||||
def test_main_setPref_valid_field_invalid_enum_where_enums_are_camel_cased_values(capsys, caplog):
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
"""Test setPref() with a valid field but invalid enum value"""
|
#def test_main_setPref_valid_field_invalid_enum_where_enums_are_camel_cased_values(capsys, caplog):
|
||||||
|
# """Test setPref() with a valid field but invalid enum value"""
|
||||||
radioConfig = RadioConfig()
|
#
|
||||||
prefs = radioConfig.preferences
|
# radioConfig = RadioConfig()
|
||||||
|
# prefs = radioConfig.preferences
|
||||||
with caplog.at_level(logging.DEBUG):
|
#
|
||||||
setPref(prefs, 'region', 'foo')
|
# with caplog.at_level(logging.DEBUG):
|
||||||
out, err = capsys.readouterr()
|
# setPref(prefs, 'region', 'foo')
|
||||||
assert re.search(r'region does not have an enum called foo', out, re.MULTILINE)
|
# out, err = capsys.readouterr()
|
||||||
assert re.search(r'Choices in sorted order are', out, re.MULTILINE)
|
# assert re.search(r'region does not have an enum called foo', out, re.MULTILINE)
|
||||||
assert re.search(r'ANZ', out, re.MULTILINE)
|
# assert re.search(r'Choices in sorted order are', out, re.MULTILINE)
|
||||||
assert re.search(r'CN', out, re.MULTILINE)
|
# assert re.search(r'ANZ', out, re.MULTILINE)
|
||||||
assert err == ''
|
# assert re.search(r'CN', out, re.MULTILINE)
|
||||||
|
# assert err == ''
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unit
|
||||||
def test_main_setPref_valid_field_invalid_enum_camel(capsys, caplog):
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
"""Test setPref() with a valid field but invalid enum value"""
|
#def test_main_setPref_valid_field_invalid_enum_camel(capsys, caplog):
|
||||||
Globals.getInstance().set_camel_case()
|
# """Test setPref() with a valid field but invalid enum value"""
|
||||||
|
# Globals.getInstance().set_camel_case()
|
||||||
radioConfig = RadioConfig()
|
#
|
||||||
prefs = radioConfig.preferences
|
# radioConfig = RadioConfig()
|
||||||
|
# prefs = radioConfig.preferences
|
||||||
with caplog.at_level(logging.DEBUG):
|
#
|
||||||
setPref(prefs, 'charge_current', 'foo')
|
# with caplog.at_level(logging.DEBUG):
|
||||||
out, err = capsys.readouterr()
|
# setPref(prefs, 'charge_current', 'foo')
|
||||||
assert re.search(r'chargeCurrent does not have an enum called foo', out, re.MULTILINE)
|
# out, err = capsys.readouterr()
|
||||||
assert err == ''
|
# assert re.search(r'chargeCurrent does not have an enum called foo', out, re.MULTILINE)
|
||||||
|
# assert err == ''
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unit
|
||||||
def test_main_setPref_valid_field_valid_enum(capsys, caplog):
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
"""Test setPref() with a valid field and valid enum value"""
|
#def test_main_setPref_valid_field_valid_enum(capsys, caplog):
|
||||||
|
# """Test setPref() with a valid field and valid enum value"""
|
||||||
# charge_current
|
#
|
||||||
# some valid values: MA100 MA1000 MA1080
|
# # charge_current
|
||||||
|
# # some valid values: MA100 MA1000 MA1080
|
||||||
radioConfig = RadioConfig()
|
#
|
||||||
prefs = radioConfig.preferences
|
# radioConfig = RadioConfig()
|
||||||
|
# prefs = radioConfig.preferences
|
||||||
with caplog.at_level(logging.DEBUG):
|
#
|
||||||
setPref(prefs, 'charge_current', 'MA100')
|
# with caplog.at_level(logging.DEBUG):
|
||||||
out, err = capsys.readouterr()
|
# setPref(prefs, 'charge_current', 'MA100')
|
||||||
assert re.search(r'Set charge_current to MA100', out, re.MULTILINE)
|
# out, err = capsys.readouterr()
|
||||||
assert err == ''
|
# assert re.search(r'Set charge_current to MA100', out, re.MULTILINE)
|
||||||
|
# assert err == ''
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unit
|
||||||
def test_main_setPref_valid_field_valid_enum_camel(capsys, caplog):
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
"""Test setPref() with a valid field and valid enum value"""
|
#def test_main_setPref_valid_field_valid_enum_camel(capsys, caplog):
|
||||||
Globals.getInstance().set_camel_case()
|
# """Test setPref() with a valid field and valid enum value"""
|
||||||
|
# Globals.getInstance().set_camel_case()
|
||||||
# charge_current
|
#
|
||||||
# some valid values: MA100 MA1000 MA1080
|
# # charge_current
|
||||||
|
# # some valid values: MA100 MA1000 MA1080
|
||||||
radioConfig = RadioConfig()
|
#
|
||||||
prefs = radioConfig.preferences
|
# radioConfig = RadioConfig()
|
||||||
|
# prefs = radioConfig.preferences
|
||||||
with caplog.at_level(logging.DEBUG):
|
#
|
||||||
setPref(prefs, 'charge_current', 'MA100')
|
# with caplog.at_level(logging.DEBUG):
|
||||||
out, err = capsys.readouterr()
|
# setPref(prefs, 'charge_current', 'MA100')
|
||||||
assert re.search(r'Set chargeCurrent to MA100', out, re.MULTILINE)
|
# out, err = capsys.readouterr()
|
||||||
assert err == ''
|
# assert re.search(r'Set chargeCurrent to MA100', out, re.MULTILINE)
|
||||||
|
# assert err == ''
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
@pytest.mark.unit
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ from ..mesh_interface import MeshInterface
|
|||||||
from ..node import Node
|
from ..node import Node
|
||||||
from .. import mesh_pb2
|
from .. import mesh_pb2
|
||||||
from ..__init__ import LOCAL_ADDR, BROADCAST_ADDR
|
from ..__init__ import LOCAL_ADDR, BROADCAST_ADDR
|
||||||
from ..radioconfig_pb2 import RadioConfig
|
# TODO
|
||||||
|
#from ..config import Config
|
||||||
from ..util import Timeout
|
from ..util import Timeout
|
||||||
|
|
||||||
|
|
||||||
@@ -177,32 +178,34 @@ def test_sendPosition(caplog):
|
|||||||
assert re.search(r'p.time:', caplog.text, re.MULTILINE)
|
assert re.search(r'p.time:', caplog.text, re.MULTILINE)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unit
|
||||||
def test_close_with_heartbeatTimer(caplog):
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
"""Test close() with heartbeatTimer"""
|
#def test_close_with_heartbeatTimer(caplog):
|
||||||
iface = MeshInterface(noProto=True)
|
# """Test close() with heartbeatTimer"""
|
||||||
anode = Node('foo', 'bar')
|
# iface = MeshInterface(noProto=True)
|
||||||
radioConfig = RadioConfig()
|
# anode = Node('foo', 'bar')
|
||||||
radioConfig.preferences.phone_timeout_secs = 10
|
# aconfig = Config()
|
||||||
anode.radioConfig = radioConfig
|
# aonfig.preferences.phone_timeout_secs = 10
|
||||||
iface.localNode = anode
|
# anode.config = aconfig
|
||||||
assert iface.heartbeatTimer is None
|
# iface.localNode = anode
|
||||||
with caplog.at_level(logging.DEBUG):
|
# assert iface.heartbeatTimer is None
|
||||||
iface._startHeartbeat()
|
# with caplog.at_level(logging.DEBUG):
|
||||||
assert iface.heartbeatTimer is not None
|
# iface._startHeartbeat()
|
||||||
iface.close()
|
# assert iface.heartbeatTimer is not None
|
||||||
|
# iface.close()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unit
|
||||||
def test_handleFromRadio_empty_payload(caplog):
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
"""Test _handleFromRadio"""
|
#def test_handleFromRadio_empty_payload(caplog):
|
||||||
iface = MeshInterface(noProto=True)
|
# """Test _handleFromRadio"""
|
||||||
with caplog.at_level(logging.DEBUG):
|
# iface = MeshInterface(noProto=True)
|
||||||
iface._handleFromRadio(b'')
|
# with caplog.at_level(logging.DEBUG):
|
||||||
iface.close()
|
# iface._handleFromRadio(b'')
|
||||||
assert re.search(r'Unexpected FromRadio payload', caplog.text, re.MULTILINE)
|
# iface.close()
|
||||||
|
# assert re.search(r'Unexpected FromRadio payload', caplog.text, re.MULTILINE)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
@pytest.mark.unit
|
||||||
@@ -604,11 +607,12 @@ def test_getOrCreateByNum(iface_with_nodes):
|
|||||||
assert tmp['num'] == 2475227164
|
assert tmp['num'] == 2475227164
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
# TODO
|
||||||
def test_enter():
|
#@pytest.mark.unit
|
||||||
"""Test __enter__()"""
|
#def test_enter():
|
||||||
iface = MeshInterface(noProto=True)
|
# """Test __enter__()"""
|
||||||
assert iface == iface.__enter__()
|
# iface = MeshInterface(noProto=True)
|
||||||
|
# assert iface == iface.__enter__()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.unit
|
@pytest.mark.unit
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -170,20 +170,6 @@ def test_smoke1_port():
|
|||||||
assert return_value == 0
|
assert return_value == 0
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.smoke1
|
|
||||||
def test_smoke1_set_is_router_true():
|
|
||||||
"""Test --set is_router true"""
|
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --set is_router true')
|
|
||||||
assert re.match(r'Connected to radio', out)
|
|
||||||
assert re.search(r'^Set is_router to true', out, re.MULTILINE)
|
|
||||||
assert return_value == 0
|
|
||||||
# pause for the radio
|
|
||||||
time.sleep(PAUSE_AFTER_COMMAND)
|
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --get is_router')
|
|
||||||
assert re.search(r'^is_router: True', out, re.MULTILINE)
|
|
||||||
assert return_value == 0
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.smoke1
|
@pytest.mark.smoke1
|
||||||
def test_smoke1_set_location_info():
|
def test_smoke1_set_location_info():
|
||||||
"""Test --setlat, --setlon and --setalt """
|
"""Test --setlat, --setlon and --setalt """
|
||||||
@@ -202,20 +188,6 @@ def test_smoke1_set_location_info():
|
|||||||
assert return_value == 0
|
assert return_value == 0
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.smoke1
|
|
||||||
def test_smoke1_set_is_router_false():
|
|
||||||
"""Test --set is_router false"""
|
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --set is_router false')
|
|
||||||
assert re.match(r'Connected to radio', out)
|
|
||||||
assert re.search(r'^Set is_router to false', out, re.MULTILINE)
|
|
||||||
assert return_value == 0
|
|
||||||
# pause for the radio
|
|
||||||
time.sleep(PAUSE_AFTER_COMMAND)
|
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --get is_router')
|
|
||||||
assert re.search(r'^is_router: False', out, re.MULTILINE)
|
|
||||||
assert return_value == 0
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.smoke1
|
@pytest.mark.smoke1
|
||||||
def test_smoke1_set_owner():
|
def test_smoke1_set_owner():
|
||||||
"""Test --set-owner name"""
|
"""Test --set-owner name"""
|
||||||
@@ -243,38 +215,42 @@ def test_smoke1_set_owner():
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.smoke1
|
@pytest.mark.smoke1
|
||||||
def test_smoke1_set_team():
|
def test_smoke1_ch_set_modem_config():
|
||||||
"""Test --set-team """
|
"""Test --ch-set modem_config"""
|
||||||
# unset the team
|
return_value, out = subprocess.getstatusoutput('meshtastic --ch-set modem_config MidFast')
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --set-team CLEAR')
|
assert re.search(r'Warning: Need to specify', out, re.MULTILINE)
|
||||||
assert re.match(r'Connected to radio', out)
|
assert return_value == 1
|
||||||
assert re.search(r'^Setting team to CLEAR', out, re.MULTILINE)
|
# pause for the radio
|
||||||
|
time.sleep(PAUSE_AFTER_COMMAND)
|
||||||
|
return_value, out = subprocess.getstatusoutput('meshtastic --info')
|
||||||
|
assert not re.search(r'MidFast', out, re.MULTILINE)
|
||||||
assert return_value == 0
|
assert return_value == 0
|
||||||
# pause for the radio
|
# pause for the radio
|
||||||
time.sleep(PAUSE_AFTER_REBOOT)
|
time.sleep(PAUSE_AFTER_COMMAND)
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --set-team CYAN')
|
return_value, out = subprocess.getstatusoutput('meshtastic --ch-set modem_config MidFast --ch-index 0')
|
||||||
assert re.search(r'Setting team to CYAN', out, re.MULTILINE)
|
assert re.match(r'Connected to radio', out)
|
||||||
|
assert re.search(r'^Set modem_config to MidFast', out, re.MULTILINE)
|
||||||
assert return_value == 0
|
assert return_value == 0
|
||||||
# pause for the radio
|
# pause for the radio
|
||||||
time.sleep(PAUSE_AFTER_REBOOT)
|
time.sleep(PAUSE_AFTER_REBOOT)
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --info')
|
return_value, out = subprocess.getstatusoutput('meshtastic --info')
|
||||||
assert re.search(r'CYAN', out, re.MULTILINE)
|
assert re.search(r'MidFast', out, re.MULTILINE)
|
||||||
assert return_value == 0
|
assert return_value == 0
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.smoke1
|
@pytest.mark.smoke1
|
||||||
def test_smoke1_ch_values():
|
def test_smoke1_ch_values():
|
||||||
"""Test --ch-longslow, --ch-longfast, --ch-mediumslow, --ch-mediumsfast,
|
"""Test --ch-vlongslow --ch-longslow, --ch-longfast, --ch-mediumslow, --ch-mediumsfast,
|
||||||
--ch-shortslow, and --ch-shortfast arguments
|
--ch-shortslow, and --ch-shortfast arguments
|
||||||
"""
|
"""
|
||||||
exp = {
|
exp = {
|
||||||
'--ch-longslow': 'Bw125Cr48Sf4096',
|
'--ch-vlongslow': '{ "psk": "AQ==" }',
|
||||||
'--ch-longfast': 'Bw31_25Cr48Sf512',
|
'--ch-longslow': 'LongSlow',
|
||||||
'--ch-mediumslow': 'Bw250Cr46Sf2048',
|
'--ch-longfast': 'LongFast',
|
||||||
'--ch-mediumfast': 'Bw250Cr47Sf1024',
|
'--ch-midslow': 'MidSlow',
|
||||||
# for some reason, this value does not show any modemConfig
|
'--ch-midfast': 'MidFast',
|
||||||
'--ch-shortslow': '{ "psk',
|
'--ch-shortslow': 'ShortSlow',
|
||||||
'--ch-shortfast': 'Bw500Cr45Sf128'
|
'--ch-shortfast': 'ShortFast'
|
||||||
}
|
}
|
||||||
|
|
||||||
for key, val in exp.items():
|
for key, val in exp.items():
|
||||||
@@ -578,30 +554,6 @@ def test_smoke1_ensure_ch_del_third_of_three_channels():
|
|||||||
time.sleep(PAUSE_AFTER_COMMAND)
|
time.sleep(PAUSE_AFTER_COMMAND)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.smoke1
|
|
||||||
def test_smoke1_ch_set_modem_config():
|
|
||||||
"""Test --ch-set modem_config"""
|
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --ch-set modem_config Bw31_25Cr48Sf512')
|
|
||||||
assert re.search(r'Warning: Need to specify', out, re.MULTILINE)
|
|
||||||
assert return_value == 1
|
|
||||||
# pause for the radio
|
|
||||||
time.sleep(PAUSE_AFTER_COMMAND)
|
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --info')
|
|
||||||
assert not re.search(r'Bw31_25Cr48Sf512', out, re.MULTILINE)
|
|
||||||
assert return_value == 0
|
|
||||||
# pause for the radio
|
|
||||||
time.sleep(PAUSE_AFTER_COMMAND)
|
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --ch-set modem_config Bw31_25Cr48Sf512 --ch-index 0')
|
|
||||||
assert re.match(r'Connected to radio', out)
|
|
||||||
assert re.search(r'^Set modem_config to Bw31_25Cr48Sf512', out, re.MULTILINE)
|
|
||||||
assert return_value == 0
|
|
||||||
# pause for the radio
|
|
||||||
time.sleep(PAUSE_AFTER_COMMAND)
|
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --info')
|
|
||||||
assert re.search(r'Bw31_25Cr48Sf512', out, re.MULTILINE)
|
|
||||||
assert return_value == 0
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.smoke1
|
@pytest.mark.smoke1
|
||||||
def test_smoke1_seturl_default():
|
def test_smoke1_seturl_default():
|
||||||
"""Test --seturl with default value"""
|
"""Test --seturl with default value"""
|
||||||
@@ -650,7 +602,6 @@ def test_smoke1_configure():
|
|||||||
assert re.search('^Setting device position', out, re.MULTILINE)
|
assert re.search('^Setting device position', out, re.MULTILINE)
|
||||||
assert re.search('^Set region to 1', out, re.MULTILINE)
|
assert re.search('^Set region to 1', out, re.MULTILINE)
|
||||||
assert re.search('^Set is_always_powered to true', out, re.MULTILINE)
|
assert re.search('^Set is_always_powered to true', out, re.MULTILINE)
|
||||||
assert re.search('^Set send_owner_interval to 2', out, re.MULTILINE)
|
|
||||||
assert re.search('^Set screen_on_secs to 31536000', out, re.MULTILINE)
|
assert re.search('^Set screen_on_secs to 31536000', out, re.MULTILINE)
|
||||||
assert re.search('^Set wait_bluetooth_secs to 31536000', out, re.MULTILINE)
|
assert re.search('^Set wait_bluetooth_secs to 31536000', out, re.MULTILINE)
|
||||||
assert re.search('^Writing modified preferences to device', out, re.MULTILINE)
|
assert re.search('^Writing modified preferences to device', out, re.MULTILINE)
|
||||||
|
|||||||
@@ -175,20 +175,6 @@ def test_smokevirt_port():
|
|||||||
assert len(ports) == 0
|
assert len(ports) == 0
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.smokevirt
|
|
||||||
def test_smokevirt_set_is_router_true():
|
|
||||||
"""Test --set is_router true"""
|
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --host localhost --set is_router true')
|
|
||||||
assert re.match(r'Connected to radio', out)
|
|
||||||
assert re.search(r'^Set is_router to true', out, re.MULTILINE)
|
|
||||||
assert return_value == 0
|
|
||||||
# pause for the radio
|
|
||||||
time.sleep(PAUSE_AFTER_COMMAND)
|
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --host localhost --get is_router')
|
|
||||||
assert re.search(r'^is_router: True', out, re.MULTILINE)
|
|
||||||
assert return_value == 0
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.smokevirt
|
@pytest.mark.smokevirt
|
||||||
def test_smokevirt_set_location_info():
|
def test_smokevirt_set_location_info():
|
||||||
"""Test --setlat, --setlon and --setalt """
|
"""Test --setlat, --setlon and --setalt """
|
||||||
@@ -207,20 +193,6 @@ def test_smokevirt_set_location_info():
|
|||||||
assert return_value == 0
|
assert return_value == 0
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.smokevirt
|
|
||||||
def test_smokevirt_set_is_router_false():
|
|
||||||
"""Test --set is_router false"""
|
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --host localhost --set is_router false')
|
|
||||||
assert re.match(r'Connected to radio', out)
|
|
||||||
assert re.search(r'^Set is_router to false', out, re.MULTILINE)
|
|
||||||
assert return_value == 0
|
|
||||||
# pause for the radio
|
|
||||||
time.sleep(PAUSE_AFTER_COMMAND)
|
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --host localhost --get is_router')
|
|
||||||
assert re.search(r'^is_router: False', out, re.MULTILINE)
|
|
||||||
assert return_value == 0
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.smokevirt
|
@pytest.mark.smokevirt
|
||||||
def test_smokevirt_set_owner():
|
def test_smokevirt_set_owner():
|
||||||
"""Test --set-owner name"""
|
"""Test --set-owner name"""
|
||||||
@@ -247,38 +219,18 @@ def test_smokevirt_set_owner():
|
|||||||
assert return_value == 0
|
assert return_value == 0
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.smokevirt
|
|
||||||
def test_smokevirt_set_team():
|
|
||||||
"""Test --set-team """
|
|
||||||
# unset the team
|
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --host localhost --set-team CLEAR')
|
|
||||||
assert re.match(r'Connected to radio', out)
|
|
||||||
assert re.search(r'^Setting team to CLEAR', out, re.MULTILINE)
|
|
||||||
assert return_value == 0
|
|
||||||
# pause for the radio
|
|
||||||
time.sleep(PAUSE_AFTER_REBOOT)
|
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --host localhost --set-team CYAN')
|
|
||||||
assert re.search(r'Setting team to CYAN', out, re.MULTILINE)
|
|
||||||
assert return_value == 0
|
|
||||||
# pause for the radio
|
|
||||||
time.sleep(PAUSE_AFTER_REBOOT)
|
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --host localhost --info')
|
|
||||||
assert re.search(r'CYAN', out, re.MULTILINE)
|
|
||||||
assert return_value == 0
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.smokevirt
|
@pytest.mark.smokevirt
|
||||||
def test_smokevirt_ch_values():
|
def test_smokevirt_ch_values():
|
||||||
"""Test --ch-longslow, --ch-longfast, --ch-mediumslow, --ch-mediumsfast,
|
"""Test --ch-longslow, --ch-longfast, --ch-mediumslow, --ch-mediumsfast,
|
||||||
--ch-shortslow, and --ch-shortfast arguments
|
--ch-shortslow, and --ch-shortfast arguments
|
||||||
"""
|
"""
|
||||||
exp = {
|
exp = {
|
||||||
'--ch-longslow': 'Bw125Cr48Sf4096',
|
'--ch-longslow': 'LongSlow',
|
||||||
'--ch-longfast': 'Bw31_25Cr48Sf512',
|
'--ch-longfast': 'LongFast',
|
||||||
'--ch-mediumslow': 'Bw250Cr46Sf2048',
|
'--ch-midslow': 'MidSlow',
|
||||||
'--ch-mediumfast': 'Bw250Cr47Sf1024',
|
'--ch-midfast': 'MidFast',
|
||||||
'--ch-shortslow': '{ "psk',
|
'--ch-shortslow': 'ShortSlow',
|
||||||
'--ch-shortfast': 'Bw500Cr45Sf128'
|
'--ch-shortfast': 'ShortFast'
|
||||||
}
|
}
|
||||||
|
|
||||||
for key, val in exp.items():
|
for key, val in exp.items():
|
||||||
@@ -611,14 +563,14 @@ def test_smokevirt_ch_set_modem_config():
|
|||||||
assert return_value == 0
|
assert return_value == 0
|
||||||
# pause for the radio
|
# pause for the radio
|
||||||
time.sleep(PAUSE_AFTER_COMMAND)
|
time.sleep(PAUSE_AFTER_COMMAND)
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --host localhost --ch-set modem_config Bw31_25Cr48Sf512 --ch-index 0')
|
return_value, out = subprocess.getstatusoutput('meshtastic --host localhost --ch-set modem_config MidSlow --ch-index 0')
|
||||||
assert re.match(r'Connected to radio', out)
|
assert re.match(r'Connected to radio', out)
|
||||||
assert re.search(r'^Set modem_config to Bw31_25Cr48Sf512', out, re.MULTILINE)
|
assert re.search(r'^Set modem_config to MidSlow', out, re.MULTILINE)
|
||||||
assert return_value == 0
|
assert return_value == 0
|
||||||
# pause for the radio
|
# pause for the radio
|
||||||
time.sleep(PAUSE_AFTER_COMMAND)
|
time.sleep(PAUSE_AFTER_COMMAND)
|
||||||
return_value, out = subprocess.getstatusoutput('meshtastic --host localhost --info')
|
return_value, out = subprocess.getstatusoutput('meshtastic --host localhost --info')
|
||||||
assert re.search(r'Bw31_25Cr48Sf512', out, re.MULTILINE)
|
assert re.search(r'MidSlow', out, re.MULTILINE)
|
||||||
assert return_value == 0
|
assert return_value == 0
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
"""Meshtastic unit tests for stream_interface.py"""
|
"""Meshtastic unit tests for stream_interface.py"""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import re
|
#import re
|
||||||
|
|
||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock
|
||||||
import pytest
|
import pytest
|
||||||
@@ -35,48 +35,49 @@ def test_StreamInterface_with_noProto(caplog):
|
|||||||
assert data == test_data
|
assert data == test_data
|
||||||
|
|
||||||
|
|
||||||
## Note: This takes a bit, so moving from unit to slow
|
# TODO
|
||||||
## Tip: If you want to see the print output, run with '-s' flag:
|
### Note: This takes a bit, so moving from unit to slow
|
||||||
## pytest -s meshtastic/tests/test_stream_interface.py::test_sendToRadioImpl
|
### Tip: If you want to see the print output, run with '-s' flag:
|
||||||
@pytest.mark.unitslow
|
### pytest -s meshtastic/tests/test_stream_interface.py::test_sendToRadioImpl
|
||||||
@pytest.mark.usefixtures("reset_globals")
|
#@pytest.mark.unitslow
|
||||||
def test_sendToRadioImpl(caplog):
|
#@pytest.mark.usefixtures("reset_globals")
|
||||||
"""Test _sendToRadioImpl()"""
|
#def test_sendToRadioImpl(caplog):
|
||||||
|
# """Test _sendToRadioImpl()"""
|
||||||
# def add_header(b):
|
#
|
||||||
# """Add header stuffs for radio"""
|
## def add_header(b):
|
||||||
# bufLen = len(b)
|
## """Add header stuffs for radio"""
|
||||||
# header = bytes([START1, START2, (bufLen >> 8) & 0xff, bufLen & 0xff])
|
## bufLen = len(b)
|
||||||
# return header + b
|
## header = bytes([START1, START2, (bufLen >> 8) & 0xff, bufLen & 0xff])
|
||||||
|
## return header + b
|
||||||
# captured raw bytes of a Heltec2.1 radio with 2 channels (primary and a secondary channel named "gpio")
|
#
|
||||||
raw_1_my_info = b'\x1a,\x08\xdc\x8c\xd5\xc5\x02\x18\r2\x0e1.2.49.5354c49P\x15]\xe1%\x17Eh\xe0\xa7\x12p\xe8\x9d\x01x\x08\x90\x01\x01'
|
# # captured raw bytes of a Heltec2.1 radio with 2 channels (primary and a secondary channel named "gpio")
|
||||||
raw_2_node_info = b'"9\x08\xdc\x8c\xd5\xc5\x02\x12(\n\t!28b5465c\x12\x0cUnknown 465c\x1a\x03?5C"\x06$o(\xb5F\\0\n\x1a\x02 1%M<\xc6a'
|
# raw_1_my_info = b'\x1a,\x08\xdc\x8c\xd5\xc5\x02\x18\r2\x0e1.2.49.5354c49P\x15]\xe1%\x17Eh\xe0\xa7\x12p\xe8\x9d\x01x\x08\x90\x01\x01'
|
||||||
# pylint: disable=C0301
|
# raw_2_node_info = b'"9\x08\xdc\x8c\xd5\xc5\x02\x12(\n\t!28b5465c\x12\x0cUnknown 465c\x1a\x03?5C"\x06$o(\xb5F\\0\n\x1a\x02 1%M<\xc6a'
|
||||||
raw_3_node_info = b'"C\x08\xa4\x8c\xd5\xc5\x02\x12(\n\t!28b54624\x12\x0cUnknown 4624\x1a\x03?24"\x06$o(\xb5F$0\n\x1a\x07 5MH<\xc6a%G<\xc6a=\x00\x00\xc0@'
|
# # pylint: disable=C0301
|
||||||
raw_4_complete = b'@\xcf\xe5\xd1\x8c\x0e'
|
# raw_3_node_info = b'"C\x08\xa4\x8c\xd5\xc5\x02\x12(\n\t!28b54624\x12\x0cUnknown 4624\x1a\x03?24"\x06$o(\xb5F$0\n\x1a\x07 5MH<\xc6a%G<\xc6a=\x00\x00\xc0@'
|
||||||
# pylint: disable=C0301
|
# raw_4_complete = b'@\xcf\xe5\xd1\x8c\x0e'
|
||||||
raw_5_prefs = b'Z6\r\\F\xb5(\x15\\F\xb5("\x1c\x08\x06\x12\x13*\x11\n\x0f0\x84\x07P\xac\x02\x88\x01\x01\xb0\t#\xb8\t\x015]$\xddk5\xd5\x7f!b=M<\xc6aP\x03`F'
|
# # pylint: disable=C0301
|
||||||
# pylint: disable=C0301
|
# raw_5_prefs = b'Z6\r\\F\xb5(\x15\\F\xb5("\x1c\x08\x06\x12\x13*\x11\n\x0f0\x84\x07P\xac\x02\x88\x01\x01\xb0\t#\xb8\t\x015]$\xddk5\xd5\x7f!b=M<\xc6aP\x03`F'
|
||||||
raw_6_channel0 = b'Z.\r\\F\xb5(\x15\\F\xb5("\x14\x08\x06\x12\x0b:\t\x12\x05\x18\x01"\x01\x01\x18\x015^$\xddk5\xd6\x7f!b=M<\xc6aP\x03`F'
|
# # pylint: disable=C0301
|
||||||
# pylint: disable=C0301
|
# raw_6_channel0 = b'Z.\r\\F\xb5(\x15\\F\xb5("\x14\x08\x06\x12\x0b:\t\x12\x05\x18\x01"\x01\x01\x18\x015^$\xddk5\xd6\x7f!b=M<\xc6aP\x03`F'
|
||||||
raw_7_channel1 = b'ZS\r\\F\xb5(\x15\\F\xb5("9\x08\x06\x120:.\x08\x01\x12(" \xb4&\xb3\xc7\x06\xd8\xe39%\xba\xa5\xee\x8eH\x06\xf6\xf4H\xe8\xd5\xc1[ao\xb5Y\\\xb4"\xafmi*\x04gpio\x18\x025_$\xddk5\xd7\x7f!b=M<\xc6aP\x03`F'
|
# # pylint: disable=C0301
|
||||||
raw_8_channel2 = b'Z)\r\\F\xb5(\x15\\F\xb5("\x0f\x08\x06\x12\x06:\x04\x08\x02\x12\x005`$\xddk5\xd8\x7f!b=M<\xc6aP\x03`F'
|
# raw_7_channel1 = b'ZS\r\\F\xb5(\x15\\F\xb5("9\x08\x06\x120:.\x08\x01\x12(" \xb4&\xb3\xc7\x06\xd8\xe39%\xba\xa5\xee\x8eH\x06\xf6\xf4H\xe8\xd5\xc1[ao\xb5Y\\\xb4"\xafmi*\x04gpio\x18\x025_$\xddk5\xd7\x7f!b=M<\xc6aP\x03`F'
|
||||||
raw_blank = b''
|
# raw_8_channel2 = b'Z)\r\\F\xb5(\x15\\F\xb5("\x0f\x08\x06\x12\x06:\x04\x08\x02\x12\x005`$\xddk5\xd8\x7f!b=M<\xc6aP\x03`F'
|
||||||
|
# raw_blank = b''
|
||||||
test_data = b'hello'
|
#
|
||||||
stream = MagicMock()
|
# test_data = b'hello'
|
||||||
#stream.read.return_value = add_header(test_data)
|
# stream = MagicMock()
|
||||||
stream.read.side_effect = [ raw_1_my_info, raw_2_node_info, raw_3_node_info, raw_4_complete,
|
# #stream.read.return_value = add_header(test_data)
|
||||||
raw_5_prefs, raw_6_channel0, raw_7_channel1, raw_8_channel2,
|
# stream.read.side_effect = [ raw_1_my_info, raw_2_node_info, raw_3_node_info, raw_4_complete,
|
||||||
raw_blank, raw_blank]
|
# raw_5_prefs, raw_6_channel0, raw_7_channel1, raw_8_channel2,
|
||||||
toRadio = MagicMock()
|
# raw_blank, raw_blank]
|
||||||
toRadio.SerializeToString.return_value = test_data
|
# toRadio = MagicMock()
|
||||||
with caplog.at_level(logging.DEBUG):
|
# toRadio.SerializeToString.return_value = test_data
|
||||||
iface = StreamInterface(noProto=True, connectNow=False)
|
# with caplog.at_level(logging.DEBUG):
|
||||||
iface.stream = stream
|
# iface = StreamInterface(noProto=True, connectNow=False)
|
||||||
iface.connect()
|
# iface.stream = stream
|
||||||
iface._sendToRadioImpl(toRadio)
|
# iface.connect()
|
||||||
assert re.search(r'Sending: ', caplog.text, re.MULTILINE)
|
# iface._sendToRadioImpl(toRadio)
|
||||||
assert re.search(r'reading character', caplog.text, re.MULTILINE)
|
# assert re.search(r'Sending: ', caplog.text, re.MULTILINE)
|
||||||
assert re.search(r'In reader loop', caplog.text, re.MULTILINE)
|
# assert re.search(r'reading character', caplog.text, re.MULTILINE)
|
||||||
|
# assert re.search(r'In reader loop', caplog.text, re.MULTILINE)
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ def camel_to_snake(a_string):
|
|||||||
|
|
||||||
|
|
||||||
def detect_supported_devices():
|
def detect_supported_devices():
|
||||||
"""detect supported devices"""
|
"""detect supported devices based on vendor id"""
|
||||||
system = platform.system()
|
system = platform.system()
|
||||||
#print(f'system:{system}')
|
#print(f'system:{system}')
|
||||||
|
|
||||||
@@ -285,19 +285,8 @@ def detect_supported_devices():
|
|||||||
if re.search(search, lsusb_output, re.MULTILINE):
|
if re.search(search, lsusb_output, re.MULTILINE):
|
||||||
#print(f'Found vendor id that matches')
|
#print(f'Found vendor id that matches')
|
||||||
devices = get_devices_with_vendor_id(vid)
|
devices = get_devices_with_vendor_id(vid)
|
||||||
# check device id
|
|
||||||
for device in devices:
|
for device in devices:
|
||||||
#print(f'device:{device} device.usb_product_id_in_hex:{device.usb_product_id_in_hex}')
|
possible_devices.add(device)
|
||||||
if device.usb_product_id_in_hex:
|
|
||||||
search = f' {vid}:{device.usb_product_id_in_hex} '
|
|
||||||
#print(f'search:"{search}"')
|
|
||||||
if re.search(search, lsusb_output, re.MULTILINE):
|
|
||||||
# concatenate the devices with vendor id to possibles
|
|
||||||
possible_devices.add(device)
|
|
||||||
else:
|
|
||||||
# if there is a supported device witout a product id, then it
|
|
||||||
# might be a match... so, concatenate
|
|
||||||
possible_devices.add(device)
|
|
||||||
|
|
||||||
elif system == "Windows":
|
elif system == "Windows":
|
||||||
# if windows, run Get-PnpDevice
|
# if windows, run Get-PnpDevice
|
||||||
@@ -313,22 +302,8 @@ def detect_supported_devices():
|
|||||||
if re.search(search, sp_output, re.MULTILINE):
|
if re.search(search, sp_output, re.MULTILINE):
|
||||||
#print(f'Found vendor id that matches')
|
#print(f'Found vendor id that matches')
|
||||||
devices = get_devices_with_vendor_id(vid)
|
devices = get_devices_with_vendor_id(vid)
|
||||||
# check device id
|
|
||||||
for device in devices:
|
for device in devices:
|
||||||
#print(f'device:{device} device.usb_product_id_in_hex:{device.usb_product_id_in_hex}')
|
possible_devices.add(device)
|
||||||
if device.usb_product_id_in_hex:
|
|
||||||
search = f'DeviceID.*{vid.upper()}&PID_{device.usb_product_id_in_hex.upper()}'
|
|
||||||
#print(f'search:"{search}"')
|
|
||||||
if re.search(search, sp_output, re.MULTILINE):
|
|
||||||
# concatenate the devices with vendor id to possibles
|
|
||||||
possible_devices.add(device)
|
|
||||||
# do a check to see if there is a Windows driver issue
|
|
||||||
if detect_windows_needs_driver(device, False):
|
|
||||||
print("WARNING: Need to install driver.")
|
|
||||||
else:
|
|
||||||
# if there is a supported device witout a product id, then it
|
|
||||||
# might be a match... so, concatenate
|
|
||||||
possible_devices.add(device)
|
|
||||||
|
|
||||||
elif system == "Darwin":
|
elif system == "Darwin":
|
||||||
# run: system_profiler SPUSBDataType
|
# run: system_profiler SPUSBDataType
|
||||||
@@ -343,19 +318,8 @@ def detect_supported_devices():
|
|||||||
if re.search(search, sp_output, re.MULTILINE):
|
if re.search(search, sp_output, re.MULTILINE):
|
||||||
#print(f'Found vendor id that matches')
|
#print(f'Found vendor id that matches')
|
||||||
devices = get_devices_with_vendor_id(vid)
|
devices = get_devices_with_vendor_id(vid)
|
||||||
# check device id
|
|
||||||
for device in devices:
|
for device in devices:
|
||||||
#print(f'device:{device} device.usb_product_id_in_hex:{device.usb_product_id_in_hex}')
|
possible_devices.add(device)
|
||||||
if device.usb_product_id_in_hex:
|
|
||||||
search = f'Product ID: 0x{device.usb_product_id_in_hex}'
|
|
||||||
#print(f'search:"{search}"')
|
|
||||||
if re.search(search, sp_output, re.MULTILINE):
|
|
||||||
# concatenate the devices with vendor id to possibles
|
|
||||||
possible_devices.add(device)
|
|
||||||
else:
|
|
||||||
# if there is a supported device witout a product id, then it
|
|
||||||
# might be a match... so, concatenate
|
|
||||||
possible_devices.add(device)
|
|
||||||
return possible_devices
|
return possible_devices
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
2
proto
2
proto
Submodule proto updated: 99ce57802d...274aa01a38
2
setup.py
2
setup.py
@@ -12,7 +12,7 @@ with open("README.md", "r") as fh:
|
|||||||
# This call to setup() does all the work
|
# This call to setup() does all the work
|
||||||
setup(
|
setup(
|
||||||
name="meshtastic",
|
name="meshtastic",
|
||||||
version="1.3alpha.9",
|
version="1.3alpha.18",
|
||||||
description="Python API & client shell for talking to Meshtastic devices",
|
description="Python API & client shell for talking to Meshtastic devices",
|
||||||
long_description=long_description,
|
long_description=long_description,
|
||||||
long_description_content_type="text/markdown",
|
long_description_content_type="text/markdown",
|
||||||
|
|||||||
Reference in New Issue
Block a user