From 393e55580659475887f3668842457e1f2068e850 Mon Sep 17 00:00:00 2001 From: sunbeam Date: Tue, 15 Aug 2023 09:24:26 +0800 Subject: [PATCH] =?UTF-8?q?v0.7:=E5=A2=9E=E5=8A=A0=E9=80=9F=E5=BA=A6?= =?UTF-8?q?=E5=8F=AF=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- default.aproj | 2 +- dlg/about.aardio | 2 + main.aardio | 147 +++++++++++++++++++++++++++++++-------- user/CanThread.aardio | 43 +++++++++--- user/DiagBootcode.aardio | 8 ++- 5 files changed, 162 insertions(+), 40 deletions(-) diff --git a/default.aproj b/default.aproj index 326feb5..9e0cabe 100644 --- a/default.aproj +++ b/default.aproj @@ -1,5 +1,5 @@  - + diff --git a/dlg/about.aardio b/dlg/about.aardio index f419d2e..48feae4 100644 --- a/dlg/about.aardio +++ b/dlg/about.aardio @@ -13,6 +13,8 @@ V0.2_20230321: 修复右板无法刷写,增加点亮功能,增加更改履 V0.3_20230321: 修复关闭界面后程序没有完全关闭的问题 V0.4_20230322: 修复偶发刷写卡在请求下载的问题 V0.5_20230401: 兼容0331程序无法读DID +V0.6_20230724: 增加读供应商ID功能,增加断开连接,增加烧写过程中禁用其他按键 +V0.7_20230724: 增加刷写速度可选功能 */ winform.button.oncommand = function(id,event){ diff --git a/main.aardio b/main.aardio index a90ded2..01874df 100644 --- a/main.aardio +++ b/main.aardio @@ -2,33 +2,38 @@ import win.ui; /*DSG{{*/ 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}; -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=272;top=101;right=371;bottom=129;z=8}; -btnReadF186={cls="button";text="读取当前会话";left=4;top=229;right=96;bottom=260;z=13}; -btnReadF18A={cls="button";text="供应商ID";left=98;top=304;right=190;bottom=332;z=27}; -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}; -button={cls="button";text="点亮";left=6;top=304;right=94;bottom=332;z=26}; -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="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=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.5_20230401";left=545;top=1;right=689;bottom=17;align="right";center=1;notify=1;transparent=1;z=18} +btnConnect={cls="button";text="连接";left=204;top=64;right=289;bottom=90;z=5}; +btnDiag1001={cls="button";text="默认会话";left=98;top=229;right=190;bottom=260;z=24}; +btnDiag1002={cls="button";text="boot会话";left=192;top=229;right=284;bottom=260;z=23}; +btnDiag1003={cls="button";text="扩展会话";left=286;top=229;right=378;bottom=260;z=22}; +btnDisconnect={cls="button";text="断开";left=302;top=64;right=387;bottom=90;z=29}; +btnFlash={cls="button";text="开始刷写";left=276;top=368;right=375;bottom=396;z=10}; +btnFresh={cls="button";text="刷新";left=204;top=28;right=288;bottom=54;z=3}; +btnOpen={cls="button";text="打开文件";left=272;top=101;right=371;bottom=129;z=9}; +btnReadF186={cls="button";text="读取当前会话";left=4;top=229;right=96;bottom=260;z=14}; +btnReadF18A={cls="button";text="供应商ID";left=98;top=304;right=190;bottom=332;z=28}; +btnReadF198={cls="button";text="读取F198";left=286;top=261;right=378;bottom=289;z=20}; +btnReadF199={cls="button";text="读取F199";left=192;top=261;right=284;bottom=289;z=21}; +btnReadHw={cls="button";text="硬件版本号";left=98;top=261;right=190;bottom=289;z=13}; +btnReadSw={cls="button";text="软件版本号";left=4;top=261;right=96;bottom=289;z=11}; +btnTest={cls="button";text="停止";left=277;top=400;right=376;bottom=428;z=12}; +button={cls="button";text="点亮";left=6;top=304;right=94;bottom=332;z=27}; +cbbChannel={cls="combobox";left=58;top=64;right=191;bottom=90;edge=1;items={};mode="dropdown";z=4}; +cbbDev={cls="combobox";left=58;top=27;right=191;bottom=53;edge=1;items={};mode="dropdown";z=2}; +edFile={cls="richedit";left=8;top=131;right=371;bottom=209;border=1;disabled=1;edge=1;multiline=1;wrap=1;z=15}; +edit={cls="edit";left=390;top=19;right=692;bottom=401;autovscroll=false;edge=1;multiline=1;vscroll=1;z=6}; +groupbox={cls="groupbox";text="刷写速度";left=9;top=385;right=153;bottom=427;edge=1;z=1}; +progress={cls="progress";left=389;top=435;right=689;bottom=463;edge=1;max=100;min=0;z=16}; +radiobutton={cls="radiobutton";text="左板";left=277;top=310;right=365;bottom=329;checked=1;group=1;z=25}; +radiobutton2={cls="radiobutton";text="右板";left=277;top=336;right=365;bottom=355;z=26}; +rbSpeedHigh={cls="radiobutton";text="高";left=98;top=402;right=134;bottom=421;z=32}; +rbSpeedLow={cls="radiobutton";text="低";left=20;top=402;right=56;bottom=421;group=1;z=30}; +rbSpeedMiddle={cls="radiobutton";text="中";left=59;top=402;right=95;bottom=421;checked=1;z=31}; +static={cls="static";text="设备";left=1;top=28;right=61;bottom=52;align="center";center=1;transparent=1;z=7}; +static2={cls="static";text="通道";left=1;top=66;right=61;bottom=90;align="center";center=1;transparent=1;z=8}; +static3={cls="static";text="刷写进度";left=389;top=408;right=442;bottom=428;transparent=1;z=17}; +static4={cls="static";text="烧录APP";left=13;top=108;right=85;bottom=132;center=1;transparent=1;z=18}; +static5={cls="static";text="V0.7_20230724";left=545;top=1;right=689;bottom=17;align="right";center=1;notify=1;transparent=1;z=19} ) /*}}*/ @@ -60,6 +65,7 @@ mainForm.cbbChannel.add("通道2"); mainForm.cbbChannel.selIndex = 1 + //刷新按键 mainForm.btnFresh.oncommand = function(id,event){ mainForm.cbbDev.clear();//清空下拉框,防止反复刷新叠加 @@ -116,8 +122,20 @@ listener.$Connected = function(){ mainForm.btnFresh.disabled = true; mainForm.cbbDev.disabled = true; mainForm.cbbChannel.disabled = true; + mainForm.btnDisconnect.disabled = false; flag_connected = 1; } + +listener.$Disconnected = function(){ + mainForm.btnConnect.disabled = false; + mainForm.btnFresh.disabled = false; + mainForm.cbbDev.disabled = false; + mainForm.cbbChannel.disabled = false; + mainForm.btnDisconnect.disabled = true; + flag_connected = 0; +} + + listener.$SendEnd = function(isSuccess){ //timer_bootcount.disable(); var usetime = time.now().diffsecond(starttime); @@ -125,6 +143,7 @@ listener.$SendEnd = function(isSuccess){ if(isSuccess == true){ Display("刷写成功,用时 " + usetime + " S") } + EnableAll(); } //线程函数 @@ -137,6 +156,8 @@ var CanThread = function(){ //在子线程启动消息循环 win.loopMessage(FuncLoopMsg) } +//开启线程 +thrdHandle,thrdId = thread.create( CanThread ); DiagReadDID = function(did){ ::PostThreadMessage(thrdId,110,did,0)//自定义消息 } @@ -200,10 +221,43 @@ mainForm.btnFlash.oncommand = function(id,event){ starttime = time.now(); //timer_bootcount.enable(); DiagBootReq(); - - + DisableAll(); } +DisableAll = function(){ + mainForm.btnOpen.disabled = 1; + mainForm.btnReadF18A.disabled = 1; + mainForm.btnReadF186.disabled = 1; + mainForm.btnReadF198.disabled = 1; + mainForm.btnReadF199.disabled = 1; + mainForm.btnReadHw.disabled = 1; + mainForm.btnReadSw.disabled = 1; + mainForm.btnDiag1003.disabled = 1; + mainForm.btnDiag1002.disabled = 1; + mainForm.btnDiag1001.disabled = 1; + mainForm.button.disabled = 1; + mainForm.radiobutton.disabled = 1; + mainForm.radiobutton2.disabled = 1; + mainForm.btnFlash.disabled = 1; +} +EnableAll = function(){ + mainForm.btnOpen.disabled = 0; + mainForm.btnReadF18A.disabled = 0; + mainForm.btnReadF186.disabled = 0; + mainForm.btnReadF198.disabled = 0; + mainForm.btnReadF199.disabled = 0; + mainForm.btnReadHw.disabled = 0; + mainForm.btnReadSw.disabled = 0; + mainForm.btnDiag1003.disabled = 0; + mainForm.btnDiag1002.disabled = 0; + mainForm.btnDiag1001.disabled = 0; + mainForm.button.disabled = 0; + mainForm.radiobutton.disabled = 0; + mainForm.radiobutton2.disabled = 0; + mainForm.btnFlash.disabled = 0; +} + + mainForm.btnOpen.oncommand = function(id,event){ ::PostThreadMessage(thrdId,104,1,0)//自定义消息-打开文件 } @@ -283,6 +337,39 @@ mainForm.btnReadF18A.oncommand = function(id,event){ DiagReadDID(0xF18A); } -thrdHandle,thrdId = thread.create( CanThread ); +mainForm.btnDisconnect.oncommand = function(id,event){ + ::PostThreadMessage(thrdId,120,0,0)//自定义消息 +} + +setSpeed = function(speed){ + ::PostThreadMessage(thrdId,121,speed,0)//自定义消息 +} + + +if(mainForm.rbSpeedLow.checked == true){ + setSpeed(1); +} +if(mainForm.rbSpeedMiddle.checked == true){ + setSpeed(2); +} +if(mainForm.rbSpeedHigh.checked == true){ + setSpeed(3); +} + +mainForm.rbSpeedLow.oncommand = function(id,event){ + setSpeed(1); +} + +mainForm.rbSpeedMiddle.oncommand = function(id,event){ + setSpeed(2); +} + +mainForm.rbSpeedHigh.oncommand = function(id,event){ + setSpeed(3); +} + +mainForm.btnDisconnect.disabled = true; + + mainForm.show(); return win.loopMessage(); \ No newline at end of file diff --git a/user/CanThread.aardio b/user/CanThread.aardio index a10e2f2..5af7b33 100644 --- a/user/CanThread.aardio +++ b/user/CanThread.aardio @@ -9,6 +9,7 @@ DiagReqID = 0x720;//0x18dadff1; DiagRespID = 0x620;//0x18daf1df; DiagGloableID = 0x7DF;//0x18DB33F1; stopflag = 0; +FlashSpeed = 1; //注册一个消息钩子函数 FuncLoopMsg = function(msg){ select(msg.message) { @@ -73,6 +74,12 @@ FuncLoopMsg = function(msg){ case 114 { FuncReq27(msg.wParam); } + case 120 { + FuncDisconnect(); + } + case 121 { + FuncSetSpeed(msg.wParam); + } else { } @@ -119,6 +126,12 @@ FuncConnect = function(dev,chn){ } } +FuncDisconnect = function(){ + CANHw.CloseDevice(); + thread.command.$Disconnected(); +} + + FuncDisplay = function(str){ thread.command.$Display(str);//"线程" + } @@ -203,6 +216,7 @@ var timedll = raw.loadDll("Winmm.dll"); //timedll.timeBeginPeriod(1); var tickdll = raw.loadDll("Kernel32.dll"); var mydelay = function(ms){ + if(ms == 0)return; import time.performance; var tk = time.performance.tick(); while((time.performance.tick() - tk) < ms){ @@ -211,9 +225,27 @@ var mydelay = function(ms){ } +FuncSetSpeed = function(speed){ + select(speed) { + case 1 { + FlashSpeed = 4; + } + case 2 { + FlashSpeed = 1; + } + case 3 { + FlashSpeed = 0; + } + else { + FlashSpeed = 2; + } + } +} + + var FuncSendPackage = function(){ timer1.disable(); - //timedll.timeBeginPeriod(1); + timedll.timeBeginPeriod(1); while(#Packdata > 0) { //sleep(1); @@ -222,12 +254,7 @@ var FuncSendPackage = function(){ for(i=1;max;1){ data[i+1] = table.remove(Packdata); } - //thread.delay(0.5); - - //mydelay(2); - //timedll.timeBeginPeriod(1); - //sleep(1); - // + mydelay(FlashSpeed); CANHw.SendMsg(PackID,data); //timedll.timeEndPeriod(1); PackNext += 1; @@ -235,7 +262,7 @@ var FuncSendPackage = function(){ PackNext = 0x20; } } - + timedll.timeEndPeriod(1); timer1.enable(); } FuncPushPackage = function(ID,data){ diff --git a/user/DiagBootcode.aardio b/user/DiagBootcode.aardio index 6fc2c2c..eaefb0e 100644 --- a/user/DiagBootcode.aardio +++ b/user/DiagBootcode.aardio @@ -3,6 +3,7 @@ var bootstate = 0; var bootcount = 0; var sendstate = 0; +var FuncSendBlockApp_sendflag = 0; FuncWait = function(sid){ if(RespState == (sid + 0x40)){//正响应 //bootcount = 0; @@ -88,6 +89,9 @@ FuncSendBlockInit = function(id){ alldata_blocknum = len; block_sended = 0; sendblockstate = 0; + + FuncSendBlockApp_sendflag = 0; + //FuncDisplay("清除flag = " ++ FuncSendBlockApp_sendflag); return 0; } nextstate = function(val){ @@ -97,10 +101,12 @@ nextstate = function(val){ block_sended += 1; } } -var FuncSendBlockApp_sendflag = 0 + FuncSendBlockApp = function(){ + //FuncDisplay("sendblockstate = " ++ sendblockstate); select(sendblockstate) { case 0{ + //FuncDisplay("flag = " ++ FuncSendBlockApp_sendflag); if(FuncSendBlockApp_sendflag == 0){ FuncDisplay("请求下载"); FuncReq34(alldata[blocknum]["address"],#alldata[blocknum]["data"]);