更新
This commit is contained in:
parent
93ac81b835
commit
1328be60b7
@ -15,5 +15,9 @@
|
||||
<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="S19Decode.aardio" path="user\S19Decode.aardio" comment="user\S19Decode.aardio"/>
|
||||
<file name="Diag37code.aardio" path="user\Diag37code.aardio" comment="user\Diag37code.aardio"/>
|
||||
</folder>
|
||||
</project>
|
||||
|
26
main.aardio
26
main.aardio
@ -3,16 +3,16 @@ import win.ui;
|
||||
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};
|
||||
btnFlash={cls="button";text="开始刷写";left=152;top=180;right=272;bottom=205;z=10};
|
||||
btnFlash={cls="button";text="开始刷写";left=152;top=180;right=272;bottom=205;z=9};
|
||||
btnFresh={cls="button";text="刷新";left=204;top=28;right=288;bottom=54;z=2};
|
||||
btnOpen={cls="button";text="打开文件";left=31;top=180;right=131;bottom=206;z=9};
|
||||
btnReadF186={cls="button";text="读取当前会话";left=19;top=293;right=118;bottom=321;z=14};
|
||||
btnReadHw={cls="button";text="读取硬件版本号";left=17;top=263;right=116;bottom=291;z=13};
|
||||
btnReadSw={cls="button";text="读取软件版本号";left=17;top=233;right=116;bottom=261;z=11};
|
||||
btnTest={cls="button";text="测试";left=173;top=355;right=272;bottom=383;z=12};
|
||||
btnOpen={cls="button";text="打开文件";left=31;top=180;right=131;bottom=206;z=8};
|
||||
btnReadF186={cls="button";text="读取当前会话";left=19;top=293;right=118;bottom=321;z=13};
|
||||
btnReadHw={cls="button";text="读取硬件版本号";left=17;top=263;right=116;bottom=291;z=12};
|
||||
btnReadSw={cls="button";text="读取软件版本号";left=17;top=233;right=116;bottom=261;z=10};
|
||||
btnTest={cls="button";text="测试";left=173;top=355;right=272;bottom=383;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};
|
||||
edFile={cls="edit";left=27;top=141;right=281;bottom=165;edge=1;readonly=1;z=8};
|
||||
edFile={cls="richedit";left=8;top=114;right=288;bottom=170;border=1;disabled=1;edge=1;multiline=1;wrap=1;z=14};
|
||||
edit={cls="edit";left=296;top=8;right=582;bottom=383;edge=1;multiline=1;z=5};
|
||||
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}
|
||||
@ -22,12 +22,10 @@ static2={cls="static";text="通道";left=1;top=66;right=61;bottom=90;align="cent
|
||||
import win;
|
||||
import usb2canfd;
|
||||
|
||||
|
||||
Display = function(str){
|
||||
mainForm.edit.print(tostring(time()) + " " + str);
|
||||
}
|
||||
|
||||
|
||||
mainForm.edFile.wrap = true;
|
||||
|
||||
CANHw = usb2canfd.USB2CANHW();
|
||||
var ret = CANHw.LoadDll();
|
||||
@ -77,7 +75,9 @@ var listener = thread.command();
|
||||
listener.$Display = function(str){
|
||||
Display(str);
|
||||
}
|
||||
|
||||
listener.$ShowPath = function(str){
|
||||
mainForm.edFile.text = str;
|
||||
}
|
||||
//线程函数
|
||||
var CanThread = function(){
|
||||
|
||||
@ -123,6 +123,10 @@ mainForm.btnFlash.oncommand = function(id,event){
|
||||
DiagBootReq();
|
||||
}
|
||||
|
||||
mainForm.btnOpen.oncommand = function(id,event){
|
||||
::PostThreadMessage(thrdId,104,0,0)//自定义消息-打开文件
|
||||
}
|
||||
|
||||
thrdHandle,thrdId = thread.create( CanThread )
|
||||
|
||||
|
||||
|
@ -17,15 +17,22 @@ FuncLoopMsg = function(msg){
|
||||
case 100 {//刷新硬件
|
||||
FuncFreshHw();
|
||||
}
|
||||
case 101 {
|
||||
case 101 {//连接硬件
|
||||
FuncConnect(msg.wParam,msg.lParam);
|
||||
}
|
||||
case 102 {
|
||||
case 102 {//开始boot
|
||||
FuncStartBoot();
|
||||
}
|
||||
case 103 {
|
||||
case 103 {//停止boot
|
||||
FuncStopBoot();
|
||||
}
|
||||
case 104 {//打开s19文件
|
||||
FuncDisplay("打开文件");
|
||||
var ret = FuncOpenS19File();
|
||||
if(ret != null){
|
||||
thread.command.$ShowPath(ret);
|
||||
}
|
||||
}
|
||||
case 110 {//readDID
|
||||
FuncReadDID(msg.wParam);
|
||||
}
|
||||
@ -84,6 +91,7 @@ loadcodex("\user\Diag27code.aardio");
|
||||
loadcodex("\user\Diag2Ecode.aardio");
|
||||
loadcodex("\user\DiagBootcode.aardio");
|
||||
|
||||
loadcodex("\user\S19Decode.aardio");
|
||||
RespState = 0;
|
||||
|
||||
FuncDiagPro = function(diagmsg){
|
||||
|
@ -1,14 +1,29 @@
|
||||
|
||||
FuncReq31EraseFlash = function(addr,len){
|
||||
var data = {0xff,0x00,0x44,addr>>24,addr>>16,addr>>8,addr,len>>24,len>>16,len>>8,len};
|
||||
FuncReq31(data);
|
||||
}
|
||||
|
||||
|
||||
//发送
|
||||
FuncReq31 = function(data){
|
||||
if(#data > 6){//多帧
|
||||
|
||||
if(#data > 5){//多帧
|
||||
var txdata = {0x10,2+#data,0x31,0x01,data[1],data[2],data[3],data[4]};
|
||||
CANHw.SendMsg(DiagReqID,txdata);
|
||||
FuncPushPackage(DiagReqID,table.slice(data,5));
|
||||
}
|
||||
else {
|
||||
var txdata = {2+#data,0x31,0x01,0, 0,0,0,0};
|
||||
for(i=1;#data;1){
|
||||
txdata[5+i] = data[i];
|
||||
}
|
||||
CANHw.SendMsg(DiagReqID,txdata);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
//接收
|
||||
FuncDiag28Pro = function(data){
|
||||
FuncDiag31Pro = function(data){
|
||||
//console.dumpJson(data);
|
||||
select(data[1]) {
|
||||
case 1 {
|
||||
|
25
user/Diag34code.aardio
Normal file
25
user/Diag34code.aardio
Normal file
@ -0,0 +1,25 @@
|
||||
//发送
|
||||
FuncReq34 = function(addr,len){
|
||||
var data = {0x44,addr>>24,addr>>16,addr>>8,addr,len>>24,len>>16,len>>8,len};
|
||||
var txdata = {0x10,2+#data,0x34,0x00,data[1],data[2],data[3],data[4]};
|
||||
CANHw.SendMsg(DiagReqID,txdata);
|
||||
FuncPushPackage(DiagReqID,table.slice(data,5));
|
||||
|
||||
}
|
||||
//接收
|
||||
FuncDiag34Pro = function(data){
|
||||
//console.dumpJson(data);
|
||||
select(data[1]) {
|
||||
case 1 {
|
||||
FuncDisplay("使能接收,禁能发送")
|
||||
}
|
||||
case 2 {
|
||||
FuncDisplay("28 - TDB02")
|
||||
}
|
||||
case 3 {
|
||||
FuncDisplay("28 - TDB03")
|
||||
}
|
||||
else {
|
||||
}
|
||||
}
|
||||
}
|
64
user/Diag36code.aardio
Normal file
64
user/Diag36code.aardio
Normal file
@ -0,0 +1,64 @@
|
||||
|
||||
//
|
||||
var blocknum=1;
|
||||
var flag_sendend = false;
|
||||
var flag_sending = false;
|
||||
var alldata = {};
|
||||
FuncStartSendBlock = function(data){
|
||||
blocknum = 0x01;
|
||||
flag_sendend = false;
|
||||
flag_sending = true;
|
||||
alldata = data;
|
||||
/*
|
||||
if(alldata>0x400){
|
||||
FuncReq36(blocknum,table.slice(alldata,1,0x400));
|
||||
alldata = table.slice(alldata,0x401,)
|
||||
}
|
||||
else {
|
||||
FuncReq36(blocknum,alldata);
|
||||
alldata = {};
|
||||
}
|
||||
*/
|
||||
}
|
||||
FuncStopSendBlock = function(data){
|
||||
blocknum = 0x01;
|
||||
flag_sendend = false;
|
||||
flag_sending = false;
|
||||
}
|
||||
FuncGetSendStatus = function(){
|
||||
return flag_sendend;
|
||||
}
|
||||
FuncSendNextBlock = function(){
|
||||
if(alldata>0x400){
|
||||
FuncReq36(blocknum,table.slice(alldata,1,0x400));
|
||||
alldata = table.slice(alldata,0x401,)
|
||||
}
|
||||
else {
|
||||
FuncReq36(blocknum,alldata);
|
||||
alldata = {};
|
||||
flag_sendend = true;
|
||||
}
|
||||
blocknum += 1;
|
||||
}
|
||||
|
||||
|
||||
//发送
|
||||
FuncReq36 = function(num,data){
|
||||
len = #data+2;
|
||||
var txdata = {0x10+(len>>8),len&0xff,0x36,num&0xff,data[1],data[2],data[3],data[4]};
|
||||
CANHw.SendMsg(DiagReqID,txdata);
|
||||
FuncPushPackage(DiagReqID,table.slice(data,5));
|
||||
|
||||
}
|
||||
//接收
|
||||
FuncDiag36Pro = function(data){
|
||||
//console.dumpJson(data);
|
||||
/*
|
||||
if(data[1] == blocknum){
|
||||
blocknum += 1;
|
||||
if(flag_sending == true){
|
||||
FuncSendNextBlock();
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
9
user/Diag37code.aardio
Normal file
9
user/Diag37code.aardio
Normal file
@ -0,0 +1,9 @@
|
||||
//发送
|
||||
FuncReq37 = function(){
|
||||
var txdata = {0x1,0x37,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA};
|
||||
CANHw.SendMsg(DiagReqID,txdata);
|
||||
}
|
||||
//接收
|
||||
FuncDiag37Pro = function(data){
|
||||
|
||||
}
|
@ -5,13 +5,13 @@ var bootcount = 0;
|
||||
var sendstate = 0;
|
||||
FuncWait = function(sid){
|
||||
if(RespState == (sid + 0x40)){//正响应
|
||||
//bootcount = 0;
|
||||
return 0;
|
||||
}
|
||||
errsid,errnrc = FuncGetNrc();
|
||||
FuncClrNrc();
|
||||
if(errsid == sid){
|
||||
if(errnrc == 0x78){//等待
|
||||
|
||||
bootcount = 0;
|
||||
return 0xff;
|
||||
}
|
||||
@ -65,7 +65,88 @@ BCD_Conv = function(num){
|
||||
return (num/10)*16 + (num%10);
|
||||
}
|
||||
|
||||
var sendblockstate = 0;
|
||||
var alldata = {};
|
||||
var blocknum = 1;
|
||||
FuncSendBlockInit = function(){
|
||||
alldata = FuncGetAllData();
|
||||
blocknum = 1;
|
||||
if(alldata != null){
|
||||
blocknum = 1;
|
||||
FuncStartSendBlock(alldata[blocknum].["data"])
|
||||
}
|
||||
|
||||
}
|
||||
var FuncSendBlockApp_sendflag = 0
|
||||
FuncSendBlockApp = function(){
|
||||
select(sendblockstate) {
|
||||
case 0{
|
||||
if(FuncSendBlockApp_sendflag == 0){
|
||||
FuncReq34(alldata[blocknum].["address"],#alldata[blocknum].["data"]);
|
||||
FuncSendBlockApp_sendflag = 1;
|
||||
RespState = 0;
|
||||
bootcount = 0;
|
||||
}
|
||||
else {
|
||||
if(FuncWait(0x34) == 0){
|
||||
FuncSendBlockApp_sendflag = 0;
|
||||
sendblockstate += 1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
case 1 {
|
||||
FuncStartSendBlock(alldata[blocknum].["data"]);//初始化
|
||||
FuncSendBlockApp_sendflag = 0;
|
||||
sendblockstate += 1;
|
||||
}
|
||||
case 2 {
|
||||
if(FuncSendBlockApp_sendflag == 0){
|
||||
FuncSendNextBlock();
|
||||
FuncSendBlockApp_sendflag = 1;
|
||||
RespState = 0;
|
||||
bootcount = 0;
|
||||
}
|
||||
else {
|
||||
if(FuncWait(0x36) == 0){
|
||||
FuncSendBlockApp_sendflag = 0;
|
||||
if(FuncGetSendStatus() == true){//所有块发送完成
|
||||
sendblockstate += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
case 3 {
|
||||
if(FuncSendBlockApp_sendflag == 0){
|
||||
FuncReq37();
|
||||
FuncSendBlockApp_sendflag = 1;
|
||||
RespState = 0;
|
||||
bootcount = 0;
|
||||
}
|
||||
else {
|
||||
if(FuncWait(0x37) == 0){
|
||||
FuncSendBlockApp_sendflag = 0;
|
||||
sendblockstate += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(blocknum < #alldata){
|
||||
blocknum += 1;
|
||||
sendblockstate = 0;
|
||||
}
|
||||
else {
|
||||
//所有数据发送完成
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
//boot总流程
|
||||
FuncBootSeq = function(){
|
||||
select(bootstate) {
|
||||
case 0 {
|
||||
@ -161,7 +242,7 @@ FuncBootSeq = function(){
|
||||
}
|
||||
case 9 {
|
||||
if(sendstate == 0){
|
||||
FuncDIDWriteStr(0xf198,"0123456789abcdef1234");
|
||||
FuncDIDWriteStr(0xf198,"0123456789abcdef1234");//写入repair_shopcode
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
@ -171,7 +252,7 @@ FuncBootSeq = function(){
|
||||
}
|
||||
|
||||
case 10 {
|
||||
if(sendstate == 0){
|
||||
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);
|
||||
@ -185,6 +266,39 @@ FuncBootSeq = function(){
|
||||
nextstate(ret);
|
||||
}
|
||||
}
|
||||
case 11 {
|
||||
if(sendstate == 0){//擦除flash
|
||||
FuncReq31EraseFlash(0x00FE0000,0x00019FE0);//
|
||||
FuncClearState();
|
||||
|
||||
}
|
||||
else {
|
||||
var ret = FuncWait(0x31);
|
||||
nextstate(ret);
|
||||
}
|
||||
}
|
||||
case 12 {
|
||||
if(sendstate == 0){//发送数据
|
||||
FuncSendBlockInit();
|
||||
FuncClearState();
|
||||
|
||||
}
|
||||
else {
|
||||
var ret = FuncSendBlockApp();
|
||||
nextstate(ret);
|
||||
}
|
||||
}
|
||||
case 13 {
|
||||
if(sendstate == 0){//发送数据
|
||||
FuncSendBlockInit();
|
||||
FuncClearState();
|
||||
}
|
||||
else {
|
||||
var ret = FuncSendBlockApp();
|
||||
nextstate(ret);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
FuncDisplay("刷写完成")
|
||||
|
122
user/S19Decode.aardio
Normal file
122
user/S19Decode.aardio
Normal file
@ -0,0 +1,122 @@
|
||||
|
||||
var fileinfo = "";
|
||||
var FlashData = {};
|
||||
|
||||
FuncGetAllData = function(){
|
||||
return FlashData;
|
||||
}
|
||||
FuncGetFileInfo = function(){
|
||||
return fileinfo;
|
||||
}
|
||||
|
||||
FuncOpenS19File = function(path){
|
||||
import fsys.dlg;
|
||||
if(path == null){
|
||||
path = fsys.dlg.open('S19文件|*.sx;*.s19;*.srec|所有文件|*.*||',,,winform);
|
||||
}
|
||||
|
||||
if(io.exist( path )){
|
||||
//winform.editPath.text = path;
|
||||
var readbuf = string.load(path);
|
||||
|
||||
readbuf = string.split(readbuf,'\r\n');
|
||||
//console.dumpJson(readbuf);
|
||||
var block = null;
|
||||
FlashData = {};
|
||||
for(i=1;#readbuf;1){
|
||||
if(#readbuf[i] == 0){
|
||||
continue;
|
||||
}
|
||||
var str = readbuf[i];
|
||||
var data = "";
|
||||
var addr = 0;
|
||||
var len = 0;
|
||||
select(string.slice(str,1,2)) {
|
||||
case "S0"{
|
||||
//S0为文件信息
|
||||
var fileinfobuf = string.slice(str,9,-3);//取出文件信息
|
||||
fileinfo = "file info:"+string.unhex(fileinfobuf,"")//解码
|
||||
fileinfo = string.replace(fileinfo,"\z"," ");//替换空字符
|
||||
FuncDisplay(fileinfo)//显示
|
||||
continue;
|
||||
}
|
||||
case "S1"{
|
||||
len = tonumber(string.slice(str,3,4),16)
|
||||
addr = tonumber(string.slice(str,5,8),16)
|
||||
data = string.slice(str,9,-3)
|
||||
}
|
||||
case "S2"{
|
||||
len = tonumber(string.slice(str,3,4),16)
|
||||
addr = tonumber(string.slice(str,5,10),16)
|
||||
data = string.slice(str,11,-3)
|
||||
|
||||
}
|
||||
case "S3"{
|
||||
len = tonumber(string.slice(str,3,4),16)
|
||||
addr = tonumber(string.slice(str,5,12),16)
|
||||
data = string.slice(str,13,-3)
|
||||
}
|
||||
else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if(block == null){
|
||||
//空表,第一次进入
|
||||
block = {};
|
||||
block["address"] = addr;
|
||||
block["data"] = {};
|
||||
}
|
||||
else {
|
||||
//非空表
|
||||
if(addr == (block["address"]+#block["data"])){
|
||||
//连续,无动作
|
||||
}
|
||||
else {
|
||||
//不同块,新建块
|
||||
FlashData[#FlashData+1]={"address" = block["address"];"data" = block["data"];}
|
||||
block["address"] = addr;
|
||||
block["data"] = {};
|
||||
//不连续,判断是否填充
|
||||
/*不填充,所以注释了
|
||||
if((addr & 0xfff800) == ((block["address"]+#block["data"])&0xfff800)){
|
||||
//同一个块,填充FF
|
||||
for(i=1;addr - (block["address"]+#block["data"]);1){
|
||||
table.push(block["data"],0xff);
|
||||
}
|
||||
|
||||
}
|
||||
else {
|
||||
FlashData[#FlashData+1]={"address" = block["address"];"data" = block["data"];}
|
||||
block["address"] = addr;
|
||||
block["data"] = {};
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
data = string.unhex(data,"")
|
||||
for(i=1;#data;1){
|
||||
var bytedata = string.unpack(data,i)
|
||||
table.push(block["data"],bytedata)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
if(block != null){
|
||||
table.push(FlashData,block)
|
||||
//console.dumpTable(block["data"]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
//blocknum = 1;
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user