257 lines
6.6 KiB
Plaintext
257 lines
6.6 KiB
Plaintext
import fonts.fontAwesome;
|
||
import win.ui;
|
||
/*DSG{{*/
|
||
mainForm = win.form(text="CAN_Bootloader";right=699;bottom=465;border="dialog frame";max=false)
|
||
mainForm.add(
|
||
btnFlashLeft={cls="button";text="左侧刷写";left=30;top=129;right=168;bottom=243;z=2};
|
||
btnFlashRight={cls="button";text="右侧刷写";left=181;top=131;right=319;bottom=245;z=7};
|
||
btnStopBoot={cls="button";text="停止";left=29;top=272;right=319;bottom=346;z=3};
|
||
edit={cls="edit";left=361;top=19;right=692;bottom=401;autovscroll=false;edge=1;multiline=1;vscroll=1;z=1};
|
||
plus={cls="plus";text="等待刷写";left=33;top=380;right=318;bottom=434;bgcolor=12639424;z=10};
|
||
progress={cls="progress";left=361;top=435;right=689;bottom=463;edge=1;max=100;min=0;z=4};
|
||
static={cls="static";text='\uF127';left=43;top=30;right=114;bottom=98;align="center";center=1;color=255;font=LOGFONT(h=-56;name='FontAwesome');transparent=1;z=8};
|
||
static2={cls="static";text="设备未连接,请先连接设备";left=126;top=42;right=326;bottom=91;transparent=1;z=9};
|
||
static3={cls="static";text="刷写进度";left=361;top=410;right=414;bottom=430;transparent=1;z=5};
|
||
static5={cls="static";text="V0.1_20240711";left=545;top=1;right=689;bottom=17;align="right";center=1;notify=1;transparent=1;z=6}
|
||
)
|
||
/*}}*/
|
||
|
||
import win;
|
||
import usb2canfd;
|
||
import win.timer;
|
||
|
||
var bootstate = false;//boot状态标志
|
||
|
||
Display = function(str){//显示日志
|
||
var nowtime = time();
|
||
nowtime.format="%H:%M:%S";
|
||
mainForm.edit.print(tostring(nowtime) + " " + str);
|
||
}
|
||
|
||
CANHw = usb2canfd.USB2CANHW();//尝试加载CAN dll
|
||
var ret = CANHw.LoadDll();
|
||
if(ret == 0){
|
||
Display("DLL加载成功");
|
||
}
|
||
else {
|
||
Display("DLL加载失败");
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
//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(){
|
||
Display("设备连接成功");
|
||
thrdTable.设备连接状态 = 1;
|
||
}
|
||
listener.$SendEnd = function(isSuccess){
|
||
//timer_bootcount.disable();
|
||
var usetime = time.now().diffsecond(starttime);
|
||
bootstate = false;
|
||
if(isSuccess == true){
|
||
Display("刷写成功,用时 " + usetime + " S")
|
||
mainForm.plus.text = "刷写完成";
|
||
//mainForm.plus.bgcolor = 0x32CD32;
|
||
mainForm.plus.background = 0xFF32CD32;
|
||
}
|
||
else {
|
||
Display("刷写失败");
|
||
mainForm.plus.text = "刷写失败";
|
||
//mainForm.plus.bgcolor = 0x2200E3;
|
||
mainForm.plus.background = 0xFFE30022;
|
||
}
|
||
|
||
}
|
||
import thread.table;
|
||
thrdTable = thread.table("多线程共享数据");
|
||
thrdTable.设备连接状态 = 0;
|
||
thrdTable.设备 = {};
|
||
thrdTable.test = "123"
|
||
thrdTable["文件加载状态"] = false;
|
||
thrdTable["电源电压"] = 0;
|
||
//线程函数
|
||
var CanThread = function(){
|
||
//线程函数内部要添加自已的import语句
|
||
import win;
|
||
import console;
|
||
import thread.table;
|
||
thrdTable = thread.table("多线程共享数据");
|
||
//console.log("线程开始运行")
|
||
//console.log(t_thrdTable.test);
|
||
loadcodex("\user\CanThread.aardio");//加载线程程序
|
||
|
||
//在子线程启动消息循环
|
||
win.loopMessage(FuncLoopMsg)
|
||
}
|
||
|
||
var DiagBootReq = function(id){
|
||
::PostThreadMessage(thrdId,102,id,0)//自定义消息
|
||
mainForm.plus.text = "刷写中,请勿断开电源或USB连接";
|
||
//mainForm.plus.bgcolor = 0x00CCFF;
|
||
mainForm.plus.background = 0xFF00CCFF;
|
||
}
|
||
var DiagStopReq = function(){
|
||
::PostThreadMessage(thrdId,103,0,0)//自定义消息
|
||
//mainForm.plus.text = "刷写停止";
|
||
//mainForm.plus.background = 0xFFC0DCC0
|
||
}
|
||
|
||
//import console;
|
||
//console.log("1");
|
||
mainForm.btnFlashLeft.oncommand = function(id,event){
|
||
if(thrdTable.设备连接状态 == 0){
|
||
Display("设备未连接");
|
||
return;
|
||
}
|
||
if(bootstate == true){
|
||
return ;
|
||
}
|
||
if(thrdTable["文件加载状态"] == false){
|
||
Display("烧录文件加载错误");
|
||
return;
|
||
}
|
||
bootstate = true;
|
||
mainForm.edit.text = "";
|
||
::PostThreadMessage(thrdId,106,0x720,0x620);//自定义消息
|
||
Display("开始刷写流程");
|
||
starttime = time.now();
|
||
DiagBootReq(1);//左侧
|
||
}
|
||
|
||
|
||
mainForm.onClose = function(hwnd,message,wParam,lParam){
|
||
raw.closehandle(thrdHandle)
|
||
}
|
||
|
||
|
||
|
||
autoconnect = win.timer(mainForm,100);
|
||
var autoconnect_state = 0;
|
||
var power_err_count = 0;
|
||
autoconnect.onTimer = function(){
|
||
select(autoconnect_state) {
|
||
case 0 {
|
||
if(thrdTable.设备连接状态 == 0){
|
||
//断开
|
||
mainForm.static.text='\uF127'
|
||
mainForm.static2.text = "设备未连接,请先连接设备";
|
||
mainForm.static.color=0xff0;
|
||
::PostThreadMessage(thrdId,100,0,0);
|
||
//Display("刷新");
|
||
sleep(20);
|
||
if(#thrdTable.设备 > 0){
|
||
Display(thrdTable.设备[1].name);
|
||
::PostThreadMessage(thrdId,101,1,0x00);//连接 0x80 -> CANFD
|
||
}
|
||
}
|
||
else {
|
||
|
||
autoconnect_state = 3;
|
||
power_err_count = 0;
|
||
}
|
||
}
|
||
case 1 {
|
||
::PostThreadMessage(thrdId,104,0,0);
|
||
autoconnect_state = 2;
|
||
}
|
||
case 2 {
|
||
if(thrdTable["电源电压"] < 100){
|
||
::PostThreadMessage(thrdId,105,1,0);
|
||
power_err_count++;
|
||
if(power_err_count < 10){
|
||
autoconnect_state = 1;
|
||
}
|
||
else {
|
||
mainForm.static2.text = "电源异常,请检查线路"
|
||
autoconnect_state = 4;
|
||
}
|
||
|
||
}
|
||
else {
|
||
import console;
|
||
console.log(thrdTable["电源电压"])
|
||
autoconnect_state = 3;
|
||
}
|
||
|
||
}
|
||
case 3 {
|
||
if(thrdTable["文件加载状态"] == true){
|
||
mainForm.static.color=0xff00;
|
||
mainForm.static.text='\uF0C1';
|
||
mainForm.static2.text = "设备已连接,可以开始刷写";
|
||
::PostThreadMessage(thrdId,115,1,0);//连接
|
||
autoconnect_state = 4;
|
||
}
|
||
else {
|
||
mainForm.static2.text = "文件已损坏,请重新获取烧录上位机";
|
||
autoconnect_state = 4;
|
||
mainForm.btnFlashLeft.disabled = true;
|
||
mainForm.btnFlashRight.disabled = true;
|
||
}
|
||
|
||
}
|
||
case 4 {
|
||
//...
|
||
}
|
||
else {
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
|
||
mainForm.btnFlashRight.oncommand = function(id,event){
|
||
if(thrdTable.设备连接状态 == 0){
|
||
Display("设备未连接");
|
||
return;
|
||
}
|
||
if(bootstate == true){
|
||
return ;
|
||
}
|
||
if(thrdTable["文件加载状态"] == false){
|
||
Display("烧录文件加载错误");
|
||
return;
|
||
}
|
||
bootstate = true;
|
||
mainForm.edit.text = "";
|
||
::PostThreadMessage(thrdId,106,0x710,0x610);//自定义消息
|
||
Display("开始刷写流程");
|
||
starttime = time.now();
|
||
DiagBootReq(2);//左侧
|
||
}
|
||
|
||
mainForm.btnStopBoot.oncommand = function(id,event){
|
||
DiagStopReq();
|
||
}
|
||
|
||
autoconnect.enable();
|
||
|
||
//import console;
|
||
//console.log("io.exis = ",io.exist("\res\P417_SWTL_20240709.S19"));
|
||
|
||
|
||
thrdHandle,thrdId = thread.create( CanThread );
|
||
mainForm.show();
|
||
return win.loopMessage(); |