Files
kunlun_ramtool/bin/factory_mode.py
2024-12-18 15:39:02 +08:00

177 lines
5.8 KiB
Python

import os
import sys
import struct
from bin.log import mywrite
_CmdTable={
0x0001:'IOT_FTM_CMD_ID_PING',
0x0002:'IOT_FTM_CMD_ID_READ',
0x0003:'IOT_FTM_CMD_ID_WRITE',
0x0004:'IOT_FTM_CMD_ID_TX',
0x0005:'IOT_FTM_CMD_ID_RX',
0x0006:'IOT_FTM_CMD_ID_TONE',
0x0007:'IOT_FTM_CMD_ID_STS',
0x0008:'IOT_FTM_CMD_ID_SET',
0x0009:'IOT_FTM_CMD_ID_GET',
0x000a:'IOT_FTM_CMD_ID_SCAN',
0X000b:'IOT_FTM_CMD_ID_HWQCFG',
0X000c:'IOT_FTM_CMD_ID_PKTCFG',
0X000d:'IOT_FTM_CMD_ID_TESTCASE',
0X000e:'IOT_FTM_CMD_ID_MAC_RECE',
0X000f:'IOT_FTM_CMD_ID_MAC_RECE_SNIFFER',
0x0010:'IOT_FTM_CMD_ID_RINGCFG',
0x0011:'IOT_FTM_CMD_ID_SET_FILTERSEL',
0x0012:'IOT_FTM_CMD_ID_SET_FILTER',
0x0013:'IOT_FTM_CMD_ID_SET_RINGDIS',
0x0014:'IOT_FTM_CMD_ID_SNIFFERCFG',
0x0015:'IOT_FTM_CMD_ID_RX_MSG_SHOW',
0x0016:'IOT_FTM_CMD_ID_CMD_CFG',
0x0017:'IOT_FTM_CMD_ID_CRC_CFG',
0x0018:'IOT_FTM_CMD_ID_MAC_PING',
0x0019:'IOT_FTM_CMD_ID_SET_TEINID',
0x001A:'IOT_FTM_CMD_ID_CLEAR_COUNT',
0x001B:'IOT_FTM_CMD_ID_SEND_COUNT',
0x001C:'IOT_FTM_CMD_ID_TPUT_TEST',
0x001D:'IOT_FTM_CMD_ID_DIS_HWQ',
0x001E:'IOT_FTM_CMD_ID_LOAD_DATA',
0x001F:'IOT_FTM_CMD_ID_I2C_WRITE',
0x0020:'IOT_FTM_CMD_ID_I2C_READ',
0x0021:'IOT_FTM_CMD_ID_GPIO_OUT',
0x0022:'IOT_FTM_CMD_ID_GPIO_IN',
0x0023:'IOT_FTM_CMD_ID_UART_LOOPBACK',
0x0024:'IOT_FTM_CMD_ID_SPI_FLASH',
0x0025:'IOT_FTM_CMD_ID_READ_CHIPID',
0x0026:'IOT_FTM_CMD_ID_READ_FW_VER',
0x0027:'IOT_FTM_CMD_ID_BURN_MAC',
0x0028:'IOT_FTM_CMD_ID_SEND_REV_DATA',
0x0029:'IOT_FTM_CMD_ID_GOLDEN_REV_DATA',
0x002a:'IOT_FTM_CMD_ID_SET_PHY_PARA',
0x002b:'IOT_FTM_CMD_ID_READ_MAC',
0x002c:'IOT_FTM_CMD_ID_INIT_DONE',
0x002d:'IOT_FTM_CMD_ID_EFUSE_LOCK',
0x002e:'IOT_FTM_CMD_ID_SPUR_MASK_SET',
0x002f:'IOT_FTM_CMD_ID_OEM_MODULETYPE_SET',
0x0030:'IOT_FTM_CMD_ID_OEM_MODULETYPE_GET',
0x0031:'IOT_FTM_CMD_ID_VENDOR_ID_SET',
0x0032:'IOT_FTM_CMD_ID_CHIP_CODE_SET',
0x0033:'IOT_FTM_CMD_ID_CHIP_CODE_GET',
0x0034:'IOT_FTM_CMD_ID_SET_PPM_NID',
0x0035:'IOT_FTM_CMD_ID_GLB_NID_SET',
0x0036:'IOT_FTM_CMD_ID_CUS_CMD',
0x0037:'IOT_FTM_CMD_ID_VENDOR_ID_GET',
0x0038:'IOT_FTM_CMD_ID_CHIP_MMID_GET',
0x0039:'IOT_FTM_CMD_ID_ZC_CIRCUIT_CHECK',
0x003a:'IOT_FTM_CMD_ID_DISABEL_GPIO_RESET',
0x003b:'IOT_FTM_CMD_ID_DUT_CHARGE_VOL_GET',
0x003c:'IOT_FTM_CMD_ID_FW_CRC_CHECK',
0x003d:'IOT_FTM_CMD_ID_DEV_ID_SET',
0x003e:'IOT_FTM_CMD_ID_DEV_ID_GET',
0x003f:'IOT_FTM_CMD_ID_PT_FW_VER_GET',
0x0040:'IOT_FTM_CMD_ID_HW_VER_SET',
0x0041:'IOT_FTM_CMD_ID_HW_VER_GET',
0x0042:'IOT_FTM_CMD_ID_DUT_CHANNEL_VOL_GET',
0x0043:'IOT_FTM_CMD_ID_DUT_TXRX_MODE_SET',
0x0044:'IOT_FTM_CMD_ID_FLASH_ID_GET',
0x0045:'IOT_FTM_CMD_ID_MAC_ADDR_UPDATE',
0x0046:'IOT_FTM_CMD_ID_BURN_IP_INFO',
0x0047:'IOT_FTM_CMD_ID_READ_IP_INFO',
0x0048:'IOT_FTM_CMD_ID_CHIP_MMID_SET',
0x0049:'IOT_FTM_CMD_ID_CHECK_IMG_CRC',
0x004a:'IOT_FTM_CMD_ID_METER_CROSSTALK_SET',
0x004b:'IOT_FTM_CMD_ID_METER_CROSSTALK_GET',
0x004c:'IOT_FTM_CMD_ID_SOFT_RESTART',
0x004d:'IOT_FTM_CMD_ID_EM_EXT_FUNC',
0x004e:'IOT_FTM_CMD_ID_PASSCODE_GET',
0x004f:'IOT_FTM_CMD_ID_EXT_FLASH_CHECK',
0x0050:'IOT_FTM_CMD_ID_BRK_START_STOP_LOOPBACK',
0x0051:'IOT_FTM_CMD_ID_BRK_ENABLE_INT',
0x0052:'IOT_FTM_CMD_ID_BRK_QUERY_TRIGGER_CNT',
0x0053:'IOT_FTM_CMD_ID_READ_BCD_MAC',
0x0054:'IOT_FTM_CMD_ID_LOADER_TSFM',
0x0055:'IOT_FTM_CMD_ID_CHANNEL_ADC_READ',
0x0056:'IOT_FTM_CMD_ID_METER_PORT_UART_LOOPBACK',
0x0057:'IOT_FTM_CMD_ID_SET_PT_FW_VER',
0x0058:'IOT_FTM_CMD_ID_TEMP_CALI_SET',
0x0059:'IOT_FTM_CMD_ID_TEMP_CALI_GET',
0x005A:'IOT_FTM_CMD_ID_MAC_PHY_DIAGNOSTIC',
0x005B:'IOT_FTM_CMD_ID_ADC_CALI_SET',
0x005C:'IOT_FTM_CMD_ID_ADC_CALI_GET',
0x005D:'IOT_FTM_CMD_ID_ADC_READ_REAL',
0x005E:'IOT_FTM_CMD_ID_PHY_RF_TXIQM_CAL_W',
0x005F:'IOT_FTM_CMD_ID_PHY_RF_TXIQM_CAL_R',
0x0060:'IOT_FTM_CMD_ID_RF_PHY_TX_TONE',
0x0061:'IOT_FTM_CMD_ID_RF_SPI_SYNC',
0x0062:'IOT_FTM_CMD_ID_PHY_RF_TXF_CAL_W',
0x0063:'IOT_FTM_CMD_ID_PHY_RF_TXF_CAL_R',
0x0064:'IOT_FTM_CMD_ID_MP_RF_TEST',
0x0065:'IOT_FTM_CMD_ID_RF_TRS_CHK',
0x0066:'IOT_FTM_CMD_ID_EFUSE_CHECK',
0x0067:'IOT_FTM_CMD_ID_MP_RF_CAL_CFG',
0x0068:'IOT_FTM_CMD_ID_MP_RF_CAL_MEAS',
0x0069:'IOT_FTM_CMD_ID_MP_RF_CAL_UPDATE',
0x006A:'IOT_FTM_CMD_ID_POWER_SYNC',
0x006B:'IOT_FTM_CMD_ID_SECURITY_CFG_SET',
0x006C:'IOT_FTM_CMD_ID_SECURITY_CFG_GET',
0x006D:'IOT_FTM_CMD_ID_RF_PHY_TX_TONE_RAW',
0x006E:'IOT_FTM_CMD_ID_TOPO_ADC_DUMP',
0x006F:'IOT_FTM_CMD_ID_IR_LOOPBACK_TEST',
0x0070:'IOT_FTM_CMD_ID_RF_TX_DC_LOOP_CALI',
0x0071:'IOT_FTM_CMD_ID_SET_GET_PT_INFO',
0x0072:'IOT_FTM_CMD_ID_DUMP_TO_MEM',
}
def ftm_decode(data:bytearray):
# 跳过开头的6个字节 src mac 和6个字节 dst mac
data=data[12:]
# print(data)
hdr=struct.unpack("<HHHHHH",data[:12])
hdr_dict={
"module_id":hex(hdr[0]),# 03是模块 04是pt底板
"crc":hex(hdr[1]),
"msg_id":f'{_CmdTable.get(hdr[2],"unknown")} ({hex(hdr[2])})',
"rsv1_rsv2":hex(hdr[3]),
"msg_len":hdr[4],
"sn":hdr[5]
}
cmd=struct.unpack("<HHH",data[12:12+6])
cmd_dict={
"cmd_id":f'{_CmdTable.get(cmd[0],"unknown")} ({hex(cmd[0])})',
"total_len":cmd[1],
"current_pkt":cmd[2],
}
if(len(data)==18+cmd_dict['total_len']):
payload=data[18:]
else:
payload=bytearray()
print(hdr_dict)
print(cmd_dict)
print(f"data: {payload.hex(' ')}")
def ftm_handle(data:bytearray):
while len(data)>0:
index_start=data.find(b'##')
index_end=data.find(b'@@')
if(index_start>=0 and index_end>=0):
try:
s=data[:index_start]
txt=s.decode("utf-8")
mywrite(txt)
except Exception as e:
pass
ftm_decode(data[index_start+2:index_end])
data=data[index_end+2:]
if __name__ == "__main__":
ftm_handle(bytearray.fromhex("2323000000000000000000000000030000004f0000000b0000004f00050005000910110f0d4040"))
ftm_handle(bytearray.fromhex("232300000000000000000000000004000000180000000200000024004040"))