From 8f8a09bfc9f969a1f0eada68f1efab72a2031147 Mon Sep 17 00:00:00 2001 From: sunbeam Date: Mon, 20 Mar 2023 19:42:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96Boot=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- default.aproj | 6 +- main.aardio | 105 ++++++++++++++++++---------- user/CanThread.aardio | 16 ++++- user/Diag22code.aardio | 99 ++++++--------------------- user/Diag2Ecode.aardio | 2 +- user/Diag31code.aardio | 4 ++ user/DiagBootcode.aardio | 140 +++++++++++++++++++++++++++----------- user/GeelySecurety.aardio | 8 ++- 8 files changed, 215 insertions(+), 165 deletions(-) diff --git a/default.aproj b/default.aproj index bdcaec0..215c7d4 100644 --- a/default.aproj +++ b/default.aproj @@ -1,7 +1,9 @@  - + - + + + diff --git a/main.aardio b/main.aardio index 135b15f..1484db2 100644 --- a/main.aardio +++ b/main.aardio @@ -1,32 +1,32 @@ import win.ui; /*DSG{{*/ -mainForm = win.form(text="CAN_Bootloader";right=599;bottom=465;border="dialog frame";max=false) +mainForm = win.form(text="CAN_Bootloader";right=699;bottom=465;border="dialog frame";max=false) mainForm.add( btnConnect={cls="button";text="连接";left=204;top=64;right=289;bottom=90;z=4}; -btnDiag={cls="button";text="诊断";left=149;top=350;right=248;bottom=375;z=25}; -btnFlash={cls="button";text="开始刷写";left=37;top=315;right=136;bottom=343;z=9}; +btnDiag1001={cls="button";text="默认会话";left=98;top=229;right=190;bottom=260;z=23}; +btnDiag1002={cls="button";text="boot会话";left=192;top=229;right=284;bottom=260;z=22}; +btnDiag1003={cls="button";text="扩展会话";left=286;top=229;right=378;bottom=260;z=21}; +btnFlash={cls="button";text="开始刷写";left=276;top=368;right=375;bottom=396;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=272;top=101;right=371;bottom=129;z=8}; +btnReadF186={cls="button";text="读取当前会话";left=4;top=229;right=96;bottom=260;z=13}; +btnReadF198={cls="button";text="读取F198";left=286;top=261;right=378;bottom=289;z=19}; +btnReadF199={cls="button";text="读取F199";left=192;top=261;right=284;bottom=289;z=20}; +btnReadHw={cls="button";text="硬件版本号";left=98;top=261;right=190;bottom=289;z=12}; +btnReadSw={cls="button";text="软件版本号";left=4;top=261;right=96;bottom=289;z=10}; +btnTest={cls="button";text="停止";left=277;top=400;right=376;bottom=428;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}; +edFile={cls="richedit";left=8;top=131;right=371;bottom=209;border=1;disabled=1;edge=1;multiline=1;wrap=1;z=14}; +edit={cls="edit";left=390;top=19;right=692;bottom=401;autovscroll=false;edge=1;multiline=1;vscroll=1;z=5}; +progress={cls="progress";left=389;top=435;right=689;bottom=463;edge=1;max=100;min=0;z=15}; +radiobutton={cls="radiobutton";text="左板";left=277;top=310;right=365;bottom=329;checked=1;z=24}; +radiobutton2={cls="radiobutton";text="右板";left=277;top=336;right=365;bottom=355;z=25}; 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=389;top=408;right=442;bottom=428;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_20230320";left=545;top=1;right=689;bottom=17;align="right";center=1;transparent=1;z=18} ) /*}}*/ @@ -43,7 +43,9 @@ timer_bootcount.onTimer = function(){//boot时间定时器,100ms间隔 } 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; @@ -88,7 +90,7 @@ mainForm.btnFresh.oncommand = function(id,event){ } mainForm.btnConnect.oncommand = function(id,event){ - var canfd_check = mainForm.checkbox.checked?0x80:0x00; + var canfd_check = 0x80;//mainForm.checkbox.checked?0x80:0x00; ::PostThreadMessage(thrdId,101,mainForm.cbbDev.selIndex,(mainForm.cbbChannel.selIndex - 1)|canfd_check)//自定义消息 /* var ret = CANHw.OpenDevice(mainForm.cbbDev.selIndex,mainForm.cbbChannel.selIndex - 1);//通道为0和1 @@ -110,6 +112,7 @@ listener.$Display = function(str){ } listener.$ShowPath = function(str){ mainForm.edFile.text = str; + } listener.$ShowFlashDrvPath = function(str){ mainForm.edFile2.text = str; @@ -138,7 +141,6 @@ listener.$SendEnd = function(isSuccess){ //线程函数 var CanThread = function(){ - //线程函数内部要添加自已的import语句 import win; import console; @@ -161,12 +163,12 @@ var DiagStopReq = function(){ } mainForm.btnReadSw.oncommand = function(id,event){ - DiagReadDID(0xF188); + DiagReadDID(0xF195); } mainForm.btnReadHw.oncommand = function(id,event){ - DiagReadDID(0xF191); + DiagReadDID(0xF193); } mainForm.btnReadF186.oncommand = function(id,event){ @@ -189,6 +191,21 @@ mainForm.btnFlash.oncommand = function(id,event){ if(bootstate == true){ return ; } + import fsys; + var filename = fsys.getFileName(mainForm.edFile.text); + if(mainForm.radiobutton.checked){ + if(string.find(filename,"SWTL") == null){ + Display("请打开正确的文件"); + return; + } + } + else { + if(string.find(filename,"SWTR") == null){ + Display("请打开正确的文件"); + return; + } + } + bootstate = true; mainForm.edit.text = ""; Display("开始刷写流程"); @@ -218,29 +235,43 @@ mainForm.onClose = function(hwnd,message,wParam,lParam){ } mainForm.btnReadF198.oncommand = function(id,event){ - DiagReadDID(0x1701); + DiagReadDID(0xF198); } mainForm.btnReadF199.oncommand = function(id,event){ - DiagReadDID(0x1702); + DiagReadDID(0xF199); } -mainForm.btnOpenFlashdrv.oncommand = function(id,event){ - ::PostThreadMessage(thrdId,104,0,0)//自定义消息-打开flashdriver -} var frmChild = win.loadForm("\dlg\诊断子窗口.aardio"); frmChild.show(false); -mainForm.btnDiag.oncommand = function(id,event){ - - frmChild.show(); - +mainForm.btnDiag1003.oncommand = function(id,event){ + Diag10Req(0x03); } +mainForm.btnDiag1002.oncommand = function(id,event){ + Diag10Req(0x02); +} + +mainForm.btnDiag1001.oncommand = function(id,event){ + Diag10Req(0x01); +} +mainForm.text += " " + +mainForm.radiobutton.oncommand = function(id,event){ + if(mainForm.radiobutton.checked){ + ::PostThreadMessage(thrdId,106,0x720,0x620);//自定义消息 + } +} + +mainForm.radiobutton2.oncommand = function(id,event){ + if(mainForm.radiobutton.checked){ + ::PostThreadMessage(thrdId,106,0x710,0x610);//自定义消息 + } +} + +mainForm.text += mainForm.static5.text; + thrdHandle,thrdId = thread.create( CanThread ) - - - - mainForm.show(); return win.loopMessage(); \ No newline at end of file diff --git a/user/CanThread.aardio b/user/CanThread.aardio index 462a029..8bc67ed 100644 --- a/user/CanThread.aardio +++ b/user/CanThread.aardio @@ -5,8 +5,8 @@ import win.timer; CANHw = usb2canfd.USB2CANHW(); CANHw.LoadDll(); -DiagReqID = 0x741;//0x18dadff1; -DiagRespID = 0x751;//0x18daf1df; +DiagReqID = 0x720;//0x18dadff1; +DiagRespID = 0x620;//0x18daf1df; DiagGloableID = 0x7DF;//0x18DB33F1; stopflag = 0; //注册一个消息钩子函数 @@ -39,6 +39,8 @@ FuncLoopMsg = function(msg){ var ret = FuncOpenS19File(msg.wParam); if(ret != null){ thread.command.$ShowPath(ret); + var crc32 = FuncGetFlashCRC(msg.wParam); + FuncDisplay("CRC = " ++ string.format("%X",crc32)); } } @@ -47,11 +49,14 @@ FuncLoopMsg = function(msg){ case 105 {//停止boot thread.stop(0); } + case 106 { + FuncSetCANID(msg.wParam,msg.lParam); + } case 110 {//readDID FuncReadDID(msg.wParam); } case 111 { - FuncReq10(msg.wParam); + FuncReq10(false,msg.wParam); } case 112 { FuncReq28(msg.wParam); @@ -68,6 +73,10 @@ FuncLoopMsg = function(msg){ } } +FuncSetCANID = function(req,resp){ + DiagReqID = req; + DiagRespID = resp; +} @@ -182,6 +191,7 @@ var FuncSendPackage = function(){ for(i=1;max;1){ data[i+1] = table.remove(Packdata); } + sleep(1); CANHw.SendMsg(PackID,data); PackNext += 1; diff --git a/user/Diag22code.aardio b/user/Diag22code.aardio index 2e53636..2a539e6 100644 --- a/user/Diag22code.aardio +++ b/user/Diag22code.aardio @@ -23,13 +23,27 @@ FuncDiag22Pro = function(data){ case 0xF186 { FuncDisplay("当前会话: " + data[3]); } - case 0xF191 { - FuncDisplay("硬件版本号"); - FuncDisplay(string.pack(table.slice(data,3))); + case 0xF193 { + var len = string.len(string.pack(table.slice(data,3)),3); + if(data[3] != 0){ + var str = string.pack(table.slice(data,3,len+3)); + FuncDisplay("硬件版本号:" ++ str); + } + else { + FuncDisplay("硬件版本号未读到"); + } + + } - case 0xF188 { - FuncDisplay("软件版本号"); - FuncDisplay(string.pack(table.slice(data,3))); + case 0xF195 { + var len = string.len(string.pack(table.slice(data,3)),3); + if(data[3] != 0){ + var str = string.pack(table.slice(data,3,len+3)); + FuncDisplay("软件版本号:" ++ str); + } + else { + FuncDisplay("软件版本号未读到"); + } } case 0xF198 { FuncDisplay("repair_shopcode"); @@ -37,7 +51,7 @@ FuncDiag22Pro = function(data){ } case 0xF199 { FuncDisplay("installation_date"); - FuncDisplay(string.format("%x%X%x%x",data[3],data[4],data[5],data[6])); + FuncDisplay(string.format("%02x%02x%02x%02x",data[3],data[4],data[5],data[6])); } case 0xF187 { FuncDisplay("车辆备用零部件编号"); @@ -54,77 +68,6 @@ FuncDiag22Pro = function(data){ FuncDisplay(string.pack(table.slice(data,3))); } - case 0x1701 { - var 水平 = (data[3]<<8) + (data[4]); - var 靠背 = (data[5]<<8) + (data[6]); - FuncDisplay("水平电机当前位置霍尔数: " + 水平 + "靠背电机当前位置数" + 靠背); - } - case 0x1702 { - if(#data < 10){ - FuncDisplay("DID-0x1702长度错误") - return; - } - var 水平1 = (data[3]<<8) + (data[4]); - var 水平2 = (data[5]<<8) + (data[6]); - var 靠背1 = (data[7]<<8) + (data[8]); - var 靠背2 = (data[9]<<8) + (data[10]); - FuncDisplay("水平1: " + 水平1 + "水平2" + 水平2); - FuncDisplay("靠背1: " + 靠背1 + "靠背2" + 靠背2); - } - case 0x1706 { - var 水平 = data[3]&0x01; - var 靠背 = (data[3]>>1)&0x01; - FuncDisplay("座椅水平方向电机学习状态: " + 水平 + "座椅靠背方向电机学习状态" + 靠背); - } - case 0x1707 { - var 电流 = (data[3]<<8) + data[4]; - FuncDisplay("电流: " + tostring(电流)); - - } - case 0x1708 { - FuncDisplay("输入状态: "); - var 座椅向前 = data[3]&0x01; - var 座椅向后 = (data[3]>>1)&0x01; - var 靠背向前 = (data[3]>>2)&0x01; - var 靠背向后 = (data[3]>>3)&0x01; - var 快进按键 = (data[3]>>4)&0x01; - var 快出按键 = (data[3]>>5)&0x01; - var 锁扣状态 = (data[3]>>6)&0x01; - var 坐人状态 = (data[3]>>7)&0x01; - FuncDisplay("座椅向前: " + 座椅向前); - FuncDisplay("座椅向后: " + 座椅向后); - FuncDisplay("靠背向前: " + 靠背向前); - FuncDisplay("靠背向后: " + 靠背向后); - FuncDisplay("快进按键: " + 快进按键); - FuncDisplay("快进按键: " + 快进按键); - FuncDisplay("锁扣状态: " + 锁扣状态); - FuncDisplay("坐人状态: " + 坐人状态); - } - case 0x1709 { - FuncDisplay("输出状态: "); - var 座椅向前 = data[3]&0x01; - var 座椅向后 = (data[3]>>1)&0x01; - var 靠背向前 = (data[3]>>2)&0x01; - var 靠背向后 = (data[3]>>3)&0x01; - var 快进按键 = (data[3]>>4)&0x01; - var 快出按键 = (data[3]>>5)&0x01; - - FuncDisplay("座椅向前: " + 座椅向前); - FuncDisplay("座椅向后: " + 座椅向后); - FuncDisplay("靠背向前: " + 靠背向前); - FuncDisplay("靠背向后: " + 靠背向后); - FuncDisplay("快进输出: " + 快进按键); - FuncDisplay("快出输出: " + 快进按键); - - } - case 0x170B { - var 系统供电电压 = data[3]/10; - FuncDisplay("系统供电电压: " + tostring(系统供电电压) + " V"); - - } - else { - FuncDisplay("未知DID - " + tostring(did,16)); - } } } \ No newline at end of file diff --git a/user/Diag2Ecode.aardio b/user/Diag2Ecode.aardio index 4dab962..c85aefb 100644 --- a/user/Diag2Ecode.aardio +++ b/user/Diag2Ecode.aardio @@ -21,7 +21,7 @@ FuncReq2E = function(did,data){ var txdata = {0x10,3+#data,0x2E,did>>8,did&0xff,data[1],data[2],data[3]}; CANHw.SendMsg(DiagReqID,txdata); //等待发送 - FuncPushPackage(DiagReqID,table.slice(data,3)); + FuncPushPackage(DiagReqID,table.slice(data,4)); } else { var txdata = {3+#data,0x2E,did>>8,did&0xff,0,0,0,0}; diff --git a/user/Diag31code.aardio b/user/Diag31code.aardio index 335189c..7cfd4e8 100644 --- a/user/Diag31code.aardio +++ b/user/Diag31code.aardio @@ -42,6 +42,10 @@ FuncReq31 = function(data){ //接收 FuncDiag31Pro = function(data){ //console.dumpJson(data); + if(#data < 3){ + //FuncDisplay("31长度错误"); + return; + } var rid = (data[2]<<8) + data[3]; select(rid) { case 0xFF00 { diff --git a/user/DiagBootcode.aardio b/user/DiagBootcode.aardio index 1a45174..4aeb45a 100644 --- a/user/DiagBootcode.aardio +++ b/user/DiagBootcode.aardio @@ -83,7 +83,7 @@ FuncSendBlockInit = function(id){ return 1; } for(i=1;#alldata;1){ - len += math.ceil(#alldata[i]["data"] / 0x200) + len += math.ceil(#alldata[i]["data"] / 0x400) } alldata_blocknum = len; block_sended = 0; @@ -102,6 +102,7 @@ FuncSendBlockApp = function(){ select(sendblockstate) { case 0{ if(FuncSendBlockApp_sendflag == 0){ + FuncDisplay("请求下载"); FuncReq34(alldata[blocknum]["address"],#alldata[blocknum]["data"]); FuncSendBlockApp_sendflag = 1; RespState = 0; @@ -111,6 +112,7 @@ FuncSendBlockApp = function(){ if(FuncWait(0x34) == 0){ FuncSendBlockApp_sendflag = 0; sendblockstate += 1; + } } @@ -119,9 +121,11 @@ FuncSendBlockApp = function(){ FuncStartSendBlock(alldata[blocknum]["data"]);//初始化 FuncSendBlockApp_sendflag = 0; sendblockstate += 1; + FuncDisplay("发送App数据中..."); } case 2 { if(FuncSendBlockApp_sendflag == 0){ + sleep(20); FuncSendNextBlock(); FuncSendBlockApp_sendflag = 1; block_sended += 1; @@ -157,7 +161,7 @@ FuncSendBlockApp = function(){ sendblockstate = 0; } else { - //所有数据发送完成 + FuncDisplay("所有App数据发送完成"); return 0; } @@ -188,6 +192,8 @@ FuncBootSeq = function(){ select(bootstate) { case 0 { boottime = 1; + nextstate(0); + /* if(sendstate == 0){ //FuncSendBlockInit(0); FuncReadDID(0xF186); @@ -197,15 +203,18 @@ FuncBootSeq = function(){ var ret = FuncWait(0x22); nextstate(ret); } + */ } case 1 { + //nextstate(0); if(sendstate == 0){ + FuncDisplay("读取版本"); FuncReadDID(0xF195);//读取软件版本 FuncClearState(); } else { var ret = FuncWait(0x22); - nextstate(ret); + nextstate(0); } } case 2 { @@ -215,52 +224,72 @@ FuncBootSeq = function(){ } else { var ret = FuncWait(0x22); - nextstate(ret); + nextstate(0); } } case 3 { if(sendstate == 0){ - FuncReq10(true,0x03);//进入扩展会话 + FuncDisplay("进入扩展会话"); + FuncReq10(false,0x03);//进入扩展会话 FuncClearState(); } else { var ret = FuncWait(0x10); - nextstate(ret); + nextstate(0); } } case 4 { + nextstate(0); + /* if(sendstate == 0){ FuncReq85(0x02);//关闭DTC FuncClearState(); } else { var ret = FuncWait(0x85); - nextstate(ret); + nextstate(0);//跳过 } + */ } case 5 { + delaycount++; + if(delaycount > 10){ + nextstate(0); + delaycount = 0; + } + + /* if(sendstate == 0){ FuncReq28(0x01,0x01);//禁止发送 FuncClearState(); } else { var ret = FuncWait(0x28); - nextstate(ret); + nextstate(0);//跳过 } + */ } case 6 { if(sendstate == 0){ + FuncDisplay("进入编程会话"); FuncReq10(false,0x02);//进入编程会话 FuncClearState(); } else { - var ret = FuncWait(0x10); - nextstate(ret); + delaycount++; + if(delaycount > 10){ + //nextstate(0); + //delaycount = 0; + var ret = FuncWait(0x10); + nextstate(ret); + } + } } case 7 { if(sendstate == 0){ - FuncReq27(0x11);//解密 + FuncDisplay("等待解锁"); + FuncReq27(0x03);//解密 FuncClearState(); } else { @@ -272,27 +301,31 @@ FuncBootSeq = function(){ if(sendstate == 0){ //FuncReq27(02);//发送key FuncClearState(); - FuncDisplay("等待解锁"); + } else { //var ret = FuncWait(0x27); var ret = FuncDiag27GetState(); - nextstate(ret); + nextstate(ret);// } } case 9 { + nextstate(0); + /* if(sendstate == 0){ FuncClearState(); FuncDIDWriteStr(0xf198,"Daming ");//写入repair_shopcode - } else { - var ret = FuncWait(0x2E); - nextstate(ret); + //var ret = FuncWait(0x2E); + nextstate(0);// } + */ } case 10 { + nextstate(0); + /* if(sendstate == 0){//写入installation_date var year1 = BCD_Conv(time.now().year/100); var year2 = BCD_Conv(time.now().year%100); @@ -303,35 +336,21 @@ FuncBootSeq = function(){ //console.log("写入installation_date") } else { - var ret = FuncWait(0x2E); - nextstate(ret); + //var ret = FuncWait(0x2E); + nextstate(0); } + */ } case 11 { - if(sendstate == 0){//发送数据 - FuncSendBlockInit(0); - FuncDisplay("开始发送FlashDrv数据"); - FuncClearState(); - } - else { - var ret = FuncSendBlockApp(); - nextstate(ret); - } + nextstate(0); } case 12 { - if(sendstate == 0){//CheckLogicBlock - var crc = FuncGetFlashCRC(0); - FuncReq31CheckLogicBlock(crc); - FuncClearState(); - } - else { - var ret = FuncWait(0x31); - nextstate(ret); - } + nextstate(0); } case 13 { if(sendstate == 0){//CheckLogicBlock - FuncReq31EraseFlash(0xA000,0x10000); + FuncDisplay("擦除APP"); + FuncReq31EraseFlash(0x18000,0x20000); FuncClearState(); } else { @@ -343,7 +362,7 @@ FuncBootSeq = function(){ case 14 { if(sendstate == 0){//发送数据 FuncSendBlockInit(1); - FuncDisplay("开始发送App数据"); + //FuncDisplay("开始发送App数据"); FuncClearState(); } else { @@ -353,6 +372,7 @@ FuncBootSeq = function(){ } case 15 { if(sendstate == 0){//CheckLogicBlock + FuncDisplay("CRC校验"); var crc = FuncGetFlashCRC(1); FuncReq31CheckLogicBlock(crc); FuncClearState(); @@ -364,6 +384,7 @@ FuncBootSeq = function(){ } case 16 { if(sendstate == 0){////Programming Dependencies + FuncDisplay("检查标志"); FuncReq31CheckPD(); FuncClearState(); } @@ -374,8 +395,9 @@ FuncBootSeq = function(){ } case 17 { if(sendstate == 0){//复位 + FuncDisplay("复位"); FuncClearState(); - FuncReq11(0x03); + FuncReq11(0x01); } else { var ret = FuncWait(0x11); @@ -398,16 +420,32 @@ FuncBootSeq = function(){ } case 19 { + //nextstate(0); + if(sendstate == 0){ - FuncReq10(true,0x03);//进入扩展会话 + FuncReq10(false,0x03);//进入扩展会话 FuncClearState(); } else { var ret = FuncWait(0x10); nextstate(ret); } + } case 20 { + + if(sendstate == 0){ + FuncDisplay("写入刷写信息"); + FuncClearState(); + FuncDIDWriteStr(0xf198,"DM_Bootloader ");//写入repair_shopcode + + } + else { + var ret = FuncWait(0x2E); + nextstate(ret);// + } + //nextstate(0); + /* if(sendstate == 0){ FuncReq28(0x00,0x01);//开启发送 FuncClearState(); @@ -416,8 +454,24 @@ FuncBootSeq = function(){ var ret = FuncWait(0x28); nextstate(ret); } + */ } case 21 { + if(sendstate == 0){//写入installation_date + var year1 = BCD_Conv(time.now().year/100); + var year2 = BCD_Conv(time.now().year%100); + var month = BCD_Conv(time.now().month); + var day = BCD_Conv(time.now().day); + FuncReq2E(0XF199,{year1,year2,month,day}) + FuncClearState(); + //console.log("写入installation_date") + } + else { + var ret = FuncWait(0x2E); + nextstate(ret); + } + //nextstate(0); + /* if(sendstate == 0){ FuncReq85(0x01);//开启DTC FuncClearState(); @@ -426,16 +480,20 @@ FuncBootSeq = function(){ var ret = FuncWait(0x85); nextstate(ret); } + */ } case 22 { + //nextstate(0); + if(sendstate == 0){ FuncReq10(true,0x01);//进入默认会话 FuncClearState(); } else { var ret = FuncWait(0x10); - nextstate(ret); + nextstate(0); } + } else { thread.command.$SendEnd(true); diff --git a/user/GeelySecurety.aardio b/user/GeelySecurety.aardio index ec45635..4550168 100644 --- a/user/GeelySecurety.aardio +++ b/user/GeelySecurety.aardio @@ -5,6 +5,8 @@ securetyKeyCalc = function(pucSeed,ucSecurityLevel){ var seed = {0,0,0,0}; var key = {0,0,0,0}; var cal = {0,0,0,0}; + var pucKey = {1,2,3,4}; + return pucKey; //跳过 seed[1]=pucSeed[4]; seed[2]=pucSeed[3]; seed[3]=pucSeed[2]; @@ -43,8 +45,8 @@ securetyKeyCalc = function(pucSeed,ucSecurityLevel){ cal[3] = ((seed[3]&0xF8)>>3)^xorArray[3]; cal[4] = ((seed[4]&0xF8)>>3)^xorArray[4]; - key[1] = ((cal[4]&0x07)<<5)|(( cal[1]&0xF8)>>3); - key[2] = ((cal[0]&0x07)<<5)|(cal[3]&0x1F); + key[1] = ((cal[4]&0x07)<<5)|((cal[1]&0xF8)>>3); + key[2] = ((cal[0]&0x07)<<5)|( cal[3]&0x1F); key[3] = (cal[2]&0xF8)|((cal[4]&0xE0)>>5); key[4] = (cal[3]&0xF8)|( cal[2]&0x07); } @@ -73,7 +75,7 @@ securetyKeyCalc = function(pucSeed,ucSecurityLevel){ else { } } - var pucKey = {0,0,0,0}; + pucKey[1]=key[4]; pucKey[2]=key[3]; pucKey[3]=key[2];