コード例 #1
0
def changesn(ctx, new_sn, device):
    from py9b.command.mfg import WriteSNAuth, CalcSNAuth
    dev = {
        'esc': BT.ESC,
        'bms': BT.BMS,
        'extbms': BT.EXTBMS,
    }[device]
    with ctx.obj as tran:
        old_sn = tran.execute(ReadRegs(dev, 0x10, "14s"))[0].decode()
        print("Old S/N:", old_sn)

        uid3 = tran.execute(ReadRegs(dev, 0xDE, "<L"))[0]
        print("UID3: %08X" % (uid3))

        auth = CalcSnAuth(old_sn, new_sn, uid3)
        # auth = 0
        print("Auth: %08X" % (auth))

        try:
            tran.execute(WriteSNAuth(dev, new_sn.encode('utf-8'), auth))
            print("OK")
        except LinkTimeoutException:
            print("Timeout !")

        # save config and restart
        tran.execute(WriteRegs(BT.ESC, 0x78, "<H", 0x01))
        time.sleep(3)

        old_sn = tran.execute(ReadRegs(dev, 0x10, "14s"))[0]
        print("Current S/N:", old_sn)
コード例 #2
0
    def changesn(self, new_sn):
        from py9b.command.mfg import WriteSN, CalcSNAuth

        tran = self.conn._tran
        old_sn = tran.execute(ReadRegs(BT.ESC, 0x10, "14s"))[0].decode()
        tprint("Old S/N:", old_sn)

        uid3 = tran.execute(ReadRegs(BT.ESC, 0xDE, "<L"))[0]
        tprint("UID3: %08X" % (uid3))

        auth = CalcSnAuth(old_sn, new_sn, uid3)
        # auth = 0
        tprint("Auth: %08X" % (auth))

        try:
            tran.execute(WriteSN(BT.ESC, new_sn.encode('utf-8'), auth))
            tprint("OK")
        except LinkTimeoutException:
            tprint("Timeout !")

        # save config and restart
        tran.execute(WriteRegs(BT.ESC, 0x78, "<H", 0x01))
        time.sleep(3)

        old_sn = tran.execute(ReadRegs(BT.ESC, 0x10, "14s"))[0]
        tprint("Current S/N:", old_sn)
