mirror of
https://github.com/meshtastic/python.git
synced 2026-01-12 01:37:58 -05:00
put BLE experiment on back burner
This commit is contained in:
@@ -24,12 +24,6 @@ For the rough notes/implementation plan see [TODO](https://github.com/meshtastic
|
||||
|
||||
This pip package will also install a "meshtastic" commandline executable, which displays packets sent over the network as JSON and lets you see serial debugging information from the meshtastic devices. The source code for this tool is also a good [example](https://github.com/meshtastic/Meshtastic-python/blob/master/meshtastic/__main__.py) of a 'complete' application that uses the meshtastic python API.
|
||||
|
||||
## Bluetooth support
|
||||
|
||||
(Alpha level feature)
|
||||
This library supports connecting to Meshtastic devices over either USB (serial) or Bluetooth. Before connecting to the device you must [pair](https://docs.ubuntu.com/core/en/stacks/bluetooth/bluez/docs/reference/pairing/outbound.html) your PC with it.
|
||||
We use the Bleak library, but a very particular version (due to a bleak [bug](https://github.com/hbldh/bleak/issues/139)): python3 -m pip install git+https://github.com/pliniofpa/bleak.git@cbad754205b8dbbe1def448b18d04c65cf5a75e7
|
||||
|
||||
## Required device software version
|
||||
|
||||
This API and tool both require that the device is running Meshtastic 0.6.0 or later.
|
||||
|
||||
7
TODO.md
7
TODO.md
@@ -1,9 +1,14 @@
|
||||
# TODO
|
||||
|
||||
## Bluetooth support
|
||||
|
||||
(Alpha level feature)
|
||||
This library supports connecting to Meshtastic devices over either USB (serial) or Bluetooth. Before connecting to the device you must [pair](https://docs.ubuntu.com/core/en/stacks/bluetooth/bluez/docs/reference/pairing/outbound.html) your PC with it.
|
||||
We use the pip3 install "pygatt[GATTTOOL]"
|
||||
|
||||
## Before beta
|
||||
|
||||
- ./bin/run.sh --debug --ble --device 24:62:AB:DD:DF:3A
|
||||
- merge my local fixes to bleak: /home/kevinh/.local/lib/python3.8/site-packages/bleak/backends/bluezdbus/
|
||||
- update nodedb as nodes change
|
||||
- radioConfig - getter/setter syntax: https://www.python-course.eu/python3_properties.php
|
||||
- let user change radio params via commandline options
|
||||
|
||||
@@ -47,8 +47,7 @@ interface = meshtastic.StreamInterface()
|
||||
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
from bleak import BleakClient
|
||||
import pygatt
|
||||
import google.protobuf.json_format
|
||||
import serial
|
||||
import threading
|
||||
@@ -86,6 +85,7 @@ class MeshInterface:
|
||||
self.debugOut = debugOut
|
||||
self.nodes = None # FIXME
|
||||
self.isConnected = False
|
||||
self._startConfig()
|
||||
|
||||
def sendText(self, text, destinationId=BROADCAST_ADDR):
|
||||
"""Send a utf8 string to some other node, if the node has a display it will also be shown on the device.
|
||||
@@ -259,23 +259,37 @@ FROMNUM_UUID = "ed9da18c-a800-4f66-a670-aa7547e34453"
|
||||
class BLEInterface(MeshInterface):
|
||||
def __init__(self, address, debugOut=None):
|
||||
self.address = address
|
||||
self.adapter = pygatt.GATTToolBackend() # BGAPIBackend()
|
||||
self.adapter.start()
|
||||
logging.debug(f"Connecting to {self.address}")
|
||||
self.device = self.adapter.connect(address)
|
||||
logging.debug("Connected to device")
|
||||
# fromradio = self.device.char_read(FROMRADIO_UUID)
|
||||
MeshInterface.__init__(self, debugOut=debugOut)
|
||||
|
||||
async def close(self):
|
||||
await self.client.disconnect()
|
||||
self._readFromRadio() # read the initial responses
|
||||
|
||||
async def run(self, loop):
|
||||
self.client = BleakClient(self.address, loop=loop)
|
||||
try:
|
||||
logging.debug(f"Connecting to {self.address}")
|
||||
await self.client.connect()
|
||||
logging.debug("Connected to device")
|
||||
fromradio = await self.client.read_gatt_char(FROMRADIO_UUID)
|
||||
print(f"****** fromradio {fromradio}")
|
||||
except Exception as e:
|
||||
logging.error(e)
|
||||
finally:
|
||||
await self.close()
|
||||
def handle_data(handle, data):
|
||||
self._handleFromRadio(data)
|
||||
|
||||
self.device.subscribe(FROMNUM_UUID, callback=handle_data)
|
||||
|
||||
def _sendToRadio(self, toRadio):
|
||||
"""Send a ToRadio protobuf to the device"""
|
||||
logging.debug(f"Sending: {toRadio}")
|
||||
b = toRadio.SerializeToString()
|
||||
self.device.char_write(TORADIO_UUID, b)
|
||||
|
||||
def close(self):
|
||||
self.adapter.stop()
|
||||
|
||||
def _readFromRadio(self):
|
||||
wasEmpty = False
|
||||
while not wasEmpty:
|
||||
b = self.device.char_read(FROMRADIO_UUID)
|
||||
wasEmpty = len(b) == 0
|
||||
if not wasEmpty:
|
||||
self._handleFromRadio(b)
|
||||
|
||||
|
||||
class StreamInterface(MeshInterface):
|
||||
@@ -313,7 +327,6 @@ class StreamInterface(MeshInterface):
|
||||
self._rxThread = threading.Thread(target=self.__reader, args=())
|
||||
self._rxThread.start()
|
||||
MeshInterface.__init__(self, debugOut=debugOut)
|
||||
self._startConfig()
|
||||
|
||||
def _sendToRadio(self, toRadio):
|
||||
"""Send a ToRadio protobuf to the device"""
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#!python3
|
||||
|
||||
import asyncio
|
||||
import argparse
|
||||
from . import StreamInterface, BLEInterface, test
|
||||
import logging
|
||||
@@ -121,8 +120,6 @@ def main():
|
||||
subscribe()
|
||||
if args.ble:
|
||||
client = BLEInterface(args.device, debugOut=logfile)
|
||||
loop = asyncio.get_event_loop()
|
||||
loop.run_until_complete(client.run(loop))
|
||||
else:
|
||||
client = StreamInterface(args.device, debugOut=logfile)
|
||||
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
import asyncio
|
||||
from bleak import discover
|
||||
|
||||
|
||||
async def run():
|
||||
devices = await discover()
|
||||
for d in devices:
|
||||
print(d)
|
||||
|
||||
def bleScan():
|
||||
loop = asyncio.get_event_loop()
|
||||
loop.run_until_complete(run())
|
||||
|
||||
@@ -20,7 +20,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
|
||||
package='',
|
||||
syntax='proto3',
|
||||
serialized_options=_b('\n\023com.geeksville.meshB\nMeshProtos'),
|
||||
serialized_pb=_b('\n\nmesh.proto\"\x93\x01\n\x08Position\x12\x12\n\nlatitude_d\x18\x01 \x01(\x01\x12\x13\n\x0blongitude_d\x18\x02 \x01(\x01\x12\x12\n\nlatitude_i\x18\x07 \x01(\x11\x12\x13\n\x0blongitude_i\x18\x08 \x01(\x11\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x05\x12\x15\n\rbattery_level\x18\x04 \x01(\x05\x12\x0c\n\x04time\x18\t \x01(\x07\"g\n\x04\x44\x61ta\x12\x17\n\x03typ\x18\x01 \x01(\x0e\x32\n.Data.Type\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"5\n\x04Type\x12\n\n\x06OPAQUE\x10\x00\x12\x0e\n\nCLEAR_TEXT\x10\x01\x12\x11\n\rCLEAR_READACK\x10\x02\"J\n\x04User\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tlong_name\x18\x02 \x01(\t\x12\x12\n\nshort_name\x18\x03 \x01(\t\x12\x0f\n\x07macaddr\x18\x04 \x01(\x0c\"\x1f\n\x0eRouteDiscovery\x12\r\n\x05route\x18\x02 \x03(\x05\"i\n\tSubPacket\x12\x1b\n\x08position\x18\x01 \x01(\x0b\x32\t.Position\x12\x13\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x05.Data\x12\x13\n\x04user\x18\x04 \x01(\x0b\x32\x05.User\x12\x15\n\rwant_response\x18\x05 \x01(\x08\"\x92\x01\n\nMeshPacket\x12\x0c\n\x04\x66rom\x18\x01 \x01(\r\x12\n\n\x02to\x18\x02 \x01(\r\x12\x1d\n\x07\x64\x65\x63oded\x18\x03 \x01(\x0b\x32\n.SubPacketH\x00\x12\x13\n\tencrypted\x18\x08 \x01(\x0cH\x00\x12\x0f\n\x07rx_time\x18\t \x01(\x07\x12\n\n\x02id\x18\x06 \x01(\r\x12\x0e\n\x06rx_snr\x18\x07 \x01(\x02\x42\t\n\x07payload\"\xd4\x01\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\x0b\n\x03psk\x18\x04 \x01(\x0c\x12\x0c\n\x04name\x18\x05 \x01(\t\"`\n\x0bModemConfig\x12\x12\n\x0e\x42w125Cr45Sf128\x10\x00\x12\x12\n\x0e\x42w500Cr45Sf128\x10\x01\x12\x14\n\x10\x42w31_25Cr48Sf512\x10\x02\x12\x13\n\x0f\x42w125Cr48Sf4096\x10\x03\"\xd7\x03\n\x0bRadioConfig\x12\x31\n\x0bpreferences\x18\x01 \x01(\x0b\x32\x1c.RadioConfig.UserPreferences\x12*\n\x10\x63hannel_settings\x18\x02 \x01(\x0b\x32\x10.ChannelSettings\x1a\xe8\x02\n\x0fUserPreferences\x12\x1f\n\x17position_broadcast_secs\x18\x01 \x01(\r\x12\x1b\n\x13send_owner_interval\x18\x02 \x01(\r\x12\x1a\n\x12num_missed_to_fail\x18\x03 \x01(\r\x12\x1b\n\x13wait_bluetooth_secs\x18\x04 \x01(\r\x12\x16\n\x0escreen_on_secs\x18\x05 \x01(\r\x12\x1a\n\x12phone_timeout_secs\x18\x06 \x01(\r\x12\x1d\n\x15phone_sds_timeout_sec\x18\x07 \x01(\r\x12\x1d\n\x15mesh_sds_timeout_secs\x18\x08 \x01(\r\x12\x10\n\x08sds_secs\x18\t \x01(\r\x12\x0f\n\x07ls_secs\x18\n \x01(\r\x12\x15\n\rmin_wake_secs\x18\x0b \x01(\r\x12\x18\n\x10keep_all_packets\x18\x64 \x01(\x08\x12\x18\n\x10promiscuous_mode\x18\x65 \x01(\x08\"V\n\x08NodeInfo\x12\x0b\n\x03num\x18\x01 \x01(\x05\x12\x13\n\x04user\x18\x02 \x01(\x0b\x32\x05.User\x12\x1b\n\x08position\x18\x03 \x01(\x0b\x32\t.Position\x12\x0b\n\x03snr\x18\x07 \x01(\x02\"\xc4\x01\n\nMyNodeInfo\x12\x13\n\x0bmy_node_num\x18\x01 \x01(\x05\x12\x0f\n\x07has_gps\x18\x02 \x01(\x08\x12\x14\n\x0cnum_channels\x18\x03 \x01(\x05\x12\x0e\n\x06region\x18\x04 \x01(\t\x12\x10\n\x08hw_model\x18\x05 \x01(\t\x12\x18\n\x10\x66irmware_version\x18\x06 \x01(\t\x12\x12\n\nerror_code\x18\x07 \x01(\r\x12\x15\n\rerror_address\x18\x08 \x01(\r\x12\x13\n\x0b\x65rror_count\x18\t \x01(\r\"\xd5\x01\n\x0b\x44\x65viceState\x12\x1b\n\x05radio\x18\x01 \x01(\x0b\x32\x0c.RadioConfig\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\"\x1e\n\x0b\x44\x65\x62ugString\x12\x0f\n\x07message\x18\x01 \x01(\t\"\xf9\x01\n\tFromRadio\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x1d\n\x06packet\x18\x02 \x01(\x0b\x32\x0b.MeshPacketH\x00\x12\x1e\n\x07my_info\x18\x03 \x01(\x0b\x32\x0b.MyNodeInfoH\x00\x12\x1e\n\tnode_info\x18\x04 \x01(\x0b\x32\t.NodeInfoH\x00\x12\x1d\n\x05radio\x18\x06 \x01(\x0b\x32\x0c.RadioConfigH\x00\x12$\n\x0c\x64\x65\x62ug_string\x18\x07 \x01(\x0b\x32\x0c.DebugStringH\x00\x12\x1c\n\x12\x63onfig_complete_id\x18\x08 \x01(\rH\x00\x12\x12\n\x08rebooted\x18\t \x01(\x08H\x00\x42\t\n\x07variant\"\x8c\x01\n\x07ToRadio\x12\x1d\n\x06packet\x18\x01 \x01(\x0b\x32\x0b.MeshPacketH\x00\x12\x18\n\x0ewant_config_id\x18\x64 \x01(\rH\x00\x12!\n\tset_radio\x18\x65 \x01(\x0b\x32\x0c.RadioConfigH\x00\x12\x1a\n\tset_owner\x18\x66 \x01(\x0b\x32\x05.UserH\x00\x42\t\n\x07variant*\x17\n\tConstants\x12\n\n\x06Unused\x10\x00\x42!\n\x13\x63om.geeksville.meshB\nMeshProtosb\x06proto3')
|
||||
serialized_pb=_b('\n\nmesh.proto\"\x93\x01\n\x08Position\x12\x12\n\nlatitude_d\x18\x01 \x01(\x01\x12\x13\n\x0blongitude_d\x18\x02 \x01(\x01\x12\x12\n\nlatitude_i\x18\x07 \x01(\x11\x12\x13\n\x0blongitude_i\x18\x08 \x01(\x11\x12\x10\n\x08\x61ltitude\x18\x03 \x01(\x05\x12\x15\n\rbattery_level\x18\x04 \x01(\x05\x12\x0c\n\x04time\x18\t \x01(\x07\"g\n\x04\x44\x61ta\x12\x17\n\x03typ\x18\x01 \x01(\x0e\x32\n.Data.Type\x12\x0f\n\x07payload\x18\x02 \x01(\x0c\"5\n\x04Type\x12\n\n\x06OPAQUE\x10\x00\x12\x0e\n\nCLEAR_TEXT\x10\x01\x12\x11\n\rCLEAR_READACK\x10\x02\"J\n\x04User\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tlong_name\x18\x02 \x01(\t\x12\x12\n\nshort_name\x18\x03 \x01(\t\x12\x0f\n\x07macaddr\x18\x04 \x01(\x0c\"\x1f\n\x0eRouteDiscovery\x12\r\n\x05route\x18\x02 \x03(\x05\"\xfe\x01\n\tSubPacket\x12\x1d\n\x08position\x18\x01 \x01(\x0b\x32\t.PositionH\x00\x12\x15\n\x04\x64\x61ta\x18\x03 \x01(\x0b\x32\x05.DataH\x00\x12\x15\n\x04user\x18\x04 \x01(\x0b\x32\x05.UserH\x00\x12\"\n\x07request\x18\x06 \x01(\x0b\x32\x0f.RouteDiscoveryH\x00\x12 \n\x05reply\x18\x07 \x01(\x0b\x32\x0f.RouteDiscoveryH\x00\x12\x15\n\rwant_response\x18\x05 \x01(\x08\x12\x14\n\nsuccess_id\x18\n \x01(\rH\x01\x12\x11\n\x07\x66\x61il_id\x18\x0b \x01(\rH\x01\x12\x0c\n\x04\x64\x65st\x18\t \x01(\rB\t\n\x07payloadB\x05\n\x03\x61\x63k\"\xa5\x01\n\nMeshPacket\x12\x0c\n\x04\x66rom\x18\x01 \x01(\r\x12\n\n\x02to\x18\x02 \x01(\r\x12\x1d\n\x07\x64\x65\x63oded\x18\x03 \x01(\x0b\x32\n.SubPacketH\x00\x12\x13\n\tencrypted\x18\x08 \x01(\x0cH\x00\x12\n\n\x02id\x18\x06 \x01(\r\x12\x0f\n\x07rx_time\x18\t \x01(\x07\x12\x0e\n\x06rx_snr\x18\x07 \x01(\x02\x12\x11\n\thop_limit\x18\n \x01(\rB\t\n\x07payload\"\xd4\x01\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\x0b\n\x03psk\x18\x04 \x01(\x0c\x12\x0c\n\x04name\x18\x05 \x01(\t\"`\n\x0bModemConfig\x12\x12\n\x0e\x42w125Cr45Sf128\x10\x00\x12\x12\n\x0e\x42w500Cr45Sf128\x10\x01\x12\x14\n\x10\x42w31_25Cr48Sf512\x10\x02\x12\x13\n\x0f\x42w125Cr48Sf4096\x10\x03\"\xd7\x03\n\x0bRadioConfig\x12\x31\n\x0bpreferences\x18\x01 \x01(\x0b\x32\x1c.RadioConfig.UserPreferences\x12*\n\x10\x63hannel_settings\x18\x02 \x01(\x0b\x32\x10.ChannelSettings\x1a\xe8\x02\n\x0fUserPreferences\x12\x1f\n\x17position_broadcast_secs\x18\x01 \x01(\r\x12\x1b\n\x13send_owner_interval\x18\x02 \x01(\r\x12\x1a\n\x12num_missed_to_fail\x18\x03 \x01(\r\x12\x1b\n\x13wait_bluetooth_secs\x18\x04 \x01(\r\x12\x16\n\x0escreen_on_secs\x18\x05 \x01(\r\x12\x1a\n\x12phone_timeout_secs\x18\x06 \x01(\r\x12\x1d\n\x15phone_sds_timeout_sec\x18\x07 \x01(\r\x12\x1d\n\x15mesh_sds_timeout_secs\x18\x08 \x01(\r\x12\x10\n\x08sds_secs\x18\t \x01(\r\x12\x0f\n\x07ls_secs\x18\n \x01(\r\x12\x15\n\rmin_wake_secs\x18\x0b \x01(\r\x12\x18\n\x10keep_all_packets\x18\x64 \x01(\x08\x12\x18\n\x10promiscuous_mode\x18\x65 \x01(\x08\"h\n\x08NodeInfo\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x13\n\x04user\x18\x02 \x01(\x0b\x32\x05.User\x12\x1b\n\x08position\x18\x03 \x01(\x0b\x32\t.Position\x12\x0b\n\x03snr\x18\x07 \x01(\x02\x12\x10\n\x08next_hop\x18\x05 \x01(\r\"\xc4\x01\n\nMyNodeInfo\x12\x13\n\x0bmy_node_num\x18\x01 \x01(\x05\x12\x0f\n\x07has_gps\x18\x02 \x01(\x08\x12\x14\n\x0cnum_channels\x18\x03 \x01(\x05\x12\x0e\n\x06region\x18\x04 \x01(\t\x12\x10\n\x08hw_model\x18\x05 \x01(\t\x12\x18\n\x10\x66irmware_version\x18\x06 \x01(\t\x12\x12\n\nerror_code\x18\x07 \x01(\r\x12\x15\n\rerror_address\x18\x08 \x01(\r\x12\x13\n\x0b\x65rror_count\x18\t \x01(\r\"\xd5\x01\n\x0b\x44\x65viceState\x12\x1b\n\x05radio\x18\x01 \x01(\x0b\x32\x0c.RadioConfig\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\"\x1e\n\x0b\x44\x65\x62ugString\x12\x0f\n\x07message\x18\x01 \x01(\t\"\xf9\x01\n\tFromRadio\x12\x0b\n\x03num\x18\x01 \x01(\r\x12\x1d\n\x06packet\x18\x02 \x01(\x0b\x32\x0b.MeshPacketH\x00\x12\x1e\n\x07my_info\x18\x03 \x01(\x0b\x32\x0b.MyNodeInfoH\x00\x12\x1e\n\tnode_info\x18\x04 \x01(\x0b\x32\t.NodeInfoH\x00\x12\x1d\n\x05radio\x18\x06 \x01(\x0b\x32\x0c.RadioConfigH\x00\x12$\n\x0c\x64\x65\x62ug_string\x18\x07 \x01(\x0b\x32\x0c.DebugStringH\x00\x12\x1c\n\x12\x63onfig_complete_id\x18\x08 \x01(\rH\x00\x12\x12\n\x08rebooted\x18\t \x01(\x08H\x00\x42\t\n\x07variant\"\x8c\x01\n\x07ToRadio\x12\x1d\n\x06packet\x18\x01 \x01(\x0b\x32\x0b.MeshPacketH\x00\x12\x18\n\x0ewant_config_id\x18\x64 \x01(\rH\x00\x12!\n\tset_radio\x18\x65 \x01(\x0b\x32\x0c.RadioConfigH\x00\x12\x1a\n\tset_owner\x18\x66 \x01(\x0b\x32\x05.UserH\x00\x42\t\n\x07variant*\x17\n\tConstants\x12\n\n\x06Unused\x10\x00\x42!\n\x13\x63om.geeksville.meshB\nMeshProtosb\x06proto3')
|
||||
)
|
||||
|
||||
_CONSTANTS = _descriptor.EnumDescriptor(
|
||||
@@ -36,8 +36,8 @@ _CONSTANTS = _descriptor.EnumDescriptor(
|
||||
],
|
||||
containing_type=None,
|
||||
serialized_options=None,
|
||||
serialized_start=2253,
|
||||
serialized_end=2276,
|
||||
serialized_start=2440,
|
||||
serialized_end=2463,
|
||||
)
|
||||
_sym_db.RegisterEnumDescriptor(_CONSTANTS)
|
||||
|
||||
@@ -96,8 +96,8 @@ _CHANNELSETTINGS_MODEMCONFIG = _descriptor.EnumDescriptor(
|
||||
],
|
||||
containing_type=None,
|
||||
serialized_options=None,
|
||||
serialized_start=751,
|
||||
serialized_end=847,
|
||||
serialized_start=920,
|
||||
serialized_end=1016,
|
||||
)
|
||||
_sym_db.RegisterEnumDescriptor(_CHANNELSETTINGS_MODEMCONFIG)
|
||||
|
||||
@@ -326,12 +326,47 @@ _SUBPACKET = _descriptor.Descriptor(
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='want_response', full_name='SubPacket.want_response', index=3,
|
||||
name='request', full_name='SubPacket.request', index=3,
|
||||
number=6, 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='reply', full_name='SubPacket.reply', index=4,
|
||||
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='want_response', full_name='SubPacket.want_response', index=5,
|
||||
number=5, 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='success_id', full_name='SubPacket.success_id', index=6,
|
||||
number=10, 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='fail_id', full_name='SubPacket.fail_id', index=7,
|
||||
number=11, 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='dest', full_name='SubPacket.dest', 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=[
|
||||
],
|
||||
@@ -343,9 +378,15 @@ _SUBPACKET = _descriptor.Descriptor(
|
||||
syntax='proto3',
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
_descriptor.OneofDescriptor(
|
||||
name='payload', full_name='SubPacket.payload',
|
||||
index=0, containing_type=None, fields=[]),
|
||||
_descriptor.OneofDescriptor(
|
||||
name='ack', full_name='SubPacket.ack',
|
||||
index=1, containing_type=None, fields=[]),
|
||||
],
|
||||
serialized_start=378,
|
||||
serialized_end=483,
|
||||
serialized_start=379,
|
||||
serialized_end=633,
|
||||
)
|
||||
|
||||
|
||||
@@ -385,15 +426,15 @@ _MESHPACKET = _descriptor.Descriptor(
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='rx_time', full_name='MeshPacket.rx_time', index=4,
|
||||
number=9, type=7, cpp_type=3, label=1,
|
||||
name='id', full_name='MeshPacket.id', index=4,
|
||||
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='id', full_name='MeshPacket.id', index=5,
|
||||
number=6, type=13, cpp_type=3, label=1,
|
||||
name='rx_time', full_name='MeshPacket.rx_time', index=5,
|
||||
number=9, 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,
|
||||
@@ -405,6 +446,13 @@ _MESHPACKET = _descriptor.Descriptor(
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='hop_limit', full_name='MeshPacket.hop_limit', index=7,
|
||||
number=10, 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=[
|
||||
],
|
||||
@@ -420,8 +468,8 @@ _MESHPACKET = _descriptor.Descriptor(
|
||||
name='payload', full_name='MeshPacket.payload',
|
||||
index=0, containing_type=None, fields=[]),
|
||||
],
|
||||
serialized_start=486,
|
||||
serialized_end=632,
|
||||
serialized_start=636,
|
||||
serialized_end=801,
|
||||
)
|
||||
|
||||
|
||||
@@ -473,8 +521,8 @@ _CHANNELSETTINGS = _descriptor.Descriptor(
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=635,
|
||||
serialized_end=847,
|
||||
serialized_start=804,
|
||||
serialized_end=1016,
|
||||
)
|
||||
|
||||
|
||||
@@ -588,8 +636,8 @@ _RADIOCONFIG_USERPREFERENCES = _descriptor.Descriptor(
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=961,
|
||||
serialized_end=1321,
|
||||
serialized_start=1130,
|
||||
serialized_end=1490,
|
||||
)
|
||||
|
||||
_RADIOCONFIG = _descriptor.Descriptor(
|
||||
@@ -625,8 +673,8 @@ _RADIOCONFIG = _descriptor.Descriptor(
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=850,
|
||||
serialized_end=1321,
|
||||
serialized_start=1019,
|
||||
serialized_end=1490,
|
||||
)
|
||||
|
||||
|
||||
@@ -639,7 +687,7 @@ _NODEINFO = _descriptor.Descriptor(
|
||||
fields=[
|
||||
_descriptor.FieldDescriptor(
|
||||
name='num', full_name='NodeInfo.num', index=0,
|
||||
number=1, type=5, cpp_type=1, label=1,
|
||||
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,
|
||||
@@ -665,6 +713,13 @@ _NODEINFO = _descriptor.Descriptor(
|
||||
message_type=None, enum_type=None, containing_type=None,
|
||||
is_extension=False, extension_scope=None,
|
||||
serialized_options=None, file=DESCRIPTOR),
|
||||
_descriptor.FieldDescriptor(
|
||||
name='next_hop', full_name='NodeInfo.next_hop', 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),
|
||||
],
|
||||
extensions=[
|
||||
],
|
||||
@@ -677,8 +732,8 @@ _NODEINFO = _descriptor.Descriptor(
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=1323,
|
||||
serialized_end=1409,
|
||||
serialized_start=1492,
|
||||
serialized_end=1596,
|
||||
)
|
||||
|
||||
|
||||
@@ -764,8 +819,8 @@ _MYNODEINFO = _descriptor.Descriptor(
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=1412,
|
||||
serialized_end=1608,
|
||||
serialized_start=1599,
|
||||
serialized_end=1795,
|
||||
)
|
||||
|
||||
|
||||
@@ -837,8 +892,8 @@ _DEVICESTATE = _descriptor.Descriptor(
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=1611,
|
||||
serialized_end=1824,
|
||||
serialized_start=1798,
|
||||
serialized_end=2011,
|
||||
)
|
||||
|
||||
|
||||
@@ -868,8 +923,8 @@ _DEBUGSTRING = _descriptor.Descriptor(
|
||||
extension_ranges=[],
|
||||
oneofs=[
|
||||
],
|
||||
serialized_start=1826,
|
||||
serialized_end=1856,
|
||||
serialized_start=2013,
|
||||
serialized_end=2043,
|
||||
)
|
||||
|
||||
|
||||
@@ -951,8 +1006,8 @@ _FROMRADIO = _descriptor.Descriptor(
|
||||
name='variant', full_name='FromRadio.variant',
|
||||
index=0, containing_type=None, fields=[]),
|
||||
],
|
||||
serialized_start=1859,
|
||||
serialized_end=2108,
|
||||
serialized_start=2046,
|
||||
serialized_end=2295,
|
||||
)
|
||||
|
||||
|
||||
@@ -1006,8 +1061,8 @@ _TORADIO = _descriptor.Descriptor(
|
||||
name='variant', full_name='ToRadio.variant',
|
||||
index=0, containing_type=None, fields=[]),
|
||||
],
|
||||
serialized_start=2111,
|
||||
serialized_end=2251,
|
||||
serialized_start=2298,
|
||||
serialized_end=2438,
|
||||
)
|
||||
|
||||
_DATA.fields_by_name['typ'].enum_type = _DATA_TYPE
|
||||
@@ -1015,6 +1070,29 @@ _DATA_TYPE.containing_type = _DATA
|
||||
_SUBPACKET.fields_by_name['position'].message_type = _POSITION
|
||||
_SUBPACKET.fields_by_name['data'].message_type = _DATA
|
||||
_SUBPACKET.fields_by_name['user'].message_type = _USER
|
||||
_SUBPACKET.fields_by_name['request'].message_type = _ROUTEDISCOVERY
|
||||
_SUBPACKET.fields_by_name['reply'].message_type = _ROUTEDISCOVERY
|
||||
_SUBPACKET.oneofs_by_name['payload'].fields.append(
|
||||
_SUBPACKET.fields_by_name['position'])
|
||||
_SUBPACKET.fields_by_name['position'].containing_oneof = _SUBPACKET.oneofs_by_name['payload']
|
||||
_SUBPACKET.oneofs_by_name['payload'].fields.append(
|
||||
_SUBPACKET.fields_by_name['data'])
|
||||
_SUBPACKET.fields_by_name['data'].containing_oneof = _SUBPACKET.oneofs_by_name['payload']
|
||||
_SUBPACKET.oneofs_by_name['payload'].fields.append(
|
||||
_SUBPACKET.fields_by_name['user'])
|
||||
_SUBPACKET.fields_by_name['user'].containing_oneof = _SUBPACKET.oneofs_by_name['payload']
|
||||
_SUBPACKET.oneofs_by_name['payload'].fields.append(
|
||||
_SUBPACKET.fields_by_name['request'])
|
||||
_SUBPACKET.fields_by_name['request'].containing_oneof = _SUBPACKET.oneofs_by_name['payload']
|
||||
_SUBPACKET.oneofs_by_name['payload'].fields.append(
|
||||
_SUBPACKET.fields_by_name['reply'])
|
||||
_SUBPACKET.fields_by_name['reply'].containing_oneof = _SUBPACKET.oneofs_by_name['payload']
|
||||
_SUBPACKET.oneofs_by_name['ack'].fields.append(
|
||||
_SUBPACKET.fields_by_name['success_id'])
|
||||
_SUBPACKET.fields_by_name['success_id'].containing_oneof = _SUBPACKET.oneofs_by_name['ack']
|
||||
_SUBPACKET.oneofs_by_name['ack'].fields.append(
|
||||
_SUBPACKET.fields_by_name['fail_id'])
|
||||
_SUBPACKET.fields_by_name['fail_id'].containing_oneof = _SUBPACKET.oneofs_by_name['ack']
|
||||
_MESHPACKET.fields_by_name['decoded'].message_type = _SUBPACKET
|
||||
_MESHPACKET.oneofs_by_name['payload'].fields.append(
|
||||
_MESHPACKET.fields_by_name['decoded'])
|
||||
|
||||
2
proto
2
proto
Submodule proto updated: 4840493693...bc3ecd97e3
2
setup.py
2
setup.py
@@ -26,7 +26,7 @@ setup(
|
||||
packages=["meshtastic"],
|
||||
include_package_data=True,
|
||||
install_requires=["pyserial>=3.4", "protobuf>=3.6.1",
|
||||
"pypubsub>=4.0.3", "dotmap>=1.3.14", "bleak>=0.6.1"],
|
||||
"pypubsub>=4.0.3", "dotmap>=1.3.14" ],
|
||||
python_requires='>=3.4',
|
||||
entry_points={
|
||||
"console_scripts": [
|
||||
|
||||
Reference in New Issue
Block a user