import usb2canfd; import thread.command; import win.timer; //初始化CAN句柄对象 CANHw = usb2canfd.USB2CANHW(); CANHw.LoadDll(); DiagReqID = 0x18dadff1; DiagRespID = 0x18daf1df; DiagGloableID = 0x18DB33F1; stopflag = 0; //注册一个消息钩子函数 FuncLoopMsg = function(msg){ //console.log( "收到消息",msg.message ); //console.dumpJson(msg); select(msg.message) { case 100 {//刷新硬件 FuncFreshHw(); } case 101 {//连接硬件 FuncConnect(msg.wParam,msg.lParam); } case 102 {//开始boot FuncStartBoot(); } case 103 {//停止boot FuncStopBoot(); } case 104 {//打开s19文件 FuncDisplay("打开文件"); var ret = FuncOpenS19File(); if(ret != null){ thread.command.$ShowPath(ret); } } case 110 {//readDID FuncReadDID(msg.wParam); } case 111 { FuncReq10(msg.wParam); } case 112 { FuncReq28(msg.wParam); } case 113 { FuncReq85(msg.wParam); } case 114 { FuncReq27(msg.wParam); } else { } } } FuncFreshHw = function(){ var hwnum = CANHw.FlashHw(); if(hwnum == 0){ //mainForm.cbbDev.text = "未找到硬件" } else { FuncDisplay("找到硬件") } } FuncConnect = function(dev,chn){ var ret = CANHw.OpenDevice(dev,chn); if(ret == 0){ FuncDisplay("连接成功"); } else { FuncDisplay("连接失败"); } } FuncDisplay = function(str){ thread.command.$Display(str);//"线程" + } 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){ //console.log("诊断服务") //console.dumpJson(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 { } case 0x76 { } 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(){ FuncInitBootState(); boottimer.enable(); FuncDisplay("开始刷写"); } var PackNext = 0x21; var Packdata = {}; var PackID = 0; FuncSendPackage = function(){ while(#Packdata > 0) { 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); } CANHw.SendMsg(PackID,data); sleep(1); PackNext += 1; if(PackNext > 0x2f){ PackNext = 0x20; } } } FuncPushPackage = function(ID,data){ PackNext = 0x21; Packdata = data; PackID = ID; } boottimer = win.timer(,10); boottimer.onTimer = function(){ if(CANHw.isConnected() == false){ boottimer.disable(); return; } FuncBootSeq(); } timer1 = win.timer(,1); diagresp = {} timer1.onTimer = function(){ if(CANHw.isConnected() == false){ return; } ret = CANHw.GetMsg(); for(i=1;#ret;1){ //console.log("id = " + tostring(ret[i].id)) if(ret[i].id & 0x7FFFFFFF == DiagRespID){ if(ret[i].data[1] == 0x10){//首帧 var data = {0x30,0x00,0x14,0x00,0,0,0,0}; CANHw.SendMsg(DiagReqID,data); diagresp["sid"] = ret[i].data[3]; diagresp["len"] = ret[i].data[2]-1; diagresp["data"] = {}; diagresp["next"] = 0x21; table.append(diagresp["data"],table.slice(ret[i].data,4)); } elseif(ret[i].data[1] <= 0x06){//单帧 //console.dumpJson() diagresp["sid"] = ret[i].data[2]; diagresp["len"] = ret[i].data[1]-1; diagresp["data"] = table.slice(ret[i].data,3); FuncDiagPro(diagresp); } elseif(ret[i].data[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(); } } } } timer1.enable(); FuncDisplay("正在运行");