def connect(self): self.update_state('connecting') try: link = None if self.link == 'ble': if platform == 'android': from py9b.link.droidble import BLELink link = BLELink() else: from py9b.link.bleak import BLELink if self.loop is None: self.loop = asyncio.get_event_loop() link = BLELink(loop=self.loop) elif self.link == 'tcp': from py9b.link.tcp import TCPLink link = TCPLink() elif self.link == 'serial': from py9b.link.serial import SerialLink link = SerialLink(timeout=1.0) elif self.link == 'mock': from mocklink import MockLink link = MockLink() link.__enter__() # This is split into two parts due to some link implementations # (namely droidble) requiring some initalization in main thread... self._connect_inner(link) except Exception as exc: self.update_state('disconnected') self.dispatch('on_error', repr(exc)) raise exc
def Flash(self, fwfilep): if self.device == 'extbms' and self.protocol != 'ninebot': exit('Only Ninebot supports External BMS !') self.setfwfilep(fwfilep) file = open(fwfilep, 'rb') dev = self.devices.get(self.device) if self.interface == 'ble': if platform != 'android': try: from py9b.link.ble import BLELink except: exit('BLE is not yet working with your configuration !') elif platform == 'android': try: from py9b.link.able import BLELink except: exit('BLE is not yet supported on Android !') else: exit('BLE is not supported on your system !') link = BLELink() elif self.interface == 'tcp': from py9b.link.tcp import TCPLink link = TCPLink() elif self.interface == 'serial': if platform == 'android': exit('Serial is not yet supported on Android !') from py9b.link.serial import SerialLink link = SerialLink() else: exit('!!! BUG !!! Unknown interface selected: ' + interface) with link: tran = self.protocols.get(self.protocol)(link) if self.address != '': addr = self.address elif self.interface != 'ble': print('Scanning...') ports = link.scan() if not ports: exit("No interfaces found !") print('Connecting to', ports[0][0]) addr = ports[0][1] else: raise LinkOpenException link.open(addr) print('Connected') try: UpdateFirmware(link, tran, dev, file) except Exception as e: print('Error:', e) raise
def connect(self): self.update_state('connecting') try: link = None if self.link == 'ble': if platform == 'android': from py9b.link.droidble import BLELink link = BLELink() else: from py9b.link.bleak import BLELink if self.loop is None: self.loop = asyncio.get_event_loop() link = BLELink(loop=self.loop) elif self.link == 'tcp': from py9b.link.tcp import TCPLink link = TCPLink() elif self.link == 'serial': if platform == 'android': tprint('Serial on Android is only available in Pro') else: from py9b.link.serial import SerialLink link = SerialLink(timeout=1.0) elif self.link == 'mock': from mocklink import MockLink link = MockLink() elif self.link == None: tprint('select interface first') self.disconnect() if self.transport is '': self.disconnect() tprint('select protocol first') if self.transport is not '' and self.link is not None: link.__enter__() # This is split into two parts due to some link implementations # (namely droidble) requiring some initalization in main thread... self._connect_inner(link) else: tprint('One or more parameters are not set') except Exception as exc: self.dispatch('on_error', repr(exc)) raise exc
def __enter__(self): link = None if self.link == 'bleak': from py9b.link.bleak import BleakLink link = BleakLink() elif self.link == 'tcp': from py9b.link.tcp import TCPLink link = TCPLink() elif self.link == 'serial': from py9b.link.serial import SerialLink link = SerialLink(timeout=1.0) link.__enter__() if not self.address: ports = link.scan() if not ports: raise Exception('No devices found') self.address = ports[0] link.open(self.address) transport = None if self.transport == 'ninebot': from py9b.transport.ninebot import NinebotTransport transport = NinebotTransport(link) elif self.transport == 'xiaomi': from py9b.transport.xiaomi import XiaomiTransport transport = XiaomiTransport(link) if transport.execute( ReadRegs(BT.ESC, 0x68, "<H"))[0] > 0x081 and self.link.startswith('ble'): transport.keys = link.fetch_keys_pro() transport.recover_keys() print('Keys recovered') self._transport = transport self._link = link return transport
exit('Only Ninebot supports External BMS !') dev = devices.get(args.device) if args.interface == 'ble': try: from py9b.link.ble import BLELink except: exit('BLE is not supported on your system !') link = BLELink() elif args.interface == 'tcp': from py9b.link.tcp import TCPLink link = TCPLink() elif args.interface == 'serial': from py9b.link.serial import SerialLink link = SerialLink() else: exit('!!! BUG !!! Unknown interface selected: ' + args.interface) with link: tran = protocols.get(args.protocol)(link) if args.address: addr = args.address else: print('Scanning...') ports = link.scan() if not ports: exit("No interfaces found !") print('Connecting to', ports[0][0]) addr = ports[0][1]
#!python2-32 from py9b.link.base import LinkOpenException, LinkTimeoutException from py9b.link.tcp import TCPLink from py9b.link.ble import BLELink from py9b.link.serial import SerialLink from py9b.transport.base import BaseTransport as BT from py9b.transport.packet import BasePacket as PKT from py9b.transport.xiaomi import XiaomiTransport READ_CHUNK_SIZE = 0x10 link = SerialLink(dump=True) # link = TCPLink() # link = BLELink() with link: print("Scanning...") ports = link.scan() print(ports) tran = XiaomiTransport(link) # link.open(("127.0.0.1", 6000)) link.open(ports[0][1]) print("Connected") req = PKT(src=BT.HOST, dst=BT.BMS, cmd=0x01, arg=0, data=chr(READ_CHUNK_SIZE))
#!python2-32 from py9b.link.base import LinkOpenException, LinkTimeoutException from py9b.link.tcp import TCPLink from py9b.link.ble import BLELink from py9b.link.serial import SerialLink from py9b.transport.base import BaseTransport as BT from py9b.transport.packet import BasePacket as PKT from py9b.transport.xiaomi import XiaomiTransport from py9b.transport.ninebot import NinebotTransport from py9b.command.regio import ReadRegs READ_CHUNK_SIZE = 0x10 link = SerialLink() #link = TCPLink() #link = BLELink() with link: print "Scanning..." ports = link.scan() print ports #tran = XiaomiTransport(link) tran = NinebotTransport(link) #link.open(("192.168.1.45", 6000)) link.open(ports[0][1]) print "Connected" hfo = open("EscRegs.bin", "wb") for i in xrange(0x0, 0x200, READ_CHUNK_SIZE):