diff --git a/tools/module_calfix.py b/tools/module_calfix.py new file mode 100644 index 0000000..1cb06cf --- /dev/null +++ b/tools/module_calfix.py @@ -0,0 +1,47 @@ +#!/usr/bin/env python3 +"""RT-4D DMR-модуль: чтение/запись частотного трима VCCN через 0x68 (Linux, ttyACM0). +Рация в режиме «Обновление DMR чипа». 0x68: 68 cmd 01 01 00 00 lenHi lenLo 10 (CRC не проверяется). +""" +import serial, time, sys, argparse +def frame(cmd, payload=b""): + return bytes([0x68,cmd,1,1,0,0,(len(payload)>>8)&0xFF,len(payload)&0xFF])+payload+bytes([0x10]) +def xfer(sp, fr, wait=0.4): + sp.reset_input_buffer(); sp.write(fr); time.sleep(0.03) + b=b""; t=time.time() + while time.time()-t пишу DMR VCCN band1&2 = 0x{a.val:02x}") + xfer(sp,frame(0xB4,bytes([1,1,a.val]))) # write band1 + xfer(sp,frame(0xB4,bytes([1,2,a.val]))) # write band2 + w=parse(xfer(sp,frame(0xBD,bytes([1])))) # WriteAll + print(" WriteAll:", "OK" if w and w['st']==0 else f"st={w['st'] if w else '?'}") + nb1,nb2=rd(1),rd(2) + print(f" прочитал обратно: band1=0x{nb1:02x} band2=0x{nb2:02x}") + xfer(sp,frame(0xB0,bytes([1,0]))) # CloseCal + sp.close() +if __name__=="__main__": main()