Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
393e555806 | |||
a32c87b161 | |||
cb2a256dc5 | |||
488177fce9 | |||
f7edb129f1 | |||
8f8a09bfc9 |
@ -1,8 +1,11 @@
|
||||
<?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.04" ProductVersion="0.0.0.04" publishDir="/dist/" dstrip="true" local="false" ignored="false">
|
||||
<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"/>
|
||||
</folder>
|
||||
<folder name="窗体文件" path="dlg" comment="目录" embed="true" local="false" ignored="false">
|
||||
<file name="about.aardio" path="dlg\about.aardio" comment="dlg\about.aardio"/>
|
||||
<file name="诊断子窗口.aardio" path="dlg\诊断子窗口.aardio" comment="dlg\诊断子窗口.aardio"/>
|
||||
</folder>
|
||||
<folder name="user" path="user" embed="true" comment="目录" local="false" ignored="false">
|
||||
|
28
dlg/about.aardio
Normal file
28
dlg/about.aardio
Normal file
@ -0,0 +1,28 @@
|
||||
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_20230321: 修复右板无法刷写,增加点亮功能,增加更改履历
|
||||
V0.3_20230321: 修复关闭界面后程序没有完全关闭的问题
|
||||
V0.4_20230322: 修复偶发刷写卡在请求下载的问题
|
||||
V0.5_20230401: 兼容0331程序无法读DID
|
||||
V0.6_20230724: 增加读供应商ID功能,增加断开连接,增加烧写过程中禁用其他按键
|
||||
V0.7_20230724: 增加刷写速度可选功能
|
||||
*/
|
||||
|
||||
winform.button.oncommand = function(id,event){
|
||||
winform.close();
|
||||
}
|
||||
|
||||
winform.static.text = 更新履历;
|
||||
|
||||
winform.show();
|
||||
win.loopMessage();
|
||||
return winform;
|
@ -197,7 +197,7 @@ namespace usb2canfd{
|
||||
{ //如果序号大于最大硬件数
|
||||
return 0;
|
||||
}
|
||||
import console;
|
||||
//import console;
|
||||
var ret = DllHandle.USB_OpenDevice(AvailableHW[index].hLINHW)
|
||||
//canfd = true;
|
||||
if(canfd == true){
|
||||
|
251
main.aardio
251
main.aardio
@ -1,32 +1,39 @@
|
||||
import win.ui;
|
||||
/*DSG{{*/
|
||||
mainForm = win.form(text="CAN_Bootloader";right=599;bottom=465;border="dialog frame";max=false)
|
||||
mainForm = win.form(text="CAN_Bootloader";right=699;bottom=465;border="dialog frame";max=false)
|
||||
mainForm.add(
|
||||
btnConnect={cls="button";text="连接";left=204;top=64;right=289;bottom=90;z=4};
|
||||
btnDiag={cls="button";text="诊断";left=149;top=350;right=248;bottom=375;z=25};
|
||||
btnFlash={cls="button";text="开始刷写";left=37;top=315;right=136;bottom=343;z=9};
|
||||
btnFresh={cls="button";text="刷新";left=204;top=28;right=288;bottom=54;z=2};
|
||||
btnOpen={cls="button";text="打开文件";left=37;top=282;right=136;bottom=310;z=8};
|
||||
btnOpenFlashdrv={cls="button";text="打开FlashDriver";left=149;top=282;right=248;bottom=310;z=24};
|
||||
btnReadF186={cls="button";text="读取当前会话";left=37;top=349;right=136;bottom=377;z=13};
|
||||
btnReadF198={cls="button";text="读取F198";left=37;top=415;right=136;bottom=443;z=19};
|
||||
btnReadF199={cls="button";text="读取F199";left=149;top=415;right=248;bottom=443;z=20};
|
||||
btnReadHw={cls="button";text="读取硬件版本号";left=149;top=381;right=248;bottom=409;z=12};
|
||||
btnReadSw={cls="button";text="读取软件版本号";left=37;top=382;right=136;bottom=410;z=10};
|
||||
btnTest={cls="button";text="停止";left=149;top=316;right=248;bottom=344;z=11};
|
||||
cbbChannel={cls="combobox";left=58;top=64;right=191;bottom=90;edge=1;items={};mode="dropdown";z=3};
|
||||
cbbDev={cls="combobox";left=58;top=27;right=191;bottom=53;edge=1;items={};mode="dropdown";z=1};
|
||||
checkbox={cls="checkbox";text="CANFD设备";left=151;top=101;right=248;bottom=120;checked=1;z=21};
|
||||
edFile={cls="richedit";left=8;top=131;right=288;bottom=187;border=1;disabled=1;edge=1;multiline=1;wrap=1;z=14};
|
||||
edFile2={cls="richedit";left=8;top=213;right=288;bottom=269;border=1;disabled=1;edge=1;multiline=1;wrap=1;z=22};
|
||||
edit={cls="edit";left=294;top=19;right=596;bottom=401;autovscroll=false;edge=1;multiline=1;vscroll=1;z=5};
|
||||
progress={cls="progress";left=296;top=436;right=596;bottom=464;edge=1;max=100;min=0;z=15};
|
||||
static={cls="static";text="设备";left=1;top=28;right=61;bottom=52;align="center";center=1;transparent=1;z=6};
|
||||
static2={cls="static";text="通道";left=1;top=66;right=61;bottom=90;align="center";center=1;transparent=1;z=7};
|
||||
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}
|
||||
btnConnect={cls="button";text="连接";left=204;top=64;right=289;bottom=90;z=5};
|
||||
btnDiag1001={cls="button";text="默认会话";left=98;top=229;right=190;bottom=260;z=24};
|
||||
btnDiag1002={cls="button";text="boot会话";left=192;top=229;right=284;bottom=260;z=23};
|
||||
btnDiag1003={cls="button";text="扩展会话";left=286;top=229;right=378;bottom=260;z=22};
|
||||
btnDisconnect={cls="button";text="断开";left=302;top=64;right=387;bottom=90;z=29};
|
||||
btnFlash={cls="button";text="开始刷写";left=276;top=368;right=375;bottom=396;z=10};
|
||||
btnFresh={cls="button";text="刷新";left=204;top=28;right=288;bottom=54;z=3};
|
||||
btnOpen={cls="button";text="打开文件";left=272;top=101;right=371;bottom=129;z=9};
|
||||
btnReadF186={cls="button";text="读取当前会话";left=4;top=229;right=96;bottom=260;z=14};
|
||||
btnReadF18A={cls="button";text="供应商ID";left=98;top=304;right=190;bottom=332;z=28};
|
||||
btnReadF198={cls="button";text="读取F198";left=286;top=261;right=378;bottom=289;z=20};
|
||||
btnReadF199={cls="button";text="读取F199";left=192;top=261;right=284;bottom=289;z=21};
|
||||
btnReadHw={cls="button";text="硬件版本号";left=98;top=261;right=190;bottom=289;z=13};
|
||||
btnReadSw={cls="button";text="软件版本号";left=4;top=261;right=96;bottom=289;z=11};
|
||||
btnTest={cls="button";text="停止";left=277;top=400;right=376;bottom=428;z=12};
|
||||
button={cls="button";text="点亮";left=6;top=304;right=94;bottom=332;z=27};
|
||||
cbbChannel={cls="combobox";left=58;top=64;right=191;bottom=90;edge=1;items={};mode="dropdown";z=4};
|
||||
cbbDev={cls="combobox";left=58;top=27;right=191;bottom=53;edge=1;items={};mode="dropdown";z=2};
|
||||
edFile={cls="richedit";left=8;top=131;right=371;bottom=209;border=1;disabled=1;edge=1;multiline=1;wrap=1;z=15};
|
||||
edit={cls="edit";left=390;top=19;right=692;bottom=401;autovscroll=false;edge=1;multiline=1;vscroll=1;z=6};
|
||||
groupbox={cls="groupbox";text="刷写速度";left=9;top=385;right=153;bottom=427;edge=1;z=1};
|
||||
progress={cls="progress";left=389;top=435;right=689;bottom=463;edge=1;max=100;min=0;z=16};
|
||||
radiobutton={cls="radiobutton";text="左板";left=277;top=310;right=365;bottom=329;checked=1;group=1;z=25};
|
||||
radiobutton2={cls="radiobutton";text="右板";left=277;top=336;right=365;bottom=355;z=26};
|
||||
rbSpeedHigh={cls="radiobutton";text="高";left=98;top=402;right=134;bottom=421;z=32};
|
||||
rbSpeedLow={cls="radiobutton";text="低";left=20;top=402;right=56;bottom=421;group=1;z=30};
|
||||
rbSpeedMiddle={cls="radiobutton";text="中";left=59;top=402;right=95;bottom=421;checked=1;z=31};
|
||||
static={cls="static";text="设备";left=1;top=28;right=61;bottom=52;align="center";center=1;transparent=1;z=7};
|
||||
static2={cls="static";text="通道";left=1;top=66;right=61;bottom=90;align="center";center=1;transparent=1;z=8};
|
||||
static3={cls="static";text="刷写进度";left=389;top=408;right=442;bottom=428;transparent=1;z=17};
|
||||
static4={cls="static";text="烧录APP";left=13;top=108;right=85;bottom=132;center=1;transparent=1;z=18};
|
||||
static5={cls="static";text="V0.7_20230724";left=545;top=1;right=689;bottom=17;align="right";center=1;notify=1;transparent=1;z=19}
|
||||
)
|
||||
/*}}*/
|
||||
|
||||
@ -34,26 +41,14 @@ import win;
|
||||
import usb2canfd;
|
||||
import win.timer;
|
||||
|
||||
var boot_count = 0;//boot时间计数器
|
||||
var bootstate = false;//boot状态标志
|
||||
var starttime = time.now();
|
||||
timer_bootcount = win.timer(mainForm,100);
|
||||
timer_bootcount.onTimer = function(){//boot时间定时器,100ms间隔
|
||||
boot_count++;
|
||||
}
|
||||
|
||||
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
|
||||
var ret = CANHw.LoadDll();
|
||||
if(ret == 0){
|
||||
@ -70,6 +65,7 @@ mainForm.cbbChannel.add("通道2");
|
||||
mainForm.cbbChannel.selIndex = 1
|
||||
|
||||
|
||||
|
||||
//刷新按键
|
||||
mainForm.btnFresh.oncommand = function(id,event){
|
||||
mainForm.cbbDev.clear();//清空下拉框,防止反复刷新叠加
|
||||
@ -88,7 +84,7 @@ mainForm.btnFresh.oncommand = function(id,event){
|
||||
}
|
||||
|
||||
mainForm.btnConnect.oncommand = function(id,event){
|
||||
var canfd_check = mainForm.checkbox.checked?0x80:0x00;
|
||||
var canfd_check = 0x80;//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
|
||||
@ -110,6 +106,7 @@ listener.$Display = function(str){
|
||||
}
|
||||
listener.$ShowPath = function(str){
|
||||
mainForm.edFile.text = str;
|
||||
|
||||
}
|
||||
listener.$ShowFlashDrvPath = function(str){
|
||||
mainForm.edFile2.text = str;
|
||||
@ -125,8 +122,20 @@ listener.$Connected = function(){
|
||||
mainForm.btnFresh.disabled = true;
|
||||
mainForm.cbbDev.disabled = true;
|
||||
mainForm.cbbChannel.disabled = true;
|
||||
mainForm.btnDisconnect.disabled = false;
|
||||
flag_connected = 1;
|
||||
}
|
||||
|
||||
listener.$Disconnected = function(){
|
||||
mainForm.btnConnect.disabled = false;
|
||||
mainForm.btnFresh.disabled = false;
|
||||
mainForm.cbbDev.disabled = false;
|
||||
mainForm.cbbChannel.disabled = false;
|
||||
mainForm.btnDisconnect.disabled = true;
|
||||
flag_connected = 0;
|
||||
}
|
||||
|
||||
|
||||
listener.$SendEnd = function(isSuccess){
|
||||
//timer_bootcount.disable();
|
||||
var usetime = time.now().diffsecond(starttime);
|
||||
@ -134,19 +143,21 @@ listener.$SendEnd = function(isSuccess){
|
||||
if(isSuccess == true){
|
||||
Display("刷写成功,用时 " + usetime + " S")
|
||||
}
|
||||
EnableAll();
|
||||
}
|
||||
|
||||
//线程函数
|
||||
var CanThread = function(){
|
||||
|
||||
//线程函数内部要添加自已的import语句
|
||||
import win;
|
||||
import console;
|
||||
//import console;
|
||||
//console.log("线程开始运行")
|
||||
loadcodex("\user\CanThread.aardio");//加载线程程序
|
||||
//在子线程启动消息循环
|
||||
win.loopMessage(FuncLoopMsg)
|
||||
}
|
||||
//开启线程
|
||||
thrdHandle,thrdId = thread.create( CanThread );
|
||||
DiagReadDID = function(did){
|
||||
::PostThreadMessage(thrdId,110,did,0)//自定义消息
|
||||
}
|
||||
@ -161,12 +172,12 @@ var DiagStopReq = function(){
|
||||
}
|
||||
|
||||
mainForm.btnReadSw.oncommand = function(id,event){
|
||||
DiagReadDID(0xF188);
|
||||
DiagReadDID(0xF195);
|
||||
}
|
||||
|
||||
|
||||
mainForm.btnReadHw.oncommand = function(id,event){
|
||||
DiagReadDID(0xF191);
|
||||
DiagReadDID(0xF193);
|
||||
}
|
||||
|
||||
mainForm.btnReadF186.oncommand = function(id,event){
|
||||
@ -189,17 +200,64 @@ mainForm.btnFlash.oncommand = function(id,event){
|
||||
if(bootstate == true){
|
||||
return ;
|
||||
}
|
||||
import fsys;
|
||||
var filename = fsys.getFileName(mainForm.edFile.text);
|
||||
if(mainForm.radiobutton.checked){
|
||||
if(string.find(filename,"SWTL") == null){
|
||||
Display("请打开正确的文件");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(string.find(filename,"SWTR") == null){
|
||||
Display("请打开正确的文件");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
bootstate = true;
|
||||
mainForm.edit.text = "";
|
||||
Display("开始刷写流程");
|
||||
starttime = time.now();
|
||||
//timer_bootcount.enable();
|
||||
boot_count = 0;
|
||||
DiagBootReq();
|
||||
|
||||
|
||||
DisableAll();
|
||||
}
|
||||
|
||||
DisableAll = function(){
|
||||
mainForm.btnOpen.disabled = 1;
|
||||
mainForm.btnReadF18A.disabled = 1;
|
||||
mainForm.btnReadF186.disabled = 1;
|
||||
mainForm.btnReadF198.disabled = 1;
|
||||
mainForm.btnReadF199.disabled = 1;
|
||||
mainForm.btnReadHw.disabled = 1;
|
||||
mainForm.btnReadSw.disabled = 1;
|
||||
mainForm.btnDiag1003.disabled = 1;
|
||||
mainForm.btnDiag1002.disabled = 1;
|
||||
mainForm.btnDiag1001.disabled = 1;
|
||||
mainForm.button.disabled = 1;
|
||||
mainForm.radiobutton.disabled = 1;
|
||||
mainForm.radiobutton2.disabled = 1;
|
||||
mainForm.btnFlash.disabled = 1;
|
||||
}
|
||||
EnableAll = function(){
|
||||
mainForm.btnOpen.disabled = 0;
|
||||
mainForm.btnReadF18A.disabled = 0;
|
||||
mainForm.btnReadF186.disabled = 0;
|
||||
mainForm.btnReadF198.disabled = 0;
|
||||
mainForm.btnReadF199.disabled = 0;
|
||||
mainForm.btnReadHw.disabled = 0;
|
||||
mainForm.btnReadSw.disabled = 0;
|
||||
mainForm.btnDiag1003.disabled = 0;
|
||||
mainForm.btnDiag1002.disabled = 0;
|
||||
mainForm.btnDiag1001.disabled = 0;
|
||||
mainForm.button.disabled = 0;
|
||||
mainForm.radiobutton.disabled = 0;
|
||||
mainForm.radiobutton2.disabled = 0;
|
||||
mainForm.btnFlash.disabled = 0;
|
||||
}
|
||||
|
||||
|
||||
mainForm.btnOpen.oncommand = function(id,event){
|
||||
::PostThreadMessage(thrdId,104,1,0)//自定义消息-打开文件
|
||||
}
|
||||
@ -218,28 +276,99 @@ mainForm.onClose = function(hwnd,message,wParam,lParam){
|
||||
}
|
||||
|
||||
mainForm.btnReadF198.oncommand = function(id,event){
|
||||
DiagReadDID(0x1701);
|
||||
DiagReadDID(0xF198);
|
||||
}
|
||||
|
||||
mainForm.btnReadF199.oncommand = function(id,event){
|
||||
DiagReadDID(0x1702);
|
||||
DiagReadDID(0xF199);
|
||||
}
|
||||
|
||||
mainForm.btnOpenFlashdrv.oncommand = function(id,event){
|
||||
::PostThreadMessage(thrdId,104,0,0)//自定义消息-打开flashdriver
|
||||
|
||||
//var frmChild = win.loadForm("\dlg\诊断子窗口.aardio");
|
||||
//frmChild.show(false);
|
||||
mainForm.btnDiag1003.oncommand = function(id,event){
|
||||
Diag10Req(0x03);
|
||||
}
|
||||
|
||||
var frmChild = win.loadForm("\dlg\诊断子窗口.aardio");
|
||||
frmChild.show(false);
|
||||
mainForm.btnDiag.oncommand = function(id,event){
|
||||
|
||||
frmChild.show();
|
||||
|
||||
mainForm.btnDiag1002.oncommand = function(id,event){
|
||||
Diag10Req(0x02);
|
||||
}
|
||||
|
||||
thrdHandle,thrdId = thread.create( CanThread )
|
||||
mainForm.btnDiag1001.oncommand = function(id,event){
|
||||
Diag10Req(0x01);
|
||||
}
|
||||
mainForm.text += " "
|
||||
|
||||
mainForm.radiobutton.oncommand = function(id,event){
|
||||
if(mainForm.radiobutton.checked){
|
||||
::PostThreadMessage(thrdId,106,0x720,0x620);//自定义消息
|
||||
}
|
||||
}
|
||||
|
||||
mainForm.radiobutton2.oncommand = function(id,event){
|
||||
if(mainForm.radiobutton2.checked){
|
||||
::PostThreadMessage(thrdId,106,0x710,0x610);//自定义消息
|
||||
}
|
||||
}
|
||||
|
||||
mainForm.button.oncommand = function(id,event){
|
||||
::PostThreadMessage(thrdId,107,1,0);//自定义消息
|
||||
}
|
||||
|
||||
aboutcounter = 0;
|
||||
mainForm.static5.oncommand = function(id,event){
|
||||
aboutcounter++;
|
||||
if(aboutcounter >= 5){
|
||||
aboutcounter = 0;
|
||||
var frmChild = mainForm.loadForm("\dlg\about.aardio");
|
||||
frmChild.doModal(mainForm);
|
||||
}
|
||||
}
|
||||
|
||||
mainForm.text += mainForm.static5.text;
|
||||
|
||||
mainForm.onClose = function(hwnd,message,wParam,lParam){
|
||||
//::PostThreadMessage(thrdId,109,0,0);//自定义消息
|
||||
//sleep(20);
|
||||
raw.closehandle(thrdHandle)
|
||||
}
|
||||
|
||||
mainForm.btnReadF18A.oncommand = function(id,event){
|
||||
DiagReadDID(0xF18A);
|
||||
}
|
||||
|
||||
mainForm.btnDisconnect.oncommand = function(id,event){
|
||||
::PostThreadMessage(thrdId,120,0,0)//自定义消息
|
||||
}
|
||||
|
||||
setSpeed = function(speed){
|
||||
::PostThreadMessage(thrdId,121,speed,0)//自定义消息
|
||||
}
|
||||
|
||||
|
||||
if(mainForm.rbSpeedLow.checked == true){
|
||||
setSpeed(1);
|
||||
}
|
||||
if(mainForm.rbSpeedMiddle.checked == true){
|
||||
setSpeed(2);
|
||||
}
|
||||
if(mainForm.rbSpeedHigh.checked == true){
|
||||
setSpeed(3);
|
||||
}
|
||||
|
||||
mainForm.rbSpeedLow.oncommand = function(id,event){
|
||||
setSpeed(1);
|
||||
}
|
||||
|
||||
mainForm.rbSpeedMiddle.oncommand = function(id,event){
|
||||
setSpeed(2);
|
||||
}
|
||||
|
||||
mainForm.rbSpeedHigh.oncommand = function(id,event){
|
||||
setSpeed(3);
|
||||
}
|
||||
|
||||
mainForm.btnDisconnect.disabled = true;
|
||||
|
||||
|
||||
mainForm.show();
|
||||
|
@ -5,10 +5,11 @@ import win.timer;
|
||||
CANHw = usb2canfd.USB2CANHW();
|
||||
CANHw.LoadDll();
|
||||
|
||||
DiagReqID = 0x741;//0x18dadff1;
|
||||
DiagRespID = 0x751;//0x18daf1df;
|
||||
DiagReqID = 0x720;//0x18dadff1;
|
||||
DiagRespID = 0x620;//0x18daf1df;
|
||||
DiagGloableID = 0x7DF;//0x18DB33F1;
|
||||
stopflag = 0;
|
||||
FlashSpeed = 1;
|
||||
//注册一个消息钩子函数
|
||||
FuncLoopMsg = function(msg){
|
||||
select(msg.message) {
|
||||
@ -39,6 +40,8 @@ FuncLoopMsg = function(msg){
|
||||
var ret = FuncOpenS19File(msg.wParam);
|
||||
if(ret != null){
|
||||
thread.command.$ShowPath(ret);
|
||||
var crc32 = FuncGetFlashCRC(msg.wParam);
|
||||
FuncDisplay("CRC = " ++ string.format("%X",crc32));
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,11 +50,20 @@ FuncLoopMsg = function(msg){
|
||||
case 105 {//停止boot
|
||||
thread.stop(0);
|
||||
}
|
||||
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(msg.wParam);
|
||||
FuncReq10(false,msg.wParam);
|
||||
}
|
||||
case 112 {
|
||||
FuncReq28(msg.wParam);
|
||||
@ -62,12 +74,33 @@ FuncLoopMsg = function(msg){
|
||||
case 114 {
|
||||
FuncReq27(msg.wParam);
|
||||
}
|
||||
case 120 {
|
||||
FuncDisconnect();
|
||||
}
|
||||
case 121 {
|
||||
FuncSetSpeed(msg.wParam);
|
||||
}
|
||||
else {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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 {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -93,6 +126,12 @@ FuncConnect = function(dev,chn){
|
||||
}
|
||||
}
|
||||
|
||||
FuncDisconnect = function(){
|
||||
CANHw.CloseDevice();
|
||||
thread.command.$Disconnected();
|
||||
}
|
||||
|
||||
|
||||
FuncDisplay = function(str){
|
||||
thread.command.$Display(str);//"线程" +
|
||||
}
|
||||
@ -173,23 +212,58 @@ FuncStartBoot = function(){
|
||||
var PackNext = 0x21;
|
||||
var Packdata = {};
|
||||
var PackID = 0;
|
||||
var timedll = raw.loadDll("Winmm.dll");
|
||||
//timedll.timeBeginPeriod(1);
|
||||
var tickdll = raw.loadDll("Kernel32.dll");
|
||||
var mydelay = function(ms){
|
||||
if(ms == 0)return;
|
||||
import time.performance;
|
||||
var tk = time.performance.tick();
|
||||
while((time.performance.tick() - tk) < ms){
|
||||
;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
FuncSetSpeed = function(speed){
|
||||
select(speed) {
|
||||
case 1 {
|
||||
FlashSpeed = 4;
|
||||
}
|
||||
case 2 {
|
||||
FlashSpeed = 1;
|
||||
}
|
||||
case 3 {
|
||||
FlashSpeed = 0;
|
||||
}
|
||||
else {
|
||||
FlashSpeed = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var FuncSendPackage = function(){
|
||||
timer1.disable();
|
||||
timedll.timeBeginPeriod(1);
|
||||
while(#Packdata > 0)
|
||||
{
|
||||
sleep(0.3);
|
||||
//sleep(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);
|
||||
}
|
||||
mydelay(FlashSpeed);
|
||||
CANHw.SendMsg(PackID,data);
|
||||
|
||||
//timedll.timeEndPeriod(1);
|
||||
PackNext += 1;
|
||||
if(PackNext > 0x2f){
|
||||
PackNext = 0x20;
|
||||
}
|
||||
}
|
||||
|
||||
timedll.timeEndPeriod(1);
|
||||
timer1.enable();
|
||||
}
|
||||
FuncPushPackage = function(ID,data){
|
||||
PackNext = 0x21;
|
||||
|
@ -23,13 +23,27 @@ FuncDiag22Pro = function(data){
|
||||
case 0xF186 {
|
||||
FuncDisplay("当前会话: " + data[3]);
|
||||
}
|
||||
case 0xF191 {
|
||||
FuncDisplay("硬件版本号");
|
||||
FuncDisplay(string.pack(table.slice(data,3)));
|
||||
case 0xF193 {
|
||||
var len = string.len(string.pack(table.slice(data,3)),3);
|
||||
if(data[3] != 0){
|
||||
var str = string.pack(table.slice(data,3,len+3));
|
||||
FuncDisplay("硬件版本号:" ++ str);
|
||||
}
|
||||
else {
|
||||
FuncDisplay("硬件版本号未读到");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
case 0xF188 {
|
||||
FuncDisplay("软件版本号");
|
||||
FuncDisplay(string.pack(table.slice(data,3)));
|
||||
case 0xF195 {
|
||||
var len = string.len(string.pack(table.slice(data,3)),3);
|
||||
if(data[3] != 0){
|
||||
var str = string.pack(table.slice(data,3,len+3));
|
||||
FuncDisplay("软件版本号:" ++ str);
|
||||
}
|
||||
else {
|
||||
FuncDisplay("软件版本号未读到");
|
||||
}
|
||||
}
|
||||
case 0xF198 {
|
||||
FuncDisplay("repair_shopcode");
|
||||
@ -37,7 +51,7 @@ FuncDiag22Pro = function(data){
|
||||
}
|
||||
case 0xF199 {
|
||||
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 {
|
||||
FuncDisplay("车辆备用零部件编号");
|
||||
@ -54,77 +68,6 @@ FuncDiag22Pro = function(data){
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -21,7 +21,7 @@ FuncReq2E = function(did,data){
|
||||
var txdata = {0x10,3+#data,0x2E,did>>8,did&0xff,data[1],data[2],data[3]};
|
||||
CANHw.SendMsg(DiagReqID,txdata);
|
||||
//等待发送
|
||||
FuncPushPackage(DiagReqID,table.slice(data,3));
|
||||
FuncPushPackage(DiagReqID,table.slice(data,4));
|
||||
}
|
||||
else {
|
||||
var txdata = {3+#data,0x2E,did>>8,did&0xff,0,0,0,0};
|
||||
|
@ -42,6 +42,10 @@ FuncReq31 = function(data){
|
||||
//接收
|
||||
FuncDiag31Pro = function(data){
|
||||
//console.dumpJson(data);
|
||||
if(#data < 3){
|
||||
//FuncDisplay("31长度错误");
|
||||
return;
|
||||
}
|
||||
var rid = (data[2]<<8) + data[3];
|
||||
select(rid) {
|
||||
case 0xFF00 {
|
||||
|
@ -3,6 +3,7 @@
|
||||
var bootstate = 0;
|
||||
var bootcount = 0;
|
||||
var sendstate = 0;
|
||||
var FuncSendBlockApp_sendflag = 0;
|
||||
FuncWait = function(sid){
|
||||
if(RespState == (sid + 0x40)){//正响应
|
||||
//bootcount = 0;
|
||||
@ -83,11 +84,14 @@ FuncSendBlockInit = function(id){
|
||||
return 1;
|
||||
}
|
||||
for(i=1;#alldata;1){
|
||||
len += math.ceil(#alldata[i]["data"] / 0x200)
|
||||
len += math.ceil(#alldata[i]["data"] / 0x400)
|
||||
}
|
||||
alldata_blocknum = len;
|
||||
block_sended = 0;
|
||||
sendblockstate = 0;
|
||||
|
||||
FuncSendBlockApp_sendflag = 0;
|
||||
//FuncDisplay("清除flag = " ++ FuncSendBlockApp_sendflag);
|
||||
return 0;
|
||||
}
|
||||
nextstate = function(val){
|
||||
@ -97,11 +101,14 @@ nextstate = function(val){
|
||||
block_sended += 1;
|
||||
}
|
||||
}
|
||||
var FuncSendBlockApp_sendflag = 0
|
||||
|
||||
FuncSendBlockApp = function(){
|
||||
//FuncDisplay("sendblockstate = " ++ sendblockstate);
|
||||
select(sendblockstate) {
|
||||
case 0{
|
||||
//FuncDisplay("flag = " ++ FuncSendBlockApp_sendflag);
|
||||
if(FuncSendBlockApp_sendflag == 0){
|
||||
FuncDisplay("请求下载");
|
||||
FuncReq34(alldata[blocknum]["address"],#alldata[blocknum]["data"]);
|
||||
FuncSendBlockApp_sendflag = 1;
|
||||
RespState = 0;
|
||||
@ -111,6 +118,7 @@ FuncSendBlockApp = function(){
|
||||
if(FuncWait(0x34) == 0){
|
||||
FuncSendBlockApp_sendflag = 0;
|
||||
sendblockstate += 1;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -119,9 +127,11 @@ FuncSendBlockApp = function(){
|
||||
FuncStartSendBlock(alldata[blocknum]["data"]);//初始化
|
||||
FuncSendBlockApp_sendflag = 0;
|
||||
sendblockstate += 1;
|
||||
FuncDisplay("发送App数据中...");
|
||||
}
|
||||
case 2 {
|
||||
if(FuncSendBlockApp_sendflag == 0){
|
||||
sleep(20);
|
||||
FuncSendNextBlock();
|
||||
FuncSendBlockApp_sendflag = 1;
|
||||
block_sended += 1;
|
||||
@ -157,7 +167,7 @@ FuncSendBlockApp = function(){
|
||||
sendblockstate = 0;
|
||||
}
|
||||
else {
|
||||
//所有数据发送完成
|
||||
FuncDisplay("所有App数据发送完成");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -188,6 +198,9 @@ FuncBootSeq = function(){
|
||||
select(bootstate) {
|
||||
case 0 {
|
||||
boottime = 1;
|
||||
nextstate(0);
|
||||
delaycount = 0;
|
||||
/*
|
||||
if(sendstate == 0){
|
||||
//FuncSendBlockInit(0);
|
||||
FuncReadDID(0xF186);
|
||||
@ -197,15 +210,23 @@ FuncBootSeq = function(){
|
||||
var ret = FuncWait(0x22);
|
||||
nextstate(ret);
|
||||
}
|
||||
*/
|
||||
}
|
||||
case 1 {
|
||||
//nextstate(0);
|
||||
if(sendstate == 0){
|
||||
FuncDisplay("读取版本");
|
||||
FuncReadDID(0xF195);//读取软件版本
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x22);
|
||||
nextstate(ret);
|
||||
//var ret = FuncWait(0x22);
|
||||
//nextstate(0);
|
||||
delaycount++;
|
||||
if(delaycount > 5){
|
||||
nextstate(0);
|
||||
delaycount = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
case 2 {
|
||||
@ -214,53 +235,81 @@ FuncBootSeq = function(){
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x22);
|
||||
nextstate(ret);
|
||||
//var ret = FuncWait(0x22);
|
||||
//nextstate(0);
|
||||
delaycount++;
|
||||
if(delaycount > 5){
|
||||
nextstate(0);
|
||||
delaycount = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
case 3 {
|
||||
nextstate(0);
|
||||
/*
|
||||
if(sendstate == 0){
|
||||
FuncReq10(true,0x03);//进入扩展会话
|
||||
FuncDisplay("进入扩展会话");
|
||||
FuncReq10(false,0x03);//进入扩展会话
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x10);
|
||||
nextstate(ret);
|
||||
nextstate(0);
|
||||
}
|
||||
*/
|
||||
}
|
||||
case 4 {
|
||||
nextstate(0);
|
||||
/*
|
||||
if(sendstate == 0){
|
||||
FuncReq85(0x02);//关闭DTC
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x85);
|
||||
nextstate(ret);
|
||||
nextstate(0);//跳过
|
||||
}
|
||||
*/
|
||||
}
|
||||
case 5 {
|
||||
delaycount++;
|
||||
if(delaycount > 10){
|
||||
nextstate(0);
|
||||
delaycount = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
if(sendstate == 0){
|
||||
FuncReq28(0x01,0x01);//禁止发送
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x28);
|
||||
nextstate(ret);
|
||||
nextstate(0);//跳过
|
||||
}
|
||||
*/
|
||||
}
|
||||
case 6 {
|
||||
if(sendstate == 0){
|
||||
FuncDisplay("进入编程会话");
|
||||
FuncReq10(false,0x02);//进入编程会话
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x10);
|
||||
nextstate(ret);
|
||||
delaycount++;
|
||||
if(delaycount > 10){
|
||||
//nextstate(0);
|
||||
//delaycount = 0;
|
||||
var ret = FuncWait(0x10);
|
||||
nextstate(ret);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
case 7 {
|
||||
if(sendstate == 0){
|
||||
FuncReq27(0x11);//解密
|
||||
FuncDisplay("等待解锁");
|
||||
FuncReq27(0x03);//解密
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
@ -272,27 +321,31 @@ FuncBootSeq = function(){
|
||||
if(sendstate == 0){
|
||||
//FuncReq27(02);//发送key
|
||||
FuncClearState();
|
||||
FuncDisplay("等待解锁");
|
||||
|
||||
}
|
||||
else {
|
||||
//var ret = FuncWait(0x27);
|
||||
var ret = FuncDiag27GetState();
|
||||
nextstate(ret);
|
||||
nextstate(ret);//
|
||||
}
|
||||
}
|
||||
case 9 {
|
||||
nextstate(0);
|
||||
/*
|
||||
if(sendstate == 0){
|
||||
FuncClearState();
|
||||
FuncDIDWriteStr(0xf198,"Daming ");//写入repair_shopcode
|
||||
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x2E);
|
||||
nextstate(ret);
|
||||
//var ret = FuncWait(0x2E);
|
||||
nextstate(0);//
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
case 10 {
|
||||
nextstate(0);
|
||||
/*
|
||||
if(sendstate == 0){//写入installation_date
|
||||
var year1 = BCD_Conv(time.now().year/100);
|
||||
var year2 = BCD_Conv(time.now().year%100);
|
||||
@ -303,47 +356,39 @@ FuncBootSeq = function(){
|
||||
//console.log("写入installation_date")
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x2E);
|
||||
nextstate(ret);
|
||||
//var ret = FuncWait(0x2E);
|
||||
nextstate(0);
|
||||
}
|
||||
*/
|
||||
}
|
||||
case 11 {
|
||||
if(sendstate == 0){//发送数据
|
||||
FuncSendBlockInit(0);
|
||||
FuncDisplay("开始发送FlashDrv数据");
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
var ret = FuncSendBlockApp();
|
||||
nextstate(ret);
|
||||
}
|
||||
}
|
||||
case 12 {
|
||||
if(sendstate == 0){//CheckLogicBlock
|
||||
var crc = FuncGetFlashCRC(0);
|
||||
FuncReq31CheckLogicBlock(crc);
|
||||
FuncDisplay("擦除APP");
|
||||
FuncReq31EraseFlash(0x18000,0x20000);
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x31);
|
||||
nextstate(ret);
|
||||
delaycount = 0;
|
||||
}
|
||||
|
||||
}
|
||||
case 12 {
|
||||
delaycount++;
|
||||
if(delaycount > 10){
|
||||
nextstate(0);//延时100mS
|
||||
delaycount = 0;
|
||||
}
|
||||
}
|
||||
case 13 {
|
||||
if(sendstate == 0){//CheckLogicBlock
|
||||
FuncReq31EraseFlash(0xA000,0x10000);
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x31);
|
||||
nextstate(ret);
|
||||
}
|
||||
nextstate(0);
|
||||
}
|
||||
|
||||
case 14 {
|
||||
if(sendstate == 0){//发送数据
|
||||
FuncSendBlockInit(1);
|
||||
FuncDisplay("开始发送App数据");
|
||||
//FuncDisplay("开始发送App数据");
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
@ -353,6 +398,7 @@ FuncBootSeq = function(){
|
||||
}
|
||||
case 15 {
|
||||
if(sendstate == 0){//CheckLogicBlock
|
||||
FuncDisplay("CRC校验");
|
||||
var crc = FuncGetFlashCRC(1);
|
||||
FuncReq31CheckLogicBlock(crc);
|
||||
FuncClearState();
|
||||
@ -364,6 +410,7 @@ FuncBootSeq = function(){
|
||||
}
|
||||
case 16 {
|
||||
if(sendstate == 0){////Programming Dependencies
|
||||
FuncDisplay("检查标志");
|
||||
FuncReq31CheckPD();
|
||||
FuncClearState();
|
||||
}
|
||||
@ -374,8 +421,9 @@ FuncBootSeq = function(){
|
||||
}
|
||||
case 17 {
|
||||
if(sendstate == 0){//复位
|
||||
FuncDisplay("复位");
|
||||
FuncClearState();
|
||||
FuncReq11(0x03);
|
||||
FuncReq11(0x01);
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x11);
|
||||
@ -398,16 +446,32 @@ FuncBootSeq = function(){
|
||||
}
|
||||
|
||||
case 19 {
|
||||
//nextstate(0);
|
||||
|
||||
if(sendstate == 0){
|
||||
FuncReq10(true,0x03);//进入扩展会话
|
||||
FuncReq10(false,0x03);//进入扩展会话
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x10);
|
||||
nextstate(ret);
|
||||
}
|
||||
|
||||
}
|
||||
case 20 {
|
||||
|
||||
if(sendstate == 0){
|
||||
FuncDisplay("写入刷写信息");
|
||||
FuncClearState();
|
||||
FuncDIDWriteStr(0xf198,"DM_Bootloader ");//写入repair_shopcode
|
||||
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x2E);
|
||||
nextstate(ret);//
|
||||
}
|
||||
//nextstate(0);
|
||||
/*
|
||||
if(sendstate == 0){
|
||||
FuncReq28(0x00,0x01);//开启发送
|
||||
FuncClearState();
|
||||
@ -416,8 +480,24 @@ FuncBootSeq = function(){
|
||||
var ret = FuncWait(0x28);
|
||||
nextstate(ret);
|
||||
}
|
||||
*/
|
||||
}
|
||||
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){
|
||||
FuncReq85(0x01);//开启DTC
|
||||
FuncClearState();
|
||||
@ -426,16 +506,20 @@ FuncBootSeq = function(){
|
||||
var ret = FuncWait(0x85);
|
||||
nextstate(ret);
|
||||
}
|
||||
*/
|
||||
}
|
||||
case 22 {
|
||||
//nextstate(0);
|
||||
|
||||
if(sendstate == 0){
|
||||
FuncReq10(true,0x01);//进入默认会话
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x10);
|
||||
nextstate(ret);
|
||||
nextstate(0);
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
thread.command.$SendEnd(true);
|
||||
|
@ -5,6 +5,8 @@ securetyKeyCalc = function(pucSeed,ucSecurityLevel){
|
||||
var seed = {0,0,0,0};
|
||||
var key = {0,0,0,0};
|
||||
var cal = {0,0,0,0};
|
||||
var pucKey = {1,2,3,4};
|
||||
return pucKey; //跳过
|
||||
seed[1]=pucSeed[4];
|
||||
seed[2]=pucSeed[3];
|
||||
seed[3]=pucSeed[2];
|
||||
@ -43,8 +45,8 @@ securetyKeyCalc = function(pucSeed,ucSecurityLevel){
|
||||
cal[3] = ((seed[3]&0xF8)>>3)^xorArray[3];
|
||||
cal[4] = ((seed[4]&0xF8)>>3)^xorArray[4];
|
||||
|
||||
key[1] = ((cal[4]&0x07)<<5)|(( cal[1]&0xF8)>>3);
|
||||
key[2] = ((cal[0]&0x07)<<5)|(cal[3]&0x1F);
|
||||
key[1] = ((cal[4]&0x07)<<5)|((cal[1]&0xF8)>>3);
|
||||
key[2] = ((cal[0]&0x07)<<5)|( cal[3]&0x1F);
|
||||
key[3] = (cal[2]&0xF8)|((cal[4]&0xE0)>>5);
|
||||
key[4] = (cal[3]&0xF8)|( cal[2]&0x07);
|
||||
}
|
||||
@ -73,7 +75,7 @@ securetyKeyCalc = function(pucSeed,ucSecurityLevel){
|
||||
else {
|
||||
}
|
||||
}
|
||||
var pucKey = {0,0,0,0};
|
||||
|
||||
pucKey[1]=key[4];
|
||||
pucKey[2]=key[3];
|
||||
pucKey[3]=key[2];
|
||||
|
Loading…
x
Reference in New Issue
Block a user