Compare commits

...

12 Commits

19 changed files with 5141 additions and 400 deletions

2
.gitignore vendored
View File

@ -1,2 +1,4 @@
/dist /dist
/.build /.build
/log
/配置文件.ini

View File

@ -1,9 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<project ver="10" name="CAN_Bootloader" libEmbed="true" icon="..." ui="win" output="CAN_Bootloader.exe" CompanyName="单位名称" FileDescription="CAN_Bootloader" LegalCopyright="Copyright (C) 作者 2022" ProductName="CAN_Bootloader" InternalName="CAN_Bootloader" FileVersion="0.0.0.03" ProductVersion="0.0.0.03" publishDir="/dist/" dstrip="false" local="false" ignored="false"> <project ver="10" name="CAN_Bootloader" libEmbed="true" icon="res\icon.ico" ui="win" output="CAN_Bootloader.exe" CompanyName="单位名称" FileDescription="CAN_Bootloader" LegalCopyright="Copyright (C) 作者 2022" ProductName="CAN_Bootloader" InternalName="CAN_Bootloader" FileVersion="0.0.0.03" ProductVersion="0.0.0.03" publishDir="/dist/" dstrip="false" local="false" ignored="false">
<file name="main.aardio" path="main.aardio" comment="main.aardio"/> <file name="main.aardio" path="main.aardio" comment="main.aardio"/>
<folder name="资源文件" path="res" embed="true" local="false" ignored="false"/> <folder name="资源文件" path="res" embed="true" local="false" ignored="false">
<file name="icon.ico" path="res\icon.ico" comment="res\icon.ico"/>
<file name="p417_SWTL_20240722.S19" path="res\p417_SWTL_20240722.S19" comment="res\p417_SWTL_20240722.S19"/>
<file name="p417_SWTR_20240722.S19" path="res\p417_SWTR_20240722.S19" comment="res\p417_SWTR_20240722.S19"/>
</folder>
<folder name="窗体文件" path="dlg" comment="目录" embed="true" local="false" ignored="false"> <folder name="窗体文件" path="dlg" comment="目录" embed="true" local="false" ignored="false">
<file name="诊断子窗口.aardio" path="dlg\诊断子窗口.aardio" comment="dlg\诊断子窗口.aardio"/> <file name="about.aardio" path="dlg\about.aardio" comment="dlg\about.aardio"/>
</folder> </folder>
<folder name="user" path="user" embed="true" comment="目录" local="false" ignored="false"> <folder name="user" path="user" embed="true" comment="目录" local="false" ignored="false">
<file name="CanThread.aardio" path="user\CanThread.aardio" comment="user\CanThread.aardio"/> <file name="CanThread.aardio" path="user\CanThread.aardio" comment="user\CanThread.aardio"/>

26
dlg/about.aardio Normal file
View File

@ -0,0 +1,26 @@
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=499;bottom=399;border="thin";mode="popup";title=false)
winform.add(
button={cls="button";text="确定";left=359;top=346;right=471;bottom=387;z=1};
static={cls="static";text="Static";left=21;top=17;right=458;bottom=340;transparent=1;z=2}
)
/*}}*/
更新履历 = /*
V0.1_20230320: 初版
V0.2_20240921: 中英文版本
v0.3_20241009: 增加日志记录;增加VIN记录;
v0.4_20241019: VIN记录方式更改
v0.5_20241029: 限制刷写前的软件版本为SW0302
*/
winform.button.oncommand = function(id,event){
winform.close();
}
winform.static.text = 更新履历;
winform.show();
win.loopMessage();
return winform;

View File

@ -1,67 +0,0 @@
import win.ui;
/*DSG{{*/
var winform = win.form(text="诊断读取";right=679;bottom=319;border="thin";max=false;mode="popup")
winform.add(
btnDID_1701={cls="button";text="电机当前位置霍尔数";left=36;top=162;right=163;bottom=193;z=5};
btnDID_1702={cls="button";text="软止点位置霍尔数";left=36;top=203;right=163;bottom=234;z=6};
btnDID_1706={cls="button";text="软止点学习状态";left=178;top=40;right=305;bottom=71;z=7};
btnDID_1707={cls="button";text="座椅电机电流";left=178;top=80;right=305;bottom=111;z=8};
btnDID_1708={cls="button";text="模块输入信号状态";left=178;top=121;right=305;bottom=152;z=9};
btnDID_1709={cls="button";text="模块输出信号状态";left=178;top=162;right=305;bottom=193;z=11};
btnDID_170B={cls="button";text="系统供电电压";left=178;top=203;right=305;bottom=234;z=10};
btnDID_F187={cls="button";text="车辆备用零部件编号";left=36;top=40;right=163;bottom=71;z=2};
btnDID_F18A={cls="button";text="供应商公司名称代码";left=36;top=80;right=163;bottom=111;z=3};
btnDID_F197={cls="button";text="ECU 系统名称";left=36;top=121;right=163;bottom=152;z=4};
groupbox={cls="groupbox";text="DID";left=16;top=12;right=328;bottom=260;edge=1;z=1};
groupbox2={cls="groupbox";text="DTC";left=343;top=12;right=655;bottom=260;edge=1;z=12}
)
/*}}*/
winform.btnDID_F187.oncommand = function(id,event){
DiagReadDID(0xF187);
}
winform.btnDID_F18A.oncommand = function(id,event){
DiagReadDID(0xF18A);
}
winform.btnDID_F197.oncommand = function(id,event){
DiagReadDID(0xF197);
}
winform.btnDID_1701.oncommand = function(id,event){
DiagReadDID(0x1701);
}
winform.btnDID_1702.oncommand = function(id,event){
DiagReadDID(0x1702);
}
winform.btnDID_1706.oncommand = function(id,event){
DiagReadDID(0x1706);
}
winform.btnDID_1707.oncommand = function(id,event){
DiagReadDID(0x1707);
}
winform.btnDID_1708.oncommand = function(id,event){
DiagReadDID(0x1708);
}
winform.btnDID_1709.oncommand = function(id,event){
DiagReadDID(0x1709);
}
winform.btnDID_170B.oncommand = function(id,event){
DiagReadDID(0x170B);
}
winform.onClose = function(hwnd,message,wParam,lParam){
winform.show(false);
return 0;
}
winform.show();
win.loopMessage();
return winform;

View File

