mirror of
https://github.com/meshcore-dev/meshcore-cli.git
synced 2026-04-20 22:13:48 +00:00
Add options for specifying address or scan for device
This commit is contained in:
parent
00d3fb7c4a
commit
a40375c442
1 changed files with 37 additions and 11 deletions
48
mc-cli.py
48
mc-cli.py
|
|
@ -1,13 +1,10 @@
|
||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import sys
|
import sys
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
import datetime
|
import datetime
|
||||||
|
import getopt
|
||||||
from itertools import count, takewhile
|
|
||||||
from typing import Iterator
|
|
||||||
|
|
||||||
from bleak import BleakClient, BleakScanner
|
from bleak import BleakClient, BleakScanner
|
||||||
from bleak.backends.characteristic import BleakGATTCharacteristic
|
from bleak.backends.characteristic import BleakGATTCharacteristic
|
||||||
|
|
@ -18,7 +15,10 @@ UART_SERVICE_UUID = "6E400001-B5A3-F393-E0A9-E50E24DCCA9E"
|
||||||
UART_RX_CHAR_UUID = "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
|
UART_RX_CHAR_UUID = "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
|
||||||
UART_TX_CHAR_UUID = "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
|
UART_TX_CHAR_UUID = "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
|
||||||
|
|
||||||
ADDRESS = "F0:F5:BD:4F:9B:AD"
|
# BLE adress of the device
|
||||||
|
# if None or "" then a scan is performed
|
||||||
|
#ADDRESS = "F0:F5:BD:4F:9B:AD"
|
||||||
|
ADDRESS = ""
|
||||||
|
|
||||||
class MeshCore:
|
class MeshCore:
|
||||||
"""
|
"""
|
||||||
|
|
@ -28,9 +28,26 @@ class MeshCore:
|
||||||
contacts={}
|
contacts={}
|
||||||
|
|
||||||
def __init__(self, address):
|
def __init__(self, address):
|
||||||
self.client = BleakClient(address)
|
self.address = address
|
||||||
|
self.client = None
|
||||||
|
|
||||||
async def connect(self):
|
async def connect(self):
|
||||||
|
|
||||||
|
|
||||||
|
def match_meshcore_device(device: BLEDevice, adv: AdvertisementData):
|
||||||
|
if adv.local_name == "MeshCore" :
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
if self.address is None or self.address == "" :
|
||||||
|
scanner = BleakScanner()
|
||||||
|
print("Scanning for devices")
|
||||||
|
device = await scanner.find_device_by_filter(match_meshcore_device)
|
||||||
|
print(f"Found device : {device}")
|
||||||
|
self.client = BleakClient(device)
|
||||||
|
else:
|
||||||
|
self.client = BleakClient(self.address)
|
||||||
|
|
||||||
result = asyncio.Future()
|
result = asyncio.Future()
|
||||||
await self.client.connect(disconnected_callback=self.handle_disconnect)
|
await self.client.connect(disconnected_callback=self.handle_disconnect)
|
||||||
await self.client.start_notify(UART_TX_CHAR_UUID, self.handle_rx)
|
await self.client.start_notify(UART_TX_CHAR_UUID, self.handle_rx)
|
||||||
|
|
@ -220,17 +237,26 @@ async def next_cmd(mc, cmds):
|
||||||
print (f"cmd {cmds[0:argnum+1]} processed ...")
|
print (f"cmd {cmds[0:argnum+1]} processed ...")
|
||||||
return cmds[argnum+1:]
|
return cmds[argnum+1:]
|
||||||
|
|
||||||
async def main(args):
|
async def main(argv):
|
||||||
|
address = ADDRESS
|
||||||
|
|
||||||
if len(args) < 2:
|
opts, args = getopt.getopt(sys.argv[1:], "a:s")
|
||||||
|
for opt, arg in opts :
|
||||||
|
match opt:
|
||||||
|
case "-a" : # address specified on cmdline
|
||||||
|
address = arg
|
||||||
|
case "-s" : # explicitely ask to scan address
|
||||||
|
address = None
|
||||||
|
|
||||||
|
if len(args) == 0 :
|
||||||
print("Commands : send, sendto, recv, contacts, infos")
|
print("Commands : send, sendto, recv, contacts, infos")
|
||||||
return
|
return
|
||||||
|
|
||||||
mc = MeshCore(ADDRESS)
|
mc = MeshCore(address)
|
||||||
await mc.connect()
|
await mc.connect()
|
||||||
|
|
||||||
cmds = args[1:]
|
cmds = args
|
||||||
while len(cmds)>0 :
|
while len(cmds) > 0 :
|
||||||
cmds = await next_cmd(mc, cmds)
|
cmds = await next_cmd(mc, cmds)
|
||||||
|
|
||||||
asyncio.run(main(sys.argv))
|
asyncio.run(main(sys.argv))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue