can_bootloader/user/CanThread.aardio
2022-05-14 15:57:52 +08:00

197 lines
3.5 KiB
Plaintext

import usb2canfd;
import thread.command;
import win.timer;
//初始化CAN句柄对象
CANHw = usb2canfd.USB2CANHW();
CANHw.LoadDll();
DiagReqID = 0x18dadff1;
DiagRespID = 0x18daf1df;
//注册一个消息钩子函数
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 {
FuncBootload();
}
case 103 {
FuncStop();
}
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\Diag22code.aardio");
loadcodex("\user\Diag85code.aardio");
loadcodex("\user\Diag28code.aardio");
loadcodex("\user\Diag7Fcode.aardio");
var 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 {
}
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))
}
else {
}
}
RespState = diagmsg.sid;
}
FuncStop = function(){
stopflag = 1;
}
FuncWait = function(sid){
for(i=1;40;1){
sleep(100);
if(RespState == (sid + 0x40)){//正响应
return 0;
}
errsid,errnrc = FuncGetNrc()
if(errsid == sid){
if(errnrc == 0x78){
FuncClrNrc();//等待
i = 1;
}
else {
return 1; //负响应
}
}
}
}
FuncBootload = function(){
}
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){
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);
}
}
}
}
}
}
timer1.enable();
FuncDisplay("正在运行");