添加ftm选项 未实现
This commit is contained in:
176
bin/factory_mode.py
Normal file
176
bin/factory_mode.py
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
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"))
|
17
kunlun.py
17
kunlun.py
@@ -20,6 +20,7 @@ from bin.bin_to_hex import bin_file_decrypt
|
|||||||
from bin.bin_to_hex import clear_tmp
|
from bin.bin_to_hex import clear_tmp
|
||||||
from bin.bin_to_hex import load_flash_info
|
from bin.bin_to_hex import load_flash_info
|
||||||
from bin.base import bin_path
|
from bin.base import bin_path
|
||||||
|
from bin.factory_mode import ftm_handle
|
||||||
|
|
||||||
|
|
||||||
def init_send(s_port:serial.Serial, send_str:str):
|
def init_send(s_port:serial.Serial, send_str:str):
|
||||||
@@ -182,6 +183,16 @@ def upload_bin(x_modem:xmodem.XMODEM, w_file):
|
|||||||
myprint (f"Receiving {w_file} result: {xmodem_send}, consuming time: {(time_stamp_end-time_stamp_start)} s ")
|
myprint (f"Receiving {w_file} result: {xmodem_send}, consuming time: {(time_stamp_end-time_stamp_start)} s ")
|
||||||
|
|
||||||
|
|
||||||
|
def recv_ser_data_ftm(s_port:serial.Serial,timeout:float=1):
|
||||||
|
recv_data=bytearray()
|
||||||
|
while timeout>0:
|
||||||
|
time.sleep(0.1)
|
||||||
|
timeout-=0.1
|
||||||
|
bytes2read = s_port.in_waiting
|
||||||
|
if(bytes2read>0):
|
||||||
|
tmp = s_port.read(bytes2read)
|
||||||
|
recv_data+=tmp
|
||||||
|
ftm_handle(recv_data)
|
||||||
|
|
||||||
|
|
||||||
def getc(size, timeout=1):
|
def getc(size, timeout=1):
|
||||||
@@ -342,6 +353,8 @@ def global_def():
|
|||||||
elif(args.console is not None):
|
elif(args.console is not None):
|
||||||
iot_flash_file=args.console
|
iot_flash_file=args.console
|
||||||
function_type='console'
|
function_type='console'
|
||||||
|
elif(args.ftm):
|
||||||
|
function_type='ftm'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -362,6 +375,7 @@ def parser_init():
|
|||||||
parser.add_argument('-i','--layout_index',action='store',type=int,help='解析接收到的flash文件或转换bin文件时使用的layout,不指定则不解析')
|
parser.add_argument('-i','--layout_index',action='store',type=int,help='解析接收到的flash文件或转换bin文件时使用的layout,不指定则不解析')
|
||||||
parser.add_argument('--b_rate',action='store',type=int,default=115200,help='下载ram程序 上传flash数据 控制台 接收log等 使用的串口波特率')
|
parser.add_argument('--b_rate',action='store',type=int,default=115200,help='下载ram程序 上传flash数据 控制台 接收log等 使用的串口波特率')
|
||||||
parser.add_argument('--nb_rate',action='store',type=int,default=1500000,help='下载flash程序使用的串口波特率')
|
parser.add_argument('--nb_rate',action='store',type=int,default=1500000,help='下载flash程序使用的串口波特率')
|
||||||
|
parser.add_argument('--ftm',action='store_true',type=bool,default=False,help='进入工厂模式')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -412,6 +426,9 @@ if __name__ == '__main__':
|
|||||||
recv_ser_data(ser)
|
recv_ser_data(ser)
|
||||||
read_input(ser)
|
read_input(ser)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
if(function_type=="ftm"):
|
||||||
|
myprint("此功能尚未实现")
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
modem = xmodem.XMODEM(getc, putc, mode='xmodem1k')
|
modem = xmodem.XMODEM(getc, putc, mode='xmodem1k')
|
||||||
# 发送启动字符让设备进入xmodem模式
|
# 发送启动字符让设备进入xmodem模式
|
||||||
|
@@ -15,7 +15,7 @@ import time
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
# 定义配置文件路径
|
# 定义配置文件路径
|
||||||
_vscode_cfg_path=os.path.normpath(os.path.abspath('.')+'/../../../.vscode/c_cpp_properties.json')
|
_vscode_cfg_path=os.path.normpath(os.path.abspath(os.path.split(sys.argv[0])[0])+'/../../../.vscode/c_cpp_properties.json')
|
||||||
|
|
||||||
# 定义编译日志路径
|
# 定义编译日志路径
|
||||||
_build_log_path='build_log.log'
|
_build_log_path='build_log.log'
|
||||||
|
Reference in New Issue
Block a user