Compare commits
19 Commits
Branch_534
...
S51EV_ECU
Author | SHA1 | Date | |
---|---|---|---|
f2b1e3388c | |||
3dce038937 | |||
edb0df7387 | |||
34b4afa2c2 | |||
467d41ea06 | |||
131d4a4134 | |||
e1c3b5e5a6 | |||
3606564d81 | |||
7ca8b96fcf | |||
705c104cb0 | |||
68d5ffba4b | |||
b33dab5399 | |||
4c4f15a36a | |||
d3924dcadb | |||
d9070f88f4 | |||
cb02ae9ff6 | |||
f8de166289 | |||
b55d450a81 | |||
a50d01ce7c |
@ -1,24 +1,27 @@
|
||||
<?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.1" ProductVersion="0.0.0.1" publishDir="/dist/" dstrip="false" local="false" ignored="false">
|
||||
<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">
|
||||
<file name="main.aardio" path="main.aardio" comment="main.aardio"/>
|
||||
<folder name="资源文件" path="res" embed="true" local="false" ignored="false"/>
|
||||
<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"/>
|
||||
</folder>
|
||||
<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="Diag22code.aardio" path="user\Diag22code.aardio" comment="user\Diag22code.aardio"/>
|
||||
<file name="Diag10code.aardio" path="user\Diag10code.aardio" comment="user\Diag10code.aardio"/>
|
||||
<file name="Diag28code.aardio" path="user\Diag28code.aardio" comment="user\Diag28code.aardio"/>
|
||||
<file name="Diag85code.aardio" path="user\Diag85code.aardio" comment="user\Diag85code.aardio"/>
|
||||
<file name="Diag7Fcode.aardio" path="user\Diag7Fcode.aardio" comment="user\Diag7Fcode.aardio"/>
|
||||
<file name="Diag11code.aardio" path="user\Diag11code.aardio" comment="user\Diag11code.aardio"/>
|
||||
<file name="Diag22code.aardio" path="user\Diag22code.aardio" comment="user\Diag22code.aardio"/>
|
||||
<file name="Diag27code.aardio" path="user\Diag27code.aardio" comment="user\Diag27code.aardio"/>
|
||||
<file name="DiagBootcode.aardio" path="user\DiagBootcode.aardio" comment="user\DiagBootcode.aardio"/>
|
||||
<file name="securety.aardio" path="user\securety.aardio" comment="user\securety.aardio"/>
|
||||
<file name="Diag28code.aardio" path="user\Diag28code.aardio" comment="user\Diag28code.aardio"/>
|
||||
<file name="Diag2Ecode.aardio" path="user\Diag2Ecode.aardio" comment="user\Diag2Ecode.aardio"/>
|
||||
<file name="Diag31code.aardio" path="user\Diag31code.aardio" comment="user\Diag31code.aardio"/>
|
||||
<file name="Diag34code.aardio" path="user\Diag34code.aardio" comment="user\Diag34code.aardio"/>
|
||||
<file name="Diag36code.aardio" path="user\Diag36code.aardio" comment="user\Diag36code.aardio"/>
|
||||
<file name="S19Decode.aardio" path="user\S19Decode.aardio" comment="user\S19Decode.aardio"/>
|
||||
<file name="Diag37code.aardio" path="user\Diag37code.aardio" comment="user\Diag37code.aardio"/>
|
||||
<file name="Diag11code.aardio" path="user\Diag11code.aardio" comment="user\Diag11code.aardio"/>
|
||||
<file name="Diag7Fcode.aardio" path="user\Diag7Fcode.aardio" comment="user\Diag7Fcode.aardio"/>
|
||||
<file name="Diag85code.aardio" path="user\Diag85code.aardio" comment="user\Diag85code.aardio"/>
|
||||
<file name="DiagBootcode.aardio" path="user\DiagBootcode.aardio" comment="user\DiagBootcode.aardio"/>
|
||||
<file name="GeelySecurety.aardio" path="user\GeelySecurety.aardio" comment="user\GeelySecurety.aardio"/>
|
||||
<file name="S19Decode.aardio" path="user\S19Decode.aardio" comment="user\S19Decode.aardio"/>
|
||||
<file name="securety.aardio" path="user\securety.aardio" comment="user\securety.aardio"/>
|
||||
</folder>
|
||||
</project>
|
||||
|
67
dlg/诊断子窗口.aardio
Normal file
67
dlg/诊断子窗口.aardio
Normal file
@ -0,0 +1,67 @@
|
||||
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;
|
@ -36,7 +36,26 @@ namespace usb2canfd{
|
||||
BYTE __Res0[8];
|
||||
}
|
||||
|
||||
//CAN信息帧的数据类型定义
|
||||
//初始化CAN的数据类型定义
|
||||
class CAN_INIT_CONFIG{
|
||||
ctor( /*输入构造函数所需要的参数*/ ){
|
||||
|
||||
};
|
||||
type=me;
|
||||
/*对象的所有成员必须用分号分隔*/
|
||||
//CAN波特率 = 100MHz/(CAN_BRP)/(CAN_SJW+CAN_BS1+CAN_BS2)
|
||||
INT CAN_BRP; //取值范围1~1024
|
||||
BYTE CAN_SJW; //取值范围1~4
|
||||
BYTE CAN_BS1; //取值范围1~16
|
||||
BYTE CAN_BS2; //取值范围1~8
|
||||
BYTE CAN_Mode; //CAN工作模式,0-正常模式,1-环回模式,2-静默模式,3-静默环回模式,bit7为1则接入适配器内部终端电阻,否则不接入
|
||||
BYTE CAN_ABOM; //自动离线管理,0-禁止,1-使能
|
||||
BYTE CAN_NART; //报文重发管理,0-使能报文重传,1-禁止报文重传
|
||||
BYTE CAN_RFLM; //FIFO锁定管理,0-新报文覆盖旧报文,1-丢弃新报文
|
||||
BYTE CAN_TXFP; //发送优先级管理,0-标识符决定,1-发送请求顺序决定
|
||||
}
|
||||
|
||||
//CANfd信息帧的数据类型定义
|
||||
class CANFD_MSG{
|
||||
ctor( /*输入构造函数所需要的参数*/ ){
|
||||
|
||||
@ -52,6 +71,22 @@ namespace usb2canfd{
|
||||
BYTE Data[64]; //报文的数据。
|
||||
}
|
||||
|
||||
//CAN信息帧的数据类型定义
|
||||
class CAN_MSG{
|
||||
ctor( /*输入构造函数所需要的参数*/ ){
|
||||
|
||||
};
|
||||
type=me;
|
||||
/*对象的所有成员必须用分号分隔*/
|
||||
INT ID; //报文ID。
|
||||
INT TimeStamp; //接收到信息帧时的时间标识,从CAN 控制器初始化开始计时。
|
||||
BYTE RemoteFlag; //是否是远程帧
|
||||
BYTE ExternFlag; //是否是扩展帧
|
||||
BYTE DataLen; //数据长度(<=8),即Data 的长度。
|
||||
BYTE Data[8]; //报文的数据。
|
||||
BYTE __Res;
|
||||
}
|
||||
|
||||
class CAN_UDS_ADDR{
|
||||
ctor( /*输入构造函数所需要的参数*/ ){
|
||||
|
||||
@ -102,13 +137,13 @@ namespace usb2canfd{
|
||||
//加载DLL
|
||||
LoadDll = function(){
|
||||
try{
|
||||
DllHandle = ..raw.loadDll("\USB2XXX.dll")
|
||||
DllHandle = ..raw.loadDll("USB2XXX.dll")
|
||||
}
|
||||
catch(err)
|
||||
{
|
||||
import win;
|
||||
DllHandle = null;
|
||||
win.msgboxTimeout("加载USB2LIN的DLL失败,请检查USB2XXX.dll和libusb-1.0.dll文件","错误",1000,);
|
||||
win.msgboxTimeout("加载USB2LIN的DLL失败,请检查USB2XXX.dll和libusb-1.0.dll文件","错误",3000,);
|
||||
}
|
||||
if(DllHandle == null)return 1;
|
||||
return 0;
|
||||
@ -157,36 +192,58 @@ namespace usb2canfd{
|
||||
}
|
||||
|
||||
//打开设备,包括初始化通道
|
||||
OpenDevice = function(index,channel){
|
||||
OpenDevice = function(index,channel,canfd){
|
||||
if(index > HwNum)
|
||||
{ //如果序号大于最大硬件数
|
||||
return 0;
|
||||
}
|
||||
import console;
|
||||
var ret = DllHandle.USB_OpenDevice(AvailableHW[index].hLINHW)
|
||||
//canfd = true;
|
||||
if(canfd == true){
|
||||
var canconfig = ..usb2canfd.CANFD_INIT_CONFIG();
|
||||
|
||||
canconfig = ..usb2canfd.CANFD_INIT_CONFIG();
|
||||
|
||||
canconfig.Mode = 0; //0-正常模式,1-自发自收模式
|
||||
canconfig.ISOCRCEnable = 0;//0-禁止ISO CRC,1-使能ISO CRC
|
||||
canconfig.RetrySend = 0;//0-禁止重发,1-无限制重发
|
||||
canconfig.ResEnable = 1;//0-不接入内部120欧终端电阻,1-接入内部120欧终端电阻
|
||||
//波特率参数可以用TCANLINPro软件里面的波特率计算工具计算
|
||||
//仲裁段波特率参数,波特率=40M/NBT_BRP*(1+NBT_SEG1+NBT_SEG2)
|
||||
canconfig.NBT_BRP = 1; //参数来自官方上位机,默认500K
|
||||
canconfig.NBT_SEG1 = 59;
|
||||
canconfig.NBT_SEG2 = 20;
|
||||
canconfig.NBT_SJW = 2;
|
||||
//数据段波特率参数,波特率=40M/DBT_BRP*(1+DBT_SEG1+DBT_SEG2)
|
||||
canconfig.DBT_BRP = 2; //参数来自官方上位机,默认500K
|
||||
canconfig.DBT_SEG1 = 29;
|
||||
canconfig.DBT_SEG2 = 10;
|
||||
canconfig.DBT_SJW = 2;
|
||||
|
||||
ret = DllHandle.CANFD_Init(AvailableHW[index].hLINHW,channel,canconfig);
|
||||
canconfig.Mode = 0; //0-正常模式,1-自发自收模式
|
||||
canconfig.ISOCRCEnable = 0;//0-禁止ISO CRC,1-使能ISO CRC
|
||||
canconfig.RetrySend = 0;//0-禁止重发,1-无限制重发
|
||||
canconfig.ResEnable = 1;//0-不接入内部120欧终端电阻,1-接入内部120欧终端电阻
|
||||
//波特率参数可以用TCANLINPro软件里面的波特率计算工具计算
|
||||
//仲裁段波特率参数,波特率=40M/NBT_BRP*(1+NBT_SEG1+NBT_SEG2)
|
||||
canconfig.NBT_BRP = 1; //参数来自官方上位机,默认500K
|
||||
canconfig.NBT_SEG1 = 59;
|
||||
canconfig.NBT_SEG2 = 20;
|
||||
canconfig.NBT_SJW = 2;
|
||||
//数据段波特率参数,波特率=40M/DBT_BRP*(1+DBT_SEG1+DBT_SEG2)
|
||||
canconfig.DBT_BRP = 2; //参数来自官方上位机,默认500K
|
||||
canconfig.DBT_SEG1 = 29;
|
||||
canconfig.DBT_SEG2 = 10;
|
||||
canconfig.DBT_SJW = 2;
|
||||
|
||||
ret = DllHandle.CANFD_Init(AvailableHW[index].hLINHW,channel,canconfig);
|
||||
}
|
||||
else {
|
||||
var canconfig = ..usb2canfd.CAN_INIT_CONFIG();
|
||||
|
||||
canconfig.CAN_Mode = 0x80;//0-正常模式 1-环回模式 0x80终端电阻
|
||||
|
||||
canconfig.CAN_ABOM = 0;//禁止自动离线
|
||||
canconfig.CAN_NART = 1;//禁止报文重传
|
||||
canconfig.CAN_RFLM = 0;//FIFO满之后覆盖旧报文
|
||||
canconfig.CAN_TXFP = 1;//发送请求决定发送顺序
|
||||
//配置波特率,波特率 = 42M/(BRP*(SJW+BS1+BS2))
|
||||
canconfig.CAN_BRP = 4;
|
||||
canconfig.CAN_BS1 = 15;
|
||||
canconfig.CAN_BS2 = 5;
|
||||
canconfig.CAN_SJW = 2;
|
||||
ret = DllHandle.CAN_Init(AvailableHW[index].hLINHW,channel,canconfig);
|
||||
//console.log("init ret = " + ret);
|
||||
}
|
||||
|
||||
canfd_connected = canfd;
|
||||
if(ret == 0){//调用成功
|
||||
Hwconnected = AvailableHW[index].hLINHW;
|
||||
Chconntected = channel;
|
||||
|
||||
}
|
||||
else {
|
||||
Hwconnected = null
|
||||
@ -227,20 +284,46 @@ namespace usb2canfd{
|
||||
if(#data == 0 || #data>8){//长度不对
|
||||
return 0;
|
||||
}
|
||||
var msg = ..usb2canfd.CANFD_MSG();
|
||||
msg.Flags = 0;
|
||||
if(id <= 0x7ff){
|
||||
msg.ID = id; //| (1<<31);//扩展帧
|
||||
//console.log("发送报文")
|
||||
var ret = 0;
|
||||
if(canfd_connected == true){
|
||||
var msg = ..usb2canfd.CANFD_MSG();
|
||||
msg.Flags = 0;
|
||||
if(id <= 0x7ff){
|
||||
msg.ID = id; //| (1<<31);//扩展帧
|
||||
}
|
||||
else {
|
||||
msg.ID = id | (1<<31);//扩展帧
|
||||
}
|
||||
|
||||
|
||||
msg.DLC = #data;
|
||||
msg.Data = data;
|
||||
|
||||
//console.dumpJson(msg);
|
||||
//console.log("Hwconnected = " + Hwconnected);
|
||||
//console.log("Chconntected = " + Chconntected);
|
||||
ret = DllHandle.CANFD_SendMsg(Hwconnected,Chconntected,msg,1);
|
||||
}
|
||||
else {
|
||||
msg.ID = id | (1<<31);//扩展帧
|
||||
var msg = ..usb2canfd.CAN_MSG();
|
||||
//msg.Flags = 0;
|
||||
if(id <= 0x7ff){
|
||||
msg.ID = id; //| (1<<31);//扩展帧
|
||||
}
|
||||
else {
|
||||
msg.ID = id | (1<<31);//扩展帧
|
||||
}
|
||||
msg.ExternFlag = 0;
|
||||
msg.RemoteFlag = 0;
|
||||
msg.DataLen = #data;
|
||||
msg.Data = data;
|
||||
//console.log("发送报文")
|
||||
ret = DllHandle.CAN_SendMsg(Hwconnected,Chconntected,msg,1);
|
||||
//console.log("ret = " + ret);
|
||||
}
|
||||
|
||||
|
||||
msg.DLC = #data;
|
||||
msg.Data = data;
|
||||
var ret = DllHandle.CANFD_SendMsg(Hwconnected,Chconntected,msg,1);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -248,18 +331,37 @@ namespace usb2canfd{
|
||||
GetMsg = function(){
|
||||
var ret = 0;
|
||||
var retdata = {};
|
||||
do{
|
||||
var msgbuf = ..usb2canfd.CANFD_MSG();
|
||||
ret = DllHandle.CANFD_GetMsg(Hwconnected,CANIndex,msgbuf,1);
|
||||
if(ret == 1){
|
||||
var data = {};
|
||||
for(i=1;msgbuf.DLC;1){
|
||||
data[i] = msgbuf.Data[i];
|
||||
if(canfd_connected == true){
|
||||
//CANFD
|
||||
do{
|
||||
var msgbuf = ..usb2canfd.CANFD_MSG();
|
||||
ret = DllHandle.CANFD_GetMsg(Hwconnected,CANIndex,msgbuf,1);
|
||||
if(ret == 1){
|
||||
var data = {};
|
||||
for(i=1;msgbuf.DLC;1){
|
||||
data[i] = msgbuf.Data[i];
|
||||
}
|
||||
var msg = {"id"=msgbuf.ID;"data"=data;};//
|
||||
..table.push(retdata,msg);
|
||||
}
|
||||
var msg = {"id"=msgbuf.ID;"data"=data;};//
|
||||
..table.push(retdata,msg);
|
||||
}
|
||||
}while(ret > 0)
|
||||
}while(ret > 0)
|
||||
}
|
||||
else {
|
||||
//CAN
|
||||
do{
|
||||
var msgbuf = ..usb2canfd.CAN_MSG();
|
||||
ret = DllHandle.CAN_GetMsgWithSize(Hwconnected,CANIndex,msgbuf,1);
|
||||
if(ret == 1){
|
||||
var data = {};
|
||||
for(i=1;msgbuf.DataLen;1){
|
||||
data[i] = msgbuf.Data[i];
|
||||
}
|
||||
var msg = {"id"=msgbuf.ID;"data"=data;};//
|
||||
..table.push(retdata,msg);
|
||||
}
|
||||
}while(ret > 0)
|
||||
}
|
||||
|
||||
|
||||
return retdata;
|
||||
}
|
||||
|
98
main.aardio
98
main.aardio
@ -1,27 +1,32 @@
|
||||
import win.ui;
|
||||
/*DSG{{*/
|
||||
mainForm = win.form(text="CAN_Bootloader";right=599;bottom=399;border="dialog frame";max=false)
|
||||
mainForm = win.form(text="CAN_Bootloader";right=599;bottom=465;border="dialog frame";max=false)
|
||||
mainForm.add(
|
||||
btnConnect={cls="button";text="连接";left=204;top=64;right=289;bottom=90;z=4};
|
||||
btnFlash={cls="button";text="开始刷写";left=148;top=197;right=247;bottom=225;z=9};
|
||||
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=32;top=197;right=131;bottom=225;z=8};
|
||||
btnReadF186={cls="button";text="读取当前会话";left=33;top=228;right=132;bottom=256;z=13};
|
||||
btnReadF198={cls="button";text="读取F198";left=33;top=291;right=132;bottom=319;z=19};
|
||||
btnReadF199={cls="button";text="读取F199";left=148;top=291;right=247;bottom=319;z=20};
|
||||
btnReadHw={cls="button";text="读取硬件版本号";left=148;top=261;right=247;bottom=289;z=12};
|
||||
btnReadSw={cls="button";text="读取软件版本号";left=33;top=260;right=132;bottom=288;z=10};
|
||||
btnTest={cls="button";text="停止";left=148;top=229;right=247;bottom=257;z=11};
|
||||
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};
|
||||
edit={cls="edit";left=296;top=8;right=598;bottom=383;autovscroll=false;edge=1;multiline=1;vscroll=1;z=5};
|
||||
progress={cls="progress";left=16;top=349;right=279;bottom=377;edge=1;max=100;min=0;z=15};
|
||||
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=17;top=328;right=70;bottom=348;transparent=1;z=16};
|
||||
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=452;top=383;right=596;bottom=399;align="right";center=1;transparent=1;z=18}
|
||||
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}
|
||||
)
|
||||
/*}}*/
|
||||
|
||||
@ -31,20 +36,34 @@ 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){
|
||||
Display("DLL加载成功");
|
||||
}
|
||||
else {
|
||||
Display("DLL加载失败");
|
||||
}
|
||||
|
||||
|
||||
//初始化界面
|
||||
@ -71,7 +90,8 @@ mainForm.btnFresh.oncommand = function(id,event){
|
||||
}
|
||||
|
||||
mainForm.btnConnect.oncommand = function(id,event){
|
||||
::PostThreadMessage(thrdId,101,mainForm.cbbDev.selIndex,mainForm.cbbChannel.selIndex - 1)//自定义消息
|
||||
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){
|
||||
@ -93,6 +113,9 @@ listener.$Display = function(str){
|
||||
listener.$ShowPath = function(str){
|
||||
mainForm.edFile.text = str;
|
||||
}
|
||||
listener.$ShowFlashDrvPath = function(str){
|
||||
mainForm.edFile2.text = str;
|
||||
}
|
||||
listener.$SetProgress = function(pos){
|
||||
if(pos >= 0 && pos <= 100){
|
||||
mainForm.progress.pos = pos;
|
||||
@ -107,10 +130,11 @@ listener.$Connected = function(){
|
||||
flag_connected = 1;
|
||||
}
|
||||
listener.$SendEnd = function(isSuccess){
|
||||
timer_bootcount.disable();
|
||||
//timer_bootcount.disable();
|
||||
var usetime = time.now().diffsecond(starttime);
|
||||
bootstate = false;
|
||||
if(isSuccess == true){
|
||||
Display("刷写成功,用时 " + boot_count/10 + " S")
|
||||
Display("刷写成功,用时 " + usetime + " S")
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,7 +149,7 @@ var CanThread = function(){
|
||||
//在子线程启动消息循环
|
||||
win.loopMessage(FuncLoopMsg)
|
||||
}
|
||||
var DiagReadDID = function(did){
|
||||
DiagReadDID = function(did){
|
||||
::PostThreadMessage(thrdId,110,did,0)//自定义消息
|
||||
}
|
||||
var Diag10Req = function(num){
|
||||
@ -144,7 +168,7 @@ mainForm.btnReadSw.oncommand = function(id,event){
|
||||
|
||||
|
||||
mainForm.btnReadHw.oncommand = function(id,event){
|
||||
DiagReadDID(0xF192);
|
||||
DiagReadDID(0xF193);
|
||||
}
|
||||
|
||||
mainForm.btnReadF186.oncommand = function(id,event){
|
||||
@ -157,7 +181,11 @@ mainForm.btnTest.oncommand = function(id,event){
|
||||
|
||||
mainForm.btnFlash.oncommand = function(id,event){
|
||||
if(io.exist(mainForm.edFile.text) == null){
|
||||
Display("请打开文件");
|
||||
Display("请打开烧写文件");
|
||||
return;
|
||||
}
|
||||
if(io.exist(mainForm.edFile2.text) == null){
|
||||
Display("请打开flashdriver文件");
|
||||
return;
|
||||
}
|
||||
if(flag_connected == 0){
|
||||
@ -170,7 +198,8 @@ mainForm.btnFlash.oncommand = function(id,event){
|
||||
bootstate = true;
|
||||
mainForm.edit.text = "";
|
||||
Display("开始刷写流程");
|
||||
timer_bootcount.enable();
|
||||
starttime = time.now();
|
||||
//timer_bootcount.enable();
|
||||
boot_count = 0;
|
||||
DiagBootReq();
|
||||
|
||||
@ -178,13 +207,16 @@ mainForm.btnFlash.oncommand = function(id,event){
|
||||
}
|
||||
|
||||
mainForm.btnOpen.oncommand = function(id,event){
|
||||
::PostThreadMessage(thrdId,104,0,0)//自定义消息-打开文件
|
||||
::PostThreadMessage(thrdId,104,1,0)//自定义消息-打开文件
|
||||
}
|
||||
|
||||
//程序关闭
|
||||
mainForm.onClose = function(hwnd,message,wParam,lParam){
|
||||
::PostThreadMessage(thrdId,105,0,0)//自定义消息
|
||||
thread.waitClose(thrdHandle);
|
||||
if(thrdId != null){
|
||||
::PostThreadMessage(thrdId,105,0,0)//自定义消息
|
||||
thread.waitClose(thrdHandle);
|
||||
}
|
||||
|
||||
|
||||
//PLinHw.isConnected()///待完善
|
||||
//console.print("线程已关闭")
|
||||
@ -192,11 +224,23 @@ mainForm.onClose = function(hwnd,message,wParam,lParam){
|
||||
}
|
||||
|
||||
mainForm.btnReadF198.oncommand = function(id,event){
|
||||
DiagReadDID(0xF198);
|
||||
DiagReadDID(0x1701);
|
||||
}
|
||||
|
||||
mainForm.btnReadF199.oncommand = function(id,event){
|
||||
DiagReadDID(0xF199);
|
||||
DiagReadDID(0x1702);
|
||||
}
|
||||
|
||||
mainForm.btnOpenFlashdrv.oncommand = function(id,event){
|
||||
::PostThreadMessage(thrdId,104,0,0)//自定义消息-打开flashdriver
|
||||
}
|
||||
|
||||
var frmChild = win.loadForm("\dlg\诊断子窗口.aardio");
|
||||
frmChild.show(false);
|
||||
mainForm.btnDiag.oncommand = function(id,event){
|
||||
|
||||
frmChild.show();
|
||||
|
||||
}
|
||||
|
||||
thrdHandle,thrdId = thread.create( CanThread )
|
||||
|
@ -5,9 +5,9 @@ import win.timer;
|
||||
CANHw = usb2canfd.USB2CANHW();
|
||||
CANHw.LoadDll();
|
||||
|
||||
DiagReqID = 0x18dadff1;
|
||||
DiagRespID = 0x18daf1df;
|
||||
DiagGloableID = 0x18DB33F1;
|
||||
DiagReqID = 0x7F3;//0x18dadff1;
|
||||
DiagRespID = 0x7FB;//0x18daf1df;
|
||||
DiagGloableID = 0x7DF;//0x18DB33F1;
|
||||
stopflag = 0;
|
||||
//注册一个消息钩子函数
|
||||
FuncLoopMsg = function(msg){
|
||||
@ -16,6 +16,8 @@ FuncLoopMsg = function(msg){
|
||||
FuncFreshHw();
|
||||
}
|
||||
case 101 {//连接硬件
|
||||
//console.log("msg.wParam = " + msg.wParam);
|
||||
//console.log("msg.lParam = " + msg.lParam);
|
||||
FuncConnect(msg.wParam,msg.lParam);
|
||||
}
|
||||
case 102 {//开始boot
|
||||
@ -25,11 +27,22 @@ FuncLoopMsg = function(msg){
|
||||
FuncStopBoot();
|
||||
}
|
||||
case 104 {//打开s19文件
|
||||
FuncDisplay("打开文件");
|
||||
var ret = FuncOpenS19File();
|
||||
if(ret != null){
|
||||
thread.command.$ShowPath(ret);
|
||||
if(msg.wParam == 0){
|
||||
FuncDisplay("打开FlashDriver");
|
||||
var ret = FuncOpenS19File(msg.wParam);
|
||||
if(ret != null){
|
||||
thread.command.$ShowFlashDrvPath(ret);
|
||||
}
|
||||
}
|
||||
else {
|
||||
FuncDisplay("打开烧写文件");
|
||||
var ret = FuncOpenS19File(msg.wParam);
|
||||
if(ret != null){
|
||||
thread.command.$ShowPath(ret);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
case 105 {//停止boot
|
||||
thread.stop(0);
|
||||
@ -69,7 +82,8 @@ FuncFreshHw = function(){
|
||||
}
|
||||
|
||||
FuncConnect = function(dev,chn){
|
||||
var ret = CANHw.OpenDevice(dev,chn);
|
||||
var canfd = (chn&0x80)==0x80?true:false;
|
||||
var ret = CANHw.OpenDevice(dev,chn&0x7f,canfd);
|
||||
if(ret == 0){
|
||||
FuncDisplay("连接成功");
|
||||
thread.command.$Connected();
|
||||
@ -202,6 +216,7 @@ timer1.onTimer = function(){
|
||||
return;
|
||||
}
|
||||
ret = CANHw.GetMsg();
|
||||
|
||||
for(i=1;#ret;1){
|
||||
//console.log("id = " + tostring(ret[i].id))
|
||||
if(ret[i].id & 0x7FFFFFFF == DiagRespID){
|
||||
@ -235,10 +250,13 @@ timer1.onTimer = function(){
|
||||
}
|
||||
elseif(ret[i].data[1] == 0x30){//
|
||||
FuncSendPackage();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
//console.varDump(ret[i].id);
|
||||
//显示报文
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -5,10 +5,14 @@ FuncReadDID = function(did){
|
||||
return;
|
||||
}
|
||||
var data = {0x03,0x22,did>>8,did&0xff,0,0,0,0};
|
||||
CANHw.SendMsg(DiagReqID,data);
|
||||
var ret = CANHw.SendMsg(DiagReqID,data);
|
||||
diag22state = 1;
|
||||
//console.log("did = " + tostring(did,16));
|
||||
//console.log("ret = " + ret);
|
||||
//FuncDisplay("did = " + tostring(did,16));
|
||||
}
|
||||
|
||||
CurrentSession = 0;
|
||||
//接收
|
||||
FuncDiag22Pro = function(data){
|
||||
//console.log("诊断22服务")
|
||||
@ -17,11 +21,15 @@ FuncDiag22Pro = function(data){
|
||||
}
|
||||
var did = (data[1]<<8) + data[2];
|
||||
select(did) {
|
||||
case 0xF192 {
|
||||
case 0xF186 {
|
||||
FuncDisplay("当前会话: " + data[3]);
|
||||
CurrentSession = data[3];
|
||||
}
|
||||
case 0xF191 {
|
||||
FuncDisplay("硬件版本号");
|
||||
FuncDisplay(string.pack(table.slice(data,3)));
|
||||
}
|
||||
case 0xF195 {
|
||||
case 0xF188 {
|
||||
FuncDisplay("软件版本号");
|
||||
FuncDisplay(string.pack(table.slice(data,3)));
|
||||
}
|
||||
@ -33,12 +41,95 @@ FuncDiag22Pro = function(data){
|
||||
FuncDisplay("installation_date");
|
||||
FuncDisplay(string.format("%x%X%x%x",data[3],data[4],data[5],data[6]));
|
||||
}
|
||||
case 0xF186 {
|
||||
FuncDisplay("当前会话: " + tostring(data[3]));
|
||||
case 0xF187 {
|
||||
FuncDisplay("车辆备用零部件编号");
|
||||
FuncDisplay(string.pack(table.slice(data,3)));
|
||||
|
||||
}
|
||||
case 0xF18A {
|
||||
FuncDisplay("系统供应商公司名称代码");
|
||||
FuncDisplay(string.pack(table.slice(data,3)));
|
||||
|
||||
}
|
||||
case 0xF197 {
|
||||
FuncDisplay("ECU 系统名称");
|
||||
FuncDisplay(string.pack(table.slice(data,3)));
|
||||
|
||||
}
|
||||
case 0x1701 {
|
||||
var 水平 = (data[3]<<8) + (data[4]);
|
||||
var 靠背 = (data[5]<<8) + (data[6]);
|
||||
FuncDisplay("水平当前位置: " ++ (水平-0x8000) );
|
||||
FuncDisplay("靠背当前位置" ++ (靠背 - 0x8000) );
|
||||
}
|
||||
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-0x8000) + "水平2: " + (水平2-0x8000));
|
||||
FuncDisplay("靠背1: " + (靠背1-0x8000) + "靠背2: " + (靠背2-0x8000));
|
||||
FuncDisplay("水平1: " + (水平1) + "水平2: " + (水平2));
|
||||
FuncDisplay("靠背1: " + (靠背1) + "靠背2: " + (靠背2));
|
||||
}
|
||||
case 0x1706 {
|
||||
var 水平 = data[3]&0x01;
|
||||
var 靠背 = (data[3]>>1)&0x01;
|
||||
FuncDisplay("座椅水平方向电机学习状态: " + 水平);
|
||||
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 - " + did);
|
||||
FuncDisplay("未知DID - " + tostring(did,16));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,52 +1,78 @@
|
||||
|
||||
var SecuretySeed = {0,0,0,0,};
|
||||
var SecuretyKey = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
|
||||
var lockstate = 0;
|
||||
//发送
|
||||
FuncReq27 = function(num,key){
|
||||
if(num >= 1 && num <= 0x0C){
|
||||
if(num >= 1 && num <= 0x1C){
|
||||
if(key == null){
|
||||
var data = {0x02,0x27,num,0,0,0,0,0};
|
||||
CANHw.SendMsg(DiagReqID,data);
|
||||
}
|
||||
else {
|
||||
var data = {0x10,0X12,0x27,num,key[1],key[2],key[3],key[4]};
|
||||
CANHw.SendMsg(DiagReqID,data);
|
||||
if(#key > 4){
|
||||
var data = {0x10,0X12,0x27,num,key[1],key[2],key[3],key[4]};
|
||||
CANHw.SendMsg(DiagReqID,data);
|
||||
|
||||
FuncPushPackage(DiagReqID,table.slice(key,5));
|
||||
}
|
||||
else {
|
||||
var data = {0x06,0x27,num,key[1],key[2],key[3],key[4],0x00};
|
||||
CANHw.SendMsg(DiagReqID,data);
|
||||
}
|
||||
|
||||
FuncPushPackage(DiagReqID,table.slice(key,5));
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
FuncDisplay("27长度错误");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
loadcodex("\user\securety.aardio");
|
||||
//loadcodex("\user\securety.aardio");
|
||||
loadcodex("\user\GeelySecurety.aardio");
|
||||
//接收
|
||||
FuncDiag27Pro = function(data){
|
||||
//console.dumpJson(data);
|
||||
select(data[1]) {
|
||||
case 1,3,5,7,9,11 {
|
||||
case 1,3,5,7,9,11,0x11 {
|
||||
var str = "收到种子";
|
||||
for(i=1;4;1){
|
||||
SecuretySeed[i] = data[i+1];
|
||||
str += " " + tostring(SecuretySeed[i],16);
|
||||
lockstate = 1;
|
||||
}
|
||||
FuncDisplay(str)
|
||||
SecuretyKey = GenerateKeyEx(SecuretySeed,data[1]);
|
||||
if(#SecuretyKey >= 16){
|
||||
SecuretyKey = securetyKeyCalc(SecuretySeed,data[1]);
|
||||
if(#SecuretyKey >= 4){
|
||||
FuncReq27(data[1]+1,SecuretyKey);
|
||||
var str = "计算密钥-";
|
||||
for(i=1;4;1){
|
||||
str += " " + tostring(SecuretyKey[i],16);
|
||||
}
|
||||
FuncDisplay(str);
|
||||
}
|
||||
else {
|
||||
FuncDisplay("计算失败");
|
||||
}
|
||||
|
||||
}
|
||||
case 2,4,6,8,10,12 {
|
||||
case 2,4,6,8,10,12,0x12 {
|
||||
FuncDisplay("解锁成功");
|
||||
lockstate = 2;
|
||||
}
|
||||
else {
|
||||
FuncDisplay("27服务未知子服务");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
FuncDiag27GetState = function(){
|
||||
if(lockstate == 2){
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -5,14 +5,19 @@ FuncReq31EraseFlash = function(addr,len){
|
||||
FuncReq31(data);
|
||||
}
|
||||
|
||||
FuncReq31CheckLogicBlock = function(addr,len){
|
||||
var data = {0x02,0x02,0x44,addr>>24,addr>>16,addr>>8,addr,len>>24,len>>16,len>>8,len};
|
||||
FuncReq31CheckLogicBlock = function(crc){//(addr,len)
|
||||
//var data = {0x02,0x02,0x44,addr>>24,addr>>16,addr>>8,addr,len>>24,len>>16,len>>8,len};
|
||||
var data = {0x02,0x02,crc>>24,crc>>16,crc>>8,crc};
|
||||
FuncReq31(data);
|
||||
}
|
||||
FuncReq31CheckPD = function(){//Programming Dependencies
|
||||
var data = {0xFF,0x01};
|
||||
FuncReq31(data);
|
||||
}
|
||||
FuncReq31CheckFlash = function(){
|
||||
var data = {0x02,0x02};
|
||||
FuncReq31(data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
|
||||
|
||||
//发送
|
||||
FuncReq34 = function(addr,len){
|
||||
var data = {0x44,addr>>24,addr>>16,addr>>8,addr,len>>24,len>>16,len>>8,len};
|
||||
@ -6,20 +8,22 @@ FuncReq34 = function(addr,len){
|
||||
FuncPushPackage(DiagReqID,table.slice(data,5));
|
||||
|
||||
}
|
||||
var maxlen = 0;
|
||||
//接收
|
||||
FuncDiag34Pro = function(data){
|
||||
//console.dumpJson(data);
|
||||
select(data[1]) {
|
||||
case 1 {
|
||||
FuncDisplay("使能接收,禁能发送")
|
||||
}
|
||||
case 2 {
|
||||
FuncDisplay("28 - TDB02")
|
||||
}
|
||||
case 3 {
|
||||
FuncDisplay("28 - TDB03")
|
||||
}
|
||||
else {
|
||||
}
|
||||
FuncDisplay("请求下载成功")
|
||||
maxlen = (data[2]<<8) + data[3];
|
||||
FuncDisplay("最大长度:" + maxlen);
|
||||
}
|
||||
|
||||
FuncGetSengLen = function(){
|
||||
if(maxlen>2){
|
||||
return maxlen-2;
|
||||
}
|
||||
}
|
||||
else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -19,9 +19,10 @@ FuncGetSendStatus = function(){
|
||||
return flag_sendend;
|
||||
}
|
||||
FuncSendNextBlock = function(){
|
||||
if(#alldata>0x400){
|
||||
FuncReq36(blocknum,table.slice(alldata,1,0x400));
|
||||
alldata = table.slice(alldata,0x401,)
|
||||
var len = FuncGetSengLen();
|
||||
if(#alldata>len){
|
||||
FuncReq36(blocknum,table.slice(alldata,1,len));
|
||||
alldata = table.slice(alldata,len+1,)
|
||||
}
|
||||
else {
|
||||
FuncReq36(blocknum,alldata);
|
||||
|
@ -8,6 +8,21 @@ FuncClrNrc = function(){
|
||||
errSID = 0;
|
||||
errNRC = 0;
|
||||
}
|
||||
var TableToStr = function(data){
|
||||
if(data == null){
|
||||
return " ";
|
||||
}
|
||||
if(#data == 0){
|
||||
return " ";
|
||||
}
|
||||
var str = "data:"
|
||||
for(i=1;#data;1){
|
||||
str += " "
|
||||
str += tostring(data[i],16);
|
||||
}
|
||||
return str;
|
||||
|
||||
}
|
||||
|
||||
//接收
|
||||
FuncDiag7FPro = function(data){
|
||||
@ -22,7 +37,9 @@ FuncDiag7FPro = function(data){
|
||||
|
||||
}
|
||||
else {
|
||||
FuncDisplay("SID:" + tostring(errSID,16))
|
||||
FuncDisplay("错误 - NRC:" + tostring(errNRC,16))
|
||||
FuncDisplay(TableToStr(data));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,7 @@ FuncWait = function(sid){
|
||||
return 0xff;
|
||||
}
|
||||
else {
|
||||
FuncDisplay("刷写错误");
|
||||
FuncDisplay("刷写错误 步骤" + bootstate);
|
||||
boottimer.disable();
|
||||
thread.command.$SendEnd(false);
|
||||
return 1; //负响应
|
||||
@ -71,16 +71,24 @@ var alldata = {};
|
||||
var blocknum = 1;
|
||||
var alldata_blocknum = 0;
|
||||
var block_sended = 0;
|
||||
FuncSendBlockInit = function(){
|
||||
var sendFlashDriverState = 0;
|
||||
FuncSendBlockInit = function(id){
|
||||
var len = 0;
|
||||
alldata = FuncGetAllData();
|
||||
alldata = FuncGetAllData(id);
|
||||
blocknum = 1;
|
||||
for(i=1;#alldata;1){
|
||||
len += math.ceil(#alldata[i]["data"] / 0x400)
|
||||
if(alldata == null){
|
||||
FuncDisplay("错误:空数据");
|
||||
alldata_blocknum = 0;
|
||||
sendblockstate = 0xff;
|
||||
return 1;
|
||||
}
|
||||
alldata_blocknum = len + 19;
|
||||
for(i=1;#alldata;1){
|
||||
len += math.ceil(#alldata[i]["data"] / 0x200)
|
||||
}
|
||||
alldata_blocknum = len;
|
||||
block_sended = 0;
|
||||
sendblockstate = 0;
|
||||
return 0;
|
||||
}
|
||||
nextstate = function(val){
|
||||
if(val == 0){
|
||||
@ -157,6 +165,20 @@ FuncSendBlockApp = function(){
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
FuncSendBlockFlashDriver = function(){
|
||||
select(sendFlashDriverState) {
|
||||
case 0 {
|
||||
}
|
||||
case 1 {
|
||||
}
|
||||
case 2 {
|
||||
}
|
||||
case 3 {
|
||||
}
|
||||
else {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var delaycount = 0;
|
||||
//boot总流程
|
||||
@ -167,7 +189,7 @@ FuncBootSeq = function(){
|
||||
case 0 {
|
||||
boottime = 1;
|
||||
if(sendstate == 0){
|
||||
FuncSendBlockInit();
|
||||
//FuncSendBlockInit(0);
|
||||
FuncReadDID(0xF186);
|
||||
FuncClearState();
|
||||
}
|
||||
@ -180,26 +202,43 @@ FuncBootSeq = function(){
|
||||
if(sendstate == 0){
|
||||
FuncReadDID(0xF195);//读取软件版本
|
||||
FuncClearState();
|
||||
delaycount = 0;
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x22);
|
||||
nextstate(ret);
|
||||
//var ret = FuncWait(0x22);
|
||||
//nextstate(0);
|
||||
delaycount += 1;
|
||||
if(delaycount > 10){
|
||||
nextstate(0);//延时1S
|
||||
}
|
||||
}
|
||||
}
|
||||
case 2 {
|
||||
if(sendstate == 0){
|
||||
FuncReadDID(0xF192);//读取硬件版本
|
||||
FuncReadDID(0xF193);//读取硬件版本
|
||||
FuncClearState();
|
||||
delaycount = 0;
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x22);
|
||||
nextstate(ret);
|
||||
//var ret = FuncWait(0x22);
|
||||
//nextstate(0);
|
||||
delaycount += 1;
|
||||
if(delaycount > 10){
|
||||
nextstate(0);//延时1S
|
||||
}
|
||||
}
|
||||
}
|
||||
case 3 {
|
||||
if(sendstate == 0){
|
||||
FuncReq10(true,0x03);//进入扩展会话
|
||||
FuncClearState();
|
||||
if(CurrentSession == 2){
|
||||
nextstate(0);
|
||||
}
|
||||
else {
|
||||
FuncReq10(true,0x03);//进入扩展会话
|
||||
FuncClearState();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x10);
|
||||
@ -210,20 +249,27 @@ FuncBootSeq = function(){
|
||||
if(sendstate == 0){
|
||||
FuncReq85(0x02);//关闭DTC
|
||||
FuncClearState();
|
||||
delaycount = 0;
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x85);
|
||||
nextstate(ret);
|
||||
delaycount += 1;
|
||||
if(delaycount > 10){
|
||||
nextstate(0);//延时1S
|
||||
}
|
||||
}
|
||||
}
|
||||
case 5 {
|
||||
if(sendstate == 0){
|
||||
FuncReq28(0x01,0x01);//禁止发送
|
||||
FuncClearState();
|
||||
delaycount = 0;
|
||||
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x28);
|
||||
nextstate(ret);
|
||||
delaycount += 1;
|
||||
if(delaycount > 10){
|
||||
nextstate(0);//延时1S
|
||||
}
|
||||
}
|
||||
}
|
||||
case 6 {
|
||||
@ -238,7 +284,7 @@ FuncBootSeq = function(){
|
||||
}
|
||||
case 7 {
|
||||
if(sendstate == 0){
|
||||
FuncReq27(01);//解密
|
||||
FuncReq27(0x11);//解密
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
@ -250,16 +296,18 @@ FuncBootSeq = function(){
|
||||
if(sendstate == 0){
|
||||
//FuncReq27(02);//发送key
|
||||
FuncClearState();
|
||||
FuncDisplay("等待解锁");
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x27);
|
||||
//var ret = FuncWait(0x27);
|
||||
var ret = FuncDiag27GetState();
|
||||
nextstate(ret);
|
||||
}
|
||||
}
|
||||
case 9 {
|
||||
if(sendstate == 0){
|
||||
FuncClearState();
|
||||
FuncDIDWriteStr(0xf198,"Daming_CANBootload ");//写入repair_shopcode
|
||||
FuncDIDWriteStr(0xf198,"Daming ");//写入repair_shopcode
|
||||
|
||||
}
|
||||
else {
|
||||
@ -284,31 +332,20 @@ FuncBootSeq = function(){
|
||||
}
|
||||
}
|
||||
case 11 {
|
||||
if(sendstate == 0){//擦除flash
|
||||
FuncReq31EraseFlash(0x00FE0000,0x00019FE0);//
|
||||
FuncClearState();
|
||||
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x31);
|
||||
nextstate(ret);
|
||||
}
|
||||
}
|
||||
case 12 {
|
||||
if(sendstate == 0){//发送数据
|
||||
//FuncSendBlockInit();
|
||||
FuncDisplay("开始发送app数据");
|
||||
FuncSendBlockInit(0);
|
||||
FuncDisplay("开始发送FlashDrv数据");
|
||||
FuncClearState();
|
||||
|
||||
}
|
||||
else {
|
||||
var ret = FuncSendBlockApp();
|
||||
nextstate(ret);
|
||||
}
|
||||
}
|
||||
case 13 {
|
||||
case 12 {
|
||||
if(sendstate == 0){//CheckLogicBlock
|
||||
FuncReq31CheckLogicBlock(0x00FE0000,0x00019FCC);
|
||||
var crc = FuncGetFlashCRC(0);
|
||||
FuncReq31CheckLogicBlock(crc);
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
@ -316,7 +353,40 @@ FuncBootSeq = function(){
|
||||
nextstate(ret);
|
||||
}
|
||||
}
|
||||
case 13 {
|
||||
if(sendstate == 0){//CheckLogicBlock
|
||||
FuncReq31EraseFlash(0xA000,0x10000);
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x31);
|
||||
nextstate(ret);
|
||||
}
|
||||
}
|
||||
|
||||
case 14 {
|
||||
if(sendstate == 0){//发送数据
|
||||
FuncSendBlockInit(1);
|
||||
FuncDisplay("开始发送App数据");
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
var ret = FuncSendBlockApp();
|
||||
nextstate(ret);
|
||||
}
|
||||
}
|
||||
case 15 {
|
||||
if(sendstate == 0){//CheckLogicBlock
|
||||
var crc = FuncGetFlashCRC(1);
|
||||
FuncReq31CheckLogicBlock(crc);
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x31);
|
||||
nextstate(ret);
|
||||
}
|
||||
}
|
||||
case 16 {
|
||||
if(sendstate == 0){////Programming Dependencies
|
||||
FuncReq31CheckPD();
|
||||
FuncClearState();
|
||||
@ -326,10 +396,10 @@ FuncBootSeq = function(){
|
||||
nextstate(ret);
|
||||
}
|
||||
}
|
||||
case 15 {
|
||||
case 17 {
|
||||
if(sendstate == 0){//复位
|
||||
FuncClearState();
|
||||
FuncReq11(0x01);
|
||||
FuncReq11(0x03);
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x11);
|
||||
@ -337,7 +407,7 @@ FuncBootSeq = function(){
|
||||
}
|
||||
}
|
||||
|
||||
case 16 {
|
||||
case 18 {
|
||||
if(sendstate == 0){//等待复位完成
|
||||
delaycount = 0;
|
||||
FuncClearState();
|
||||
@ -351,7 +421,7 @@ FuncBootSeq = function(){
|
||||
}
|
||||
}
|
||||
|
||||
case 17 {
|
||||
case 19 {
|
||||
if(sendstate == 0){
|
||||
FuncReq10(true,0x03);//进入扩展会话
|
||||
FuncClearState();
|
||||
@ -361,7 +431,7 @@ FuncBootSeq = function(){
|
||||
nextstate(ret);
|
||||
}
|
||||
}
|
||||
case 18 {
|
||||
case 20 {
|
||||
if(sendstate == 0){
|
||||
FuncReq28(0x00,0x01);//开启发送
|
||||
FuncClearState();
|
||||
@ -371,7 +441,7 @@ FuncBootSeq = function(){
|
||||
nextstate(ret);
|
||||
}
|
||||
}
|
||||
case 19 {
|
||||
case 21 {
|
||||
if(sendstate == 0){
|
||||
FuncReq85(0x01);//开启DTC
|
||||
FuncClearState();
|
||||
@ -381,7 +451,7 @@ FuncBootSeq = function(){
|
||||
nextstate(ret);
|
||||
}
|
||||
}
|
||||
case 20 {
|
||||
case 22 {
|
||||
if(sendstate == 0){
|
||||
FuncReq10(true,0x01);//进入默认会话
|
||||
FuncClearState();
|
||||
@ -397,6 +467,8 @@ FuncBootSeq = function(){
|
||||
boottimer.disable();
|
||||
}
|
||||
}
|
||||
if(alldata_blocknum != 0){
|
||||
thread.command.$SetProgress(block_sended/alldata_blocknum * 100);
|
||||
}
|
||||
|
||||
thread.command.$SetProgress(block_sended/alldata_blocknum * 100);
|
||||
}
|
83
user/GeelySecurety.aardio
Normal file
83
user/GeelySecurety.aardio
Normal file
@ -0,0 +1,83 @@
|
||||
|
||||
xorArray = {0xAA,0x50,0x43,0x52}
|
||||
securetyKeyCalc = function(pucSeed,ucSecurityLevel){
|
||||
//SeedSec_t cal,key,seed;
|
||||
var seed = {0,0,0,0};
|
||||
var key = {0,0,0,0};
|
||||
var cal = {0,0,0,0};
|
||||
seed[1]=pucSeed[4];
|
||||
seed[2]=pucSeed[3];
|
||||
seed[3]=pucSeed[2];
|
||||
seed[4]=pucSeed[1];
|
||||
select(ucSecurityLevel) {
|
||||
case 0x01 {
|
||||
cal[1] = seed[1]^xorArray[1];
|
||||
cal[2] = seed[2]^xorArray[2];
|
||||
cal[3] = seed[3]^xorArray[3];
|
||||
cal[4] = seed[4]^xorArray[4];
|
||||
/*
|
||||
key[3] = ((cal[0]&0x0F)<<4)|( cal[0]&0xF0);
|
||||
key[2] = ((cal[2]&0x0F)<<4)|((cal[3]&0xF0)>>4);
|
||||
key[1] = (cal[2]&0xF0)|((cal[1]&0xF0)>>4);
|
||||
key[0] = ((cal[3]&0x0F)<<4)|( cal[1]&0x0F);
|
||||
*/
|
||||
key[4] = ((cal[1]&0x0F)<<4)|( cal[1]&0xF0);
|
||||
key[3] = ((cal[3]&0x0F)<<4)|((cal[4]&0xF0)>>4);
|
||||
key[2] = (cal[3]&0xF0)|((cal[2]&0xF0)>>4);
|
||||
key[1] = ((cal[4]&0x0F)<<4)|( cal[2]&0x0F);
|
||||
}
|
||||
case 0x03 {
|
||||
/*
|
||||
cal.byte[0] = ((seed.byte[0]&0xF8)>>3)^xorArray[0];
|
||||
cal.byte[1] = ((seed.byte[1]&0xF8)>>3)^xorArray[1];
|
||||
cal.byte[2] = ((seed.byte[2]&0xF8)>>3)^xorArray[2];
|
||||
cal.byte[3] = ((seed.byte[3]&0xF8)>>3)^xorArray[3];
|
||||
|
||||
key.byte[0] = ((cal.byte[3]&0x07)<<5)|(( cal.byte[0]&0xF8)>>3);
|
||||
key.byte[1] = ((cal.byte[0]&0x07)<<5)|(cal.byte[2]&0x1F);
|
||||
key.byte[2] = (cal.byte[1]&0xF8)|((cal.byte[3]&0xE0)>>5);
|
||||
key.byte[3] = (cal.byte[2]&0xF8)|( cal.byte[1]&0x07);
|
||||
*/
|
||||
cal[1] = ((seed[1]&0xF8)>>3)^xorArray[1];
|
||||
cal[2] = ((seed[2]&0xF8)>>3)^xorArray[2];
|
||||
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[3] = (cal[2]&0xF8)|((cal[4]&0xE0)>>5);
|
||||
key[4] = (cal[3]&0xF8)|( cal[2]&0x07);
|
||||
}
|
||||
case 0x11 {
|
||||
/*
|
||||
cal.byte[0] = seed.byte[0]^xorArray[0];
|
||||
cal.byte[1] = seed.byte[1]^xorArray[1];
|
||||
cal.byte[2] = seed.byte[2]^xorArray[2];
|
||||
cal.byte[3] = seed.byte[3]^xorArray[3];
|
||||
|
||||
key.byte[3] = ((cal.byte[1]&0x03)<<6)|(( cal.byte[0]&0xFC)>>2);
|
||||
key.byte[2] = ((cal.byte[0]&0x03)<<6)|(cal.byte[3]&0x3F);
|
||||
key.byte[1] = (cal.byte[3]&0xFC)|((cal.byte[2]&0xC0)>>6);
|
||||
key.byte[0] = (cal.byte[2]&0xFC)|(cal.byte[1]&0x03);
|
||||
*/
|
||||
cal[1] = seed[1]^xorArray[1];
|
||||
cal[2] = seed[2]^xorArray[2];
|
||||
cal[3] = seed[3]^xorArray[3];
|
||||
cal[4] = seed[4]^xorArray[4];
|
||||
|
||||
key[4] = ((cal[2]&0x03)<<6)|(( cal[1]&0xFC)>>2);
|
||||
key[3] = ((cal[1]&0x03)<<6)|(cal[4]&0x3F);
|
||||
key[2] = (cal[4]&0xFC)|((cal[3]&0xC0)>>6);
|
||||
key[1] = (cal[3]&0xFC)|(cal[2]&0x03);
|
||||
}
|
||||
else {
|
||||
}
|
||||
}
|
||||
var pucKey = {0,0,0,0};
|
||||
pucKey[1]=key[4];
|
||||
pucKey[2]=key[3];
|
||||
pucKey[3]=key[2];
|
||||
pucKey[4]=key[1];
|
||||
|
||||
return pucKey;
|
||||
}
|
@ -1,16 +1,73 @@
|
||||
|
||||
var Crc32Tble =
|
||||
{
|
||||
0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
|
||||
0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
|
||||
0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
|
||||
0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
|
||||
0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
|
||||
0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
|
||||
0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
|
||||
0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
|
||||
0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
|
||||
0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
|
||||
0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
|
||||
0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
|
||||
0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
|
||||
0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
|
||||
0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
|
||||
0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
|
||||
0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
|
||||
0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
|
||||
0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
|
||||
0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
|
||||
0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
|
||||
0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
|
||||
0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
|
||||
0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
|
||||
0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
|
||||
0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
|
||||
0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
|
||||
0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
|
||||
0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
|
||||
0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
|
||||
0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
|
||||
0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
|
||||
};
|
||||
var fileinfo = "";
|
||||
var FlashData = {};
|
||||
|
||||
FuncGetAllData = function(){
|
||||
return FlashData;
|
||||
var AllData = {}
|
||||
FuncGetAllData = function(id){
|
||||
if(id > #AllData){
|
||||
return null;
|
||||
}
|
||||
return AllData[id];
|
||||
}
|
||||
FuncGetFileInfo = function(){
|
||||
return fileinfo;
|
||||
}
|
||||
|
||||
FuncCRC32Calc = function(Data){
|
||||
|
||||
var usCRC = 0xFFFFFFFF;
|
||||
|
||||
FuncOpenS19File = function(path){
|
||||
for(i=1;#Data;1){
|
||||
var temp = (usCRC ^ Data[i]) & 0xFF;
|
||||
usCRC = ((usCRC >> 8)&0xffffff) ^ Crc32Tble[temp+1];
|
||||
|
||||
}
|
||||
usCRC ^= 0xFFFFFFFF;
|
||||
return usCRC;
|
||||
}
|
||||
|
||||
FuncGetFlashCRC = function(id){
|
||||
var Data = AllData[id];
|
||||
var crc = FuncCRC32Calc(Data[1].data);
|
||||
return crc;
|
||||
}
|
||||
|
||||
|
||||
|
||||
FuncOpenS19File = function(id,path){
|
||||
import fsys.dlg;
|
||||
if(path == null){
|
||||
path = fsys.dlg.open('S19文件|*.sx;*.s19;*.srec|所有文件|*.*||',,,winform);
|
||||
@ -94,6 +151,14 @@ FuncOpenS19File = function(path){
|
||||
if(block != null){
|
||||
table.push(FlashData,block)
|
||||
}
|
||||
/*
|
||||
for(i=1;#FlashData;1){
|
||||
var crc = FuncCRC32Calc(FlashData[i].data);
|
||||
var str = string.format("block %d:addr=0x%X,len=0x%X,crc=0x%X",i,FlashData[i]["address"],#FlashData[i].data,crc);
|
||||
FuncDisplay(str);
|
||||
}
|
||||
*/
|
||||
AllData[id] = FlashData;
|
||||
}
|
||||
//blocknum = 1;
|
||||
|
||||
@ -102,3 +167,4 @@ FuncOpenS19File = function(path){
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user