Compare commits

..

No commits in common. "S51EV_ECU" and "Branch_534bebb6" have entirely different histories.

14 changed files with 173 additions and 772 deletions

View File

@ -1,27 +1,24 @@
<?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="..." 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">
<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">
<file name="诊断子窗口.aardio" path="dlg\诊断子窗口.aardio" comment="dlg\诊断子窗口.aardio"/>
</folder>
<folder name="窗体文件" path="dlg" comment="目录" embed="true" 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="Diag10code.aardio" path="user\Diag10code.aardio" comment="user\Diag10code.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="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="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="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="Diag37code.aardio" path="user\Diag37code.aardio" comment="user\Diag37code.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"/>
<file name="Diag37code.aardio" path="user\Diag37code.aardio" comment="user\Diag37code.aardio"/>
<file name="Diag11code.aardio" path="user\Diag11code.aardio" comment="user\Diag11code.aardio"/>
</folder>
</project>

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

@ -36,26 +36,7 @@ namespace usb2canfd{
BYTE __Res0[8];
}
//初始化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信息帧的数据类型定义
//CAN信息帧的数据类型定义
class CANFD_MSG{
ctor( /*输入构造函数所需要的参数*/ ){
@ -71,22 +52,6 @@ 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( /*输入构造函数所需要的参数*/ ){
@ -137,13 +102,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文件","错误",3000,);
win.msgboxTimeout("加载USB2LIN的DLL失败请检查USB2XXX.dll和libusb-1.0.dll文件","错误",1000,);
}
if(DllHandle == null)return 1;
return 0;
@ -192,58 +157,36 @@ namespace usb2canfd{
}
//打开设备,包括初始化通道
OpenDevice = function(index,channel,canfd){
OpenDevice = function(index,channel){
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.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);
}
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);
canfd_connected = canfd;
if(ret == 0){//调用成功
Hwconnected = AvailableHW[index].hLINHW;
Chconntected = channel;
}
else {
Hwconnected = null
@ -284,46 +227,20 @@ namespace usb2canfd{
if(#data == 0 || #data>8){//长度不对
return 0;
}
//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);
var msg = ..usb2canfd.CANFD_MSG();
msg.Flags = 0;
if(id <= 0x7ff){
msg.ID = id; //| (1<<31);//扩展帧
}
else {
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.ID = id | (1<<31);//扩展帧
}
msg.DLC = #data;
msg.Data = data;
var ret = DllHandle.CANFD_SendMsg(Hwconnected,Chconntected,msg,1);
return ret;
}
@ -331,37 +248,18 @@ namespace usb2canfd{
GetMsg = function(){
var ret = 0;
var retdata = {};
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);
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];
}
}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)
}
var msg = {"id"=msgbuf.ID;"data"=data;};//
..table.push(retdata,msg);
}
}while(ret > 0)
return retdata;
}

View File