@ -55,6 +55,25 @@ namespace usb2canfd{
BYTE CAN_TXFP; //发送优先级管理0-标识符决定1-发送请求顺序决定 BYTE CAN_TXFP; //发送优先级管理0-标识符决定1-发送请求顺序决定
} }
class CAN_FILTER_CONFIG{
ctor( /*输入构造函数所需要的参数*/ ){
};
type=me;
/*对象的所有成员必须用分号分隔*/
BYTE Enable; //使能该过滤器1-使能0-禁止
BYTE FilterIndex; //过滤器索引号取值范围为0到13
BYTE FilterMode; //过滤器模式0-屏蔽位模式1-标识符列表模式
BYTE ExtFrame; //过滤的帧类型标志为1 代表要过滤的为扩展帧为0 代表要过滤的为标准帧。
INT ID_Std_Ext; //验收码ID
INT ID_IDE; //验收码IDE
INT ID_RTR; //验收码RTR
INT MASK_Std_Ext; //屏蔽码ID该项只有在过滤器模式为屏蔽位模式时有用
INT MASK_IDE; //屏蔽码IDE该项只有在过滤器模式为屏蔽位模式时有用
INT MASK_RTR; //屏蔽码RTR该项只有在过滤器模式为屏蔽位模式时有用
}
//CANfd信息帧的数据类型定义 //CANfd信息帧的数据类型定义
class CANFD_MSG{ class CANFD_MSG{
ctor( /*输入构造函数所需要的参数*/ ){ ctor( /*输入构造函数所需要的参数*/ ){
@ -137,7 +156,7 @@ namespace usb2canfd{
//加载DLL //加载DLL
LoadDll = function(){ LoadDll = function(){
try{ try{
DllHandle = ..raw.loadDll("USB2XXX.dll") DllHandle = ..raw.loadDll("\USB2XXX.dll")
} }
catch(err) catch(err)
{ {
@ -186,11 +205,49 @@ namespace usb2canfd{
return ret,DeviceInfo,funcstr; return ret,DeviceInfo,funcstr;
} }
//获取设备信息
GetNowInfo = function(){
if(Hwconnected == null){
return 0;
}
//DllHandle.USB_OpenDevice(Hwconnected);
var DeviceInfo = ..usb2canfd.DEVICE_INFO();
var funcstr = ..raw.buffer(100);
var ret = DllHandle.DEV_GetDeviceInfo(Hwconnected,DeviceInfo,funcstr);
return ret,DeviceInfo,funcstr;
}
//获取有效硬件 //获取有效硬件
GetAvailableHW = function(){ GetAvailableHW = function(){
return AvailableHW; return AvailableHW;
} }
SetFilter = function(index){
CANFilter = ..usb2canfd.CAN_FILTER_CONFIG();
CANFilter.FilterIndex = 0;
CANFilter.Enable = 1;
CANFilter.ExtFrame = 0; //需要过滤接收的帧为标准帧
CANFilter.FilterMode = 1;//标识符列表模式
CANFilter.ID_IDE = 0; //接收到的数据帧IDE必须为1也就是必须为扩展帧数据
CANFilter.ID_RTR = 0; //接收到的帧类型必须为数据帧
CANFilter.ID_Std_Ext = 0x620;//接收到的帧ID必须等于CANFilter.ID_Std_Ext设置的值
var ret = DllHandle.CAN_Filter_Init(AvailableHW[index].hLINHW,0,CANFilter);
CANFilter.FilterIndex = 1;
CANFilter.ID_Std_Ext = 0x610;
var ret = DllHandle.CAN_Filter_Init(AvailableHW[index].hLINHW,0,CANFilter);
for(i=2;13;1){
CANFilter.FilterIndex = i;
CANFilter.Enable = 0;
DllHandle.CAN_Filter_Init(AvailableHW[index].hLINHW,0,CANFilter);
}
}
//打开设备,包括初始化通道 //打开设备,包括初始化通道
OpenDevice = function(index,channel,canfd){ OpenDevice = function(index,channel,canfd){
if(index > HwNum) if(index > HwNum)
@ -227,7 +284,7 @@ namespace usb2canfd{
canconfig.CAN_Mode = 0x80;//0-正常模式 1-环回模式 0x80终端电阻 canconfig.CAN_Mode = 0x80;//0-正常模式 1-环回模式 0x80终端电阻
canconfig.CAN_ABOM = 0;//禁止自动离线 canconfig.CAN_ABOM = 0;//禁止自动离线
canconfig.CAN_NART = 1;//禁止报文重传 canconfig.CAN_NART = 0;//禁止报文重传
canconfig.CAN_RFLM = 0;//FIFO满之后覆盖旧报文 canconfig.CAN_RFLM = 0;//FIFO满之后覆盖旧报文
canconfig.CAN_TXFP = 1;//发送请求决定发送顺序 canconfig.CAN_TXFP = 1;//发送请求决定发送顺序
//配置波特率,波特率 = 42M/(BRP*(SJW+BS1+BS2)) //配置波特率,波特率 = 42M/(BRP*(SJW+BS1+BS2))
@ -237,6 +294,7 @@ namespace usb2canfd{
canconfig.CAN_SJW = 2; canconfig.CAN_SJW = 2;
ret = DllHandle.CAN_Init(AvailableHW[index].hLINHW,channel,canconfig); ret = DllHandle.CAN_Init(AvailableHW[index].hLINHW,channel,canconfig);
//console.log("init ret = " + ret); //console.log("init ret = " + ret);
this.SetFilter(index);
} }
canfd_connected = canfd; canfd_connected = canfd;
@ -246,7 +304,7 @@ namespace usb2canfd{
} }
else { else {
Hwconnected = null //Hwconnected = null
Chconntected = null; Chconntected = null;
} }
@ -349,14 +407,22 @@ namespace usb2canfd{
else { else {
//CAN //CAN
do{ do{
var msgbuf = ..usb2canfd.CAN_MSG(); //raw.convertArray(raw.sizeof(..usb2canfd.CAN_MSG())
ret = DllHandle.CAN_GetMsgWithSize(Hwconnected,CANIndex,msgbuf,1); var msgbuf = {};
for(i=1;10;1){
//msgbuf.push(new ..usb2canfd.CAN_MS())
var temp = ..usb2canfd.CAN_MSG()
..table.push(msgbuf,temp);
}
//var msgbuf = ..raw.toarray(10,"struct",..usb2canfd.CAN_MS);
ret = DllHandle.CAN_GetMsgWithSize(Hwconnected,CANIndex,msgbuf[1],1);
if(ret == 1){ if(ret == 1){
var data = {}; var data = {};
for(i=1;msgbuf.DataLen;1){ for(i=1;msgbuf[1].DataLen;1){
data[i] = msgbuf.Data[i]; data[i] = msgbuf[1].Data[i];
} }
var msg = {"id"=msgbuf.ID;"data"=data;};// var msg = {"id"=msgbuf[1].ID;"data"=data;};//
..table.push(retdata,msg); ..table.push(retdata,msg);
} }
}while(ret > 0) }while(ret > 0)
@ -388,6 +454,19 @@ namespace usb2canfd{
return ret,2,res_data; return ret,2,res_data;
} }
SetPower = function(state){
var ret = DllHandle.LIN_EX_CtrlPowerOut(Hwconnected,state);
return ret;
}
GetPower = function(){
var buf = ..raw.buffer(10);
var ret = DllHandle.LIN_EX_GetVbatValue(Hwconnected,buf);
return ret,buf;
}
} }

View File

@ -1,105 +1,117 @@
import fonts.fontAwesome;
import win.ui; import win.ui;
/*DSG{{*/ /*DSG{{*/
mainForm = win.form(text="CAN_Bootloader";right=599;bottom=465;border="dialog frame";max=false) mainForm = win.form(text="CAN_Bootloader";right=799;bottom=599;border="dialog frame";max=false)
mainForm.add( mainForm.add(
btnConnect={cls="button";text="连接";left=204;top=64;right=289;bottom=90;z=4}; btnConfirmVIN={cls="button";text="确认 / confirm";left=263;top=137;right=402;bottom=171;disabled=1;z=16};
btnDiag={cls="button";text="诊断";left=149;top=350;right=248;bottom=375;z=25}; btnFlashLeft={cls="button";text="1.左侧刷写
btnFlash={cls="button";text="开始刷写";left=37;top=315;right=136;bottom=343;z=9}; 1.Left side flashing";left=34;top=198;right=214;bottom=298;disabled=1;z=2};
btnFresh={cls="button";text="刷新";left=204;top=28;right=288;bottom=54;z=2}; btnFlashRight={cls="button";text="2.右侧刷写
btnOpen={cls="button";text="打开文件";left=37;top=282;right=136;bottom=310;z=8}; 2.Right side flashing";left=224;top=198;right=404;bottom=298;disabled=1;z=7};
btnOpenFlashdrv={cls="button";text="打开FlashDriver";left=149;top=282;right=248;bottom=310;z=24}; btnStopBoot={cls="button";text="停止
btnReadF186={cls="button";text="读取当前会话";left=37;top=349;right=136;bottom=377;z=13}; Stop";left=31;top=396;right=405;bottom=470;z=3};
btnReadF198={cls="button";text="读取F198";left=37;top=415;right=136;bottom=443;z=19}; btnVerifyVersion={cls="button";text="3.验证
btnReadF199={cls="button";text="读取F199";left=149;top=415;right=248;bottom=443;z=20}; 3.verify";left=31;top=310;right=404;bottom=384;disabled=1;z=13};
btnReadHw={cls="button";text="读取硬件版本号";left=149;top=381;right=248;bottom=409;z=12}; edVIN={cls="edit";text="000000";left=91;top=137;right=258;bottom=172;disabled=1;edge=1;font=LOGFONT(h=-16);z=14};
btnReadSw={cls="button";text="读取软件版本号";left=37;top=382;right=136;bottom=410;z=10}; edit={cls="edit";left=421;top=21;right=792;bottom=510;autovscroll=false;edge=1;multiline=1;vscroll=1;z=1};
btnTest={cls="button";text="停止";left=149;top=316;right=248;bottom=344;z=11}; plus={cls="plus";text="等待刷写
cbbChannel={cls="combobox";left=58;top=64;right=191;bottom=90;edge=1;items={};mode="dropdown";z=3}; Waiting for flashing";left=34;top=485;right=403;bottom=570;bgcolor=12639424;z=10};
cbbDev={cls="combobox";left=58;top=27;right=191;bottom=53;edge=1;items={};mode="dropdown";z=1}; progress={cls="progress";left=420;top=546;right=791;bottom=574;edge=1;max=100;min=0;z=4};
checkbox={cls="checkbox";text="CANFD设备";left=151;top=101;right=248;bottom=120;checked=1;z=21}; static={cls="static";text='\uF127';left=43;top=30;right=114;bottom=98;align="center";center=1;color=255;font=LOGFONT(h=-56;name='FontAwesome');transparent=1;z=8};
edFile={cls="richedit";left=8;top=131;right=288;bottom=187;border=1;disabled=1;edge=1;multiline=1;wrap=1;z=14}; static2={cls="static";text="设备未连接,请先连接设备";left=126;top=34;right=326;bottom=83;transparent=1;z=9};
edFile2={cls="richedit";left=8;top=213;right=288;bottom=269;border=1;disabled=1;edge=1;multiline=1;wrap=1;z=22}; static3={cls="static";text="刷写进度 Flashing writing progress";left=422;top=521;right=749;bottom=541;transparent=1;z=5};
edit={cls="edit";left=294;top=19;right=596;bottom=401;autovscroll=false;edge=1;multiline=1;vscroll=1;z=5}; static4={cls="static";text="no.";left=39;top=102;right=141;bottom=122;align="right";transparent=1;z=11};
progress={cls="progress";left=296;top=436;right=596;bottom=464;edge=1;max=100;min=0;z=15}; static5={cls="static";text="V0.5_20241029";left=648;top=2;right=792;bottom=18;align="right";center=1;notify=1;transparent=1;z=6};
static={cls="static";text="设备";left=1;top=28;right=61;bottom=52;align="center";center=1;transparent=1;z=6}; static6={cls="static";text="00000";left=145;top=102;right=203;bottom=120;transparent=1;z=12};
static2={cls="static";text="通道";left=1;top=66;right=61;bottom=90;align="center";center=1;transparent=1;z=7}; static7={cls="static";text="VIN";left=31;top=137;right=78;bottom=172;align="right";center=1;font=LOGFONT(h=-16);transparent=1;z=15}
static3={cls="static";text="刷写进度";left=296;top=409;right=349;bottom=429;transparent=1;z=16};
static4={cls="static";text="烧录APP";left=13;top=108;right=85;bottom=132;center=1;transparent=1;z=17};
static5={cls="static";text="V0.1_20220518";left=451;top=1;right=595;bottom=17;align="right";center=1;transparent=1;z=18};
static6={cls="static";text="FlashDriver";left=13;top=195;right=101;bottom=218;transparent=1;z=23}
) )
/*}}*/ /*}}*/
import win; import win;
import usb2canfd; import usb2canfd;
import win.timer; import win.timer;
import win.inputBox;
import fsys.ini;
import console
// 获取当前时间
var currentDate = time.now()
// 设置格式化字符串为 "YYYYMMDD"
currentDate.format = "%Y%m%d"
side_now = "";
var boot_count = 0;//boot时间计数器
var bootstate = false;//boot状态标志 var bootstate = false;//boot状态标志
var starttime = time.now();
timer_bootcount = win.timer(mainForm,100); var inifile=fsys.ini("\配置文件.ini");
timer_bootcount.onTimer = function(){//boot时间定时器100ms间隔 //读取小节对象
boot_count++; sec = inifile.getSection("计数");
if(sec.当前计数 == null){
sec.当前计数 = 1;
sec.左成功 = 0;
sec.左失败 = 0;
sec.右成功 = 0;
sec.右失败 = 0;
//sec.VIN = "YSM4ZPAA0SF405299";
sec.save()
} }
当前计数 = sec.当前计数;
左成功 = sec.左成功;
左失败 = sec.左失败;
右成功 = sec.右成功;
右失败 = sec.右失败;
//console.dump(sec);
mainForm.static6.text = string.format("%05d",当前计数);
//VINCODE = sec.VIN;
//console.log(VINCODE);
Display = function(str){//显示日志 Display = function(str){//显示日志
mainForm.edit.print(tostring(time()) + " " + str); var nowtime = time();
nowtime.format="%H:%M:%S";
mainForm.edit.print(tostring(nowtime) + " " + str);
} }
//遍历目录
import console;
/*
import fsys.fileInfo;
info = fsys.fileInfo("C:\Users\fcb19\Desktop\dll\libusb-1.0.dll");
console.log(info.writeTime);
execute("pause")
raw.loadDll("C:\Users\fcb19\Desktop\dll\libusb-1.0.dll");
*/
CANHw = usb2canfd.USB2CANHW();//尝试加载CAN dll CANHw = usb2canfd.USB2CANHW();//尝试加载CAN dll
var ret = CANHw.LoadDll(); var ret = CANHw.LoadDll();
if(ret == 0){ if(ret == 0){
Display("DLL加载成功"); Display("DLL加载成功");
Display("DLL loaded successfully
");
} }
else { else {
Display("DLL加载失败"); Display("DLL加载失败");
Display("DLL loading failed
");
} }
var write_log_file = function(id,ifsuccess,vin){
//初始化界面 if(ifsuccess){
mainForm.cbbChannel.add("通道1"); success = "success";
mainForm.cbbChannel.add("通道2");
mainForm.cbbChannel.selIndex = 1
//刷新按键
mainForm.btnFresh.oncommand = function(id,event){
mainForm.cbbDev.clear();//清空下拉框,防止反复刷新叠加
var hwnum = CANHw.FlashHw();//获取硬件数量
if(hwnum == 0){
mainForm.cbbDev.text = "未找到硬件"
} }
else { else {
var allhw = CANHw.GetAvailableHW(); success = "failed";
for(i=1;#allhw;1){
mainForm.cbbDev.add(allhw[i].name);
}
} }
mainForm.cbbDev.selIndex = 1
::PostThreadMessage(thrdId,100,0,0)//自定义消息 var vinr6 = string.right(vin,6);
var logfile_name = string.format("\log\%05d_%s_%s_%s.txt",当前计数,success,vinr6,side_now);
//console.log(logfile_name);
//string.save(logfile_name,"VIN = " ++ vin);
string.save(logfile_name,'test');
string.save(logfile_name, mainForm.edit.text);
} }
mainForm.btnConnect.oncommand = function(id,event){
var canfd_check = mainForm.checkbox.checked?0x80:0x00;
::PostThreadMessage(thrdId,101,mainForm.cbbDev.selIndex,(mainForm.cbbChannel.selIndex - 1)|canfd_check)//自定义消息
/*
var ret = CANHw.OpenDevice(mainForm.cbbDev.selIndex,mainForm.cbbChannel.selIndex - 1);//通道为0和1
if(ret == 0){
Display("连接成功");
}
else {
Display("连接失败");
}
*/
}
//CAN通讯线程 //CAN通讯线程
import thread.command; import thread.command;
@ -109,10 +121,11 @@ listener.$Display = function(str){
Display(str); Display(str);
} }
listener.$ShowPath = function(str){ listener.$ShowPath = function(str){
mainForm.edFile.text = str; //mainForm.edFile.text = str;
} }
listener.$ShowFlashDrvPath = function(str){ listener.$ShowFlashDrvPath = function(str){
mainForm.edFile2.text = str; //mainForm.edFile2.text = str;
} }
listener.$SetProgress = function(pos){ listener.$SetProgress = function(pos){
if(pos >= 0 && pos <= 100){ if(pos >= 0 && pos <= 100){
@ -121,11 +134,10 @@ listener.$SetProgress = function(pos){
} }
listener.$Connected = function(){ listener.$Connected = function(){
mainForm.btnConnect.disabled = true; Display("设备连接成功");
mainForm.btnFresh.disabled = true; Display("Device connection successful
mainForm.cbbDev.disabled = true; ");
mainForm.cbbChannel.disabled = true; thrdTable.设备连接状态 = 1;
flag_connected = 1;
} }
listener.$SendEnd = function(isSuccess){ listener.$SendEnd = function(isSuccess){
//timer_bootcount.disable(); //timer_bootcount.disable();
@ -133,114 +145,399 @@ listener.$SendEnd = function(isSuccess){
bootstate = false; bootstate = false;
if(isSuccess == true){ if(isSuccess == true){
Display("刷写成功,用时 " + usetime + " S") Display("刷写成功,用时 " + usetime + " S")
} Display("Flashing successfully, took "+usetime+" S
} ");
mainForm.plus.text = "刷写完成\Flashing successfully";
//mainForm.plus.bgcolor = 0x32CD32;
mainForm.plus.background = 0xFF32CD32;
if(side_now == "L"){
左成功 += 1;
}
else {
右成功 += 1;
}
}
else {
Display("刷写失败");
Display("Flashing failed
");
mainForm.plus.text = "刷写失败 Flashing failed";
//mainForm.plus.bgcolor = 0x2200E3;
mainForm.plus.background = 0xFFE30022;
if(side_now == "L"){
左失败 += 1;
}
else {
右失败 += 1;
}
}
write_log_file(当前计数,isSuccess,VINCODE);
当前计数 += 1;
mainForm.static6.text = string.format("%05d",当前计数);
sec.当前计数 = 当前计数;
sec.左成功 = 左成功;
sec.左失败 = 左失败;
sec.右成功 = 右成功;
sec.右失败 = 右失败;
//sec.VIN = VINCODE;
sec.save();
}
import thread.table;
thrdTable = thread.table("多线程共享数据");
thrdTable.设备连接状态 = 0;
thrdTable.设备 = {};
thrdTable.DIDdata = null;
thrdTable.test = "123"
thrdTable["文件加载状态"] = false;
thrdTable["电源电压"] = 0;
//线程函数 //线程函数
var CanThread = function(){ var CanThread = function(){
//线程函数内部要添加自已的import语句 //线程函数内部要添加自已的import语句
import win; import win;
import console; import console;
import thread.table;
thrdTable = thread.table("多线程共享数据");
//console.log("线程开始运行") //console.log("线程开始运行")
//console.log(t_thrdTable.test);
loadcodex("\user\CanThread.aardio");//加载线程程序 loadcodex("\user\CanThread.aardio");//加载线程程序
//在子线程启动消息循环 //在子线程启动消息循环
win.loopMessage(FuncLoopMsg) win.loopMessage(FuncLoopMsg)
} }
DiagReadDID = function(did){
::PostThreadMessage(thrdId,110,did,0)//自定义消息 var DiagBootReq = function(id){
} ::PostThreadMessage(thrdId,102,id,0)//自定义消息
var Diag10Req = function(num){ mainForm.plus.text = "刷写中请勿断开电源或USB连接
::PostThreadMessage(thrdId,111,num,0)//自定义消息 During flashing, do not disconnect the power
} or USB connection";
var DiagBootReq = function(){ //mainForm.plus.bgcolor = 0x00CCFF;
::PostThreadMessage(thrdId,102,0,0)//自定义消息 mainForm.plus.background = 0xFF00CCFF;
} }
var DiagStopReq = function(){ var DiagStopReq = function(){
::PostThreadMessage(thrdId,103,0,0)//自定义消息 ::PostThreadMessage(thrdId,103,0,0)//自定义消息
//mainForm.plus.text = "刷写停止";
//mainForm.plus.background = 0xFFC0DCC0
} }
mainForm.btnReadSw.oncommand = function(id,event){ //import console;
DiagReadDID(0xF188); //console.log("1");
} mainForm.btnFlashLeft.oncommand = function(id,event){
if(thrdTable.设备连接状态 == 0){
mainForm.btnReadHw.oncommand = function(id,event){ Display("设备未连接");
DiagReadDID(0xF191); Display("device not connected
} ");
mainForm.btnReadF186.oncommand = function(id,event){
DiagReadDID(0xF186);
}
mainForm.btnTest.oncommand = function(id,event){
DiagStopReq();
}
mainForm.btnFlash.oncommand = function(id,event){
if(io.exist(mainForm.edFile.text) == null){
Display("请打开文件");
return;
}
if(flag_connected == 0){
Display("请连接设备");
return; return;
} }
if(bootstate == true){ if(bootstate == true){
return ; return ;
} }
if(thrdTable["文件加载状态"] == false){
Display("烧录文件加载错误");
Display("Burning file loading error
");
return;
}
side_now = "L";
bootstate = true; bootstate = true;
mainForm.edit.text = ""; mainForm.edit.text = "";
Display("开始刷写流程"); Display("VIN:" ++ VINCODE ++ '\n');
::PostThreadMessage(thrdId,106,0x720,0x620);//自定义消息
Display(tostring(currentDate));
Display("左侧开始刷写流程");
Display('Start flashing process\n');
starttime = time.now(); starttime = time.now();
//timer_bootcount.enable(); DiagBootReq(1);//左侧
boot_count = 0;
DiagBootReq();
} }
mainForm.btnOpen.oncommand = function(id,event){
::PostThreadMessage(thrdId,104,1,0)//自定义消息-打开文件
}
//程序关闭
mainForm.onClose = function(hwnd,message,wParam,lParam){ mainForm.onClose = function(hwnd,message,wParam,lParam){
if(thrdId != null){ raw.closehandle(thrdHandle)
::PostThreadMessage(thrdId,105,0,0)//自定义消息 }
thread.waitClose(thrdHandle);
autoconnect = win.timer(mainForm,300);
var autoconnect_state = 0;
var power_err_count = 0;
autoconnect.onTimer = function(){
select(autoconnect_state) {
case 0 {
if(thrdTable.设备连接状态 == 0){
//断开
mainForm.static.text='\uF127'
mainForm.static2.text = "设备未连接,请先连接设备 The device is not connected, please connect the device first";
mainForm.static.color=0xff0;
::PostThreadMessage(thrdId,100,0,0);
//Display("刷新");
sleep(20);
if(#thrdTable.设备 > 0){
Display(thrdTable.设备[1].name);
::PostThreadMessage(thrdId,101,1,0x80);//连接 0x80 -> CANFD
}
}
else {
autoconnect_state = 3;
power_err_count = 0;
}
}
case 1 {
::PostThreadMessage(thrdId,104,0,0);
autoconnect_state = 2;
}
case 2 {
if(thrdTable["电源电压"] < 100){
::PostThreadMessage(thrdId,105,1,0);
power_err_count++;
if(power_err_count < 10){
autoconnect_state = 1;
}
else {
mainForm.static2.text = "电源异常,请检查线路"
autoconnect_state = 4;
}
}
else {
//import console;
//console.log(thrdTable["电源电压"])
autoconnect_state = 3;
}
}
case 3 {
if(thrdTable["文件加载状态"] == true){
mainForm.static.color=0xff00;
mainForm.static.text='\uF0C1';
mainForm.static2.text = "设备已连接,可以开始刷写 The device is connected and can start flashing";
::PostThreadMessage(thrdId,115,1,0);//连接
autoconnect_state = 4;
mainForm.edVIN.disabled = false;
mainForm.btnConfirmVIN.disabled = false;
}
else {
mainForm.static2.text = "文件已损坏,请重新获取烧录上位机";
autoconnect_state = 4;
mainForm.btnFlashLeft.disabled = true;
mainForm.btnFlashRight.disabled = true;
}
}
case 4 {
if(thrdTable.设备连接状态 == 0){
autoconnect_state = 0;
thrdTable.设备 = {};
mainForm.edVIN.disabled = true;
mainForm.btnFlashLeft.disabled = true;
mainForm.btnFlashRight.disabled = true;
mainForm.btnConfirmVIN.disabled = true;
mainForm.btnVerifyVersion.disabled = true;
}
}
else {
}
} }
//PLinHw.isConnected()///待完善
//console.print("线程已关闭")
//console.pause()
} }
mainForm.btnReadF198.oncommand = function(id,event){ mainForm.btnFlashRight.oncommand = function(id,event){
DiagReadDID(0x1701); if(thrdTable.设备连接状态 == 0){
Display("设备未连接");
Display("device not connected
");
return;
}
if(bootstate == true){
return ;
}
if(thrdTable["文件加载状态"] == false){
Display("烧录文件加载错误");
Display("Burning file loading error
");
return;
}
side_now = "R";
bootstate = true;
mainForm.edit.text = "";
Display("VIN:" ++ VINCODE ++ '\n');
::PostThreadMessage(thrdId,106,0x710,0x610);//自定义消息
Display(tostring(currentDate));
Display("右侧开始刷写流程");
Display('Start flashing process \n');
starttime = time.now();
DiagBootReq(2);//
} }
mainForm.btnReadF199.oncommand = function(id,event){ mainForm.btnStopBoot.oncommand = function(id,event){
DiagReadDID(0x1702); DiagStopReq();
} }
mainForm.btnOpenFlashdrv.oncommand = function(id,event){
::PostThreadMessage(thrdId,104,0,0)//自定义消息-打开flashdriver
//import console;
//console.log("io.exis = ",io.exist("\res\P417_SWTL_20240709.S19"));
click_times = 0;
mainForm.static5.oncommand = function(id,event){
click_times+=1;
if(click_times >= 5){
var frmChild = mainForm.loadForm("\dlg\about.aardio");
frmChild.show();
click_times = 0;
}
} }
var frmChild = win.loadForm("\dlg\诊断子窗口.aardio"); mainForm.btnConfirmVIN.oncommand = function(id,event){
frmChild.show(false); var vinstr = mainForm.edVIN.text;
mainForm.btnDiag.oncommand = function(id,event){ if(vinstr == null || string.len(vinstr)!=6){
Display("请输入VIN后6位数字");
frmChild.show(); Display('Please enter the last 6 digits of VIN \n');
}
else {
mainForm.btnFlashLeft.disabled = false;
mainForm.btnFlashRight.disabled = false;
mainForm.btnVerifyVersion.disabled = false;
mainForm.btnConfirmVIN.disabled = true;
mainForm.edVIN.disabled = true;
VINCODE = vinstr;
}
} }
thrdHandle,thrdId = thread.create( CanThread )
ReadDIDdata = function(did){
thrdTable.DIDdata = null;
::PostThreadMessage(thrdId,110,did,0);
//sleep(100);
//return thrdTable.DIDdata;
}
verifyTimerState = 0;
verifyTimer = win.timer(,100);
left_repeat_times = 0;
right_repeat_times = 0;
verifyTimer.onTimer = function(){
select(verifyTimerState) {
case 0 {
left_repeat_times = 0;
right_repeat_times = 0;
verifyTimerState += 1;
}
case 1 {
::PostThreadMessage(thrdId,106,0x720,0x620);//自定义消息
Display('读取左侧开关版本号');
Display('Read left SW Version: \n');
ReadDIDdata(0xf195);
verifyTimerState += 1;
}
case 2 {
swl = thrdTable.DIDdata;
if(swl != null){
if(string.cmp(swl,"SW0303",6) == 0){
Display('左侧版本号正确');
Display('left SW Version correct \n');
verifyTimerState += 1;
}
else {
Display('左侧版本号错误');
Display('left SW Version incorrect \n');
verifyTimerState = 6;
verifyTimer.disable();
}
}
else {//读到空数据
left_repeat_times+=1;
if(left_repeat_times > 3){
Display('左侧版本号错误');
Display('left SW Version incorrect \n');
verifyTimerState = 6;
verifyTimer.disable();
}
else {
verifyTimerState = 1;
}
}
}
case 3 {
::PostThreadMessage(thrdId,106,0x710,0x610);//自定义消息
Display('读取右侧开关版本号');
Display('Read right SW Version: \n');
ReadDIDdata(0xf195);
verifyTimerState += 1;
}
case 4 {
swr = thrdTable.DIDdata;
if(swr != null){
if(string.cmp(swr,"SW0303",6) == 0){
Display('右侧版本号正确');
Display('right SW Version correct \n');
verifyTimerState += 1;
}
else {
Display('右侧版本号错误');
Display('right SW Version incorrect \n');
verifyTimerState = 6;
verifyTimer.disable();
}
}
else {//读到空数据
right_repeat_times+=1;
if(right_repeat_times > 3){
Display('右侧版本号错误');
Display('right SW Version incorrect \n');
verifyTimerState = 6;
verifyTimer.disable();
}
else {
verifyTimerState = 3;
}
}
}
case 5{
Display('软件升级成功');
Display('Software upgrade successful \n');
mainForm.btnFlashLeft.disabled = true;
mainForm.btnFlashRight.disabled = true;
mainForm.edVIN.text = "";
mainForm.edVIN.disabled = false;
mainForm.btnVerifyVersion.disabled = true;
mainForm.btnConfirmVIN.disabled = false;
verifyTimerState += 1;
verifyTimer.disable();
if(VINCODE != null){
var savestr = string.format('VIN:%s ,time:%s ,success \n',VINCODE,tostring(time.now()));
string.save("\验证成功VIN记录.txt",savestr,true);
}
}
case 6{
}
else {
}
}
}
mainForm.btnVerifyVersion.oncommand = function(id,event){
verifyTimerState = 0;
verifyTimer.enable();
}
thrdHandle,thrdId = thread.create( CanThread );
autoconnect.enable();
//console.log(thrdId);
mainForm.show(); mainForm.show();
return win.loopMessage(); return win.loopMessage();

2011
res/p417_SWTL_20240722.S19 Normal file

File diff suppressed because it is too large Load Diff

2059
res/p417_SWTR_20240722.S19 Normal file

File diff suppressed because it is too large Load Diff

View File

@ -5,8 +5,8 @@ import win.timer;
CANHw = usb2canfd.USB2CANHW(); CANHw = usb2canfd.USB2CANHW();
CANHw.LoadDll(); CANHw.LoadDll();
DiagReqID = 0x741;//0x18dadff1; DiagReqID = 0x720;//0x18dadff1;
DiagRespID = 0x751;//0x18daf1df; DiagRespID = 0x620;//0x18daf1df;
DiagGloableID = 0x7DF;//0x18DB33F1; DiagGloableID = 0x7DF;//0x18DB33F1;
stopflag = 0; stopflag = 0;
//注册一个消息钩子函数 //注册一个消息钩子函数
@ -21,37 +21,33 @@ FuncLoopMsg = function(msg){
FuncConnect(msg.wParam,msg.lParam); FuncConnect(msg.wParam,msg.lParam);
} }
case 102 {//开始boot case 102 {//开始boot
FuncStartBoot(); FuncStartBoot(msg.wParam);
} }
case 103 {//停止boot case 103 {//停止boot
FuncStopBoot(); FuncStopBoot();
//FuncGetPowerVal();
} }
case 104 {//打开s19文件 case 104 {//读取电压
if(msg.wParam == 0){ FuncGetPowerVal();
FuncDisplay("打开FlashDriver"); }
var ret = FuncOpenS19File(msg.wParam); case 105 {//控制电源
if(ret != null){ FuncPowerCtrl(msg.wParam);
thread.command.$ShowFlashDrvPath(ret);
}
}
else {
FuncDisplay("打开烧写文件");
var ret = FuncOpenS19File(msg.wParam);
if(ret != null){
thread.command.$ShowPath(ret);
}
}
} }
case 105 {//停止boot case 106 {
thread.stop(0); FuncSetCANID(msg.wParam,msg.lParam);
}
case 107 {
FuncSendMsg(msg.wParam);
}
case 109 {
win.quitMessage();
} }
case 110 {//readDID case 110 {//readDID
FuncReadDID(msg.wParam); FuncReadDID(msg.wParam);
} }
case 111 { case 111 {
FuncReq10(msg.wParam); FuncReq10(false,msg.wParam);
} }
case 112 { case 112 {
FuncReq28(msg.wParam); FuncReq28(msg.wParam);
@ -62,12 +58,112 @@ FuncLoopMsg = function(msg){
case 114 { case 114 {
FuncReq27(msg.wParam); FuncReq27(msg.wParam);
} }
case 115 {
FuncReadDeviceVersion(1);
}
else { 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;
}
@ -77,7 +173,10 @@ FuncFreshHw = function(){
//mainForm.cbbDev.text = "未找到硬件" //mainForm.cbbDev.text = "未找到硬件"
} }
else { else {
FuncDisplay("找到硬件") FuncDisplay("找到硬件");
FuncDisplay("Find hardware
");
thrdTable.设备 = CANHw.GetAvailableHW()
} }
} }
@ -85,17 +184,20 @@ FuncConnect = function(dev,chn){
var canfd = (chn&0x80)==0x80?true:false; var canfd = (chn&0x80)==0x80?true:false;
var ret = CANHw.OpenDevice(dev,chn&0x7f,canfd); var ret = CANHw.OpenDevice(dev,chn&0x7f,canfd);
if(ret == 0){ if(ret == 0){
FuncDisplay("连接成功"); //FuncDisplay("连接成功");
thread.command.$Connected(); thread.command.$Connected();
} }
else { else {
FuncDisplay("连接失败"); FuncDisplay("连接失败");
} }
FuncPowerCtrl(1);
} }
FuncDisplay = function(str){ FuncDisplay = function(str){
thread.command.$Display(str);//"线程" + thread.command.$Display(str);//"线程" +
} }
//console.log("在loadcodex测试")
//console.log(thrdTable.test)
loadcodex("\user\Diag10code.aardio"); loadcodex("\user\Diag10code.aardio");
@ -162,26 +264,40 @@ FuncDiagPro = function(diagmsg){
FuncStartBoot = function(){ FuncStartBoot = function(id){
FuncInitBootState(); FuncInitBootState(id);
boottimer.enable(); boottimer.enable();
FuncDisplay("开始刷写"); FuncDisplay("开始刷写");
FuncDisplay("Start flashing
");
stopflag = 0; stopflag = 0;
} }
var delay = function(w){
while(w){
for(i=1;delay_const;1)
{
}
w -= 1;
}
}
var PackNext = 0x21; var PackNext = 0x21;
var Packdata = {}; var Packdata = {};
var PackID = 0; var PackID = 0;
var FuncSendPackage = function(){ var FuncSendPackage = function(){
while(#Packdata > 0) while(#Packdata > 0)
{ {
sleep(0.3); //sleep(1);
delay(1);
var data = {PackNext,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC}; var data = {PackNext,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC};
var max = #Packdata > 7 ? 7 : #Packdata; var max = #Packdata > 7 ? 7 : #Packdata;
for(i=1;max;1){ for(i=1;max;1){
data[i+1] = table.remove(Packdata); data[i+1] = table.remove(Packdata);
} }
//sleep(0.3);
CANHw.SendMsg(PackID,data); CANHw.SendMsg(PackID,data);
PackNext += 1; PackNext += 1;
@ -198,6 +314,22 @@ FuncPushPackage = function(ID,data){
} }
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 = win.timer(,10);
boottimer.onTimer = function(){ boottimer.onTimer = function(){
@ -208,9 +340,23 @@ boottimer.onTimer = function(){
FuncBootSeq(); FuncBootSeq();
} }
LeftVibrationFault = 0;
LeftTouchFault = 0;
LeftPressSensorFault = 0;
LeftCommonFault = 0;
RightVibrationFault = 0;
RightTouchFault = 0;
RightPressSensorFault = 0;
RightCommonFault = 0;
timer1 = win.timer(,1); timer1 = win.timer(,1);
diagresp = {} diagresp = {}
getbitdata = function(byte,startbit,len){
return ((byte>>startbit) & ((1<<len) - 1));
}
timer1.onTimer = function(){ timer1.onTimer = function(){
if(CANHw.isConnected() == false){ if(CANHw.isConnected() == false){
return; return;
@ -253,14 +399,34 @@ timer1.onTimer = function(){
} }
} }
else { else {
//console.varDump(ret[i].id); 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(); timer1.enable();
FuncDisplay("正在运行"); FuncDisplay("CAN线程正在运行");
FuncDisplay("CAN thread is running
");
DelayTest();

View File

@ -20,12 +20,18 @@ FuncDiag10Pro = function(data){
select(data[1]) { select(data[1]) {
case 1 { case 1 {
FuncDisplay("进入默认会话成功") FuncDisplay("进入默认会话成功")
FuncDisplay("Successfully entered default session
")
} }
case 2 { case 2 {
FuncDisplay("进入编程会话成功") FuncDisplay("进入编程会话成功")
FuncDisplay("Successfully entered programming session
")
} }
case 3 { case 3 {
FuncDisplay("进入扩展会话成功") FuncDisplay("进入扩展会话成功")
FuncDisplay("Successfully entered the extended session
")
} }
else { else {
} }

View File

@ -23,13 +23,36 @@ FuncDiag22Pro = function(data){
case 0xF186 { case 0xF186 {
FuncDisplay("当前会话: " + data[3]); FuncDisplay("当前会话: " + data[3]);
} }
case 0xF191 { case 0xF193 {
FuncDisplay("硬件版本号"); var len = string.len(string.pack(table.slice(data,3)),3);
FuncDisplay(string.pack(table.slice(data,3))); if(data[3] != 0){
var str = string.pack(table.slice(data,3,len+3));
FuncDisplay("硬件版本号:" ++ str);
FuncDisplay("Hardware Version:" ++ str++"
");
}
else {
FuncDisplay("硬件版本号未读到");
FuncDisplay("Hardware version number not read
");
}
} }
case 0xF188 { case 0xF195 {
FuncDisplay("软件版本号"); var len = string.len(string.pack(table.slice(data,3)),3);
FuncDisplay(string.pack(table.slice(data,3))); if(data[3] != 0){
var str = string.pack(table.slice(data,3,len+3));
FuncDisplay("软件版本号:" ++ str);
FuncDisplay("Software Version:" ++ str++'\n');
thrdTable.DIDdata = str;
//console.log(str);
//console.dump(thrdTable.DIDdata);
}
else {
FuncDisplay("软件版本号未读到");
FuncDisplay('Software version number not read \n');
}
} }
case 0xF198 { case 0xF198 {
FuncDisplay("repair_shopcode"); FuncDisplay("repair_shopcode");
@ -37,7 +60,7 @@ FuncDiag22Pro = function(data){
} }
case 0xF199 { case 0xF199 {
FuncDisplay("installation_date"); FuncDisplay("installation_date");
FuncDisplay(string.format("%x%X%x%x",data[3],data[4],data[5],data[6])); FuncDisplay(string.format("%02x%02x%02x%02x",data[3],data[4],data[5],data[6]));
} }
case 0xF187 { case 0xF187 {
FuncDisplay("车辆备用零部件编号"); FuncDisplay("车辆备用零部件编号");
@ -45,8 +68,8 @@ FuncDiag22Pro = function(data){
} }
case 0xF18A { case 0xF18A {
FuncDisplay("系统供应商公司名称代码"); FuncDisplay("软件日期:"++string.pack(table.slice(data,3)));
FuncDisplay(string.pack(table.slice(data,3))); FuncDisplay("Software date:"++string.pack(table.slice(data,3))++'\n');
} }
case 0xF197 { case 0xF197 {
@ -54,77 +77,6 @@ FuncDiag22Pro = function(data){
FuncDisplay(string.pack(table.slice(data,3))); FuncDisplay(string.pack(table.slice(data,3)));
} }
case 0x1701 {
var 水平 = (data[3]<<8) + (data[4]);
var 靠背 = (data[5]<<8) + (data[6]);
FuncDisplay("水平电机当前位置霍尔数: " + 水平 + "靠背电机当前位置数" + 靠背);
}
case 0x1702 {
if(#data < 10){
FuncDisplay("DID-0x1702长度错误")
return;
}
var 水平1 = (data[3]<<8) + (data[4]);
var 水平2 = (data[5]<<8) + (data[6]);
var 靠背1 = (data[7]<<8) + (data[8]);
var 靠背2 = (data[9]<<8) + (data[10]);
FuncDisplay("水平1: " + 水平1 + "水平2" + 水平2);
FuncDisplay("靠背1: " + 靠背1 + "靠背2" + 靠背2);
}
case 0x1706 {
var 水平 = data[3]&0x01;
var 靠背 = (data[3]>>1)&0x01;
FuncDisplay("座椅水平方向电机学习状态: " + 水平 + "座椅靠背方向电机学习状态" + 靠背);
}
case 0x1707 {
var 电流 = (data[3]<<8) + data[4];
FuncDisplay("电流: " + tostring(电流));
}
case 0x1708 {
FuncDisplay("输入状态: ");
var 座椅向前 = data[3]&0x01;
var 座椅向后 = (data[3]>>1)&0x01;
var 靠背向前 = (data[3]>>2)&0x01;
var 靠背向后 = (data[3]>>3)&0x01;
var 快进按键 = (data[3]>>4)&0x01;
var 快出按键 = (data[3]>>5)&0x01;
var 锁扣状态 = (data[3]>>6)&0x01;
var 坐人状态 = (data[3]>>7)&0x01;
FuncDisplay("座椅向前: " + 座椅向前);
FuncDisplay("座椅向后: " + 座椅向后);
FuncDisplay("靠背向前: " + 靠背向前);
FuncDisplay("靠背向后: " + 靠背向后);
FuncDisplay("快进按键: " + 快进按键);
FuncDisplay("快进按键: " + 快进按键);
FuncDisplay("锁扣状态: " + 锁扣状态);
FuncDisplay("坐人状态: " + 坐人状态);
}
case 0x1709 {
FuncDisplay("输出状态: ");
var 座椅向前 = data[3]&0x01;
var 座椅向后 = (data[3]>>1)&0x01;
var 靠背向前 = (data[3]>>2)&0x01;
var 靠背向后 = (data[3]>>3)&0x01;
var 快进按键 = (data[3]>>4)&0x01;
var 快出按键 = (data[3]>>5)&0x01;
FuncDisplay("座椅向前: " + 座椅向前);
FuncDisplay("座椅向后: " + 座椅向后);
FuncDisplay("靠背向前: " + 靠背向前);
FuncDisplay("靠背向后: " + 靠背向后);
FuncDisplay("快进输出: " + 快进按键);
FuncDisplay("快出输出: " + 快进按键);
}
case 0x170B {
var 系统供电电压 = data[3]/10;
FuncDisplay("系统供电电压: " + tostring(系统供电电压) + " V");
}
else {
FuncDisplay("未知DID - " + tostring(did,16));
}
} }
} }

View File

@ -37,20 +37,26 @@ FuncDiag27Pro = function(data){
select(data[1]) { select(data[1]) {
case 1,3,5,7,9,11,0x11 { case 1,3,5,7,9,11,0x11 {
var str = "收到种子"; var str = "收到种子";
var str1 = "Received seeds";
for(i=1;4;1){ for(i=1;4;1){
SecuretySeed[i] = data[i+1]; SecuretySeed[i] = data[i+1];
str += " " + tostring(SecuretySeed[i],16); str += " " + tostring(SecuretySeed[i],16);
str1 += " " + tostring(SecuretySeed[i],16);
lockstate = 1; lockstate = 1;
} }
FuncDisplay(str) FuncDisplay(str)
FuncDisplay(str1++"
");
SecuretyKey = securetyKeyCalc(SecuretySeed,data[1]); SecuretyKey = securetyKeyCalc(SecuretySeed,data[1]);
if(#SecuretyKey >= 4){ if(#SecuretyKey >= 4){
FuncReq27(data[1]+1,SecuretyKey); FuncReq27(data[1]+1,SecuretyKey);
var str = "计算密钥-"; var str = "计算密钥";
for(i=1;4;1){ /*for(i=1;4;1){
str += " " + tostring(SecuretyKey[i],16); str += " " + tostring(SecuretyKey[i],16);
} }*/
FuncDisplay(str); FuncDisplay(str);
FuncDisplay("Calculate the key
");
} }
else { else {
FuncDisplay("计算失败"); FuncDisplay("计算失败");
@ -59,6 +65,8 @@ FuncDiag27Pro = function(data){
} }
case 2,4,6,8,10,12,0x12 { case 2,4,6,8,10,12,0x12 {
FuncDisplay("解锁成功"); FuncDisplay("解锁成功");
FuncDisplay("Unlocked successfully
");
lockstate = 2; lockstate = 2;
} }
else { else {

View File

@ -21,7 +21,7 @@ FuncReq2E = function(did,data){
var txdata = {0x10,3+#data,0x2E,did>>8,did&0xff,data[1],data[2],data[3]}; var txdata = {0x10,3+#data,0x2E,did>>8,did&0xff,data[1],data[2],data[3]};
CANHw.SendMsg(DiagReqID,txdata); CANHw.SendMsg(DiagReqID,txdata);
//等待发送 //等待发送
FuncPushPackage(DiagReqID,table.slice(data,3)); FuncPushPackage(DiagReqID,table.slice(data,4));
} }
else { else {
var txdata = {3+#data,0x2E,did>>8,did&0xff,0,0,0,0}; var txdata = {3+#data,0x2E,did>>8,did&0xff,0,0,0,0};
@ -39,5 +39,6 @@ FuncReq2E = function(did,data){
FuncDiag2EPro = function(data){ FuncDiag2EPro = function(data){
var did = (data[1]<<8) + data[2]; var did = (data[1]<<8) + data[2];
FuncDisplay("写入" + tostring(did,16) + "成功"); FuncDisplay("写入" + tostring(did,16) + "成功");
FuncDisplay("Write in " + tostring(did,16) + " success
");
} }

View File

@ -1,6 +1,8 @@
FuncReq31EraseFlash = function(addr,len){ FuncReq31EraseFlash = function(addr,len){
FuncDisplay("开始擦除数据") FuncDisplay("开始擦除数据");
FuncDisplay("Start erasing data
");
var data = {0xff,0x00,0x44,addr>>24,addr>>16,addr>>8,addr,len>>24,len>>16,len>>8,len}; var data = {0xff,0x00,0x44,addr>>24,addr>>16,addr>>8,addr,len>>24,len>>16,len>>8,len};
FuncReq31(data); FuncReq31(data);
} }
@ -42,16 +44,24 @@ FuncReq31 = function(data){
//接收 //接收
FuncDiag31Pro = function(data){ FuncDiag31Pro = function(data){
//console.dumpJson(data); //console.dumpJson(data);
if(#data < 3){
//FuncDisplay("31长度错误");
return;
}
var rid = (data[2]<<8) + data[3]; var rid = (data[2]<<8) + data[3];
select(rid) { select(rid) {
case 0xFF00 { case 0xFF00 {
FuncDisplay("擦除成功") FuncDisplay("擦除成功")
} }
case 0x0202 { case 0x0202 {
FuncDisplay("校验成功") FuncDisplay("校验成功");
FuncDisplay("Verification successful
");
} }
case 0xFF01 { case 0xFF01 {
FuncDisplay("检查标志成功") FuncDisplay("检查标志成功")
FuncDisplay("Check flag successfully
")
} }
case 0xF518 { case 0xF518 {
FuncDisplay("数字签名错误") FuncDisplay("数字签名错误")

View File

@ -13,8 +13,12 @@ var maxlen = 0;
FuncDiag34Pro = function(data){ FuncDiag34Pro = function(data){
//console.dumpJson(data); //console.dumpJson(data);
FuncDisplay("请求下载成功") FuncDisplay("请求下载成功")
FuncDisplay("Request download successful
")
maxlen = (data[2]<<8) + data[3]; maxlen = (data[2]<<8) + data[3];
FuncDisplay("最大长度:" + maxlen); FuncDisplay("最大长度:" + maxlen);
FuncDisplay("Maximum Length:" + maxlen++"
");
} }
FuncGetSengLen = function(){ FuncGetSengLen = function(){

View File

@ -33,6 +33,8 @@ FuncDiag7FPro = function(data){
case 0x78 { case 0x78 {
if(errSID != 0x36){ if(errSID != 0x36){
FuncDisplay("服务正忙") FuncDisplay("服务正忙")
FuncDisplay("Service is busy
")
} }
} }

View File

@ -3,6 +3,8 @@
var bootstate = 0; var bootstate = 0;
var bootcount = 0; var bootcount = 0;
var sendstate = 0; var sendstate = 0;
var senddataid = 0;
var repeat_times = 0;
FuncWait = function(sid){ FuncWait = function(sid){
if(RespState == (sid + 0x40)){//正响应 if(RespState == (sid + 0x40)){//正响应
//bootcount = 0; //bootcount = 0;
@ -17,6 +19,8 @@ FuncWait = function(sid){
} }
else { else {
FuncDisplay("刷写错误 步骤" + bootstate); FuncDisplay("刷写错误 步骤" + bootstate);
FuncDisplay("Flashing error steps" + bootstate++"
");
boottimer.disable(); boottimer.disable();
thread.command.$SendEnd(false); thread.command.$SendEnd(false);
return 1; //负响应 return 1; //负响应
@ -25,6 +29,8 @@ FuncWait = function(sid){
} }
if(stopflag == 1){ if(stopflag == 1){
FuncDisplay("停止"); FuncDisplay("停止");
FuncDisplay("Stop
");
boottimer.disable(); boottimer.disable();
thread.command.$SendEnd(false); thread.command.$SendEnd(false);
return 2;//停止命令 return 2;//停止命令
@ -32,10 +38,18 @@ FuncWait = function(sid){
bootcount += 1; bootcount += 1;
if(bootcount >= 400){ if(bootcount >= 400){
FuncDisplay("步骤" + bootstate + "超时 " + tostring(sid,16)); FuncDisplay("步骤" + bootstate + "超时 " + tostring(sid,16));
FuncDisplay("Step" + bootstate + " Timeout " + tostring(sid,16)++'\n');
thread.command.$SendEnd(false); thread.command.$SendEnd(false);
boottimer.disable(); boottimer.disable();
return 3;//超时 return 3;//超时
} }
if(sid==0x2e && repeat_times < 5 && bootcount > 100){
repeat_times++;
bootcount = 0;
repeat_times++;
sendstate = 0;
}
return 0xff;
} }
FuncStopBoot = function(){ FuncStopBoot = function(){
@ -46,11 +60,13 @@ FuncClearState = function(){
bootcount = 0; bootcount = 0;
sendstate = 1; sendstate = 1;
} }
FuncInitBootState = function(){ FuncInitBootState = function(id){
bootstate = 0; bootstate = 0;
RespState = 0; RespState = 0;
bootcount = 0; bootcount = 0;
sendstate = 0; sendstate = 0;
senddataid = id;
repeat_times = 0;
} }
@ -72,22 +88,26 @@ var blocknum = 1;
var alldata_blocknum = 0; var alldata_blocknum = 0;
var block_sended = 0; var block_sended = 0;
var sendFlashDriverState = 0; var sendFlashDriverState = 0;
var FuncSendBlockApp_sendflag = 0;
FuncSendBlockInit = function(id){ FuncSendBlockInit = function(id){
var len = 0; var len = 0;
alldata = FuncGetAllData(id); alldata = FuncGetAllData(id);
blocknum = 1; blocknum = 1;
if(alldata == null){ if(alldata == null){
FuncDisplay("错误:空数据"); FuncDisplay("错误:空数据");
FuncDisplay("Error: Empty data
");
alldata_blocknum = 0; alldata_blocknum = 0;
sendblockstate = 0xff; sendblockstate = 0xff;
return 1; return 1;
} }
for(i=1;#alldata;1){ for(i=1;#alldata;1){
len += math.ceil(#alldata[i]["data"] / 0x200) len += math.ceil(#alldata[i]["data"] / 0x400)
} }
alldata_blocknum = len; alldata_blocknum = len;
block_sended = 0; block_sended = 0;
sendblockstate = 0; sendblockstate = 0;
FuncSendBlockApp_sendflag = 0;
return 0; return 0;
} }
nextstate = function(val){ nextstate = function(val){
@ -97,11 +117,14 @@ nextstate = function(val){
block_sended += 1; block_sended += 1;
} }
} }
var FuncSendBlockApp_sendflag = 0
FuncSendBlockApp = function(){ FuncSendBlockApp = function(){
select(sendblockstate) { select(sendblockstate) {
case 0{ case 0{
if(FuncSendBlockApp_sendflag == 0){ if(FuncSendBlockApp_sendflag == 0){
FuncDisplay("请求下载");
FuncDisplay("Request to download
");
FuncReq34(alldata[blocknum]["address"],#alldata[blocknum]["data"]); FuncReq34(alldata[blocknum]["address"],#alldata[blocknum]["data"]);
FuncSendBlockApp_sendflag = 1; FuncSendBlockApp_sendflag = 1;
RespState = 0; RespState = 0;
@ -111,6 +134,7 @@ FuncSendBlockApp = function(){
if(FuncWait(0x34) == 0){ if(FuncWait(0x34) == 0){
FuncSendBlockApp_sendflag = 0; FuncSendBlockApp_sendflag = 0;
sendblockstate += 1; sendblockstate += 1;
} }
} }
@ -119,9 +143,13 @@ FuncSendBlockApp = function(){
FuncStartSendBlock(alldata[blocknum]["data"]);//初始化 FuncStartSendBlock(alldata[blocknum]["data"]);//初始化
FuncSendBlockApp_sendflag = 0; FuncSendBlockApp_sendflag = 0;
sendblockstate += 1; sendblockstate += 1;
FuncDisplay("发送App数据中...");
FuncDisplay("Sending App Data...
");
} }
case 2 { case 2 {
if(FuncSendBlockApp_sendflag == 0){ if(FuncSendBlockApp_sendflag == 0){
sleep(20);
FuncSendNextBlock(); FuncSendNextBlock();
FuncSendBlockApp_sendflag = 1; FuncSendBlockApp_sendflag = 1;
block_sended += 1; block_sended += 1;
@ -157,7 +185,9 @@ FuncSendBlockApp = function(){
sendblockstate = 0; sendblockstate = 0;
} }
else { else {
//所有数据发送完成 FuncDisplay("所有App数据发送完成");
FuncDisplay("All app data has been sent
");
return 0; return 0;
} }
@ -179,7 +209,7 @@ FuncSendBlockFlashDriver = function(){
} }
} }
} }
var err_version = 0;
var delaycount = 0; var delaycount = 0;
//boot总流程 //boot总流程
var boottime = 0; var boottime = 0;
@ -188,6 +218,23 @@ FuncBootSeq = function(){
select(bootstate) { select(bootstate) {
case 0 { case 0 {
boottime = 1; boottime = 1;
err_version = 0;
nextstate(0);
delaycount = 0;
if(DiagReqID == 0x720){
FuncDisplay("LeftVibrationFault = " ++ LeftVibrationFault);
FuncDisplay("LeftTouchFault = " ++ LeftTouchFault);
FuncDisplay("LeftPressSensorFault = " ++ LeftPressSensorFault);
FuncDisplay("LeftCommonFault = " ++ LeftCommonFault);
}
else {
FuncDisplay("RightVibrationFault = " ++ RightVibrationFault);
FuncDisplay("RightTouchFault = " ++ RightTouchFault);
FuncDisplay("RightPressSensorFault = " ++ RightPressSensorFault);
FuncDisplay("RightCommonFault = " ++ RightCommonFault);
}
FuncDisplay('\n');
/*
if(sendstate == 0){ if(sendstate == 0){
//FuncSendBlockInit(0); //FuncSendBlockInit(0);
FuncReadDID(0xF186); FuncReadDID(0xF186);
@ -197,15 +244,25 @@ FuncBootSeq = function(){
var ret = FuncWait(0x22); var ret = FuncWait(0x22);
nextstate(ret); nextstate(ret);
} }
*/
} }
case 1 { case 1 {
//nextstate(0);
if(sendstate == 0){ if(sendstate == 0){
FuncDisplay("读取版本");
FuncDisplay("Read version
");
FuncReadDID(0xF195);//读取软件版本 FuncReadDID(0xF195);//读取软件版本
FuncClearState(); FuncClearState();
} }
else { else {
var ret = FuncWait(0x22); //var ret = FuncWait(0x22);
nextstate(ret); //nextstate(0);
delaycount++;
if(delaycount > 5){
nextstate(0);
delaycount = 0;
}
} }
} }
case 2 { case 2 {
@ -214,53 +271,105 @@ FuncBootSeq = function(){
FuncClearState(); FuncClearState();
} }
else { else {
var ret = FuncWait(0x22); //var ret = FuncWait(0x22);
nextstate(ret); //nextstate(0);
delaycount++;
if(delaycount > 5){
nextstate(0);
delaycount = 0;
}
} }
} }
case 3 { case 3 {
//FuncDisplay('step3:');
//FuncDisplay(thrdTable.DIDdata);
if(thrdTable.DIDdata != null){
if(string.cmp(thrdTable.DIDdata,"SW0302",6) == 0){
err_version = 0;
}
else {
err_version = 1;
}
}
else {
err_version = 1;
}
if(err_version == 1){
FuncDisplay("版本号错误");
FuncDisplay('wrong version \n');
boottimer.disable();
thread.command.$SendEnd(false);
}
nextstate(0);
/*
if(sendstate == 0){ if(sendstate == 0){
FuncReq10(true,0x03);//进入扩展会话 FuncDisplay("进入扩展会话");
FuncReq10(false,0x03);//进入扩展会话
FuncClearState(); FuncClearState();
} }
else { else {
var ret = FuncWait(0x10); var ret = FuncWait(0x10);
nextstate(ret); nextstate(0);
} }
*/
} }
case 4 { case 4 {
nextstate(0);
/*
if(sendstate == 0){ if(sendstate == 0){
FuncReq85(0x02);//关闭DTC FuncReq85(0x02);//关闭DTC
FuncClearState(); FuncClearState();
} }
else { else {
var ret = FuncWait(0x85); var ret = FuncWait(0x85);
nextstate(ret); nextstate(0);//跳过
} }
*/
} }
case 5 { case 5 {
delaycount++;
if(delaycount > 10){
nextstate(0);
delaycount = 0;
}
/*
if(sendstate == 0){ if(sendstate == 0){
FuncReq28(0x01,0x01);//禁止发送 FuncReq28(0x01,0x01);//禁止发送
FuncClearState(); FuncClearState();
} }
else { else {
var ret = FuncWait(0x28); var ret = FuncWait(0x28);
nextstate(ret); nextstate(0);//跳过
} }
*/
} }
case 6 { case 6 {
if(sendstate == 0){ if(sendstate == 0){
FuncDisplay("进入编程会话");
FuncDisplay("Enter programming session
");
FuncReq10(false,0x02);//进入编程会话 FuncReq10(false,0x02);//进入编程会话
FuncClearState(); FuncClearState();
} }
else { else {
var ret = FuncWait(0x10); delaycount++;
nextstate(ret); if(delaycount > 10){
//nextstate(0);
//delaycount = 0;
var ret = FuncWait(0x10);
nextstate(ret);
}
} }
} }
case 7 { case 7 {
if(sendstate == 0){ if(sendstate == 0){
FuncReq27(0x11);//解密 FuncDisplay("等待解锁");
FuncDisplay("Waiting to unlock
");
FuncReq27(0x03);//解密
FuncClearState(); FuncClearState();
} }
else { else {
@ -272,27 +381,31 @@ FuncBootSeq = function(){
if(sendstate == 0){ if(sendstate == 0){
//FuncReq27(02);//发送key //FuncReq27(02);//发送key
FuncClearState(); FuncClearState();
FuncDisplay("等待解锁");
} }
else { else {
//var ret = FuncWait(0x27); //var ret = FuncWait(0x27);
var ret = FuncDiag27GetState(); var ret = FuncDiag27GetState();
nextstate(ret); nextstate(ret);//
} }
} }
case 9 { case 9 {
nextstate(0);
/*
if(sendstate == 0){ if(sendstate == 0){
FuncClearState(); FuncClearState();
FuncDIDWriteStr(0xf198,"Daming ");//写入repair_shopcode FuncDIDWriteStr(0xf198,"Daming ");//写入repair_shopcode
} }
else { else {
var ret = FuncWait(0x2E); //var ret = FuncWait(0x2E);
nextstate(ret); nextstate(0);//
} }
*/
} }
case 10 { case 10 {
nextstate(0);
/*
if(sendstate == 0){//写入installation_date if(sendstate == 0){//写入installation_date
var year1 = BCD_Conv(time.now().year/100); var year1 = BCD_Conv(time.now().year/100);
var year2 = BCD_Conv(time.now().year%100); var year2 = BCD_Conv(time.now().year%100);
@ -303,57 +416,57 @@ FuncBootSeq = function(){
//console.log("写入installation_date") //console.log("写入installation_date")
} }
else { else {
var ret = FuncWait(0x2E); //var ret = FuncWait(0x2E);
nextstate(ret); nextstate(0);
} }
*/
} }
case 11 { case 11 {
if(sendstate == 0){//发送数据
FuncSendBlockInit(0);
FuncDisplay("开始发送FlashDrv数据");
FuncClearState();
}
else {
var ret = FuncSendBlockApp();
nextstate(ret);
}
}
case 12 {
if(sendstate == 0){//CheckLogicBlock if(sendstate == 0){//CheckLogicBlock
var crc = FuncGetFlashCRC(0); FuncDisplay("擦除APP");
FuncReq31CheckLogicBlock(crc); FuncDisplay("Erase APP
");
FuncReq31EraseFlash(0x18000,0x20000);
FuncClearState(); FuncClearState();
} }
else { else {
var ret = FuncWait(0x31); var ret = FuncWait(0x31);
//console.log("ret = " , ret);
nextstate(ret); nextstate(ret);
delaycount = 0;
}
}
case 12 {
delaycount++;
if(delaycount > 10){
nextstate(0);//延时100mS
delaycount = 0;
} }
} }
case 13 { case 13 {
if(sendstate == 0){//CheckLogicBlock nextstate(0);
FuncReq31EraseFlash(0xA000,0x10000);
FuncClearState();
}
else {
var ret = FuncWait(0x31);
nextstate(ret);
}
} }
case 14 { case 14 {
if(sendstate == 0){//发送数据 if(sendstate == 0){//发送数据
FuncSendBlockInit(1); //console.log("开始发送App数据 ");
FuncDisplay("开始发送App数据"); FuncSendBlockInit(senddataid);
//FuncDisplay("开始发送App数据");
FuncClearState(); FuncClearState();
} }
else { else {
var ret = FuncSendBlockApp(); var ret = FuncSendBlockApp();
nextstate(ret); nextstate(ret);
} }
} }
case 15 { case 15 {
if(sendstate == 0){//CheckLogicBlock if(sendstate == 0){//CheckLogicBlock
var crc = FuncGetFlashCRC(1); FuncDisplay("CRC校验");
FuncDisplay("CRC check
");
var crc = FuncGetFlashCRC(senddataid);
FuncReq31CheckLogicBlock(crc); FuncReq31CheckLogicBlock(crc);
FuncClearState(); FuncClearState();
} }
@ -364,6 +477,9 @@ FuncBootSeq = function(){
} }
case 16 { case 16 {
if(sendstate == 0){////Programming Dependencies if(sendstate == 0){////Programming Dependencies
FuncDisplay("检查标志");
FuncDisplay("Check Mark
");
FuncReq31CheckPD(); FuncReq31CheckPD();
FuncClearState(); FuncClearState();
} }
@ -374,8 +490,11 @@ FuncBootSeq = function(){
} }
case 17 { case 17 {
if(sendstate == 0){//复位 if(sendstate == 0){//复位
FuncDisplay("复位");
FuncDisplay("Reset
");
FuncClearState(); FuncClearState();
FuncReq11(0x03); FuncReq11(0x01);
} }
else { else {
var ret = FuncWait(0x11); var ret = FuncWait(0x11);
@ -398,26 +517,50 @@ FuncBootSeq = function(){
} }
case 19 { case 19 {
//nextstate(0);
if(sendstate == 0){ if(sendstate == 0){
FuncReq10(true,0x03);//进入扩展会话 FuncReq10(false,0x03);//进入扩展会话
FuncClearState(); FuncClearState();
} }
else { else {
var ret = FuncWait(0x10); var ret = FuncWait(0x10);
nextstate(ret); nextstate(ret);
} }
} }
case 20 { case 20 {
if(sendstate == 0){ if(sendstate == 0){
FuncReq28(0x00,0x01);//开启发送 FuncDisplay("写入刷写信息");
FuncDisplay("Write flashing information
");
FuncClearState(); FuncClearState();
FuncDIDWriteStr(0xf198,"DM_Reworker ");//写入repair_shopcode LEN=16
} }
else { else {
var ret = FuncWait(0x28); var ret = FuncWait(0x2E);
nextstate(ret); nextstate(ret);//
} }
} }
case 21 { case 21 {
if(sendstate == 0){//写入installation_date
var year1 = BCD_Conv(time.now().year/100);
var year2 = BCD_Conv(time.now().year%100);
var month = BCD_Conv(time.now().month);
var day = BCD_Conv(time.now().day);
FuncReq2E(0XF199,{year1,year2,month,day})
FuncClearState();
//console.log("写入installation_date")
}
else {
var ret = FuncWait(0x2E);
nextstate(ret);
}
//nextstate(0);
/*
if(sendstate == 0){ if(sendstate == 0){
FuncReq85(0x01);//开启DTC FuncReq85(0x01);//开启DTC
FuncClearState(); FuncClearState();
@ -426,15 +569,50 @@ FuncBootSeq = function(){
var ret = FuncWait(0x85); var ret = FuncWait(0x85);
nextstate(ret); nextstate(ret);
} }
*/
} }
case 22 { case 22 {
//nextstate(0);
if(sendstate == 0){ if(sendstate == 0){
FuncReq10(true,0x01);//进入默认会话 FuncReq10(false,0x01);//进入默认会话
FuncClearState(); FuncClearState();
} }
else { else {
var ret = FuncWait(0x10); var ret = FuncWait(0x10);
nextstate(ret); nextstate(0);
}
}
case 23 {
if(sendstate == 0){
FuncDisplay("读取版本");
FuncDisplay('Read version\n');
FuncReadDID(0xF195);//读取软件版本
delaycount = 0;
FuncClearState();
}
else {
delaycount++;
if(delaycount > 5){
nextstate(0);
delaycount = 0;
}
}
}
case 24 {
if(sendstate == 0){
FuncDisplay("读取软件日期");
FuncDisplay('Read software date \n');
FuncReadDID(0xF18A);//读取软件版本
FuncClearState();
}
else {
delaycount++;
if(delaycount > 5){
nextstate(0);
delaycount = 0;
}
} }
} }
else { else {

View File

@ -5,6 +5,8 @@ securetyKeyCalc = function(pucSeed,ucSecurityLevel){
var seed = {0,0,0,0}; var seed = {0,0,0,0};
var key = {0,0,0,0}; var key = {0,0,0,0};
var cal = {0,0,0,0}; var cal = {0,0,0,0};
var pucKey = {1,2,3,4};
return pucKey; //跳过
seed[1]=pucSeed[4]; seed[1]=pucSeed[4];
seed[2]=pucSeed[3]; seed[2]=pucSeed[3];
seed[3]=pucSeed[2]; seed[3]=pucSeed[2];
@ -43,8 +45,8 @@ securetyKeyCalc = function(pucSeed,ucSecurityLevel){
cal[3] = ((seed[3]&0xF8)>>3)^xorArray[3]; cal[3] = ((seed[3]&0xF8)>>3)^xorArray[3];
cal[4] = ((seed[4]&0xF8)>>3)^xorArray[4]; cal[4] = ((seed[4]&0xF8)>>3)^xorArray[4];
key[1] = ((cal[4]&0x07)<<5)|(( cal[1]&0xF8)>>3); key[1] = ((cal[4]&0x07)<<5)|((cal[1]&0xF8)>>3);
key[2] = ((cal[0]&0x07)<<5)|(cal[3]&0x1F); key[2] = ((cal[0]&0x07)<<5)|( cal[3]&0x1F);
key[3] = (cal[2]&0xF8)|((cal[4]&0xE0)>>5); key[3] = (cal[2]&0xF8)|((cal[4]&0xE0)>>5);
key[4] = (cal[3]&0xF8)|( cal[2]&0x07); key[4] = (cal[3]&0xF8)|( cal[2]&0x07);
} }
@ -73,7 +75,7 @@ securetyKeyCalc = function(pucSeed,ucSecurityLevel){
else { else {
} }
} }
var pucKey = {0,0,0,0};
pucKey[1]=key[4]; pucKey[1]=key[4];
pucKey[2]=key[3]; pucKey[2]=key[3];
pucKey[3]=key[2]; pucKey[3]=key[2];

View File

@ -69,11 +69,8 @@ FuncGetFlashCRC = function(id){
FuncOpenS19File = function(id,path){ FuncOpenS19File = function(id,path){
import fsys.dlg; import fsys.dlg;
if(path == null){
path = fsys.dlg.open('S19文件|*.sx;*.s19;*.srec|所有文件|*.*||',,,winform);
}
if(io.exist( path )){ if(path != null){
//winform.editPath.text = path; //winform.editPath.text = path;
var readbuf = string.load(path); var readbuf = string.load(path);
@ -95,7 +92,7 @@ FuncOpenS19File = function(id,path){
var fileinfobuf = string.slice(str,9,-3);//取出文件信息 var fileinfobuf = string.slice(str,9,-3);//取出文件信息
fileinfo = "file info:"+string.unhex(fileinfobuf,"")//解码 fileinfo = "file info:"+string.unhex(fileinfobuf,"")//解码
fileinfo = string.replace(fileinfo,"\z"," ");//替换空字符 fileinfo = string.replace(fileinfo,"\z"," ");//替换空字符
FuncDisplay(fileinfo)//显示 //FuncDisplay(fileinfo)//显示
continue; continue;
} }
case "S1"{ case "S1"{
@ -160,6 +157,10 @@ FuncOpenS19File = function(id,path){
*/ */
AllData[id] = FlashData; AllData[id] = FlashData;
} }
else {
return null;
}
//blocknum = 1; //blocknum = 1;
return path; return path;