コード例 #3
0
    def UpdateFirmware(self, tran, dev, fwfile):
        tprint('update started')

        tprint('flashing ' + self.fwfilep + ' to ' + self.device)
        fwfile.seek(0, os.SEEK_END)
        fw_size = fwfile.tell()
        fwfile.seek(0)
        fw_page_size = 0x80

        dev = self.devices.get(self.device)

        for retry in range(self.PING_RETRIES):
            tprint('Pinging...')
            try:
                if dev == BT.BLE:
                    tran.execute(ReadRegs(dev, 0, "13s"))
                else:
                    tran.execute(ReadRegs(dev, 0x10, "14s"))
            except LinkTimeoutException:
                continue
            break
        else:
            tprint("Timed out!")
            return False
        tprint("OK")

        if self.lock:
            tprint('Locking...')
            tran.execute(WriteRegs(BT.ESC, 0x70, '<H', 0x0001))
        else:
            tprint('Not Locking...')

        tprint('Starting...')
        tran.execute(StartUpdate(dev, fw_size))

        tprint('Writing...')

        page = 0
        chk = 0
        while fw_size:
            self.update_progress(page, fw_size // fw_page_size + 1)
            chunk_sz = min(fw_size, fw_page_size)
            data = fwfile.read(chunk_sz)
            chk = self.checksum(chk, data)
            tran.execute(
                WriteUpdate(dev, page,
                            data + b'\x00' * (fw_page_size - chunk_sz)))
            page += 1
            fw_size -= chunk_sz

        tprint('Finalizing...')
        tran.execute(FinishUpdate(dev, chk ^ 0xFFFFFFFF))

        tprint('Reboot')
        tran.execute(RebootUpdate(dev))
        tprint('Done')
        tprint('update finished')
        return True
コード例 #4
0
def UpdateFirmware(link, tran, dev, fwfile):
    fwfile.seek(0, os.SEEK_END)
    fw_size = fwfile.tell()
    fwfile.seek(0)
    fw_page_size = 0x80

    print("Pinging...", end="")
    for retry in range(PING_RETRIES):
        print(".", end="")
        try:
            if dev == BT.BLE:
                tran.execute(ReadRegs(dev, 0, "13s"))
            else:
                tran.execute(ReadRegs(dev, 0x10, "14s"))
        except LinkTimeoutException:
            continue
        break
    else:
        print("Timed out !")
        return False
    print("OK")

    if args.interface != "blefleet":
        print("Locking...")
        tran.execute(WriteRegs(BT.ESC, 0x70, "<H", 0x0001))
    else:
        print("Not Locking...")

    print("Starting...")
    tran.execute(StartUpdate(dev, fw_size))

    print("Writing...")
    pb = ProgressBar(maxval=fw_size // fw_page_size + 1).start()
    page = 0
    chk = 0
    while fw_size:
        pb.update(page)
        chunk_sz = min(fw_size, fw_page_size)
        data = fwfile.read(chunk_sz)
        chk = checksum(chk, data)
        # tran.execute(WriteUpdate(dev, page, data))
        tran.execute(
            WriteUpdate(dev, page, data + b"\x00" * (fw_page_size - chunk_sz))
        )  # TODO: Ninebot wants this padding. Will it work on M365 too?
        page += 1
        fw_size -= chunk_sz
    pb.finish()

    print("Finalizing...")
    tran.execute(FinishUpdate(dev, chk ^ 0xFFFFFFFF))

    print("Reboot")
    tran.execute(RebootUpdate(dev))
    print("Done")
    return True
コード例 #5
0
    def UpdateFirmware(self, link, tran, dev, fwfile):
        print('flashing ' + fwfilep + ' to ' + self.device)
        fwfile.seek(0, os.SEEK_END)
        fw_size = fwfile.tell()
        fwfile.seek(0)
        fw_page_size = 0x80

        dev = self.devices.get(self.device)
        print('Pinging...')
        for retry in range(PING_RETRIES):
            print('.')
            try:
                if dev == BT.BLE:
                    tran.execute(ReadRegs(dev, 0, '13s'))
                else:
                    tran.execute(ReadRegs(dev, 0x10, '14s'))
            except LinkTimeoutException:
                continue
            break
        else:
            print('Timed out !')
            return False
        print('OK')

        if self.interface != 'tcpnl':
            print('Locking...')
            tran.execute(WriteRegs(BT.ESC, 0x70, '<H', 0x0001))
        else:
            print('Not Locking...')

        print('Starting...')
        tran.execute(StartUpdate(dev, fw_size))

        print('Writing...')
        page = 0
        chk = 0
        while fw_size:
            chunk_sz = min(fw_size, fw_page_size)
            data = fwfile.read(chunk_sz)
            chk = checksum(chk, data)
            #tran.execute(WriteUpdate(dev, page, data))
            tran.execute(
                WriteUpdate(dev, page,
                            data + b'\x00' * (fw_page_size - chunk_sz)))
            page += 1
            fw_size -= chunk_sz

        print('Finalizing...')
        tran.execute(FinishUpdate(dev, chk ^ 0xFFFFFFFF))

        print('Reboot')
        tran.execute(RebootUpdate(dev))
        print('Done')
        return True
コード例 #6
0
def UpdateFirmware(link, tran, dev, fwfile):
    fwfile.seek(0, os.SEEK_END)
    fw_size = fwfile.tell()
    fwfile.seek(0)
    fw_page_size = 0x80

    print('Pinging...', end='')
    for retry in range(PING_RETRIES):
        print('.', end='')
        try:
            if dev == BT.BLE:
                tran.execute(ReadRegs(dev, 0, '13s'))
            else:
                tran.execute(ReadRegs(dev, 0x10, '14s'))
        except LinkTimeoutException:
            continue
        break
    else:
        print('Timed out !')
        return False
    print('OK')

    print('Locking...')
    tran.execute(WriteRegs(BT.ESC, 0x70, '<H', 0x0001))

    print('Starting...')
    tran.execute(StartUpdate(dev, fw_size))

    print('Writing...')
    pb = ProgressBar(maxval=fw_size // fw_page_size + 1).start()
    page = 0
    chk = 0
    while fw_size:
        pb.update(page)
        chunk_sz = min(fw_size, fw_page_size)
        data = fwfile.read(chunk_sz)
        chk = checksum(chk, data)
        #tran.execute(WriteUpdate(dev, page, data))
        tran.execute(
            WriteUpdate(dev, page, data + b'\x00' * (fw_page_size - chunk_sz))
        )  # TODO: Ninebot wants this padding. Will it work on M365 too?
        page += 1
        fw_size -= chunk_sz
    pb.finish()

    print('Finalizing...')
    tran.execute(FinishUpdate(dev, chk ^ 0xFFFFFFFF))

    print('Reboot')
    tran.execute(RebootUpdate(dev))
    print('Done')
    return True
コード例 #7
0
        exit("Timed out !")
    print("")

    #lock
    #tran.execute(WriteRegs(BT.ESC, 0x70, "<H", 0x01))

    old_sn = tran.execute(ReadRegs(BT.ESC, 0x10, "14s"))[0]
    print("Old S/N:", old_sn)

    uid3 = tran.execute(ReadRegs(BT.ESC, 0xDE, "<L"))[0]
    print("UID3: %08X" % (uid3))

    auth = CalcSnAuth(old_sn, new_sn, uid3)
    #auth = 0
    print("Auth: %08X" % (auth))

    try:
        tran.execute(WriteSN(BT.ESC, new_sn, auth))
        print("OK")
    except LinkTimeoutException:
        print("Timeout !")

    # save config and restart
    tran.execute(WriteRegs(BT.ESC, 0x78, "<H", 0x01))
    sleep(3)

    old_sn = tran.execute(ReadRegs(BT.ESC, 0x10, "14s"))[0]
    print("Current S/N:", old_sn)

    link.close()
コード例 #8
0
ファイル: lock.py プロジェクト: romanoLT/py9b
# 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, WriteRegs

# link = SerialLink(dump=True)
link = TCPLink()
# link = BLELink()

with link:
    print("Scanning...")
    ports = link.scan()
    print(ports)

    # tran = XiaomiTransport(link)
    tran = NinebotTransport(link)

    link.open(("127.0.0.20:6000"))
    # 	link.open(ports[0][1])
    print("Connected")

    print("Locking...")
    tran.execute(WriteRegs(BT.ESC, 0x70, "<H", 0x0001))

    link.close()
コード例 #9
0
 def reboot(self):
     tran = self.conn._tran
     tran.execute(WriteRegs(BT.ESC, 0x78, "<H", 0x0001))
     tprint('Done')
コード例 #10
0
 def unlock(self):
     tran = self.conn._tran
     tran.execute(WriteRegs(BT.ESC, 0x71, "<H", 0x0001))
     tprint('Done')
コード例 #11
0
 def powerdown(self):
     tran = self.conn._tran
     tran.execute(WriteRegs(BT.ESC, 0x79, "<H", 0x0001))
     tprint('Done')
コード例 #12
0
ファイル: cli.py プロジェクト: Informatic/py9b
def reboot(ctx):
    with ctx.obj as tran:
        tran.execute(WriteRegs(BT.ESC, 0x78, "<H", 0x0001))
        print('Done')
コード例 #13
0
ファイル: cli.py プロジェクト: Informatic/py9b
def unlock(ctx):
    with ctx.obj as tran:
        tran.execute(WriteRegs(BT.ESC, 0x71, "<H", 0x0001))
        print('Done')
コード例 #14
0
ファイル: nbcmd.py プロジェクト: zrob1982/NineRiFt-kivy
 def reboot(self):
     with self.c as tran:
         tran.execute(WriteRegs(BT.ESC, 0x78, "<H", 0x0001))
         tprint('Done')
コード例 #15
0
ファイル: nbcmd.py プロジェクト: zrob1982/NineRiFt-kivy
 def unlock(self):
     with self.c as tran:
         tran.execute(WriteRegs(BT.ESC, 0x71, "<H", 0x0001))
         tprint('Done')
コード例 #16
0
ファイル: nbcmd.py プロジェクト: zrob1982/NineRiFt-kivy
 def powerdown(self):
     with self.c as tran:
         tran.execute(WriteRegs(BT.ESC, 0x79, "<H", 0x0001))
         tprint('Done')
コード例 #17
0
ファイル: cli.py プロジェクト: Informatic/py9b
def powerdown(ctx):
    with ctx.obj as tran:
        tran.execute(WriteRegs(BT.ESC, 0x79, "<H", 0x0001))
        print('Done')
コード例 #18
0
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, WriteRegs

#link = SerialLink(dump=True)
#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"

    print('Power off...')
    tran.execute(WriteRegs(BT.ESC, 0x79, '<H', 0x0001))

    link.close()