import usb2canfd; import thread.command; import win.timer; //初始化CAN句柄对象 CANHw = usb2canfd.USB2CANHW(); CANHw.LoadDll(); DiagReqID = 0x720;//0x18dadff1; DiagRespID = 0x620;//0x18daf1df; DiagGloableID = 0x7DF;//0x18DB33F1; stopflag = 0; //注册一个消息钩子函数 FuncLoopMsg = function(msg){ select(msg.message) { case 100 {//刷新硬件 FuncFreshHw(); } case 101 {//连接硬件 //console.log("msg.wParam = " + msg.wParam); //console.log("msg.lParam = " + msg.lParam); FuncConnect(msg.wParam,msg.lParam); } case 102 {//开始boot FuncStartBoot(msg.wParam); } case 103 {//停止boot FuncStopBoot(); //FuncGetPowerVal(); } case 104 {//读取电压 FuncGetPowerVal(); } case 105 {//控制电源 FuncPowerCtrl(msg.wParam); } case 106 { FuncSetCANID(msg.wParam,msg.lParam); } case 107 { FuncSendMsg(msg.wParam); } case 109 { win.quitMessage(); } case 110 {//readDID FuncReadDID(msg.wParam); } case 111 { FuncReq10(false,msg.wParam); } case 112 { FuncReq28(msg.wParam); } case 113 { FuncReq85(msg.wParam); } case 114 { FuncReq27(msg.wParam); } case 115 { FuncReadDeviceVersion(1); } else { } } } FuncReadDeviceVersion = function(id){ var ret,DeviceInfo,funcstr = CANHw.GetDevInfo(id); if(ret != 0){ var v1 = (DeviceInfo.FirmwareVersion>>24)&0xff; var v2 = (DeviceInfo.FirmwareVersion>>16)&0xff; var v3 = DeviceInfo.FirmwareVersion&0xffff; FuncDisplay("固件版本"++v1++"."++v2++"."++v3); FuncDisplay("Firmware version:"++v1++"."++v2++"."++v3) } else { FuncDisplay("读取失败"); } } var delay_const = 100000; DelayTest = function(){ import time.performance; var tk = time.performance.tick(); for(i=1;1000000;1) { } var tk2 = time.performance.tick(); tk2 = tk2 - tk; delay_const = math.ceil(1000000*(1/tk2)); FuncDisplay(delay_const); //console.log(delay_const); } FuncSetCANID = function(req,resp){ DiagReqID = req; DiagRespID = resp; } FuncSendMsg = function(no){ select(no) { case 1 { var data = {0x00,0x00,0x40,0x00, 0x00,0x08,0x00,0x00}; CANHw.SendMsg(0x30,data); } else { } } } FuncLoadAPPFile = function(){ var ret = FuncOpenS19File(1,"\res\P417_SWTL_20240722.S19"); if(ret != null){ FuncDisplay("加载左侧烧录文件"); FuncDisplay("Load the left burning file"); var crc32 = FuncGetFlashCRC(1); FuncDisplay("CRC = " ++ string.format("%X",crc32)++" "); if(string.format("%X",crc32) != "F6570262"){ FuncDisplay("CRC校验错误,文件已损坏"); thrdTable["文件加载状态"] = false; return ; } } else { FuncDisplay("加载左侧文件失败"); thrdTable["文件加载状态"] = false; return ; } var ret = FuncOpenS19File(2,"\res\P417_SWTR_20240722.S19"); if(ret != null){ FuncDisplay("加载右侧烧录文件"); FuncDisplay("Load the right burning file"); var crc32 = FuncGetFlashCRC(2); FuncDisplay("CRC = " ++ string.format("%X",crc32)++" "); if(string.format("%X",crc32) != "1F3D406C"){ FuncDisplay("CRC校验错误,文件已损坏"); thrdTable["文件加载状态"] = false; return ; } } else { FuncDisplay("加载左侧文件失败"); thrdTable["文件加载状态"] = false; return ; } thrdTable["文件加载状态"] = true; } FuncPowerCtrl = function(state){ var ret = CANHw.SetPower(state); return ret; } FuncGetPowerVal = function(){ var ret,buf = CANHw.GetPower(); var val = (buf[2]<<8) + buf[1]; //console.dumpJson(buf); FuncDisplay("BAT电压"++val++"mV") thrdTable["电源电压"] = val; } FuncFreshHw = function(){ var hwnum = CANHw.FlashHw(); if(hwnum == 0){ //mainForm.cbbDev.text = "未找到硬件" } else { FuncDisplay("找到硬件"); FuncDisplay("Find hardware "); thrdTable.设备 = CANHw.GetAvailableHW() } } FuncConnect = function(dev,chn){ var canfd = (chn&0x80)==0x80?true:false; var ret = CANHw.OpenDevice(dev,chn&0x7f,canfd); if(ret == 0){ //FuncDisplay("连接成功"); thread.command.$Connected(); } else { FuncDisplay("连接失败"); } FuncPowerCtrl(1); } FuncDisplay = function(str){ thread.command.$Display(str);//"线程" + } //console.log("在loadcodex测试") //console.log(thrdTable.test) loadcodex("\user\Diag10code.aardio"); loadcodex("\user\Diag11code.aardio"); loadcodex("\user\Diag22code.aardio"); loadcodex("\user\Diag27code.aardio"); loadcodex("\user\Diag2Ecode.aardio"); loadcodex("\user\Diag28code.aardio"); loadcodex("\user\Diag31code.aardio"); loadcodex("\user\Diag34code.aardio"); loadcodex("\user\Diag36code.aardio"); loadcodex("\user\Diag37code.aardio"); loadcodex("\user\Diag7Fcode.aardio"); loadcodex("\user\Diag85code.aardio"); loadcodex("\user\DiagBootcode.aardio"); loadcodex("\user\S19Decode.aardio"); RespState = 0; FuncDiagPro = function(diagmsg){ select(diagmsg.sid) { case 0x50 { FuncDiag10Pro(table.slice(diagmsg.data,1,diagmsg.len)) } case 0x62 { FuncDiag22Pro(table.slice(diagmsg.data,1,diagmsg.len)) } case 0x67 { FuncDiag27Pro(table.slice(diagmsg.data,1,diagmsg.len)) } case 0x74 { FuncDiag34Pro(table.slice(diagmsg.data,1,diagmsg.len)) } case 0x71 { FuncDiag31Pro(table.slice(diagmsg.data,1,diagmsg.len)) } case 0x76 { FuncDiag36Pro(table.slice(diagmsg.data,1,diagmsg.len)) } case 0x68 { FuncDiag28Pro(table.slice(diagmsg.data,1,diagmsg.len)) } case 0xC5 { FuncDiag85Pro(table.slice(diagmsg.data,1,diagmsg.len)) } case 0x7F { FuncDiag7FPro(table.slice(diagmsg.data,1,diagmsg.len)) } case 0x6E { FuncDiag2EPro(table.slice(diagmsg.data,1,diagmsg.len)) } else { } } RespState = diagmsg.sid; } FuncStartBoot = function(id){ FuncInitBootState(id); boottimer.enable(); FuncDisplay("开始刷写"); FuncDisplay("Start flashing "); stopflag = 0; } var delay = function(w){ while(w){ for(i=1;delay_const;1) { } w -= 1; } } var PackNext = 0x21; var Packdata = {}; var PackID = 0; var FuncSendPackage = function(){ while(#Packdata > 0) { //sleep(1); delay(1); var data = {PackNext,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC}; var max = #Packdata > 7 ? 7 : #Packdata; for(i=1;max;1){ data[i+1] = table.remove(Packdata); } //sleep(0.3); CANHw.SendMsg(PackID,data); PackNext += 1; if(PackNext > 0x2f){ PackNext = 0x20; } } } FuncPushPackage = function(ID,data){ PackNext = 0x21; Packdata = data; PackID = ID; } disconnected_detect = win.timer(,200); disconnected_detect.onTimer = function(){ if(CANHw.isConnected() == false){ return ; } var ret,DeviceInfo,str = CANHw.GetNowInfo(); if(ret == 0){ thrdTable.设备连接状态 = 0; //console.log(DeviceInfo); //console.log(str); } } disconnected_detect.enable(); boottimer = win.timer(,10); boottimer.onTimer = function(){ if(CANHw.isConnected() == false){ boottimer.disable(); return; } FuncBootSeq(); } LeftVibrationFault = 0; LeftTouchFault = 0; LeftPressSensorFault = 0; LeftCommonFault = 0; RightVibrationFault = 0; RightTouchFault = 0; RightPressSensorFault = 0; RightCommonFault = 0; timer1 = win.timer(,1); diagresp = {} getbitdata = function(byte,startbit,len){ return ((byte>>startbit) & ((1<= 0x21 && ret[i].data[1] <= 0x2f){ if(ret[i].data[1] == diagresp["next"]){//多帧 diagresp["next"] += 1; if(diagresp["next"] >= 0x2F){ diagresp["next"] = 0x20; } table.append(diagresp["data"],table.slice(ret[i].data,2)); if(#diagresp["data"] >= diagresp["len"]){ FuncDiagPro(diagresp); } } } elseif(ret[i].data[1] == 0x30){// FuncSendPackage(); } } else { var id = ret[i].id & 0x7FFFFFFF; select(id) { case 0x34 { //console.log("get 0x34"); LeftVibrationFault = getbitdata(ret[i].data[1],0,2); LeftTouchFault = getbitdata(ret[i].data[1],2,2); LeftPressSensorFault = getbitdata(ret[i].data[1],4,3); LeftCommonFault = getbitdata(ret[i].data[1],7,1); } case 0x38 { RightVibrationFault = getbitdata(ret[i].data[1],0,2); RightTouchFault = getbitdata(ret[i].data[1],2,2); RightPressSensorFault = getbitdata(ret[i].data[1],4,3); RightCommonFault = getbitdata(ret[i].data[1],7,1); } else { } } } } } FuncLoadAPPFile(); timer1.enable(); FuncDisplay("CAN线程正在运行"); FuncDisplay("CAN thread is running "); DelayTest();