refactor
Mikhail Yudin 2023-06-10 12:59:55 +07:00
rodzic af8f96b0d4
commit 1014a955e1
7 zmienionych plików z 38 dodań i 75 usunięć

BIN
data/2.01.26.bin 100644

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -0,0 +1 @@
lФ.▒ @!5у@И─

Wyświetl plik

@ -1,27 +0,0 @@
#!/usr/bin/env python3
from pathlib import Path
from sys import argv
INT_SIZE = 4
F0 = 47000000
F1 = 60000000
def main(path):
p = Path(path)
sz = p.stat().st_size
with p.open('rb') as f:
for offset in range(sz):
f.seek(offset)
if offset + INT_SIZE > sz:
break
v = int.from_bytes(f.read(INT_SIZE), 'little')
if v == F0:
print('0x%X: %d'%(offset, F0))
if v == F1:
print('0x%X: %d'%(offset, F1))
if __name__ == '__main__':
main(argv[1])

Wyświetl plik

@ -1,21 +0,0 @@
#!/usr/bin/env python3
from pathlib import Path
from sys import argv
def main(path, value, size):
p = Path(path)
sz = p.stat().st_size
with p.open('rb') as f:
for offset in range(sz):
f.seek(offset)
if offset + size > sz:
break
bb = f.read(size)
v = int.from_bytes(bb, 'little')
if v == value:
print('0x%X: %d, hex: %s'%(offset, v, bb.hex()))
if __name__ == '__main__':
main(argv[1], int(argv[2]), int(argv[3]) if len(argv) == 4 else 4)

Wyświetl plik

@ -2,12 +2,17 @@
from binascii import crc_hqx from binascii import crc_hqx
from itertools import cycle from itertools import cycle
from pathlib import Path
from sys import argv from sys import argv
from time import time from time import time
from serial import Serial from serial import Serial
KEY = bytes.fromhex('166c14e62e910d402135d5401303e980') from lib.encdec import eprint
DATA_DIR = Path(__file__).parent / 'data'
KEY = (DATA_DIR / 'comm-key.bin').read_bytes()
BLOCK_SIZE = 0x80 BLOCK_SIZE = 0x80
PREAMBLE = b'\xab\xcd' PREAMBLE = b'\xab\xcd'
@ -60,6 +65,9 @@ class UVK5(Serial):
def __init__(self, port: str | None = None) -> None: def __init__(self, port: str | None = None) -> None:
super().__init__(port, 38400, timeout=5) super().__init__(port, 38400, timeout=5)
def get_version(self):
return self.cmd(CMD_VERSION_REQ)[1][:10].decode().rstrip('\x00')
def read_mem(self, offset, size): def read_mem(self, offset, size):
return self.cmd(CMD_SETTINGS_REQ, i2b16(offset) + i2b16(size)) return self.cmd(CMD_SETTINGS_REQ, i2b16(offset) + i2b16(size))
@ -87,41 +95,43 @@ class UVK5(Serial):
return (cmd_id, data) return (cmd_id, data)
def read_channels_settings(s): def read_channels_settings(self):
names = [] names = []
settings = [] settings = []
data_size = 16 * 200 data_size = 16 * 200
names_offset = 0x0F50 names_offset = 0x0F50
settings_offset = 0x0000 settings_offset = 0x0000
passes = data_size//BLOCK_SIZE passes = data_size//BLOCK_SIZE
for block in range(passes): for block in range(passes):
offset = names_offset + block*BLOCK_SIZE offset = names_offset + block*BLOCK_SIZE
names_set = s.read_mem(offset, BLOCK_SIZE)[1][4:] names_set = self.read_mem(offset, BLOCK_SIZE)[1][4:]
names += [name.decode(errors='ignore').rstrip('\x00') for name in chunk(names_set, 16)] names += [name.decode(errors='ignore').rstrip('\x00') for name in chunk(names_set, 16)]
for block in range(passes): for block in range(passes):
offset = settings_offset + block*BLOCK_SIZE offset = settings_offset + block*BLOCK_SIZE
settings_set = s.read_mem(offset, BLOCK_SIZE)[1][4:] settings_set = self.read_mem(offset, BLOCK_SIZE)[1][4:]
settings += [(b2i(setting[:4])/100000.0, ) for setting in chunk(settings_set, 16)] settings += [(b2i(setting[:4])/100000.0, ) for setting in chunk(settings_set, 16)]
for i, name in enumerate(names): for i, name in enumerate(names):
if name: if name:
print(f'{i+1:0>3}. {name: <16} {settings[i][0]:0<8} M') print(f'{i+1:0>3}. {name: <16} {settings[i][0]:0<8} M')
else: else:
print(f'{i+1:0>3}. -') print(f'{i+1:0>3}. -')
def main(port): def main(port, cmd, args):
with UVK5(port) as s: with UVK5(port) as s:
ver = s.cmd(CMD_VERSION_REQ)[1][:10].decode().rstrip('\x00') print('FW version:', s.get_version())
print('FW version:', ver) s.read_channels_settings()
read_channels_settings(s)
# data = s.read_mem(0x0E70, 0x80)[1] # data = s.read_mem(0x0E70, 0x80)[1]
# print('0x%x' % b2i(data[:2]), '0x%x' % b2i(data[2:4]), data[4:]) # print('0x%x' % b2i(data[:2]), '0x%x' % b2i(data[2:4]), data[4:])
if __name__ == '__main__': if __name__ == '__main__':
main(argv[1]) if len(argv) < 3:
eprint(f'Usage: {argv[0]} <port> <command> [args]')
exit(255)
main(argv[1], argv[2], argv[3:])