can_bootloader/main.aardio

202 lines
6.1 KiB
Plaintext
Raw Normal View History

2022-05-14 15:57:52 +08:00
import win.ui;
/*DSG{{*/
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};
2022-05-18 14:06:44 +08:00
btnFlash={cls="button";text="开始刷写";left=148;top=197;right=247;bottom=225;z=9};
2022-05-14 15:57:52 +08:00
btnFresh={cls="button";text="刷新";left=204;top=28;right=288;bottom=54;z=2};
2022-05-18 10:43:03 +08:00
btnOpen={cls="button";text="打开文件";left=32;top=197;right=131;bottom=225;z=8};
2022-05-18 14:06:44 +08:00
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};
2022-05-14 15:57:52 +08:00
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};
2022-07-04 23:36:49 +08:00
checkbox={cls="checkbox";text="Checkbox";left=151;top=101;right=248;bottom=120;z=21};
2022-05-18 10:43:03 +08:00
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};
2022-05-14 15:57:52 +08:00
static={cls="static";text="设备";left=1;top=28;right=61;bottom=52;align="center";center=1;transparent=1;z=6};
2022-05-18 10:43:03 +08:00
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};
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}
2022-05-14 15:57:52 +08:00
)
/*}}*/
import win;
import usb2canfd;
2022-05-18 10:43:03 +08:00
import win.timer;
2022-05-18 14:06:44 +08:00
var boot_count = 0;//boot时间计数器
var bootstate = false;//boot状态标志
2022-05-18 10:43:03 +08:00
timer_bootcount = win.timer(mainForm,100);
2022-05-18 14:06:44 +08:00
timer_bootcount.onTimer = function(){//boot时间定时器100ms间隔
2022-05-18 10:43:03 +08:00
boot_count++;
}
2022-05-14 15:57:52 +08:00
2022-05-18 14:06:44 +08:00
Display = function(str){//显示日志
2022-05-14 15:57:52 +08:00
mainForm.edit.print(tostring(time()) + " " + str);
}
2022-05-18 14:06:44 +08:00
CANHw = usb2canfd.USB2CANHW();//尝试加载CAN dll
2022-05-14 15:57:52 +08:00
var ret = CANHw.LoadDll();
if(ret == 0){
Display("DLL加载成功");
}
2022-05-18 14:06:44 +08:00
//初始化界面
2022-05-14 15:57:52 +08:00
mainForm.cbbChannel.add("通道1");
mainForm.cbbChannel.add("通道2");
mainForm.cbbChannel.selIndex = 1
2022-05-18 14:06:44 +08:00
//刷新按键
2022-05-14 15:57:52 +08:00
mainForm.btnFresh.oncommand = function(id,event){
2022-05-18 14:06:44 +08:00
mainForm.cbbDev.clear();//清空下拉框,防止反复刷新叠加
var hwnum = CANHw.FlashHw();//获取硬件数量
2022-05-14 15:57:52 +08:00
if(hwnum == 0){
mainForm.cbbDev.text = "未找到硬件"
}
else {
var allhw = CANHw.GetAvailableHW();
for(i=1;#allhw;1){
2022-07-05 13:23:46 +08:00
mainForm.cbbDev.add(allhw[i].name);//将硬件添加到下拉框中
2022-05-14 15:57:52 +08:00
}
}
mainForm.cbbDev.selIndex = 1
::PostThreadMessage(thrdId,100,0,0)//自定义消息
}
2022-07-05 13:23:46 +08:00
//连接按键
2022-05-14 15:57:52 +08:00
mainForm.btnConnect.oncommand = function(id,event){
2022-07-05 13:23:46 +08:00
//发送线程消息thrdId为线程ID101为自定义消息号后两个为消息携带的参数
2022-05-14 15:57:52 +08:00
::PostThreadMessage(thrdId,101,mainForm.cbbDev.selIndex,mainForm.cbbChannel.selIndex - 1)//自定义消息
}
//CAN通讯线程
import thread.command;
var listener = thread.command();
2022-05-18 10:43:03 +08:00
var flag_connected=0;
2022-05-14 15:57:52 +08:00
listener.$Display = function(str){
Display(str);
}
2022-05-17 16:34:44 +08:00
listener.$ShowPath = function(str){
mainForm.edFile.text = str;
}
2022-05-18 10:43:03 +08:00
listener.$SetProgress = function(pos){
if(pos >= 0 && pos <= 100){
mainForm.progress.pos = pos;
}
}
listener.$Connected = function(){
mainForm.btnConnect.disabled = true;
mainForm.btnFresh.disabled = true;
mainForm.cbbDev.disabled = true;
mainForm.cbbChannel.disabled = true;
flag_connected = 1;
}
listener.$SendEnd = function(isSuccess){
timer_bootcount.disable();
2022-05-18 14:06:44 +08:00
bootstate = false;
2022-05-18 10:43:03 +08:00
if(isSuccess == true){
Display("刷写成功,用时 " + boot_count/10 + " S")
}
}
2022-05-14 15:57:52 +08:00
//线程函数
var CanThread = function(){
//线程函数内部要添加自已的import语句
import win;
import console;
2022-05-18 10:43:03 +08:00
//console.log("线程开始运行")
2022-05-14 15:57:52 +08:00
loadcodex("\user\CanThread.aardio");//加载线程程序
//在子线程启动消息循环
win.loopMessage(FuncLoopMsg)
}
var DiagReadDID = function(did){
::PostThreadMessage(thrdId,110,did,0)//自定义消息
}
var Diag10Req = function(num){
::PostThreadMessage(thrdId,111,num,0)//自定义消息
}
2022-05-14 17:00:49 +08:00
var DiagBootReq = function(){
::PostThreadMessage(thrdId,102,0,0)//自定义消息
}
var DiagStopReq = function(){
::PostThreadMessage(thrdId,103,0,0)//自定义消息
}
2022-05-14 15:57:52 +08:00
mainForm.btnReadSw.oncommand = function(id,event){
DiagReadDID(0xF195);
}
mainForm.btnReadHw.oncommand = function(id,event){
DiagReadDID(0xF192);
}
mainForm.btnReadF186.oncommand = function(id,event){
DiagReadDID(0xF186);
}
mainForm.btnTest.oncommand = function(id,event){
2022-05-14 17:00:49 +08:00
DiagStopReq();
}
mainForm.btnFlash.oncommand = function(id,event){
2022-05-18 10:43:03 +08:00
if(io.exist(mainForm.edFile.text) == null){
Display("请打开文件");
return;
}
if(flag_connected == 0){
Display("请连接设备");
return;
}
2022-05-18 14:06:44 +08:00
if(bootstate == true){
return ;
}
bootstate = true;
2022-05-18 10:43:03 +08:00
mainForm.edit.text = "";
Display("开始刷写流程");
timer_bootcount.enable();
boot_count = 0;
2022-05-14 17:00:49 +08:00
DiagBootReq();
2022-05-18 10:43:03 +08:00
2022-05-14 15:57:52 +08:00
}
2022-05-17 16:34:44 +08:00
mainForm.btnOpen.oncommand = function(id,event){
::PostThreadMessage(thrdId,104,0,0)//自定义消息-打开文件
}
2022-05-18 14:06:44 +08:00
//程序关闭
mainForm.onClose = function(hwnd,message,wParam,lParam){
::PostThreadMessage(thrdId,105,0,0)//自定义消息
thread.waitClose(thrdHandle);
//PLinHw.isConnected()///待完善
//console.print("线程已关闭")
//console.pause()
}
mainForm.btnReadF198.oncommand = function(id,event){
DiagReadDID(0xF198);
}
mainForm.btnReadF199.oncommand = function(id,event){
DiagReadDID(0xF199);
}
2022-05-14 15:57:52 +08:00
thrdHandle,thrdId = thread.create( CanThread )
mainForm.show();
return win.loopMessage();