mirror of
https://github.com/markqvist/Reticulum.git
synced 2024-11-22 21:50:18 +00:00
Added Bluetooth control interface for RNode interfaces on Android
This commit is contained in:
parent
f9b3c749e0
commit
06d232f889
@ -226,6 +226,85 @@ class RNodeInterface(Interface):
|
|||||||
RECONNECT_WAIT = 5
|
RECONNECT_WAIT = 5
|
||||||
PORT_IO_TIMEOUT = 3
|
PORT_IO_TIMEOUT = 3
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def bluetooth_control(device_serial = None, port = None, enable_bluetooth = False, disable_bluetooth = False, pairing_mode = False):
|
||||||
|
if (port != None or device_serial != None) and (enable_bluetooth or disable_bluetooth or pairing_mode):
|
||||||
|
serial = None
|
||||||
|
bluetooth_state = None
|
||||||
|
if pairing_mode:
|
||||||
|
bluetooth_state = 0x01
|
||||||
|
elif enable_bluetooth:
|
||||||
|
bluetooth_state = 0x01
|
||||||
|
elif disable_bluetooth:
|
||||||
|
bluetooth_state = 0x00
|
||||||
|
|
||||||
|
if port != None:
|
||||||
|
RNS.log("Opening serial port "+port+"...")
|
||||||
|
# Get device parameters
|
||||||
|
from usb4a import usb
|
||||||
|
device = usb.get_usb_device(port)
|
||||||
|
if device:
|
||||||
|
vid = device.getVendorId()
|
||||||
|
pid = device.getProductId()
|
||||||
|
|
||||||
|
# Driver overrides for speficic chips
|
||||||
|
from usbserial4a import serial4a as pyserial
|
||||||
|
if vid == 0x1A86 and pid == 0x55D4:
|
||||||
|
# Force CDC driver for Qinheng CH34x
|
||||||
|
RNS.log("Using CDC driver for "+RNS.hexrep(vid)+":"+RNS.hexrep(pid), RNS.LOG_DEBUG)
|
||||||
|
from usbserial4a.cdcacmserial4a import CdcAcmSerial
|
||||||
|
proxy = CdcAcmSerial
|
||||||
|
|
||||||
|
serial = pyserial.get_serial_port(
|
||||||
|
port,
|
||||||
|
baudrate = 115200,
|
||||||
|
bytesize = 8,
|
||||||
|
parity = "N",
|
||||||
|
stopbits = 1,
|
||||||
|
xonxoff = False,
|
||||||
|
rtscts = False,
|
||||||
|
timeout = None,
|
||||||
|
inter_byte_timeout = None,
|
||||||
|
# write_timeout = wtimeout,
|
||||||
|
dsrdtr = False,
|
||||||
|
)
|
||||||
|
|
||||||
|
if vid == 0x0403:
|
||||||
|
# Hardware parameters for FTDI devices @ 115200 baud
|
||||||
|
serial.DEFAULT_READ_BUFFER_SIZE = 16 * 1024
|
||||||
|
serial.USB_READ_TIMEOUT_MILLIS = 100
|
||||||
|
serial.timeout = 0.1
|
||||||
|
elif vid == 0x10C4:
|
||||||
|
# Hardware parameters for SiLabs CP210x @ 115200 baud
|
||||||
|
serial.DEFAULT_READ_BUFFER_SIZE = 64
|
||||||
|
serial.USB_READ_TIMEOUT_MILLIS = 12
|
||||||
|
serial.timeout = 0.012
|
||||||
|
elif vid == 0x1A86 and pid == 0x55D4:
|
||||||
|
# Hardware parameters for Qinheng CH34x @ 115200 baud
|
||||||
|
serial.DEFAULT_READ_BUFFER_SIZE = 64
|
||||||
|
serial.USB_READ_TIMEOUT_MILLIS = 12
|
||||||
|
serial.timeout = 0.1
|
||||||
|
else:
|
||||||
|
# Default values
|
||||||
|
serial.DEFAULT_READ_BUFFER_SIZE = 1 * 1024
|
||||||
|
serial.USB_READ_TIMEOUT_MILLIS = 100
|
||||||
|
serial.timeout = 0.1
|
||||||
|
|
||||||
|
elif device_serial != None:
|
||||||
|
serial = device_serial
|
||||||
|
|
||||||
|
if serial != None:
|
||||||
|
if serial.is_open:
|
||||||
|
kiss_command = bytes([KISS.FEND, KISS.CMD_BT_CTRL, bluetooth_state, KISS.FEND])
|
||||||
|
serial.write(kiss_command)
|
||||||
|
if pairing_mode:
|
||||||
|
kiss_command = bytes([KISS.FEND, KISS.CMD_BT_CTRL, 0x02, KISS.FEND])
|
||||||
|
serial.write(kiss_command)
|
||||||
|
|
||||||
|
if port != None:
|
||||||
|
serial.close()
|
||||||
|
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self, owner, name, port, frequency = None, bandwidth = None, txpower = None,
|
self, owner, name, port, frequency = None, bandwidth = None, txpower = None,
|
||||||
sf = None, cr = None, flow_control = False, id_interval = None,
|
sf = None, cr = None, flow_control = False, id_interval = None,
|
||||||
@ -537,6 +616,24 @@ class RNodeInterface(Interface):
|
|||||||
if written != len(kiss_command):
|
if written != len(kiss_command):
|
||||||
raise IOError("An IO error occurred while sending host left command to device")
|
raise IOError("An IO error occurred while sending host left command to device")
|
||||||
|
|
||||||
|
def enable_bluetooth(self):
|
||||||
|
kiss_command = bytes([KISS.FEND, KISS.CMD_BT_CTRL, 0x01, KISS.FEND])
|
||||||
|
written = self.write_mux(kiss_command)
|
||||||
|
if written != len(kiss_command):
|
||||||
|
raise IOError("An IO error occurred while sending bluetooth enable command to device")
|
||||||
|
|
||||||
|
def disable_bluetooth(self):
|
||||||
|
kiss_command = bytes([KISS.FEND, KISS.CMD_BT_CTRL, 0x00, KISS.FEND])
|
||||||
|
written = self.write_mux(kiss_command)
|
||||||
|
if written != len(kiss_command):
|
||||||
|
raise IOError("An IO error occurred while sending bluetooth disable command to device")
|
||||||
|
|
||||||
|
def bluetooth_pair(self):
|
||||||
|
kiss_command = bytes([KISS.FEND, KISS.CMD_BT_CTRL, 0x02, KISS.FEND])
|
||||||
|
written = self.write_mux(kiss_command)
|
||||||
|
if written != len(kiss_command):
|
||||||
|
raise IOError("An IO error occurred while sending bluetooth pair command to device")
|
||||||
|
|
||||||
def enable_external_framebuffer(self):
|
def enable_external_framebuffer(self):
|
||||||
if self.display != None:
|
if self.display != None:
|
||||||
kiss_command = bytes([KISS.FEND, KISS.CMD_FB_EXT, 0x01, KISS.FEND])
|
kiss_command = bytes([KISS.FEND, KISS.CMD_FB_EXT, 0x01, KISS.FEND])
|
||||||
|
Loading…
Reference in New Issue
Block a user