2022-05-14 15:57:52 +08:00
|
|
|
import usb2canfd;
|
|
|
|
import thread.command;
|
|
|
|
import win.timer;
|
|
|
|
//初始化CAN句柄对象
|
|
|
|
CANHw = usb2canfd.USB2CANHW();
|
|
|
|
CANHw.LoadDll();
|
|
|
|
|
2022-07-06 16:55:12 +08:00
|
|
|
DiagReqID = 0x741;//0x18dadff1;
|
|
|
|
DiagRespID = 0x751;//0x18daf1df;
|
|
|
|
DiagGloableID = 0x7DF;//0x18DB33F1;
|
2022-05-14 17:00:49 +08:00
|
|
|
stopflag = 0;
|
2022-05-14 15:57:52 +08:00
|
|
|
//注册一个消息钩子函数
|
|
|
|
FuncLoopMsg = function(msg){
|
|
|
|
select(msg.message) {
|
|
|
|
case 100 {//刷新硬件
|
|
|
|
FuncFreshHw();
|
|
|
|
}
|
2022-05-17 16:34:44 +08:00
|
|
|
case 101 {//连接硬件
|
2022-09-30 16:32:52 +08:00
|
|
|
//console.log("msg.wParam = " + msg.wParam);
|
|
|
|
//console.log("msg.lParam = " + msg.lParam);
|
2022-05-14 15:57:52 +08:00
|
|
|
FuncConnect(msg.wParam,msg.lParam);
|
|
|
|
}
|
2022-05-17 16:34:44 +08:00
|
|
|
case 102 {//开始boot
|
2022-05-14 17:00:49 +08:00
|
|
|
FuncStartBoot();
|
2022-05-14 15:57:52 +08:00
|
|
|
}
|
2022-05-17 16:34:44 +08:00
|
|
|
case 103 {//停止boot
|
2022-05-17 14:11:10 +08:00
|
|
|
FuncStopBoot();
|
2022-05-14 15:57:52 +08:00
|
|
|
}
|
2022-05-17 16:34:44 +08:00
|
|
|
case 104 {//打开s19文件
|
2022-10-04 16:01:27 +08:00
|
|
|
if(msg.wParam == 0){
|
|
|
|
FuncDisplay("打开FlashDriver");
|
|
|
|
var ret = FuncOpenS19File(msg.wParam);
|
|
|
|
if(ret != null){
|
|
|
|
thread.command.$ShowFlashDrvPath(ret);
|
|
|
|
}
|
2022-05-17 16:34:44 +08:00
|
|
|
}
|
2022-10-04 16:01:27 +08:00
|
|
|
else {
|
|
|
|
FuncDisplay("打开烧写文件");
|
|
|
|
var ret = FuncOpenS19File(msg.wParam);
|
|
|
|
if(ret != null){
|
|
|
|
thread.command.$ShowPath(ret);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2022-05-17 16:34:44 +08:00
|
|
|
}
|
2022-05-18 14:06:44 +08:00
|
|
|
case 105 {//停止boot
|
|
|
|
thread.stop(0);
|
|
|
|
}
|
2022-05-14 15:57:52 +08:00
|
|
|
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){
|
2022-09-30 16:32:52 +08:00
|
|
|
var canfd = (chn&0x80)==0x80?true:false;
|
|
|
|
var ret = CANHw.OpenDevice(dev,chn&0x7f,canfd);
|
2022-05-14 15:57:52 +08:00
|
|
|
if(ret == 0){
|
|
|
|
FuncDisplay("连接成功");
|
2022-05-18 10:43:03 +08:00
|
|
|
thread.command.$Connected();
|
2022-05-14 15:57:52 +08:00
|
|
|
}
|
|
|
|
else {
|
|
|
|
FuncDisplay("连接失败");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
FuncDisplay = function(str){
|
|
|
|
thread.command.$Display(str);//"线程" +
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
loadcodex("\user\Diag10code.aardio");
|
2022-05-18 08:55:11 +08:00
|
|
|
loadcodex("\user\Diag11code.aardio");
|
2022-05-14 15:57:52 +08:00
|
|
|
loadcodex("\user\Diag22code.aardio");
|
2022-05-14 17:00:49 +08:00
|
|
|
loadcodex("\user\Diag27code.aardio");
|
2022-05-17 14:11:10 +08:00
|
|
|
loadcodex("\user\Diag2Ecode.aardio");
|
2022-05-18 08:55:11 +08:00
|
|
|
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");
|
2022-05-14 15:57:52 +08:00
|
|
|
|
2022-05-18 08:55:11 +08:00
|
|
|
loadcodex("\user\DiagBootcode.aardio");
|
2022-05-17 16:34:44 +08:00
|
|
|
loadcodex("\user\S19Decode.aardio");
|
2022-05-18 08:55:11 +08:00
|
|
|
|
|
|
|
|
2022-05-14 17:00:49 +08:00
|
|
|
RespState = 0;
|
2022-05-14 15:57:52 +08:00
|
|
|
|
|
|
|
FuncDiagPro = function(diagmsg){
|
2022-05-18 14:06:44 +08:00
|
|
|
|
2022-05-14 15:57:52 +08:00
|
|
|
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 {
|
2022-05-17 14:11:10 +08:00
|
|
|
FuncDiag27Pro(table.slice(diagmsg.data,1,diagmsg.len))
|
2022-05-14 15:57:52 +08:00
|
|
|
}
|
|
|
|
case 0x74 {
|
2022-05-18 10:43:03 +08:00
|
|
|
FuncDiag34Pro(table.slice(diagmsg.data,1,diagmsg.len))
|
|
|
|
}
|
|
|
|
case 0x71 {
|
|
|
|
FuncDiag31Pro(table.slice(diagmsg.data,1,diagmsg.len))
|
2022-05-14 15:57:52 +08:00
|
|
|
}
|
|
|
|
case 0x76 {
|
2022-05-18 10:43:03 +08:00
|
|
|
FuncDiag36Pro(table.slice(diagmsg.data,1,diagmsg.len))
|
2022-05-14 15:57:52 +08:00
|
|
|
}
|
|
|
|
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))
|
|
|
|
}
|
2022-05-18 08:55:11 +08:00
|
|
|
case 0x6E {
|
|
|
|
FuncDiag2EPro(table.slice(diagmsg.data,1,diagmsg.len))
|
|
|
|
}
|
2022-05-14 15:57:52 +08:00
|
|
|
else {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
RespState = diagmsg.sid;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-05-14 17:00:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FuncStartBoot = function(){
|
|
|
|
FuncInitBootState();
|
|
|
|
boottimer.enable();
|
2022-05-14 15:57:52 +08:00
|
|
|
|
2022-05-14 17:00:49 +08:00
|
|
|
FuncDisplay("开始刷写");
|
2022-05-18 14:06:44 +08:00
|
|
|
stopflag = 0;
|
2022-05-14 15:57:52 +08:00
|
|
|
}
|
|
|
|
|
2022-05-17 14:11:10 +08:00
|
|
|
var PackNext = 0x21;
|
|
|
|
var Packdata = {};
|
|
|
|
var PackID = 0;
|
2022-05-18 14:06:44 +08:00
|
|
|
var FuncSendPackage = function(){
|
2022-05-17 14:11:10 +08:00
|
|
|
while(#Packdata > 0)
|
|
|
|
{
|
2022-05-18 14:06:44 +08:00
|
|
|
sleep(0.3);
|
2022-05-17 14:11:10 +08:00
|
|
|
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);
|
2022-05-18 14:06:44 +08:00
|
|
|
|
2022-05-17 14:11:10 +08:00
|
|
|
PackNext += 1;
|
|
|
|
if(PackNext > 0x2f){
|
|
|
|
PackNext = 0x20;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
FuncPushPackage = function(ID,data){
|
|
|
|
PackNext = 0x21;
|
|
|
|
Packdata = data;
|
|
|
|
PackID = ID;
|
|
|
|
}
|
2022-05-14 15:57:52 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
2022-05-14 17:00:49 +08:00
|
|
|
boottimer = win.timer(,10);
|
|
|
|
boottimer.onTimer = function(){
|
|
|
|
if(CANHw.isConnected() == false){
|
|
|
|
boottimer.disable();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
FuncBootSeq();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2022-05-14 15:57:52 +08:00
|
|
|
timer1 = win.timer(,1);
|
|
|
|
diagresp = {}
|
|
|
|
timer1.onTimer = function(){
|
|
|
|
if(CANHw.isConnected() == false){
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
ret = CANHw.GetMsg();
|
2022-09-30 16:32:52 +08:00
|
|
|
|
2022-05-14 15:57:52 +08:00
|
|
|
for(i=1;#ret;1){
|
|
|
|
//console.log("id = " + tostring(ret[i].id))
|
2022-05-17 14:11:10 +08:00
|
|
|
if(ret[i].id & 0x7FFFFFFF == DiagRespID){
|
2022-05-14 15:57:52 +08:00
|
|
|
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));
|
|
|
|
}
|
2022-05-18 14:06:44 +08:00
|
|
|
elseif(ret[i].data[1] <= 0x07){//单帧
|
2022-05-14 15:57:52 +08:00
|
|
|
//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);
|
|
|
|
}
|
2022-05-17 14:11:10 +08:00
|
|
|
elseif(ret[i].data[1] >= 0x21 && ret[i].data[1] <= 0x2f){
|
|
|
|
if(ret[i].data[1] == diagresp["next"]){//多帧
|
2022-05-14 15:57:52 +08:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-05-17 14:11:10 +08:00
|
|
|
elseif(ret[i].data[1] == 0x30){//
|
|
|
|
FuncSendPackage();
|
2022-09-30 16:32:52 +08:00
|
|
|
}
|
2022-05-14 15:57:52 +08:00
|
|
|
}
|
2022-09-30 16:32:52 +08:00
|
|
|
else {
|
|
|
|
//console.varDump(ret[i].id);
|
|
|
|
//显示报文
|
|
|
|
}
|
|
|
|
|
2022-05-14 15:57:52 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
timer1.enable();
|
|
|
|
FuncDisplay("正在运行");
|
|
|
|
|
|
|
|
|