@ -1,32 +1,27 @@
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=599;bottom=399;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};
btnFlash={cls="button";text="开始刷写";left=148;top=197;right=247;bottom=225;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};
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};
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};
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};
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};
static3={cls="static";text="刷写进度";left=17;top=328;right=70;bottom=348;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}
static5={cls="static";text="V0.1_20220518";left=452;top=383;right=596;bottom=399;align="right";center=1;transparent=1;z=18}
)
/*}}*/
@ -36,34 +31,20 @@ 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){//显示日志
var nowtime = time();
nowtime.format="%H:%M:%S";
mainForm.edit.print(tostring(nowtime) + " " + str);
mainForm.edit.print(tostring(time()) + " " + 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加载失败");
}
//初始化界面
@ -90,8 +71,7 @@ mainForm.btnFresh.oncommand = function(id,event){
}
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)//自定义消息
::PostThreadMessage(thrdId,101,mainForm.cbbDev.selIndex,mainForm.cbbChannel.selIndex - 1)//自定义消息
/*
var ret = CANHw.OpenDevice(mainForm.cbbDev.selIndex,mainForm.cbbChannel.selIndex - 1);//通道为0和1
if(ret == 0){
@ -113,9 +93,6 @@ 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;
@ -130,11 +107,10 @@ listener.$Connected = function(){
flag_connected = 1;
}
listener.$SendEnd = function(isSuccess){
//timer_bootcount.disable();
var usetime = time.now().diffsecond(starttime);
timer_bootcount.disable();
bootstate = false;
if(isSuccess == true){
Display("刷写成功,用时 " + usetime + " S")
Display("刷写成功,用时 " + boot_count/10 + " S")
}
}
@ -149,7 +125,7 @@ var CanThread = function(){
//在子线程启动消息循环
win.loopMessage(FuncLoopMsg)
}
DiagReadDID = function(did){
var DiagReadDID = function(did){
::PostThreadMessage(thrdId,110,did,0)//自定义消息
}
var Diag10Req = function(num){
@ -168,7 +144,7 @@ mainForm.btnReadSw.oncommand = function(id,event){
mainForm.btnReadHw.oncommand = function(id,event){
DiagReadDID(0xF193);
DiagReadDID(0xF192);
}
mainForm.btnReadF186.oncommand = function(id,event){
@ -181,11 +157,7 @@ mainForm.btnTest.oncommand = function(id,event){
mainForm.btnFlash.oncommand = function(id,event){
if(io.exist(mainForm.edFile.text) == null){
Display("请打开烧写文件");
return;
}
if(io.exist(mainForm.edFile2.text) == null){
Display("请打开flashdriver文件");
Display("请打开文件");
return;
}
if(flag_connected == 0){
@ -198,8 +170,7 @@ mainForm.btnFlash.oncommand = function(id,event){
bootstate = true;
mainForm.edit.text = "";
Display("开始刷写流程");
starttime = time.now();
//timer_bootcount.enable();
timer_bootcount.enable();
boot_count = 0;
DiagBootReq();
@ -207,16 +178,13 @@ mainForm.btnFlash.oncommand = function(id,event){
}
mainForm.btnOpen.oncommand = function(id,event){
::PostThreadMessage(thrdId,104,1,0)//自定义消息-打开文件
::PostThreadMessage(thrdId,104,0,0)//自定义消息-打开文件
}
//程序关闭
mainForm.onClose = function(hwnd,message,wParam,lParam){
if(thrdId != null){
::PostThreadMessage(thrdId,105,0,0)//自定义消息
thread.waitClose(thrdHandle);
}
::PostThreadMessage(thrdId,105,0,0)//自定义消息
thread.waitClose(thrdHandle);
//PLinHw.isConnected()///待完善
//console.print("线程已关闭")
@ -224,23 +192,11 @@ 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);
}
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();
DiagReadDID(0xF199);
}
thrdHandle,thrdId = thread.create( CanThread )

View File

@ -5,9 +5,9 @@ import win.timer;
CANHw = usb2canfd.USB2CANHW();
CANHw.LoadDll();
DiagReqID = 0x7F3;//0x18dadff1;
DiagRespID = 0x7FB;//0x18daf1df;
DiagGloableID = 0x7DF;//0x18DB33F1;
DiagReqID = 0x18dadff1;
DiagRespID = 0x18daf1df;
DiagGloableID = 0x18DB33F1;
stopflag = 0;
//注册一个消息钩子函数
FuncLoopMsg = function(msg){
@ -16,8 +16,6 @@ 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
@ -27,22 +25,11 @@ FuncLoopMsg = function(msg){
FuncStopBoot();
}
case 104 {//打开s19文件
if(msg.wParam == 0){
FuncDisplay("打开FlashDriver");
var ret = FuncOpenS19File(msg.wParam);
if(ret != null){
thread.command.$ShowFlashDrvPath(ret);
}
FuncDisplay("打开文件");
var ret = FuncOpenS19File();
if(ret != null){
thread.command.$ShowPath(ret);
}
else {
FuncDisplay("打开烧写文件");
var ret = FuncOpenS19File(msg.wParam);
if(ret != null){
thread.command.$ShowPath(ret);
}
}
}
case 105 {//停止boot
thread.stop(0);
@ -82,8 +69,7 @@ FuncFreshHw = function(){
}
FuncConnect = function(dev,chn){
var canfd = (chn&0x80)==0x80?true:false;
var ret = CANHw.OpenDevice(dev,chn&0x7f,canfd);
var ret = CANHw.OpenDevice(dev,chn);
if(ret == 0){
FuncDisplay("连接成功");
thread.command.$Connected();
@ -216,7 +202,6 @@ 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){
@ -250,13 +235,10 @@ timer1.onTimer = function(){
}
elseif(ret[i].data[1] == 0x30){//
FuncSendPackage();
}
}
}
else {
//console.varDump(ret[i].id);
//显示报文
}
}
}

View File

@ -5,14 +5,10 @@ FuncReadDID = function(did){
return;
}
var data = {0x03,0x22,did>>8,did&0xff,0,0,0,0};
var ret = CANHw.SendMsg(DiagReqID,data);
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服务")
@ -21,15 +17,11 @@ FuncDiag22Pro = function(data){
}
var did = (data[1]<<8) + data[2];
select(did) {
case 0xF186 {
FuncDisplay("当前会话: " + data[3]);
CurrentSession = data[3];
}
case 0xF191 {
case 0xF192 {
FuncDisplay("硬件版本号");
FuncDisplay(string.pack(table.slice(data,3)));
}
case 0xF188 {
case 0xF195 {
FuncDisplay("软件版本号");
FuncDisplay(string.pack(table.slice(data,3)));
}
@ -41,95 +33,12 @@ FuncDiag22Pro = function(data){
FuncDisplay("installation_date");
FuncDisplay(string.format("%x%X%x%x",data[3],data[4],data[5],data[6]));
}
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");
case 0xF186 {
FuncDisplay("当前会话: " + tostring(data[3]));
}
else {
FuncDisplay("未知DID - " + tostring(did,16));
FuncDisplay("未知DID - " + did);
}
}

View File

@ -1,78 +1,52 @@
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 <= 0x1C){
if(num >= 1 && num <= 0x0C){
if(key == null){
var data = {0x02,0x27,num,0,0,0,0,0};
CANHw.SendMsg(DiagReqID,data);
}
else {
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);
}
var data = {0x10,0X12,0x27,num,key[1],key[2],key[3],key[4]};
CANHw.SendMsg(DiagReqID,data);
}
}
else {
FuncDisplay("27长度错误");
FuncPushPackage(DiagReqID,table.slice(key,5));
}
}
}
//loadcodex("\user\securety.aardio");
loadcodex("\user\GeelySecurety.aardio");
loadcodex("\user\securety.aardio");
//接收
FuncDiag27Pro = function(data){
//console.dumpJson(data);
select(data[1]) {
case 1,3,5,7,9,11,0x11 {
case 1,3,5,7,9,11 {
var str = "收到种子";
for(i=1;4;1){
SecuretySeed[i] = data[i+1];
str += " " + tostring(SecuretySeed[i],16);
lockstate = 1;
}
FuncDisplay(str)
SecuretyKey = securetyKeyCalc(SecuretySeed,data[1]);
if(#SecuretyKey >= 4){
SecuretyKey = GenerateKeyEx(SecuretySeed,data[1]);
if(#SecuretyKey >= 16){
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,0x12 {
case 2,4,6,8,10,12 {
FuncDisplay("解锁成功");
lockstate = 2;
}
else {
FuncDisplay("27服务未知子服务");
}
}
}
FuncDiag27GetState = function(){
if(lockstate == 2){
return 0;
}
else {
return 1;
}
}
}

View File

@ -5,19 +5,14 @@ FuncReq31EraseFlash = function(addr,len){
FuncReq31(data);
}
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};
FuncReq31CheckLogicBlock = function(addr,len){
var data = {0x02,0x02,0x44,addr>>24,addr>>16,addr>>8,addr,len>>24,len>>16,len>>8,len};
FuncReq31(data);
}
FuncReq31CheckPD = function(){//Programming Dependencies
var data = {0xFF,0x01};
FuncReq31(data);
}
FuncReq31CheckFlash = function(){
var data = {0x02,0x02};
FuncReq31(data);
}

View File

@ -1,5 +1,3 @@
//发送
FuncReq34 = function(addr,len){
var data = {0x44,addr>>24,addr>>16,addr>>8,addr,len>>24,len>>16,len>>8,len};
@ -8,22 +6,20 @@ FuncReq34 = function(addr,len){
FuncPushPackage(DiagReqID,table.slice(data,5));
}
var maxlen = 0;
//接收
FuncDiag34Pro = function(data){
//console.dumpJson(data);
FuncDisplay("请求下载成功")
maxlen = (data[2]<<8) + data[3];
FuncDisplay("最大长度:" + maxlen);
}
FuncGetSengLen = function(){
if(maxlen>2){
return maxlen-2;
select(data[1]) {
case 1 {
FuncDisplay("使能接收,禁能发送")
}
case 2 {
FuncDisplay("28 - TDB02")
}
case 3 {
FuncDisplay("28 - TDB03")
}
else {
}
}
else {
return 0;
}
}
}

View File

@ -19,10 +19,9 @@ FuncGetSendStatus = function(){
return flag_sendend;
}
FuncSendNextBlock = function(){
var len = FuncGetSengLen();
if(#alldata>len){
FuncReq36(blocknum,table.slice(alldata,1,len));
alldata = table.slice(alldata,len+1,)
if(#alldata>0x400){
FuncReq36(blocknum,table.slice(alldata,1,0x400));
alldata = table.slice(alldata,0x401,)
}
else {
FuncReq36(blocknum,alldata);

View File

@ -8,21 +8,6 @@ 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){
@ -37,9 +22,7 @@ FuncDiag7FPro = function(data){
}
else {
FuncDisplay("SID:" + tostring(errSID,16))
FuncDisplay("错误 - NRC:" + tostring(errNRC,16))
FuncDisplay(TableToStr(data));
}
}

View File

@ -16,7 +16,7 @@ FuncWait = function(sid){
return 0xff;
}
else {
FuncDisplay("刷写错误 步骤" + bootstate);
FuncDisplay("刷写错误");
boottimer.disable();
thread.command.$SendEnd(false);
return 1; //负响应
@ -71,24 +71,16 @@ var alldata = {};
var blocknum = 1;
var alldata_blocknum = 0;
var block_sended = 0;
var sendFlashDriverState = 0;
FuncSendBlockInit = function(id){
FuncSendBlockInit = function(){
var len = 0;
alldata = FuncGetAllData(id);
alldata = FuncGetAllData();
blocknum = 1;
if(alldata == null){
FuncDisplay("错误:空数据");
alldata_blocknum = 0;
sendblockstate = 0xff;
return 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 + 19;
block_sended = 0;
sendblockstate = 0;
return 0;
}
nextstate = function(val){
if(val == 0){
@ -165,20 +157,6 @@ FuncSendBlockApp = function(){
}
return 1;
}
FuncSendBlockFlashDriver = function(){
select(sendFlashDriverState) {
case 0 {
}
case 1 {
}
case 2 {
}
case 3 {
}
else {
}
}
}
var delaycount = 0;
//boot总流程
@ -189,7 +167,7 @@ FuncBootSeq = function(){
case 0 {
boottime = 1;
if(sendstate == 0){
//FuncSendBlockInit(0);
FuncSendBlockInit();
FuncReadDID(0xF186);
FuncClearState();
}
@ -202,43 +180,26 @@ FuncBootSeq = function(){
if(sendstate == 0){
FuncReadDID(0xF195);//读取软件版本
FuncClearState();
delaycount = 0;
}
else {
//var ret = FuncWait(0x22);
//nextstate(0);
delaycount += 1;
if(delaycount > 10){
nextstate(0);//延时1S
}
var ret = FuncWait(0x22);
nextstate(ret);
}
}
case 2 {
if(sendstate == 0){
FuncReadDID(0xF193);//读取硬件版本
FuncReadDID(0xF192);//读取硬件版本
FuncClearState();
delaycount = 0;
}
else {
//var ret = FuncWait(0x22);
//nextstate(0);
delaycount += 1;
if(delaycount > 10){
nextstate(0);//延时1S
}
var ret = FuncWait(0x22);
nextstate(ret);
}
}
case 3 {
if(sendstate == 0){
if(CurrentSession == 2){
nextstate(0);
}
else {
FuncReq10(true,0x03);//进入扩展会话
FuncClearState();
}
FuncReq10(true,0x03);//进入扩展会话
FuncClearState();
}
else {
var ret = FuncWait(0x10);
@ -249,27 +210,20 @@ FuncBootSeq = function(){
if(sendstate == 0){
FuncReq85(0x02);//关闭DTC
FuncClearState();
delaycount = 0;
}
else {
delaycount += 1;
if(delaycount > 10){
nextstate(0);//延时1S
}
var ret = FuncWait(0x85);
nextstate(ret);
}
}
case 5 {
if(sendstate == 0){
FuncReq28(0x01,0x01);//禁止发送
FuncClearState();
delaycount = 0;
}
else {
delaycount += 1;
if(delaycount > 10){
nextstate(0);//延时1S
}
var ret = FuncWait(0x28);
nextstate(ret);
}
}
case 6 {
@ -284,7 +238,7 @@ FuncBootSeq = function(){
}
case 7 {
if(sendstate == 0){
FuncReq27(0x11);//解密
FuncReq27(01);//解密
FuncClearState();
}
else {
@ -296,18 +250,16 @@ FuncBootSeq = function(){
if(sendstate == 0){
//FuncReq27(02);//发送key
FuncClearState();
FuncDisplay("等待解锁");
}
else {
//var ret = FuncWait(0x27);
var ret = FuncDiag27GetState();
var ret = FuncWait(0x27);
nextstate(ret);
}
}
case 9 {
if(sendstate == 0){
FuncClearState();
FuncDIDWriteStr(0xf198,"Daming ");//写入repair_shopcode
FuncDIDWriteStr(0xf198,"Daming_CANBootload ");//写入repair_shopcode
}
else {
@ -332,30 +284,31 @@ FuncBootSeq = function(){
}
}
case 11 {
if(sendstate == 0){//发送数据
FuncSendBlockInit(0);
FuncDisplay("开始发送FlashDrv数据");
if(sendstate == 0){//擦除flash
FuncReq31EraseFlash(0x00FE0000,0x00019FE0);//
FuncClearState();
}
else {
var ret = FuncSendBlockApp();
var ret = FuncWait(0x31);
nextstate(ret);
}
}
case 12 {
if(sendstate == 0){//CheckLogicBlock
var crc = FuncGetFlashCRC(0);
FuncReq31CheckLogicBlock(crc);
FuncClearState();
if(sendstate == 0){//发送数据
//FuncSendBlockInit();
FuncDisplay("开始发送app数据");
FuncClearState();
}
else {
var ret = FuncWait(0x31);
var ret = FuncSendBlockApp();
nextstate(ret);
}
}
case 13 {
if(sendstate == 0){//CheckLogicBlock
FuncReq31EraseFlash(0xA000,0x10000);
FuncReq31CheckLogicBlock(0x00FE0000,0x00019FCC);
FuncClearState();
}
else {
@ -363,30 +316,7 @@ FuncBootSeq = function(){
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();
@ -396,10 +326,10 @@ FuncBootSeq = function(){
nextstate(ret);
}
}
case 17 {
case 15 {
if(sendstate == 0){//复位
FuncClearState();
FuncReq11(0x03);
FuncReq11(0x01);
}
else {
var ret = FuncWait(0x11);
@ -407,7 +337,7 @@ FuncBootSeq = function(){
}
}
case 18 {
case 16 {
if(sendstate == 0){//等待复位完成
delaycount = 0;
FuncClearState();
@ -421,7 +351,7 @@ FuncBootSeq = function(){
}
}
case 19 {
case 17 {
if(sendstate == 0){
FuncReq10(true,0x03);//进入扩展会话
FuncClearState();
@ -431,7 +361,7 @@ FuncBootSeq = function(){
nextstate(ret);
}
}
case 20 {
case 18 {
if(sendstate == 0){
FuncReq28(0x00,0x01);//开启发送
FuncClearState();
@ -441,7 +371,7 @@ FuncBootSeq = function(){
nextstate(ret);
}
}
case 21 {
case 19 {
if(sendstate == 0){
FuncReq85(0x01);//开启DTC
FuncClearState();
@ -451,7 +381,7 @@ FuncBootSeq = function(){
nextstate(ret);
}
}
case 22 {
case 20 {
if(sendstate == 0){
FuncReq10(true,0x01);//进入默认会话
FuncClearState();
@ -467,8 +397,6 @@ FuncBootSeq = function(){
boottimer.disable();
}
}
if(alldata_blocknum != 0){
thread.command.$SetProgress(block_sended/alldata_blocknum * 100);
}
thread.command.$SetProgress(block_sended/alldata_blocknum * 100);
}

View File

@ -1,83 +0,0 @@
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;
}

View File

@ -1,73 +1,16 @@
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 = {};
var AllData = {}
FuncGetAllData = function(id){
if(id > #AllData){
return null;
}
return AllData[id];
FuncGetAllData = function(){
return FlashData;
}
FuncGetFileInfo = function(){
return fileinfo;
}
FuncCRC32Calc = function(Data){
var usCRC = 0xFFFFFFFF;
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){
FuncOpenS19File = function(path){
import fsys.dlg;
if(path == null){
path = fsys.dlg.open('S19文件|*.sx;*.s19;*.srec|所有文件|*.*||',,,winform);
@ -151,14 +94,6 @@ FuncOpenS19File = function(id,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;
@ -167,4 +102,3 @@ FuncOpenS19File = function(id,path){