can_bootloader/main.aardio
2024-03-04 10:03:50 +08:00

252 lines
7.5 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import win.ui;
/*DSG{{*/
mainForm = win.form(text="CAN_Bootloader";right=599;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};
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};
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};
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};
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}
)
/*}}*/
import win;
import usb2canfd;
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);
}
//遍历目录
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加载失败");
}
//初始化界面
mainForm.cbbChannel.add("通道1");
mainForm.cbbChannel.add("通道2");
mainForm.cbbChannel.selIndex = 1
//刷新按键
mainForm.btnFresh.oncommand = function(id,event){
mainForm.cbbDev.clear();//清空下拉框,防止反复刷新叠加
var hwnum = CANHw.FlashHw();//获取硬件数量
if(hwnum == 0){
mainForm.cbbDev.text = "未找到硬件"
}
else {
var allhw = CANHw.GetAvailableHW();
for(i=1;#allhw;1){
mainForm.cbbDev.add(allhw[i].name);
}
}
mainForm.cbbDev.selIndex = 1
::PostThreadMessage(thrdId,100,0,0)//自定义消息
}
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)//自定义消息
/*
var ret = CANHw.OpenDevice(mainForm.cbbDev.selIndex,mainForm.cbbChannel.selIndex - 1);//通道为0和1
if(ret == 0){
Display("连接成功");
}
else {
Display("连接失败");
}
*/
}
//CAN通讯线程
import thread.command;
var listener = thread.command();
var flag_connected=0;
listener.$Display = function(str){
Display(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;
}
}
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();
var usetime = time.now().diffsecond(starttime);
bootstate = false;
if(isSuccess == true){
Display("刷写成功,用时 " + usetime + " S")
}
}
//线程函数
var CanThread = function(){
//线程函数内部要添加自已的import语句
import win;
import console;
//console.log("线程开始运行")
loadcodex("\user\CanThread.aardio");//加载线程程序
//在子线程启动消息循环
win.loopMessage(FuncLoopMsg)
}
DiagReadDID = function(did){
::PostThreadMessage(thrdId,110,did,0)//自定义消息
}
var Diag10Req = function(num){
::PostThreadMessage(thrdId,111,num,0)//自定义消息
}
var DiagBootReq = function(){
::PostThreadMessage(thrdId,102,0,0)//自定义消息
}
var DiagStopReq = function(){
::PostThreadMessage(thrdId,103,0,0)//自定义消息
}
mainForm.btnReadSw.oncommand = function(id,event){
DiagReadDID(0xF195);
}
mainForm.btnReadHw.oncommand = function(id,event){
DiagReadDID(0xF193);
}
mainForm.btnReadF186.oncommand = function(id,event){
DiagReadDID(0xF186);
}
mainForm.btnTest.oncommand = function(id,event){
DiagStopReq();
}
mainForm.btnFlash.oncommand = function(id,event){
if(io.exist(mainForm.edFile.text) == null){
Display("请打开烧写文件");
return;
}
if(io.exist(mainForm.edFile2.text) == null){
Display("请打开flashdriver文件");
return;
}
if(flag_connected == 0){
Display("请连接设备");
return;
}
if(bootstate == true){
return ;
}
bootstate = true;
mainForm.edit.text = "";
Display("开始刷写流程");
starttime = time.now();
//timer_bootcount.enable();
boot_count = 0;
DiagBootReq();
}
mainForm.btnOpen.oncommand = function(id,event){
::PostThreadMessage(thrdId,104,1,0)//自定义消息-打开文件
}
//程序关闭
mainForm.onClose = function(hwnd,message,wParam,lParam){
if(thrdId != null){
::PostThreadMessage(thrdId,105,0,0)//自定义消息
thread.waitClose(thrdHandle);
}
//PLinHw.isConnected()///待完善
//console.print("线程已关闭")
//console.pause()
}
mainForm.btnReadF198.oncommand = function(id,event){
DiagReadDID(0x1701);
}
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();
}
thrdHandle,thrdId = thread.create( CanThread )
mainForm.show();
return win.loopMessage();