commit ac0e51a55265617caf2486c0e4847b1e373a9ba8 Author: sunbeam Date: Tue Mar 14 15:49:33 2023 +0800 初版2.0 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba065fd --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.build +dist +/config.ini +/libusb-1.0.dll +/log.txt +/USB2XXX.dll diff --git a/CANThread/CAN_Msg.aardio b/CANThread/CAN_Msg.aardio new file mode 100644 index 0000000..023168a --- /dev/null +++ b/CANThread/CAN_Msg.aardio @@ -0,0 +1,26 @@ +import thread.table; +var thrdTable_TxTable = thread.table("发送数据") +var thrdTable_RxTable = thread.table("接收数据") +var msg_counter_arr = {} + +TxTask = function(){//10ms task + for(k,v in thrdTable_TxTable.each()){ + //console.log("k = " ++ k ++ "; v.id = " ++ v.id); + if(msg_counter_arr[v.id] != null){ + msg_counter_arr[v.id] += 16; + if(msg_counter_arr[v.id] > v.period){ + msg_counter_arr[v.id] = 0; + CANHw.SendMsg(v.id,v.data); + } + } + else { + msg_counter_arr[v.id] = 0; + } + + } +} + +RxPro = function(id,data){ + thrdTable_RxTable.set(id,data); +} + diff --git a/CANThread/CanThread.aardio b/CANThread/CanThread.aardio new file mode 100644 index 0000000..d1296a2 --- /dev/null +++ b/CANThread/CanThread.aardio @@ -0,0 +1,256 @@ + +//此文件内容都在CAN线程内 +import usb2canfd; +import thread.command; +import win.timer; +import thread.table; +var thrdTable_CANHW = thread.table("CAN设备") +//初始化CAN句柄对象 +CANHw = usb2canfd.USB2CANHW(); +CANHw.LoadDll(); + +DiagReqID = 0x720;//0x18dadff1; +DiagRespID = 0x620;//0x18daf1df; +DiagGloableID = 0x7DF;//0x18DB33F1; +stopflag = 0; +FuncSetID = function(req,rsp){ + DiagReqID = req; + DiagRespID = rsp; +} + +//注册一个消息钩子函数 +FuncLoopMsg = function(msg){ + select(msg.message) { + case 100 {//刷新硬件 + FuncFreshHw(); + } + case 101 {//连接硬件 + FuncConnect(msg.wParam,msg.lParam); + } + case 102 {//更改ID + FuncSetID(msg.wParam,msg.lParam); + } + case 110 {//readDID + FuncReadDID(msg.wParam); + } + case 111 { + FuncReq10(false,msg.wParam); + } + case 112 { + FuncReq28(msg.wParam); + } + case 113 { + FuncReq85(msg.wParam); + } + case 114 { + FuncReq27(msg.wParam); + } + case 115 { + FuncReq3E(); + } + case 116 { + FuncDIDWriteValue2B(msg.wParam,msg.lParam); + } + case 117 { + FuncDIDWriteValue1B(msg.wParam,msg.lParam); + } + else { + + } + } +} + + + + +FuncFreshHw = function(){ + var hwnum = CANHw.FlashHw(); + thrdTable_CANHW.clear(); + if(hwnum == 0){ + } + else { + FuncDisplay("找到硬件") + var ret = CANHw.GetAvailableHW(); + for(k,v in ret){ + //console.log(v.name); + thrdTable_CANHW.push(v.name); + } + + } +} + +FuncConnect = function(dev,chn){ + var canfd = (chn&0x80)==0x80?true:false; + var ret = CANHw.OpenDevice(dev,chn&0x7f,canfd); + if(ret == 0){ + FuncDisplay("连接成功"); + //console.log("连接成功"); + CANHw.GetAvailableHW(); + thread.command.$Connected(); + } + else { + FuncDisplay("连接失败"); + //console.log("连接失败"); + } +} + +FuncDisplay = function(str){ + thread.command.$Display(str);//"线程" + +} + + +loadcodex("\CANThread\Diag10code.aardio"); +loadcodex("\CANThread\Diag11code.aardio"); +loadcodex("\CANThread\Diag22code.aardio"); +loadcodex("\CANThread\Diag27code.aardio"); +loadcodex("\CANThread\Diag2Ecode.aardio"); +loadcodex("\CANThread\Diag28code.aardio"); +loadcodex("\CANThread\Diag7Fcode.aardio"); +loadcodex("\CANThread\Diag85code.aardio"); + + +FuncReq3E = function(){ + var data = {0x02,0x3E,0x80,0, 0,0,0,0}; + CANHw.SendMsg(DiagReqID,data); +} + + +RespState = 0; + +FuncDiagPro = function(diagmsg){ + //console.log("发送数据"); + thread.command.$LastDiagResp(diagmsg);//发送诊断数据 + select(diagmsg.sid) { + case 0x50 { + FuncDiag10Pro(table.slice(diagmsg.data,1,diagmsg.len)) + } + case 0x62 { + FuncDiag22Pro(table.slice(diagmsg.data,1,diagmsg.len)) + } + case 0x67 { + FuncDiag27Pro(table.slice(diagmsg.data,1,diagmsg.len)) + } + case 0x74 { + FuncDiag34Pro(table.slice(diagmsg.data,1,diagmsg.len)) + } + case 0x71 { + FuncDiag31Pro(table.slice(diagmsg.data,1,diagmsg.len)) + } + case 0x76 { + FuncDiag36Pro(table.slice(diagmsg.data,1,diagmsg.len)) + } + case 0x68 { + FuncDiag28Pro(table.slice(diagmsg.data,1,diagmsg.len)) + } + case 0xC5 { + FuncDiag85Pro(table.slice(diagmsg.data,1,diagmsg.len)) + } + case 0x7F { + FuncDiag7FPro(table.slice(diagmsg.data,1,diagmsg.len)) + } + case 0x6E { + FuncDiag2EPro(table.slice(diagmsg.data,1,diagmsg.len)) + } + else { + } + } + RespState = diagmsg.sid; +} + + + + + + +var PackNext = 0x21; +var Packdata = {}; +var PackID = 0; +var FuncSendPackage = function(){ + while(#Packdata > 0) + { + sleep(0.3); + var data = {PackNext,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC}; + var max = #Packdata > 7 ? 7 : #Packdata; + for(i=1;max;1){ + data[i+1] = table.remove(Packdata); + } + sleep(2); + CANHw.SendMsg(PackID,data); + + PackNext += 1; + if(PackNext > 0x2f){ + PackNext = 0x20; + } + } + +} +FuncPushPackage = function(ID,data){ + PackNext = 0x21; + Packdata = data; + PackID = ID; +} +diagresp = {}; +RxTask = function(){ + ret = CANHw.GetMsg(); + //console.log("报文=" ++ #ret); + for(i=1;#ret;1){ + //console.log("id = " + tostring(ret[i].id)) + if(ret[i].id & 0x7FFFFFFF == DiagRespID){ + if(ret[i].data[1] == 0x10){//首帧 + var data = {0x30,0x00,0x14,0x00,0,0,0,0}; + CANHw.SendMsg(DiagReqID,data); + diagresp["sid"] = ret[i].data[3]; + diagresp["len"] = ret[i].data[2]-1; + diagresp["data"] = {}; + diagresp["next"] = 0x21; + table.append(diagresp["data"],table.slice(ret[i].data,4)); + } + elseif(ret[i].data[1] <= 0x07){//单帧 + //console.dumpJson() + diagresp["sid"] = ret[i].data[2]; + diagresp["len"] = ret[i].data[1]-1; + diagresp["data"] = table.slice(ret[i].data,3); + FuncDiagPro(diagresp); + } + elseif(ret[i].data[1] >= 0x21 && ret[i].data[1] <= 0x2f){ + if(ret[i].data[1] == diagresp["next"]){//多帧 + diagresp["next"] += 1; + if(diagresp["next"] >= 0x2F){ + diagresp["next"] = 0x20; + } + table.append(diagresp["data"],table.slice(ret[i].data,2)); + if(#diagresp["data"] >= diagresp["len"]){ + FuncDiagPro(diagresp); + } + } + } + elseif(ret[i].data[1] == 0x30){// + FuncSendPackage(); + } + } + else { + //console.varDump(ret[i].id); + //显示报文 + } + RxPro(ret[i].id,ret[i].data); + //console.varDump(ret[i].id); + } +} + + +loadcodex("\CANThread\CAN_Msg.aardio"); +CT_timer = win.timer(,10); + +CT_timer.onTimer = function(){ + if(CANHw.isConnected() == false){ + return; + } + + RxTask(); + //console.log("发送报文"); + TxTask(); +} +CT_timer.enable(); +FuncDisplay("正在运行"); + + diff --git a/CANThread/CanThreadStart.aardio b/CANThread/CanThreadStart.aardio new file mode 100644 index 0000000..0447236 --- /dev/null +++ b/CANThread/CanThreadStart.aardio @@ -0,0 +1,119 @@ +import console; +//console.log("CANTHREAD开始") + +import thread.table; +var thrdTable_CANHW = thread.table("CAN设备",true/*清空*/) +var thrdTable_RxTable = thread.table("接收数据",true/*清空*/) +var thrdTable_TxTable = thread.table("发送数据",true/*清空*/) + +CT_Display = function(str){//显示日志 + if(Display!=null){ + Display(str); + } +} +CT_Fresh = function(){ + ::PostThreadMessage(thrdId,100,0,0)//自定义消息 +} +CT_Connect = function(dev,chn,iscanfd){ + var canfd_check = 0x80;//iscanfd?0x80:0x00;//兼容UTA401 + ::PostThreadMessage(thrdId,101,dev,(chn - 1)|canfd_check);//自定义消息 +} +CT_GetCANHw = function(){ + var canhw = {}; + for( k,v in thrdTable_CANHW.each() ){ + table.push(canhw,v); + } + return canhw; +} + +CT_GetRxMsg = function(id){ + var ret = thrdTable_RxTable.get(id); + return ret; +} + +CT_UpdateCANTxMsg = function(id,period,data){ + var msg = {}; + msg.id = id; + msg.period = period; + msg.data = data; + thrdTable_TxTable.set(id,msg); +} + +CT_Diag10 = function(sid){ + ::PostThreadMessage(thrdId,111,sid,0);//自定义消息,111为10服务,参考CanThread文件FuncLoopMsg函数 +} + +CT_Diag22 = function(did){ + ::PostThreadMessage(thrdId,110,did,0);//参考CanThread文件FuncLoopMsg函数 +} +CT_Diag2EVal2B = function(did,data){ + ::PostThreadMessage(thrdId,116,did,data);//参考CanThread文件FuncLoopMsg函数 +} +CT_Diag2EVal1B = function(did,data){ + ::PostThreadMessage(thrdId,117,did,data);//参考CanThread文件FuncLoopMsg函数 +} +CT_Diag3E = function(){ + ::PostThreadMessage(thrdId,115,0,0);//参考CanThread文件FuncLoopMsg函数 +} + +CT_SetDiagID = function(req,rsp){ + ::PostThreadMessage(thrdId,102,req,rsp);//参考CanThread文件FuncLoopMsg函数 +} +LastDiagRespData = {}; +CT_GetLastDiagResp = function(){ + + return LastDiagRespData; +} + + + +CT_UpdateCANTxMsg(0x30,200,{0,0,0x00,0, 0,0x08,0,0}); + +//CAN通讯线程 +import thread.command; +var listener = thread.command(); +var flag_connected=0; +listener.$Display = function(str){ + CT_Display(str); +} + +listener.$Connected = function(devs){ + flag_connected = 1; + CAN_Connected_callback(); +} +listener.$LastDiagResp = function(resp){ + //console.log("接收数据"); + LastDiagRespData = resp; + //console.dumpJson(LastDiagRespData); +} + +//线程函数 +var CanThreadFunc = function(){ + //线程函数内部要添加自已的import语句 + import win; + import console; + //console.log("线程开始运行") + loadcodex("\CANThread\CanThread.aardio");//加载线程程序 + //在子线程启动消息循环 + win.loopMessage(FuncLoopMsg) +} + + +thrdHandle,thrdId = thread.create( CanThreadFunc ); + + + + + + + + + + + + + + + + + diff --git a/CANThread/Diag10code.aardio b/CANThread/Diag10code.aardio new file mode 100644 index 0000000..a266389 --- /dev/null +++ b/CANThread/Diag10code.aardio @@ -0,0 +1,33 @@ + +//发送 +FuncReq10 = function(Addr,num){ + if(num >= 1 && num <= 3){ + var data = {0x02,0x10,num,0,0,0,0,0}; + if(Addr == true){ + CANHw.SendMsg(DiagGloableID,data); + } + else { + CANHw.SendMsg(DiagReqID,data); + } + + + } + +} +//接收 +FuncDiag10Pro = function(data){ + //console.dumpJson(data); + select(data[1]) { + case 1 { + FuncDisplay("进入默认会话成功") + } + case 2 { + FuncDisplay("进入编程会话成功") + } + case 3 { + FuncDisplay("进入扩展会话成功") + } + else { + } + } +} diff --git a/CANThread/Diag11code.aardio b/CANThread/Diag11code.aardio new file mode 100644 index 0000000..6804389 --- /dev/null +++ b/CANThread/Diag11code.aardio @@ -0,0 +1,9 @@ +//发送 +FuncReq11 = function(num){ + var txdata = {0x2,0x11,num,0x00,0x00,0x00,0x00,0x00}; + CANHw.SendMsg(DiagReqID,txdata); +} +//接收 +FuncDiag11Pro = function(data){ + FuncDisplay("复位成功") +} \ No newline at end of file diff --git a/CANThread/Diag22code.aardio b/CANThread/Diag22code.aardio new file mode 100644 index 0000000..bb47443 --- /dev/null +++ b/CANThread/Diag22code.aardio @@ -0,0 +1,80 @@ +var diag22state = 0; +//发送 +FuncReadDID = function(did){ + if(CANHw.isConnected() == false){ + return; + } + var data = {0x03,0x22,did>>8,did&0xff,0,0,0,0}; + var ret = CANHw.SendMsg(DiagReqID,data); + diag22state = 1; + //console.log("did = " + tostring(did,16)); + //console.log("ret = " + ret); + //FuncDisplay("did = " + tostring(did,16)); +} + +//接收 +FuncDiag22Pro = function(data){ + //console.log("诊断22服务") + if(#data < 3){ + return; + } + var did = (data[1]<<8) + data[2]; + select(did) { + case 0xF186 { + FuncDisplay("当前会话: " + 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 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"); + FuncDisplay(string.pack(table.slice(data,3))); + } + case 0xF199 { + FuncDisplay("installation_date"); + FuncDisplay(string.format("%02x%02X%02x%02x",data[3],data[4],data[5],data[6])); + } + case 0xF187 { + FuncDisplay("车辆备用零部件编号"); + FuncDisplay(string.pack(table.slice(data,3))); + + } + case 0xF18A { + FuncDisplay("系统供应商公司名称代码"); + FuncDisplay(string.pack(table.slice(data,3))); + + } + case 0xF197 { + FuncDisplay("ECU系统名称"); + FuncDisplay(string.pack(table.slice(data,3))); + } + case 0xF190 { + FuncDisplay("VIN码"); + FuncDisplay(string.pack(table.slice(data,3))); + } + else { + FuncDisplay(TableToStr(data)) + } + + } + +} \ No newline at end of file diff --git a/CANThread/Diag27code.aardio b/CANThread/Diag27code.aardio new file mode 100644 index 0000000..cfdd80a --- /dev/null +++ b/CANThread/Diag27code.aardio @@ -0,0 +1,77 @@ + +var SecuretySeed = {0,0,0,0,}; +var SecuretyKey = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; +var lockstate = 0; +//发送 +FuncReq27 = function(num,key){ + if(num >= 1 && num <= 0x1C){ + if(key == null){ + var data = {0x02,0x27,num,0,0,0,0,0}; + CANHw.SendMsg(DiagReqID,data); + } + else { + if(#key > 4){ + var data = {0x10,0X12,0x27,num,key[1],key[2],key[3],key[4]}; + CANHw.SendMsg(DiagReqID,data); + + FuncPushPackage(DiagReqID,table.slice(key,5)); + } + else { + var data = {0x06,0x27,num,key[1],key[2],key[3],key[4],0x00}; + CANHw.SendMsg(DiagReqID,data); + } + + } + } + else { + FuncDisplay("27长度错误"); + } + +} + +loadcodex("\CANThread\GeelySecurety.aardio"); +//接收 +FuncDiag27Pro = function(data){ + //console.dumpJson(data); + select(data[1]) { + case 1,3,5,7,9,11,0x11 { + var str = "收到种子"; + for(i=1;4;1){ + SecuretySeed[i] = data[i+1]; + str += " " + tostring(SecuretySeed[i],16); + lockstate = 1; + } + FuncDisplay(str) + SecuretyKey = securetyKeyCalc(SecuretySeed,data[1]); + if(#SecuretyKey >= 4){ + FuncReq27(data[1]+1,SecuretyKey); + var str = "计算密钥-"; + for(i=1;4;1){ + str += " " + tostring(SecuretyKey[i],16); + } + FuncDisplay(str); + } + else { + FuncDisplay("计算失败"); + } + + } + case 2,4,6,8,10,12,0x12 { + FuncDisplay("解锁成功"); + lockstate = 2; + } + else { + FuncDisplay("27服务未知子服务"); + } + } +} + +FuncDiag27GetState = function(){ + if(lockstate == 2){ + return 0; + } + else { + return 1; + } + +} diff --git a/CANThread/Diag28code.aardio b/CANThread/Diag28code.aardio new file mode 100644 index 0000000..a5a6d54 --- /dev/null +++ b/CANThread/Diag28code.aardio @@ -0,0 +1,27 @@ + +//发送 +FuncReq28 = function(num1,num2){ + var txdata = {0x03,0x28,num1,num2,0,0,0,0}; + var ret = CANHw.SendMsg(DiagGloableID,txdata); + +} +//接收 +FuncDiag28Pro = function(data){ + //console.dumpJson(data); + select(data[1]) { + case 0 { + FuncDisplay("使能接收发送") + } + case 1 { + FuncDisplay("使能接收,禁止发送") + } + case 2 { + FuncDisplay("禁止接收,使能发送") + } + case 3 { + FuncDisplay("禁止接收发送") + } + else { + } + } +} \ No newline at end of file diff --git a/CANThread/Diag2Ecode.aardio b/CANThread/Diag2Ecode.aardio new file mode 100644 index 0000000..ca77e41 --- /dev/null +++ b/CANThread/Diag2Ecode.aardio @@ -0,0 +1,59 @@ + +var diag22state = 0; +//发送 +FuncDIDWriteStr = function(did,str){ + var data = {} + for(i=1;string.len(str);1){ + data[i] = string.unpack(str,i); + } + FuncReq2E(did,data) + return data; +} +FuncDIDWriteValue2B = function(did,data){ + if(CANHw.isConnected() == false){ + return; + } + var txdata = {0x05,0x2E,did>>8,did&0xff,data>>8,data&0xff,0,0}; + CANHw.SendMsg(DiagReqID,txdata); +} +FuncDIDWriteValue1B = function(did,data){ + if(CANHw.isConnected() == false){ + return; + } + var txdata = {0x04,0x2E,did>>8,did&0xff,data&0xff,0,0,0}; + CANHw.SendMsg(DiagReqID,txdata); +} + + +//FuncDIDWriteStr(0xf198,"0123456789abcdef1234"); + +FuncReq2E = function(did,data){ + if(CANHw.isConnected() == false){ + return; + } + //console.dumpTable(data); + if(#data > 4){ + //多帧 + 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)); + } + else { + var txdata = {3+#data,0x2E,did>>8,did&0xff,0,0,0,0}; + for(i=1;#data;1){ + txdata[4+i] = data[i]; + } + CANHw.SendMsg(DiagReqID,txdata); + + } + +} + + +//接收 +FuncDiag2EPro = function(data){ + var did = (data[1]<<8) + data[2]; + FuncDisplay("写入" + tostring(did,16) + "成功"); + +} \ No newline at end of file diff --git a/CANThread/Diag7Fcode.aardio b/CANThread/Diag7Fcode.aardio new file mode 100644 index 0000000..d66878c --- /dev/null +++ b/CANThread/Diag7Fcode.aardio @@ -0,0 +1,46 @@ + +var errSID=0,errNRC=0; +FuncGetNrc = function(){ + return errSID,errNRC; +} +FuncClrNrc = function(){ + //return errSID,errNRC; + errSID = 0; + errNRC = 0; +} +TableToStr = function(data){ + if(data == null){ + return " "; + } + if(#data == 0){ + return " "; + } + var str = "data:" + for(i=1;#data;1){ + str += " " + str += tostring(data[i],16); + } + return str; + +} + +//接收 +FuncDiag7FPro = function(data){ + //console.dumpJson(data); + errSID = data[1]; + errNRC = data[2]; + select(errNRC) { + case 0x78 { + if(errSID != 0x36){ + FuncDisplay("服务正忙") + } + + } + else { + FuncDisplay("SID:" + tostring(errSID,16)) + FuncDisplay("错误 - NRC:" + tostring(errNRC,16)) + FuncDisplay(TableToStr(data)); + } + } + +} \ No newline at end of file diff --git a/CANThread/Diag85code.aardio b/CANThread/Diag85code.aardio new file mode 100644 index 0000000..73f156b --- /dev/null +++ b/CANThread/Diag85code.aardio @@ -0,0 +1,27 @@ + +//发送 +FuncReq85 = function(num){ + if(num >= 1 && num <= 3){ + var data = {0x02,0x85,num,0,0,0,0,0}; + CANHw.SendMsg(DiagGloableID,data); + } + +} +//接收 +FuncDiag85Pro = function(data){ + //console.dumpJson(data); + select(data[1]) { + case 0x01 { + FuncDisplay("DTC开启") + } + case 0x02 { + FuncDisplay("DTC禁能") + } + case 3 { + FuncDisplay("DTC - 01") + } + else { + FuncDisplay("DTC - TDB") + } + } +} \ No newline at end of file diff --git a/CANThread/GeelySecurety.aardio b/CANThread/GeelySecurety.aardio new file mode 100644 index 0000000..4550168 --- /dev/null +++ b/CANThread/GeelySecurety.aardio @@ -0,0 +1,85 @@ + +xorArray = {0xAA,0x50,0x43,0x52} +securetyKeyCalc = function(pucSeed,ucSecurityLevel){ + //SeedSec_t cal,key,seed; + 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]; + seed[4]=pucSeed[1]; + select(ucSecurityLevel) { + case 0x01 { + cal[1] = seed[1]^xorArray[1]; + cal[2] = seed[2]^xorArray[2]; + cal[3] = seed[3]^xorArray[3]; + cal[4] = seed[4]^xorArray[4]; + /* + key[3] = ((cal[0]&0x0F)<<4)|( cal[0]&0xF0); + key[2] = ((cal[2]&0x0F)<<4)|((cal[3]&0xF0)>>4); + key[1] = (cal[2]&0xF0)|((cal[1]&0xF0)>>4); + key[0] = ((cal[3]&0x0F)<<4)|( cal[1]&0x0F); + */ + key[4] = ((cal[1]&0x0F)<<4)|( cal[1]&0xF0); + key[3] = ((cal[3]&0x0F)<<4)|((cal[4]&0xF0)>>4); + key[2] = (cal[3]&0xF0)|((cal[2]&0xF0)>>4); + key[1] = ((cal[4]&0x0F)<<4)|( cal[2]&0x0F); + } + case 0x03 { + /* + cal.byte[0] = ((seed.byte[0]&0xF8)>>3)^xorArray[0]; + cal.byte[1] = ((seed.byte[1]&0xF8)>>3)^xorArray[1]; + cal.byte[2] = ((seed.byte[2]&0xF8)>>3)^xorArray[2]; + cal.byte[3] = ((seed.byte[3]&0xF8)>>3)^xorArray[3]; + + key.byte[0] = ((cal.byte[3]&0x07)<<5)|(( cal.byte[0]&0xF8)>>3); + key.byte[1] = ((cal.byte[0]&0x07)<<5)|(cal.byte[2]&0x1F); + key.byte[2] = (cal.byte[1]&0xF8)|((cal.byte[3]&0xE0)>>5); + key.byte[3] = (cal.byte[2]&0xF8)|( cal.byte[1]&0x07); + */ + cal[1] = ((seed[1]&0xF8)>>3)^xorArray[1]; + cal[2] = ((seed[2]&0xF8)>>3)^xorArray[2]; + 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[3] = (cal[2]&0xF8)|((cal[4]&0xE0)>>5); + key[4] = (cal[3]&0xF8)|( cal[2]&0x07); + } + case 0x11 { + /* + cal.byte[0] = seed.byte[0]^xorArray[0]; + cal.byte[1] = seed.byte[1]^xorArray[1]; + cal.byte[2] = seed.byte[2]^xorArray[2]; + cal.byte[3] = seed.byte[3]^xorArray[3]; + + key.byte[3] = ((cal.byte[1]&0x03)<<6)|(( cal.byte[0]&0xFC)>>2); + key.byte[2] = ((cal.byte[0]&0x03)<<6)|(cal.byte[3]&0x3F); + key.byte[1] = (cal.byte[3]&0xFC)|((cal.byte[2]&0xC0)>>6); + key.byte[0] = (cal.byte[2]&0xFC)|(cal.byte[1]&0x03); + */ + cal[1] = seed[1]^xorArray[1]; + cal[2] = seed[2]^xorArray[2]; + cal[3] = seed[3]^xorArray[3]; + cal[4] = seed[4]^xorArray[4]; + + key[4] = ((cal[2]&0x03)<<6)|(( cal[1]&0xFC)>>2); + key[3] = ((cal[1]&0x03)<<6)|(cal[4]&0x3F); + key[2] = (cal[4]&0xFC)|((cal[3]&0xC0)>>6); + key[1] = (cal[3]&0xFC)|(cal[2]&0x03); + } + else { + } + } + + pucKey[1]=key[4]; + pucKey[2]=key[3]; + pucKey[3]=key[2]; + pucKey[4]=key[1]; + + return pucKey; +} diff --git a/default.aproj b/default.aproj new file mode 100644 index 0000000..d3f07cc --- /dev/null +++ b/default.aproj @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dlg/diagnostic.aardio b/dlg/diagnostic.aardio new file mode 100644 index 0000000..f3f2953 --- /dev/null +++ b/dlg/diagnostic.aardio @@ -0,0 +1,189 @@ +import win.ui; +/*DSG{{*/ +var winform = win.form(text="aardio form";right=984;bottom=599;bgcolor=16777215) +winform.add( +btn1001={cls="button";text="默认会话";left=28;top=58;right=115;bottom=88;z=3}; +btn1003={cls="button";text="扩展会话";left=126;top=58;right=213;bottom=88;z=4}; +btnReadF187={cls="button";text="ECU零件号";left=234;top=183;right=321;bottom=213;z=19}; +btnReadF18A={cls="button";text="供应商ID";left=37;top=183;right=124;bottom=213;z=20}; +btnReadF190={cls="button";text="VIN码";left=135;top=183;right=222;bottom=213;z=21}; +btnReadF193={cls="button";text="硬件版本";left=37;top=226;right=124;bottom=256;z=23}; +btnReadF195={cls="button";text="软件版本";left=135;top=226;right=224;bottom=256;z=24}; +btnReadF198={cls="button";text="维修店代码";left=135;top=141;right=222;bottom=171;z=22}; +btnReadF199={cls="button";text="刷写日期";left=37;top=141;right=124;bottom=171;z=18}; +btnReadPressTh={cls="button";text="读取";left=381;top=130;right=468;bottom=160;z=10}; +btnWrite9001={cls="button";text="触发震动";left=45;top=332;right=284;bottom=362;z=25}; +btnWrite9002={cls="button";text="写入参考电压";left=184;top=370;right=284;bottom=400;z=28}; +btnWrite9003={cls="button";text="写入增益";left=183;top=408;right=284;bottom=438;z=29}; +btnWritePressTh={cls="button";text="写入";left=479;top=130;right=566;bottom=160;z=11}; +cb3E={cls="checkbox";text="3E保持";left=232;top=64;right=306;bottom=86;bgcolor=16777215;z=5}; +cbbDacRef={cls="combobox";left=45;top=370;right=175;bottom=396;edge=1;font=LOGFONT(h=-18);items={};mode="dropdown";z=26}; +cbbKeyName={cls="combobox";left=382;top=93;right=489;bottom=119;edge=1;font=LOGFONT(h=-18);items={};mode="dropdown";z=8}; +cbbMotorGain={cls="combobox";left=45;top=408;right=175;bottom=434;edge=1;font=LOGFONT(h=-18);items={};mode="dropdown";z=27}; +edLog={cls="edit";left=649;top=12;right=970;bottom=578;edge=1;font=LOGFONT(h=-18);multiline=1;z=12}; +edPressTh={cls="edit";text="500";left=495;top=93;right=569;bottom=123;align="center";edge=1;font=LOGFONT(h=-18);multiline=1;num=1;z=9}; +groupbox={cls="groupbox";text="标定";left=362;top=9;right=590;bottom=182;edge=1;z=13}; +groupbox2={cls="groupbox";text="读取DID";left=22;top=109;right=331;bottom=275;edge=1;z=2}; +groupbox3={cls="groupbox";text="震动";left=22;top=293;right=331;bottom=459;edge=1;z=1}; +rbLeft={cls="radiobutton";text="左侧";left=61;top=15;right=115;bottom=35;bgcolor=16777215;checked=1;group=1;z=6}; +rbPressTh={cls="radiobutton";text="压力";left=405;top=31;right=471;bottom=57;bgcolor=16777215;checked=1;group=1;z=16}; +rbRight={cls="radiobutton";text="右侧";left=141;top=15;right=195;bottom=35;bgcolor=16777215;z=7}; +rbTouchTh={cls="radiobutton";text="触摸";left=494;top=31;right=560;bottom=57;bgcolor=16777215;z=17}; +static={cls="static";text="按键";left=403;top=63;right=458;bottom=92;font=LOGFONT(h=-18);transparent=1;z=14}; +static2={cls="static";text="阈值";left=504;top=62;right=559;bottom=91;font=LOGFONT(h=-18);notify=1;transparent=1;z=15} +) +/*}}*/ + +LSW_KeyArr = {"恢复","巡航","取消","上","下","左","右","OK"}; +RSW_KeyArr = {"语音","菜单","返回","上","下","左","右","OK"}; +Motor_refArr = {"0x0 1V0","0x1 1V1","0x2 1V2","0x3 1V25","0x4 2V0","0x5 2V2","0x6 2V4","0x7 2V5"}; +Motor_gainArr = {"Level0","Level1","Level2","Level3"} +winform.cbbKeyName.clear(); +for(k,v in LSW_KeyArr){ + winform.cbbKeyName.add(v); +} +winform.cbbKeyName.selIndex = 1; + +winform.cbbDacRef.clear(); +for(k,v in Motor_refArr){ + winform.cbbDacRef.add(v); +} +winform.cbbDacRef.selIndex = 1; + +winform.cbbMotorGain.clear(); +for(k,v in Motor_gainArr){ + winform.cbbMotorGain.add(v); +} +winform.cbbMotorGain.selIndex = 1; + +import win.timer; + +Diag3E_Timer = win.timer(winform,4000); +Diag3E_Timer.onTimer = function(){ + CT_Diag3E(); +} + +Display = function(str){ + var nowtime = time(); + nowtime.format="%H:%M:%S"; + winform.edLog.print(tostring(nowtime) + " " + str); +} + + + +winform.rbLeft.oncommand = function(id,event){ + CT_SetDiagID(0x720,0x620); + winform.cbbKeyName.clear(); + for(k,v in LSW_KeyArr){ + winform.cbbKeyName.add(v); + } + winform.cbbKeyName.selIndex = 1; +} + +winform.rbRight.oncommand = function(id,event){ + CT_SetDiagID(0x710,0x610); + winform.cbbKeyName.clear(); + for(k,v in RSW_KeyArr){ + winform.cbbKeyName.add(v); + } + winform.cbbKeyName.selIndex = 1; +} + +winform.btn1001.oncommand = function(id,event){ + CT_Diag10(0x01); +} +winform.btn1003.oncommand = function(id,event){ + CT_Diag10(0x03); +} + +winform.cb3E.oncommand = function(id,event){ + if(winform.cb3E.checked == true){ + Diag3E_Timer.enable(); + } + else { + Diag3E_Timer.disable(); + } + +} + +GetReadThResp = function(did){ + var ret = CT_GetLastDiagResp(); + if(ret == null){ + return 0; + } + if(ret.sid == 0x62 && (#ret.data >= 4)){ + var getdid = (ret.data[1]<<8) + ret.data[2]; + if(getdid == did){ + var val = (ret.data[3]<<8) + ret.data[4]; + return val; + } + } + return 0; +} + + +winform.btnReadPressTh.oncommand = function(id,event){ + var didbase = winform.rbPressTh.checked?0x9020:0x9010; + var did = didbase + (winform.cbbKeyName.selIndex - 1); + CT_Diag22(did); + win.delay(100,1); + var ret = GetReadThResp(did); + if(ret != 0){ + winform.edPressTh.text = ret; + } +} + +winform.btnWritePressTh.oncommand = function(id,event){ + var didbase = winform.rbPressTh.checked?0x9020:0x9010; + var val = tonumber(winform.edPressTh.text); + var did = didbase + (winform.cbbKeyName.selIndex - 1); + CT_Diag2EVal2B(did,val); +} + +winform.btnWrite9001.oncommand = function(id,event){ + CT_Diag2EVal1B(0x9001,0x01); +} + +winform.btnWrite9002.oncommand = function(id,event){ + var val = winform.cbbDacRef.selIndex - 1; + CT_Diag2EVal1B(0x9002,val); +} + +winform.btnWrite9003.oncommand = function(id,event){ + var val = winform.cbbMotorGain.selIndex - 1; + CT_Diag2EVal1B(0x9003,val); +} + +winform.btnReadF199.oncommand = function(id,event){ + CT_Diag22(0xF199); +} + +winform.btnReadF198.oncommand = function(id,event){ + CT_Diag22(0xF198); +} + +winform.btnReadF18A.oncommand = function(id,event){ + CT_Diag22(0xF18A); +} + +winform.btnReadF190.oncommand = function(id,event){ + CT_Diag22(0xF190); +} + +winform.btnReadF187.oncommand = function(id,event){ + CT_Diag22(0xF187); +} + +winform.btnReadF193.oncommand = function(id,event){ + CT_Diag22(0xF193); +} + +winform.btnReadF195.oncommand = function(id,event){ + CT_Diag22(0xF195); +} + +winform.group(); + +winform.show(); +win.loopMessage(); +return winform; \ No newline at end of file diff --git a/dlg/msg.aardio b/dlg/msg.aardio new file mode 100644 index 0000000..74cbd09 --- /dev/null +++ b/dlg/msg.aardio @@ -0,0 +1,314 @@ +import console; + +press_signal = {0,0}; +press_baseline = {0,0}; +press_signal_data = {0,0}; +press_baseline_data = {0,0}; + +lkey_signal = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; +rkey_signal = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; +lkey_baseline = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; +rkey_baseline = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + +lkey_signal_data = {}; +rkey_signal_data = {}; +lkey_baseline_data = {}; +rkey_baseline_data = {}; + +for(i=1;16;1){ + lkey_signal_data[i] = {}; + rkey_signal_data[i] = {}; + lkey_baseline_data[i] = {}; + rkey_baseline_data[i] = {}; +} + + +keyL1 = 0; +keyL2 = 0; +keyL3 = 0; +keyLup = 0; +keyLdown = 0; +keyLleft = 0; +keyLright = 0; +keyLok = 0; + +sldLlr = 0; +sldLud = 0; + +keyR1 = 0; +keyR2 = 0; +keyR3 = 0; +keyRup = 0; +keyRdown = 0; +keyRleft = 0; +keyRright = 0; +keyRok = 0; + +sldRvol = 0; +sldRud = 0; +sldRlr = 0; + +plx = 0; +ply = 0; +pls = 0; +prx = 0; +pry = 0; +prs = 0; +getbitdata = function(byte,startbit,len){ + return ((byte>>startbit) & ((1< 0){ + for(i=1;#ret;1){ + setting.cbbDev.add(ret[i]); + } + setting.btnConnect.disabled = 0; + } + else { + setting.cbbDev.add("未找到硬件"); + setting.btnConnect.disabled = 1; + } + setting.cbbDev.selIndex = 1 +} + +setting.btnConnect.oncommand = function(id,event){ + CT_Connect(setting.cbbDev.selIndex,1,true); +} + +CAN_Connected_callback = function(){ + setting.cbbDev.disabled = 1 + setting.btnFresh.disabled = 1; + setting.btnConnect.disabled = 1; + MsgProTimer.enable(); +} + +setting.show(); +win.loopMessage(); +return setting; \ No newline at end of file diff --git a/dlg/show.aardio b/dlg/show.aardio new file mode 100644 index 0000000..355e533 --- /dev/null +++ b/dlg/show.aardio @@ -0,0 +1,218 @@ +import fonts.fontAwesome; +import win.ui; +import console; +/*DSG{{*/ +show = win.form(text="P417上位机";right=984;bottom=602;bgcolor=16777215;border="dialog frame";max=false;style=33554432) +show.add( +bkplus={cls="bkplus";left=29;top=77;right=948;bottom=388;ah=1;aw=1;background="\res\P417.png";dl=1;dt=1;repeat="scale";z=1}; +checkbox={cls="checkbox";text="点亮";left=112;top=31;right=169;bottom=55;bgcolor=16777215;z=3}; +checkbox2={cls="checkbox";text="白天";left=174;top=32;right=231;bottom=56;bgcolor=16777215;checked=1;z=20}; +plLeft={cls="plus";left=87;top=119;right=351;bottom=342;ah=1;aw=1;border={color=-7114533;width=1};z=2}; +plRight={cls="plus";left=627;top=119;right=891;bottom=342;ah=1;aw=1;border={color=-7114533;width=1};z=26}; +stDebug={cls="static";text="Static";left=376;top=455;right=618;bottom=482;hide=1;transparent=1;z=27}; +stDebug2={cls="static";text="Static";left=376;top=494;right=618;bottom=521;hide=1;transparent=1;z=28}; +stKeyL1={cls="static";text="Static";left=276;top=136;right=321;bottom=182;ah=1;align="center";aw=1;bgcolor=65280;center=1;hide=1;z=4}; +stKeyL2={cls="static";text="Static";left=276;top=204;right=321;bottom=250;ah=1;align="center";aw=1;bgcolor=65280;center=1;hide=1;z=5}; +stKeyL3={cls="static";text="Static";left=276;top=276;right=321;bottom=322;ah=1;align="center";aw=1;bgcolor=65280;center=1;hide=1;z=6}; +stKeyLdown={cls="static";text="Static";left=139;top=544;right=184;bottom=590;ah=1;align="center";aw=1;bgcolor=65280;center=1;hide=1;z=11}; +stKeyLleft={cls="static";text="Static";left=85;top=498;right=130;bottom=544;ah=1;align="center";aw=1;bgcolor=65280;center=1;hide=1;z=9}; +stKeyLok={cls="static";text="Static";left=141;top=500;right=186;bottom=546;ah=1;align="center";aw=1;bgcolor=65280;center=1;hide=1;z=8}; +stKeyLright={cls="static";text="Static";left=202;top=501;right=247;bottom=547;ah=1;align="center";aw=1;bgcolor=65280;center=1;hide=1;z=10}; +stKeyLup={cls="static";text="Static";left=134;top=450;right=179;bottom=496;ah=1;align="center";aw=1;bgcolor=65280;center=1;hide=1;z=7}; +stKeyR1={cls="static";text="Static";left=682;top=454;right=727;bottom=500;ah=1;align="center";aw=1;bgcolor=65280;center=1;hide=1;z=12}; +stKeyR2={cls="static";text="Static";left=681;top=491;right=726;bottom=537;ah=1;align="center";aw=1;bgcolor=65280;center=1;hide=1;z=13}; +stKeyR3={cls="static";text="Static";left=681;top=527;right=726;bottom=573;ah=1;align="center";aw=1;bgcolor=65280;center=1;hide=1;z=14}; +stKeyRdown={cls="static";text="Static";left=792;top=542;right=837;bottom=588;ah=1;align="center";aw=1;bgcolor=65280;center=1;hide=1;z=17}; +stKeyRleft={cls="static";text="Static";left=741;top=501;right=786;bottom=547;ah=1;align="center";aw=1;bgcolor=65280;center=1;hide=1;z=18}; +stKeyRok={cls="static";text="Static";left=792;top=500;right=837;bottom=546;ah=1;align="center";aw=1;bgcolor=65280;center=1;hide=1;z=16}; +stKeyRright={cls="static";text="Static";left=833;top=498;right=878;bottom=544;ah=1;align="center";aw=1;bgcolor=65280;center=1;hide=1;z=19}; +stKeyRup={cls="static";text="Static";left=791;top=465;right=836;bottom=511;ah=1;align="center";aw=1;bgcolor=65280;center=1;hide=1;z=15}; +stLocl={cls="static";left=180;top=225;right=192;bottom=237;bgcolor=255;color=255;font=LOGFONT(name='FontAwesome');z=29}; +stLocr={cls="static";left=790;top=226;right=802;bottom=238;bgcolor=255;color=255;font=LOGFONT(name='FontAwesome');z=30}; +stZBl={cls="static";text="坐标";left=10;top=393;right=430;bottom=441;align="center";center=1;font=LOGFONT(h=-30);transparent=1;z=24}; +stZBr={cls="static";text="坐标";left=542;top=393;right=962;bottom=441;align="center";center=1;font=LOGFONT(h=-30);transparent=1;z=25}; +static2={cls="static";text="亮度:";left=229;top=25;right=301;bottom=64;align="center";center=1;transparent=1;z=23}; +stlight={cls="static";text="7";left=287;top=25;right=331;bottom=64;align="center";center=1;transparent=1;z=22}; +trackbar={cls="trackbar";left=334;top=26;right=744;bottom=56;bgcolor=16777215;max=15;min=0;z=21} +) +/*}}*/ + +//import usb2canfd; +import win.timer +var showtimer = win.timer( winform ,50); +showtimer.onTimer = function(){ + DisplayKey(); +} + +Displayl = function(str){ + show.stZBl.text = str; +} +Displayr = function(str){ + show.stZBr.text = str; +} + +DisplayKey = function(){ + if(mainForm == null){ + return ; + } + show.stKeyL1.text = keyL1; + show.stKeyL2.text = keyL2; + show.stKeyL3.text = keyL3; + show.stKeyL1.hide = keyL1==0?1:0; + show.stKeyL2.hide = keyL2==0?1:0; + show.stKeyL3.hide = keyL3==0?1:0; + + show.stKeyLup.text = keyLup; + show.stKeyLdown.text = keyLdown; + show.stKeyLleft.text = keyLleft; + show.stKeyLright.text = keyLright; + show.stKeyLok.text = keyLok; + + show.stKeyR1.text = keyR1; + show.stKeyR2.text = keyR2; + show.stKeyR3.text = keyR3; + show.stKeyRup.text = keyRup; + show.stKeyRdown.text = keyRdown; + show.stKeyRleft.text = keyRleft; + show.stKeyRright.text = keyRright; + show.stKeyRok.text = keyRok; + + Displayl("get 0x300 (" + plx + ',' + ply + ') status:' + pls); + if((plx == 0)&&(ply == 0)) + { + show.stLocl.hide=1; + } + else + { + show.stLocl.hide=0; + SetLeftPos(plx,ply); + show.stLocl.redraw() + } + + Displayr("get 0x309 ("+prx + ',' + pry + ') status:' + prs); + if((prx == 0)&&(pry == 0)) + { + show.stLocr.hide=1; + } + else + { + show.stLocr.hide=0; + SetRightPos(prx,pry); + show.stLocr.redraw(); + } +} + +txdata = {0,0,0,0, 0,0,0,0}; +if(show.checkbox.checked){ + txdata[6] = 0x08; +} +else { + txdata[6] = 0x00; +} +if(show.checkbox2.checked){ + txdata[3] = 0x40; +} +else { + txdata[3] = 0x00; +} + + +show.checkbox.oncommand = function(id,event){ + if(show.checkbox.checked){ + txdata[6] = 0x08; + } + else { + txdata[6] = 0x00; + } + CT_UpdateCANTxMsg(0x30,200,txdata); +} + +show.checkbox2.oncommand = function(id,event){ + if(show.checkbox2.checked){ + txdata[3] = 0x40; + } + else { + txdata[3] = 0x00; + } + CT_UpdateCANTxMsg(0x30,200,txdata); +} + +show.trackbar.oncommand = function(id,event,pos){ + if( event == 0x8/*_TB_ENDTRACK*/ ){ + show.stlight.text = show.trackbar.pos; + txdata[1] = show.trackbar.pos; + CT_UpdateCANTxMsg(0x30,200,txdata); + } +} + + + + + +show.trackbar.pos = 7; + +if(mainForm != null){ + CT_UpdateCANTxMsg(0x30,200,txdata); + showtimer.enable(); +} + +/* +var x,y,cx,cy = show.plRight.getPos(); +var str = string.format("x = %d,y = %d,cx = %d,cy = %d",x,y,cx,cy); +show.stDebug.text = str; +show.onMouseDown = function(wParam,lParam){ + var x,y = win.getMessagePos(lParam); + var str = string.format("x = %d,y = %d",x,y); + show.stDebug2.text = str; +} +*/ + +Lrange = {};Rrange = {}; +Lrange.x,Lrange.y,Lrange.cx,Lrange.cy = show.plLeft.getPos(); +Rrange.x,Rrange.y,Rrange.cx,Rrange.cy = show.plRight.getPos(); + + + +SetLeftPos = function(getx,gety){ + var posx = 0,posy = 0; + posx = Lrange.x + Lrange.cx - (getx/255*Lrange.cx) - 6; + posy = Lrange.y + (gety/255*Lrange.cy) - 6; + show.stLocl.setPos(posx,posy); +} +SetRightPos = function(getx,gety){ + var posx = 0,posy = 0; + if(getx == 0){ + getx = 50; + } + posx = Rrange.x + (getx/255*Rrange.cx) - 6; + posy = Rrange.y + (gety/255*Rrange.cy) - 6; + show.stLocr.setPos(posx,posy); +} + +/* +show.onDrawBackgroundEnd = function(hdc,rc){ + var x,y,cx,cy = show.plRight.getPos(); + var str = string.format("x = %d,y = %d,cx = %d,cy = %d",x,y,cx,cy); + show.stDebug.text = str; +} +*/ +FreshPos = function(){ + var x,y,cx,cy = show.plRight.getPos(); + var str = string.format("x = %d,y = %d,cx = %d,cy = %d",x,y,cx,cy); + show.stDebug.text = str; + Lrange = {}; + Rrange = {}; + Lrange.x,Lrange.y,Lrange.cx,Lrange.cy = show.plLeft.getPos(); + Rrange.x,Rrange.y,Rrange.cx,Rrange.cy = show.plRight.getPos(); + +} + +show.onActivateApp = function(activated,threadId){ + if(activated){ + + } +} + +show.show(); +FreshPos(); +return win.loopMessage(); \ No newline at end of file diff --git a/dlg/switch.aardio b/dlg/switch.aardio new file mode 100644 index 0000000..282bee9 --- /dev/null +++ b/dlg/switch.aardio @@ -0,0 +1,382 @@ +import win.ui; +import fonts.fontAwesome; +/*DSG{{*/ +var winform = win.form(text="wubiLex - 帮助";right=1040;bottom=607;bgcolor=16777215;style=33554432) +winform.add( +pgl1={cls="progress";left=107;top=27;right=404;bottom=37;color=12639424;dl=1;dt=0.04;edge=1;max=100;min=0;z=18}; +pgl2={cls="progress";left=106;top=86;right=403;bottom=96;color=12639424;dl=1;dt=0.14;edge=1;max=100;min=0;z=19}; +pgl3={cls="progress";left=106;top=147;right=403;bottom=157;color=12639424;dl=1;dt=0.24;edge=1;max=100;min=0;z=20}; +pgl_X1={cls="progress";left=48;top=204;right=196;bottom=214;color=12639424;dl=1;dt=0.34;edge=1;max=100;min=0;z=21}; +pgl_X2={cls="progress";left=48;top=266;right=194;bottom=276;color=12639424;dl=1;dt=0.44;edge=1;max=100;min=0;z=22}; +pgl_X3={cls="progress";left=49;top=326;right=191;bottom=336;color=12639424;dl=1;dt=0.54;edge=1;max=100;min=0;z=23}; +pgl_X4={cls="progress";left=48;top=386;right=193;bottom=396;color=12639424;dl=1;dt=0.63;edge=1;max=100;min=0;z=24}; +pgl_X5={cls="progress";left=50;top=446;right=189;bottom=456;color=12639424;dl=1;dt=0.73;edge=1;max=100;min=0;z=25}; +pgl_Y1={cls="progress";left=244;top=204;right=392;bottom=214;color=12639424;dl=1;dt=0.34;edge=1;max=100;min=0;z=56}; +pgl_Y2={cls="progress";left=244;top=266;right=390;bottom=276;color=12639424;dl=1;dt=0.44;edge=1;max=100;min=0;z=57}; +pgl_Y3={cls="progress";left=245;top=326;right=387;bottom=336;color=12639424;dl=1;dt=0.54;edge=1;max=100;min=0;z=58}; +pgl_Y4={cls="progress";left=244;top=386;right=389;bottom=396;color=12639424;dl=1;dt=0.63;edge=1;max=100;min=0;z=59}; +pgl_Y5={cls="progress";left=244;top=449;right=382;bottom=459;color=12639424;dl=1;dt=0.74;edge=1;max=100;min=0;z=26}; +pgl_press={cls="progress";left=123;top=551;right=265;bottom=561;color=12639424;dl=1;dt=0.91;edge=1;max=100;min=0;z=80}; +pgr1={cls="progress";left=546;top=23;right=843;bottom=33;color=12639424;dl=1;dt=0.04;edge=1;max=100;min=0;z=27}; +pgr2={cls="progress";left=546;top=60;right=843;bottom=70;color=12639424;dl=1;dt=0.1;edge=1;max=100;min=0;z=34}; +pgr3={cls="progress";left=546;top=98;right=843;bottom=108;color=12639424;dl=1;dt=0.16;edge=1;max=100;min=0;z=28}; +pgr_X1={cls="progress";left=547;top=136;right=842;bottom=146;color=12639424;dl=1;dt=0.22;edge=1;max=100;min=0;z=29}; +pgr_X2={cls="progress";left=546;top=175;right=847;bottom=185;color=12639424;dl=1;dt=0.29;edge=1;max=100;min=0;z=30}; +pgr_X3={cls="progress";left=519;top=480;right=656;bottom=490;color=12639424;dl=1;dt=0.79;edge=1;max=100;min=0;z=31}; +pgr_X4={cls="progress";left=519;top=417;right=654;bottom=427;color=12639424;dl=1;dt=0.69;edge=1;max=100;min=0;z=32}; +pgr_X5={cls="progress";left=511;top=357;right=649;bottom=367;color=12639424;dl=1;dt=0.59;edge=1;max=100;min=0;z=33}; +pgr_Y1={cls="progress";left=512;top=297;right=647;bottom=307;color=12639424;dl=1;dt=0.49;edge=1;max=100;min=0;z=69}; +pgr_Y2={cls="progress";left=514;top=235;right=650;bottom=245;color=12639424;dl=1;dt=0.39;edge=1;max=100;min=0;z=70}; +pgr_Y3={cls="progress";left=713;top=357;right=850;bottom=367;color=12639424;dl=1;dt=0.59;edge=1;max=100;min=0;z=71}; +pgr_Y4={cls="progress";left=713;top=297;right=848;bottom=307;color=12639424;dl=1;dt=0.49;edge=1;max=100;min=0;z=72}; +pgr_Y5={cls="progress";left=713;top=235;right=851;bottom=245;color=12639424;dl=1;dt=0.39;edge=1;max=100;min=0;z=73}; +pgr_press={cls="progress";left=675;top=539;right=817;bottom=549;color=12639424;dl=1;dt=0.89;edge=1;max=100;min=0;z=83}; +static={cls="static";text="按键滑条上";left=12;top=25;right=84;bottom=49;dl=1;dt=1;notify=1;transparent=1;z=85}; +static10={cls="static";text="Y轴上2";left=244;top=282;right=298;bottom=306;notify=1;transparent=1;z=94}; +static11={cls="static";text="Y轴上3";left=244;top=350;right=298;bottom=374;notify=1;transparent=1;z=95}; +static12={cls="static";text="Y轴上4";left=244;top=407;right=298;bottom=431;notify=1;transparent=1;z=96}; +static13={cls="static";text="Y轴上5";left=244;top=467;right=298;bottom=491;notify=1;transparent=1;z=97}; +static14={cls="static";text="按键滑条1";left=473;top=19;right=540;bottom=43;dl=1;dt=1;notify=1;transparent=1;z=98}; +static15={cls="static";text="按键滑条2";left=472;top=59;right=536;bottom=83;dl=1;dt=1;notify=1;transparent=1;z=99}; +static16={cls="static";text="按键滑条3";left=471;top=96;right=538;bottom=120;dl=1;dt=1;notify=1;transparent=1;z=100}; +static17={cls="static";text="按键滑条4";left=470;top=134;right=542;bottom=158;dl=1;dt=1;notify=1;transparent=1;z=101}; +static19={cls="static";text="按键滑条5";left=470;top=173;right=536;bottom=197;dl=1;dt=1;notify=1;transparent=1;z=102}; +static2={cls="static";text="按键滑条中";left=13;top=79;right=83;bottom=103;dl=1;dt=1;notify=1;transparent=1;z=86}; +static24={cls="static";text="X轴左1";left=516;top=253;right=570;bottom=277;notify=1;transparent=1;z=103}; +static25={cls="static";text="X轴左2";left=516;top=313;right=570;bottom=337;notify=1;transparent=1;z=104}; +static26={cls="static";text="X轴左3";left=516;top=381;right=570;bottom=405;notify=1;transparent=1;z=105}; +static27={cls="static";text="X轴左4";left=516;top=438;right=570;bottom=462;notify=1;transparent=1;z=106}; +static28={cls="static";text="X轴左5";left=516;top=498;right=570;bottom=522;notify=1;transparent=1;z=107}; +static29={cls="static";text="Y轴上1";left=715;top=253;right=769;bottom=277;notify=1;transparent=1;z=108}; +static3={cls="static";text="按键滑条下";left=13;top=140;right=89;bottom=164;dl=1;dt=1;notify=1;transparent=1;z=87}; +static30={cls="static";text="Y轴上2";left=715;top=313;right=769;bottom=337;notify=1;transparent=1;z=109}; +static31={cls="static";text="Y轴上3";left=715;top=381;right=769;bottom=405;notify=1;transparent=1;z=110}; +static34={cls="static";text="左板压力";left=63;top=547;right=117;bottom=571;notify=1;transparent=1;z=111}; +static35={cls="static";text="右板压力";left=617;top=539;right=671;bottom=563;notify=1;transparent=1;z=112}; +static4={cls="static";text="X轴右1";left=46;top=222;right=100;bottom=246;notify=1;transparent=1;z=88}; +static5={cls="static";text="X轴右2";left=46;top=282;right=100;bottom=306;notify=1;transparent=1;z=89}; +static6={cls="static";text="X轴右3";left=46;top=350;right=100;bottom=374;notify=1;transparent=1;z=90}; +static7={cls="static";text="X轴右4";left=46;top=407;right=100;bottom=431;notify=1;transparent=1;z=91}; +static8={cls="static";text="X轴右5";left=46;top=467;right=100;bottom=491;notify=1;transparent=1;z=92}; +static9={cls="static";text="Y轴上1";left=244;top=222;right=298;bottom=246;notify=1;transparent=1;z=93}; +stlVal1_baseline={cls="static";text="0";left=369;top=45;right=423;bottom=77;align="right";dl=1;dt=0.07;font=LOGFONT(h=-16);transparent=1;z=35}; +stlVal1_signal={cls="static";text="0";left=368;top=21;right=422;bottom=53;align="right";dl=1;dt=0.03;font=LOGFONT(h=-16);transparent=1;z=1}; +stlVal2_baseline={cls="static";text="0";left=369;top=105;right=423;bottom=137;align="right";dl=1;dt=0.17;font=LOGFONT(h=-16);transparent=1;z=36}; +stlVal2_signal={cls="static";text="0";left=368;top=81;right=422;bottom=113;align="right";dl=1;dt=0.13;font=LOGFONT(h=-16);transparent=1;z=2}; +stlVal3_baseline={cls="static";text="0";left=369;top=163;right=423;bottom=195;align="right";dl=1;dt=0.27;font=LOGFONT(h=-16);transparent=1;z=37}; +stlVal3_signal={cls="static";text="0";left=368;top=139;right=422;bottom=171;align="right";dl=1;dt=0.23;font=LOGFONT(h=-16);transparent=1;z=3}; +stl_X_Val1_baseline={cls="static";text="0";left=172;top=221;right=226;bottom=253;align="right";dl=1;dt=0.36;font=LOGFONT(h=-16);transparent=1;z=38}; +stl_X_Val1_signal={cls="static";text="0";left=171;top=197;right=225;bottom=229;align="right";dl=1;dt=0.32;font=LOGFONT(h=-16);transparent=1;z=4}; +stl_X_Val2_baseline={cls="static";text="0";left=172;top=283;right=226;bottom=315;align="right";dl=1;dt=0.47;font=LOGFONT(h=-16);transparent=1;z=39}; +stl_X_Val2_signal={cls="static";text="0";left=171;top=259;right=225;bottom=291;align="right";dl=1;dt=0.43;font=LOGFONT(h=-16);transparent=1;z=5}; +stl_X_Val3_baseline={cls="static";text="0";left=172;top=343;right=226;bottom=375;align="right";dl=1;dt=0.56;font=LOGFONT(h=-16);transparent=1;z=40}; +stl_X_Val3_signal={cls="static";text="0";left=171;top=319;right=225;bottom=351;align="right";dl=1;dt=0.52;font=LOGFONT(h=-16);transparent=1;z=6}; +stl_X_Val4_baseline={cls="static";text="0";left=172;top=407;right=226;bottom=439;align="right";dl=1;dt=0.67;font=LOGFONT(h=-16);transparent=1;z=41}; +stl_X_Val4_signal={cls="static";text="0";left=171;top=383;right=225;bottom=415;align="right";dl=1;dt=0.63;font=LOGFONT(h=-16);transparent=1;z=7}; +stl_X_Val5_baseline={cls="static";text="0";left=172;top=464;right=226;bottom=496;align="right";dl=1;dt=0.76;font=LOGFONT(h=-16);transparent=1;z=42}; +stl_X_Val5_signal={cls="static";text="0";left=171;top=440;right=225;bottom=472;align="right";dl=1;dt=0.72;font=LOGFONT(h=-16);transparent=1;z=8}; +stl_Y_Val1_baseline={cls="static";text="0";left=368;top=221;right=422;bottom=253;align="right";dl=1;dt=0.36;font=LOGFONT(h=-16);transparent=1;z=60}; +stl_Y_Val1_signal={cls="static";text="0";left=367;top=197;right=421;bottom=229;align="right";dl=1;dt=0.32;font=LOGFONT(h=-16);transparent=1;z=52}; +stl_Y_Val2_baseline={cls="static";text="0";left=368;top=283;right=422;bottom=315;align="right";dl=1;dt=0.47;font=LOGFONT(h=-16);transparent=1;z=61}; +stl_Y_Val2_signal={cls="static";text="0";left=367;top=259;right=421;bottom=291;align="right";dl=1;dt=0.43;font=LOGFONT(h=-16);transparent=1;z=53}; +stl_Y_Val3_baseline={cls="static";text="0";left=368;top=343;right=422;bottom=375;align="right";dl=1;dt=0.56;font=LOGFONT(h=-16);transparent=1;z=62}; +stl_Y_Val3_signal={cls="static";text="0";left=367;top=319;right=421;bottom=351;align="right";dl=1;dt=0.52;font=LOGFONT(h=-16);transparent=1;z=54}; +stl_Y_Val4_baseline={cls="static";text="0";left=368;top=407;right=422;bottom=439;align="right";dl=1;dt=0.67;font=LOGFONT(h=-16);transparent=1;z=63}; +stl_Y_Val4_signal={cls="static";text="0";left=367;top=383;right=421;bottom=415;align="right";dl=1;dt=0.63;font=LOGFONT(h=-16);transparent=1;z=55}; +stl_Y_Val5_baseline={cls="static";text="0";left=368;top=465;right=422;bottom=497;align="right";dl=1;dt=0.76;font=LOGFONT(h=-16);transparent=1;z=43}; +stl_Y_Val5_signal={cls="static";text="0";left=367;top=441;right=421;bottom=473;align="right";dl=1;dt=0.73;font=LOGFONT(h=-16);transparent=1;z=9}; +stl_press_baseline={cls="static";text="0";left=267;top=567;right=321;bottom=599;align="right";dl=1;dt=0.93;font=LOGFONT(h=-16);transparent=1;z=81}; +stl_press_signal={cls="static";text="0";left=266;top=543;right=320;bottom=575;align="right";dl=1;dt=0.89;font=LOGFONT(h=-16);transparent=1;z=79}; +strVal1_baseline={cls="static";text="0";left=896;top=8;right=950;bottom=40;align="right";dl=1;dt=0.01;font=LOGFONT(h=-16);notify=1;transparent=1;z=44}; +strVal1_signal={cls="static";text="0";left=841;top=6;right=891;bottom=38;align="right";dl=1;dt=0.01;font=LOGFONT(h=-16);transparent=1;z=10}; +strVal2_baseline={cls="static";text="0";left=896;top=50;right=950;bottom=82;align="right";dl=1;dt=0.08;font=LOGFONT(h=-16);transparent=1;z=45}; +strVal2_signal={cls="static";text="0";left=841;top=45;right=891;bottom=77;align="right";dl=1;dt=0.07;font=LOGFONT(h=-16);transparent=1;z=11}; +strVal3_baseline={cls="static";text="0";left=896;top=92;right=950;bottom=124;align="right";dl=1;dt=0.15;font=LOGFONT(h=-16);transparent=1;z=46}; +strVal3_signal={cls="static";text="0";left=841;top=85;right=891;bottom=117;align="right";dl=1;dt=0.14;font=LOGFONT(h=-16);transparent=1;z=12}; +str_X_Val1_baseline={cls="static";text="0";left=896;top=133;right=950;bottom=165;align="right";dl=1;dt=0.22;font=LOGFONT(h=-16);transparent=1;z=47}; +str_X_Val1_signal={cls="static";text="0";left=841;top=125;right=891;bottom=157;align="right";dl=1;dt=0.21;font=LOGFONT(h=-16);notify=1;transparent=1;z=13}; +str_X_Val2_baseline={cls="static";text="0";left=896;top=175;right=950;bottom=207;align="right";dl=1;dt=0.29;font=LOGFONT(h=-16);transparent=1;z=48}; +str_X_Val2_signal={cls="static";text="0";left=841;top=165;right=891;bottom=197;align="right";dl=1;dt=0.27;font=LOGFONT(h=-16);transparent=1;z=14}; +str_X_Val3_baseline={cls="static";text="0";left=661;top=492;right=677;bottom=524;align="right";dl=1;dt=0.81;font=LOGFONT(h=-16);transparent=1;z=49}; +str_X_Val3_signal={cls="static";text="0";left=620;top=472;right=674;bottom=504;align="right";dl=1;dt=0.78;font=LOGFONT(h=-16);transparent=1;z=15}; +str_X_Val4_baseline={cls="static";text="0";left=620;top=438;right=674;bottom=470;align="right";dl=1;dt=0.72;font=LOGFONT(h=-16);transparent=1;z=50}; +str_X_Val4_signal={cls="static";text="0";left=620;top=414;right=674;bottom=446;align="right";dl=1;dt=0.68;font=LOGFONT(h=-16);transparent=1;z=16}; +str_X_Val5_baseline={cls="static";text="0";left=620;top=374;right=674;bottom=406;align="right";dl=1;dt=0.62;font=LOGFONT(h=-16);transparent=1;z=51}; +str_X_Val5_signal={cls="static";text="0";left=619;top=350;right=673;bottom=382;align="right";dl=1;dt=0.58;font=LOGFONT(h=-16);transparent=1;z=17}; +str_Y_Val1_baseline={cls="static";text="0";left=619;top=314;right=673;bottom=346;align="right";dl=1;dt=0.52;font=LOGFONT(h=-16);transparent=1;z=74}; +str_Y_Val1_signal={cls="static";text="0";left=619;top=290;right=673;bottom=322;align="right";dl=1;dt=0.48;font=LOGFONT(h=-16);transparent=1;z=64}; +str_Y_Val2_baseline={cls="static";text="0";left=619;top=252;right=673;bottom=284;align="right";dl=1;dt=0.41;font=LOGFONT(h=-16);transparent=1;z=75}; +str_Y_Val2_signal={cls="static";text="0";left=620;top=228;right=674;bottom=260;align="right";dl=1;dt=0.38;font=LOGFONT(h=-16);transparent=1;z=65}; +str_Y_Val3_baseline={cls="static";text="0";left=813;top=374;right=867;bottom=406;align="right";dl=1;dt=0.62;font=LOGFONT(h=-16);transparent=1;z=76}; +str_Y_Val3_signal={cls="static";text="0";left=813;top=350;right=867;bottom=382;align="right";dl=1;dt=0.58;font=LOGFONT(h=-16);transparent=1;z=66}; +str_Y_Val4_baseline={cls="static";text="0";left=816;top=314;right=870;bottom=346;align="right";dl=1;dt=0.52;font=LOGFONT(h=-16);transparent=1;z=77}; +str_Y_Val4_signal={cls="static";text="0";left=814;top=290;right=868;bottom=322;align="right";dl=1;dt=0.48;font=LOGFONT(h=-16);transparent=1;z=67}; +str_Y_Val5_baseline={cls="static";text="0";left=814;top=252;right=868;bottom=284;align="right";dl=1;dt=0.41;font=LOGFONT(h=-16);transparent=1;z=78}; +str_Y_Val5_signal={cls="static";text="0";left=814;top=228;right=868;bottom=260;align="right";dl=1;dt=0.38;font=LOGFONT(h=-16);transparent=1;z=68}; +str_press_baseline={cls="static";text="0";left=821;top=555;right=875;bottom=587;align="right";dl=1;dt=0.91;font=LOGFONT(h=-16);transparent=1;z=84}; +str_press_signal={cls="static";text="0";left=820;top=531;right=874;bottom=563;align="right";dl=1;dt=0.87;font=LOGFONT(h=-16);transparent=1;z=82} +) +/*}}*/ + +import style; +//import console; + +for(name,ctrl in winform.eachControl("plus") ){ + ctrl.skin(style.plusTip) + +} +for(name,ctrl in winform.eachControl("progress","pg[lr]\d") ){ + ctrl.theme = false; + ctrl.setRange(0,256); + ctrl.pos = 0; +} + +for(name,ctrl in winform.eachControl("progress","pg[lr]_[XY]\d") ){ + ctrl.theme = false; + ctrl.setRange(0,256); + ctrl.pos = 0; +} + +for(name,ctrl in winform.eachControl("progress","pg[lr]_press") ){ + ctrl.theme = false; + ctrl.setRange(0,1024); + ctrl.pos = 0; +} + +SignalDisplay = function(){ + /*if(DevConnected != 1){ + return ; + }*/ + /*winform.stlVal1_signal.text = lkey[1]; + winform.stlVal2_signal.text = lkey[5]; + winform.stlVal3_signal.text = lkey[2]; + winform.stl_X_Val1_signal.text = lkey[4]; + winform.stl_X_Val2_signal.text = lkey[3]; + winform.stl_X_Val3_signal.text = lkey[6]; + + winform.strVal1_signal.text = rkey[4]; + winform.strVal2_signal.text = rkey[3]; + winform.strVal3_signal.text = rkey[6]+rkey[5]; + winform.str_X_Val1_signal.text = rkey[7]; + winform.str_X_Val2_signal.text = rkey[2]; + winform.str_X_Val3_signal.text = rkey[1]; + + winform.pgl1.pos = lkey[1]; + winform.pgl2.pos = lkey[5]; + winform.pgl3.pos = lkey[2]; + winform.pgl1_X1.pos = lkey[4]; + winform.pgl2_X2.pos = lkey[3]; + winform.pgl_X3.pos = lkey[6]; + + winform.pgr1.pos = rkey[4]; + winform.pgr2.pos = rkey[3]; + winform.pgr3.pos = rkey[6]+rkey[5]; + winform.pgr_X1.pos = rkey[7]; + winform.pgr_X2.pos = rkey[2]; + winform.pgr_X3.pos = rkey[1];*/ + winform.stlVal1_signal.text = lkey_signal[1]; + winform.stlVal2_signal.text = lkey_signal[2]; + winform.stlVal3_signal.text = lkey_signal[3]; + winform.stl_X_Val1_signal.text = lkey_signal[4]; + winform.stl_X_Val2_signal.text = lkey_signal[5]; + winform.stl_X_Val3_signal.text = lkey_signal[6]; + winform.stl_X_Val4_signal.text = lkey_signal[7]; + winform.stl_X_Val5_signal.text = lkey_signal[8]; + winform.stl_Y_Val1_signal.text = lkey_signal[9]; + winform.stl_Y_Val2_signal.text = lkey_signal[10]; + winform.stl_Y_Val3_signal.text = lkey_signal[11]; + winform.stl_Y_Val4_signal.text = lkey_signal[12]; + winform.stl_Y_Val5_signal.text = lkey_signal[13]; + + if(press_signal[1] > 0x7FF){ + press_signal[1] = (press_signal[1]&0xFFF)-0x1000; + } + else { + press_signal[1] = press_signal[1] + } + winform.stl_press_signal.text = press_signal[1]; + + winform.stlVal1_baseline.text = lkey_baseline[1]; + winform.stlVal2_baseline.text = lkey_baseline[2]; + winform.stlVal3_baseline.text = lkey_baseline[3]; + winform.stl_X_Val1_baseline.text = lkey_baseline[4]; + winform.stl_X_Val2_baseline.text = lkey_baseline[5]; + winform.stl_X_Val3_baseline.text = lkey_baseline[6]; + winform.stl_X_Val4_baseline.text = lkey_baseline[7]; + winform.stl_X_Val5_baseline.text = lkey_baseline[8]; + winform.stl_Y_Val1_baseline.text = lkey_baseline[9]; + winform.stl_Y_Val2_baseline.text = lkey_baseline[10]; + winform.stl_Y_Val3_baseline.text = lkey_baseline[11]; + winform.stl_Y_Val4_baseline.text = lkey_baseline[12]; + winform.stl_Y_Val5_baseline.text = lkey_baseline[13]; + + winform.stl_press_baseline.text = press_baseline[1]; + + winform.strVal1_signal.text = rkey_signal[1]; + winform.strVal2_signal.text = rkey_signal[2]; + winform.strVal3_signal.text = rkey_signal[3]; + winform.str_X_Val1_signal.text = rkey_signal[4]; + winform.str_X_Val2_signal.text = rkey_signal[5]; + winform.str_X_Val3_signal.text = rkey_signal[6]; + winform.str_X_Val4_signal.text = rkey_signal[7]; + winform.str_X_Val5_signal.text = rkey_signal[8]; + winform.str_Y_Val1_signal.text = rkey_signal[9]; + winform.str_Y_Val2_signal.text = rkey_signal[10]; + winform.str_Y_Val3_signal.text = rkey_signal[11]; + winform.str_Y_Val4_signal.text = rkey_signal[12]; + winform.str_Y_Val5_signal.text = rkey_signal[13]; + + if(press_signal[2] > 0x7FF){ + press_signal[2] = (press_signal[2]&0xFFF)-0x1000; + } + else { + press_signal[2] = press_signal[2] + } + winform.str_press_signal.text = press_signal[2]; + + winform.strVal1_baseline.text = rkey_baseline[1]; + winform.strVal2_baseline.text = rkey_baseline[2]; + winform.strVal3_baseline.text = rkey_baseline[3]; + winform.str_X_Val1_baseline.text = rkey_baseline[4]; + winform.str_X_Val2_baseline.text = rkey_baseline[5]; + winform.str_X_Val3_baseline.text = rkey_baseline[6]; + winform.str_X_Val4_baseline.text = rkey_baseline[7]; + winform.str_X_Val5_baseline.text = rkey_baseline[8]; + winform.str_Y_Val1_baseline.text = rkey_baseline[9]; + winform.str_Y_Val2_baseline.text = rkey_baseline[10]; + winform.str_Y_Val3_baseline.text = rkey_baseline[11]; + winform.str_Y_Val4_baseline.text = rkey_baseline[12]; + winform.str_Y_Val5_baseline.text = rkey_baseline[13]; + + winform.str_press_baseline.text = press_baseline[2]; + + /*winform.strVal9.text = rkey_signal[14]; + winform.static18.text = rkey_baseline[14];*/ + + winform.pgl1.pos = lkey_signal[1]; + winform.pgl2.pos = lkey_signal[2]; + winform.pgl3.pos = lkey_signal[3]; + winform.pgl_X1.pos = lkey_signal[4]; + winform.pgl_X2.pos = lkey_signal[5]; + winform.pgl_X3.pos = lkey_signal[6]; + winform.pgl_X4.pos = lkey_signal[7]; + winform.pgl_X5.pos = lkey_signal[8]; + winform.pgl_Y1.pos = lkey_signal[9]; + winform.pgl_Y2.pos = lkey_signal[10]; + winform.pgl_Y3.pos = lkey_signal[11]; + winform.pgl_Y4.pos = lkey_signal[12]; + winform.pgl_Y5.pos = lkey_signal[13]; + + winform.pgl_press.pos = press_signal[1]; + + winform.pgr1.pos = rkey_signal[1]; + winform.pgr2.pos = rkey_signal[2]; + winform.pgr3.pos = rkey_signal[3]; + winform.pgr_X1.pos = rkey_signal[4]; + winform.pgr_X2.pos = rkey_signal[5]; + winform.pgr_X3.pos = rkey_signal[6]; + winform.pgr_X4.pos = rkey_signal[7]; + winform.pgr_X5.pos = rkey_signal[8]; + winform.pgr_Y1.pos = rkey_signal[9]; + winform.pgr_Y2.pos = rkey_signal[10]; + winform.pgr_Y3.pos = rkey_signal[11]; + winform.pgr_Y4.pos = rkey_signal[12]; + winform.pgr_Y5.pos = rkey_signal[13]; + + //winform.pgrp3.pos = rkey_signal[14]; + + winform.pgr_press.pos = press_signal[2]; + /*winform.stl_X_Val4_signal.text = press[1]; + winform.stl_X_Val5_signal.text = press[2]; + winform.stl_Y_Val5_signal.text = press[3]; + winform.pgl_X4.pos = press[1]; + winform.pgl_X5.pos = press[2]; + winform.pgl_Y5.pos = press[3]; + winform.str_X_Val4_signal.text = press[4]; + winform.str_X_Val5_signal.text = press[5]; + winform.strVal9.text = press[6]; + winform.pgr_X4.pos = press[4]; + winform.pgr_X5.pos = press[5]; + winform.pgrp3.pos = press[6];*/ + +} + +var SignalTimer = win.timer(,50); +SignalTimer.onTimer = function(){ + SignalDisplay(); +} +SignalTimer.enable(); + +var SetConfig = function(conf){ + import fsys.ini; + if(conf == "English"){ + //打开文件 + //如果文件不存在则自动创建新文件 + var ini=fsys.ini("\config.ini") + //读取小节对象 + var sec = ini.getSection("Signal-English") + var count = 0; + for(k,v in sec){ + count += 1; + } + if(count == 0)//判断文件是否为空 + { + //文件为空 + for(name,ctrl in winform.eachControl() ){ + if(ctrl.text != "0"){ + sec[ctrl.id] = ctrl.text + } + } + sec.save(); + } + else { + for(k,v in sec){ + winform.getCtrlById(tonumber(k)).text = v; + } + + + } + + } + else { + //打开文件 + //如果文件不存在则自动创建新文件 + var ini=fsys.ini("\config.ini") + //读取小节对象 + var sec = ini.getSection("信号-中文") + var count = 0; + for(k,v in sec){ + count += 1; + } + if(count == 0)//判断文件是否为空 + { + //文件为空 + for(name,ctrl in winform.eachControl() ){ + if(ctrl.text != "0"){ + sec[ctrl.id] = ctrl.text + } + } + sec.save(); + } + else { + for(k,v in sec){ + winform.getCtrlById(tonumber(k)).text = v; + } + + + } + } + +} +if(language != null){ + SetConfig(language); +} + +subscribe("语言",function(conf){ + SetConfig(conf); +} ) + + +winform.show(); +win.loopMessage(); +return winform; \ No newline at end of file diff --git a/lib/config.aardio b/lib/config.aardio new file mode 100644 index 0000000..5da06a0 --- /dev/null +++ b/lib/config.aardio @@ -0,0 +1,17 @@ +//config 配置文件 +import fsys.config; +config = fsys.config("/config/"); +//config = fsys.config( io.appData("/软件作者/应用程序名/") ); + +//不需要序列化的配置名字前请添加下划线 +namespace config { + __appName = "应用程序名"; + __website = "http://www.aardio.com/"; +} + +/**intellisense(config) +__appName = 应用程序名 +__website = 官方网站 +saveAll() = 写入所有配置到文件 +? = 获取值时指定不以下划线开始的配置表名称,\n返回一个可自动序列化到同名配置文件的表对象。\n如果此对象名以下划线开始,则可以正常读写值不会序列化为配置文件。\n否则不能对此对象直接赋值,只能对配置表对象的成员赋值。\n\n配置表可自动自文件加载,退出线程前自动序列化并存入文件。\n仅序列化以字符串、数值为键的元素,\n仅序列化值为字符串、数值、buffer 以及定义了 _serialize 元方法的成员。\n循环引用的值转换为 null,序列化时忽略成员函数\n!fsys_table. +end intellisense**/ \ No newline at end of file diff --git a/lib/style.aardio b/lib/style.aardio new file mode 100644 index 0000000..23ad42b --- /dev/null +++ b/lib/style.aardio @@ -0,0 +1,121 @@ +//style 外观样式 + +namespace style{ + primaryButton = { + background={ + default=0xFF8FB2B0; + hover=0xFF928BB3; + disabled=0xFFCCCCCC; + } + }; + button = { + background={ + default=0x668FB2B0; + hover=0xFF928BB3; + disabled=0xFFCCCCCC; + } + }; + transButton = { + background={ + default=0; + hover=0xFF928BB3; + disabled=0xFFCCCCCC; + } + }; + checkBox = { + color = { + hover = 0xFFFF0000; + active = 0xFF00FF00; + } + checked = { + color = { + hover = 0xFFFF0000; + active = 0xFF00FF00; + } + text = '\uF14a'/*_FA_CHECK_SQUARE*/ + } + }; + Check ={ + color = { + hover = 0xFFFF0000; + active = 0xFF00FF00; + } + checked = { + iconText = '\uF058'/*_FA_CHECK_CIRCLE*/ + } + }; + link = { + color = { + hover = 0xFFFF0000; + active = 0xFF00FF00; + } + }; + dropdown = { + foreground={ + default = 0xFFFFFFFF; + hover= 0xFF8ADBAF; + }; + checked = { + foreground={ + default = 0xFFDB8A8E; + hover= 0xFF8ADBAF; + }; + } + }; + key = { + foreground={ + default = 0x00FFFFFF; + hover= 0xFF8ADBAF; + }; + }; + + radioMode = { + group = "Mode"; + color={ + default=0xFF000000; + disabled=0xFF6D6D6D; + hover=0xFF87CEFA + }; + checked={ + iconText='\uF046' + } + } + radioColor = { + group = "Color"; + color={ + default=0xFF000000; + disabled=0xFF6D6D6D; + hover=0xFF87CEFA + }; + checked={ + iconText='\uF046' + } + } + radioLight = { + group = "Light"; + color={ + default=0xFF000000; + disabled=0xFF6D6D6D; + hover=0xFF87CEFA + }; + checked={ + iconText='\uF046' + } + } + radioFreq = { + group = "Freq"; + color={ + default=0xFF000000; + disabled=0xFF6D6D6D; + hover=0xFF87CEFA + }; + checked={ + iconText='\uF046' + } + } + plusTip = { + color={ + default=0xFF3C3C3C + } + } +} diff --git a/lib/usb2canfd.aardio b/lib/usb2canfd.aardio new file mode 100644 index 0000000..f6e9ea9 --- /dev/null +++ b/lib/usb2canfd.aardio @@ -0,0 +1,379 @@ +/* +*使用说明: +*1.创建CAN设备对象 CANHw = usb2canfd.USB2CANHW(); +*2.加载DLL CANHw.LoadDll(); +*3.扫描设备 hwnum = CANHw.FlashHw(); +*4.获取可用设备 allhw = CANHw.GetAvailableHW(); +*5.打开设备(初始化) CANHw.OpenDevice(设备序号,通道) +*6.通过SendMsg和GetMsg发送和获取报文 +*/ +namespace usb2canfd{ + //参考 http://www.toomoss.com/help/index.htm + + + //初始化CAN的数据类型定义 + class CANFD_INIT_CONFIG{ + ctor( /*输入构造函数所需要的参数*/ ){ + + }; + type=me; + /*对象的所有成员必须用分号分隔*/ + BYTE Mode; //0-正常模式,1-自发自收模式 + BYTE ISOCRCEnable;//0-禁止ISO CRC,1-使能ISO CRC + BYTE RetrySend;//0-禁止重发,1-无限制重发 + BYTE ResEnable;//0-不接入内部120欧终端电阻,1-接入内部120欧终端电阻 + //波特率参数可以用TCANLINPro软件里面的波特率计算工具计算 + //仲裁段波特率参数,波特率=40M/NBT_BRP*(1+NBT_SEG1+NBT_SEG2) + BYTE NBT_BRP; + BYTE NBT_SEG1; + BYTE NBT_SEG2; + BYTE NBT_SJW; + //数据段波特率参数,波特率=40M/DBT_BRP*(1+DBT_SEG1+DBT_SEG2) + BYTE DBT_BRP; + BYTE DBT_SEG1; + BYTE DBT_SEG2; + BYTE DBT_SJW; + BYTE __Res0[8]; + } + + //初始化CAN的数据类型定义 + class CAN_INIT_CONFIG{ + ctor( /*输入构造函数所需要的参数*/ ){ + + }; + type=me; + /*对象的所有成员必须用分号分隔*/ + //CAN波特率 = 100MHz/(CAN_BRP)/(CAN_SJW+CAN_BS1+CAN_BS2) + INT CAN_BRP; //取值范围1~1024 + BYTE CAN_SJW; //取值范围1~4 + BYTE CAN_BS1; //取值范围1~16 + BYTE CAN_BS2; //取值范围1~8 + BYTE CAN_Mode; //CAN工作模式,0-正常模式,1-环回模式,2-静默模式,3-静默环回模式,bit7为1则接入适配器内部终端电阻,否则不接入 + BYTE CAN_ABOM; //自动离线管理,0-禁止,1-使能 + BYTE CAN_NART; //报文重发管理,0-使能报文重传,1-禁止报文重传 + BYTE CAN_RFLM; //FIFO锁定管理,0-新报文覆盖旧报文,1-丢弃新报文 + BYTE CAN_TXFP; //发送优先级管理,0-标识符决定,1-发送请求顺序决定 + } + + //CANfd信息帧的数据类型定义 + class CANFD_MSG{ + ctor( /*输入构造函数所需要的参数*/ ){ + + }; + type=me; + /*对象的所有成员必须用分号分隔*/ + INT ID; //报文ID。 //| (1<<31);//扩展帧 + BYTE DLC; //数据字节长度,可设置为-0,1,2,3,4,5,6,7,8,12,16,20,24,32,48,64 + BYTE Flags; //bit[0]-BRS,bit[1]-ESI,bit[2]-FDF,bit[6..5]-Channel,bit[7]-RXD + BYTE __Res0; //保留 + BYTE __Res1; //保留 + INT TimeStamp; //帧接收或者发送时的时间戳,单位为10us + BYTE Data[64]; //报文的数据。 + } + + //CAN信息帧的数据类型定义 + class CAN_MSG{ + ctor( /*输入构造函数所需要的参数*/ ){ + + }; + type=me; + /*对象的所有成员必须用分号分隔*/ + INT ID; //报文ID。 + INT TimeStamp; //接收到信息帧时的时间标识,从CAN 控制器初始化开始计时。 + BYTE RemoteFlag; //是否是远程帧 + BYTE ExternFlag; //是否是扩展帧 + BYTE DataLen; //数据长度(<=8),即Data 的长度。 + BYTE Data[8]; //报文的数据。 + BYTE __Res; + } + + class CAN_UDS_ADDR{ + ctor( /*输入构造函数所需要的参数*/ ){ + + }; + type=me; + /*对象的所有成员必须用分号分隔*/ + INT ReqID; //请求报文ID。 + INT ResID; //应答报文ID。 + BYTE Flag; //bit[0]-帧类型(0-标准帧,1-扩展帧), + //bit[1]-FDF(0-普通CAN帧,1-CANFD帧), + //bit[2]-BRS(0-CANFD帧不加速,1-CANFD帧加速) + BYTE AddrFormats; //0-normal, 1-extended ,2-mixed + BYTE AddrExt; //当AddrFormats不为normal时,该数据放到CAN数据域第1字节 + BYTE MaxDLC; //每帧最大数据字节数,一般设置为8 + + } + + + class DEVICE_INFO{ + ctor( /*输入构造函数所需要的参数*/ ){ + + }; + type=me; + /*对象的所有成员必须用分号分隔*/ + BYTE FirmwareName[32]; //固件名称字符串 + BYTE BuildDate[32]; //固件编译时间字符串 + INT HardwareVersion; //硬件版本号 + INT FirmwareVersion; //固件版本号 + INT SerialNumber[3]; //适配器序列号 + INT Functions; //适配器当前具备的功能 + } + + + + //调用函数 + class USB2CANHW{ + ctor( /*输入构造函数所需要的参数*/ ){ + + }; + type=me; + /*对象的所有成员必须用分号分隔*/ + + //初始化全局变量 + DllHandle = null; + + + + //加载DLL + LoadDll = function(){ + try{ + DllHandle = ..raw.loadDll("\USB2XXX.dll") + } + catch(err) + { + import win; + DllHandle = null; + win.msgboxTimeout("加载USB2LIN的DLL失败,请检查USB2XXX.dll和libusb-1.0.dll文件","错误",1000,); + } + if(DllHandle == null)return 1; + return 0; + } + + //刷新硬件 + FlashHw = function(){ + + if(DllHandle = null){ + //DLL为空,返回 + AvailableHW = {} + return 0; + } + var arr_temp = {int value[] = { length = 10/*可以使用变量*/ } }//类似动态数组 + HwNum = DllHandle.USB_ScanDevice(arr_temp) + AvailableHW = {} + for(i=1;HwNum;1){ + var devtemp = {}; + devtemp.devnum = i; + devtemp.channel = 1; + devtemp.hLINHW = arr_temp.value[i]; + devtemp.name = "dev-" + i + ":" + tostring(arr_temp.value[i],16); + ..table.push(AvailableHW,devtemp); + } + return HwNum; //返回有效硬件数 + } + + //获取设备信息 + GetDevInfo = function(index){ + if(index > HwNum) + { //如果序号大于最大硬件数 + return 0; + } + DllHandle.USB_OpenDevice(AvailableHW[index].hLINHW); + var DeviceInfo = ..usb2canfd.DEVICE_INFO(); + var funcstr = ..raw.buffer(100); + + var ret = DllHandle.DEV_GetDeviceInfo(AvailableHW[index].hLINHW,DeviceInfo,funcstr); + + return ret,DeviceInfo,funcstr; + } + + //获取有效硬件 + GetAvailableHW = function(){ + return AvailableHW; + } + + //打开设备,包括初始化通道 + OpenDevice = function(index,channel,canfd){ + if(index > HwNum) + { //如果序号大于最大硬件数 + return 0; + } + var ret = DllHandle.USB_OpenDevice(AvailableHW[index].hLINHW) + canfd = true; + if(canfd == true){ + canconfig = ..usb2canfd.CANFD_INIT_CONFIG(); + + canconfig.Mode = 0; //0-正常模式,1-自发自收模式 + canconfig.ISOCRCEnable = 0;//0-禁止ISO CRC,1-使能ISO CRC + canconfig.RetrySend = 0;//0-禁止重发,1-无限制重发 + canconfig.ResEnable = 1;//0-不接入内部120欧终端电阻,1-接入内部120欧终端电阻 + //波特率参数可以用TCANLINPro软件里面的波特率计算工具计算 + //仲裁段波特率参数,波特率=40M/NBT_BRP*(1+NBT_SEG1+NBT_SEG2) + canconfig.NBT_BRP = 1; //参数来自官方上位机,默认500K + canconfig.NBT_SEG1 = 59; + canconfig.NBT_SEG2 = 20; + canconfig.NBT_SJW = 2; + //数据段波特率参数,波特率=40M/DBT_BRP*(1+DBT_SEG1+DBT_SEG2) + canconfig.DBT_BRP = 2; //参数来自官方上位机,默认500K + canconfig.DBT_SEG1 = 29; + canconfig.DBT_SEG2 = 10; + canconfig.DBT_SJW = 2; + + ret = DllHandle.CANFD_Init(AvailableHW[index].hLINHW,channel,canconfig); + } + else { + canconfig = ..usb2canfd.CAN_INIT_CONFIG(); + + canconfig.CAN_Mode = 0;//0-正常模式 1-环回模式 + + canconfig.CAN_ABOM = 0;//禁止自动离线 + canconfig.CAN_NART = 1;//禁止报文重传 + canconfig.CAN_RFLM = 0;//FIFO满之后覆盖旧报文 + canconfig.CAN_TXFP = 1;//发送请求决定发送顺序 + //配置波特率,波特率 = 100M/(BRP*(SJW+BS1+BS2)) + canconfig.CAN_BRP = 25; + canconfig.CAN_BS1 = 2; + canconfig.CAN_BS2 = 1; + canconfig.CAN_SJW = 1; + ret = DllHandle.CAN_Init(AvailableHW[index].hLINHW,channel,canconfig); + } + + canfd_connected = canfd; + if(ret == 0){//调用成功 + Hwconnected = AvailableHW[index].hLINHW; + Chconntected = channel; + + } + else { + Hwconnected = null + Chconntected = null; + } + + return ret; + } + + //关闭设备 + CloseDevice = function(){ + if(Hwconnected == null){ + return; + } + try{ + DllHandle.USB_CloseDevice(Hwconnected); + Hwconnected = null; + } + } + + //是否连接 + isConnected = function(){ + if(Hwconnected == null){ + return false; + } + else { + return true; + } + + } + + + //发送报文 + SendMsg = function(id,data){ + if(Hwconnected == null){//未连接 + return 0; + } + if(#data == 0 || #data>8){//长度不对 + return 0; + } + var ret = 0; + //console.log("发送报文") + if(canfd_connected == true){ + var msg = ..usb2canfd.CANFD_MSG(); + msg.Flags = 0; + if(id <= 0x7ff){ + msg.ID = id; //| (1<<31);//扩展帧 + } + else { + msg.ID = id | (1<<31);//扩展帧 + } + + + msg.DLC = #data; + msg.Data = data; + ret = DllHandle.CANFD_SendMsg(Hwconnected,Chconntected,msg,1); + } + else { + var msg = ..usb2canfd.CAN_MSG(); + } + + + return ret; + } + + //从设备缓冲区获取报文 + GetMsg = function(){ + var ret = 0; + var retdata = {}; + if(canfd_connected == true){ + //CANFD + do{ + var msgbuf = ..usb2canfd.CANFD_MSG(); + ret = DllHandle.CANFD_GetMsg(Hwconnected,CANIndex,msgbuf,1); + if(ret == 1){ + var data = {}; + for(i=1;msgbuf.DLC;1){ + data[i] = msgbuf.Data[i]; + } + var msg = {"id"=msgbuf.ID;"data"=data;};// + ..table.push(retdata,msg); + } + }while(ret > 0) + } + else { + //CAN + } + + + return retdata; + } + + GetDiag = function(data){ + if(#data<2){ + return 0,1; + } + var UDSAddr = ..usb2canfd.CAN_UDS_ADDR() + UDSAddr.Flag = 1;//使用扩展帧 + UDSAddr.AddrFormats = 0; + UDSAddr.ReqID = 0x18dadff1; + UDSAddr.ResID = 0x18daf1df; + UDSAddr.MaxDLC = 8; + var req_data = ..raw.buffer(#data); + for(i=1;#data;1){ + req_data[i] = data[i]; + } + ret = DllHandle.CAN_UDS_Request(Hwconnected,CANIndex,UDSAddr,req_data,#data); + var res_data = ..raw.buffer(4096); + //sleep(10); + var ret = DllHandle.CAN_UDS_Response(Hwconnected,CANIndex,UDSAddr,res_data,1000); + + return ret,2,res_data; + } + + + + } +} + + +/**intellisense() +usb2canfd = 图莫斯CANFD驱动 +usb2canfd.USB2CANHW = USB2CAN库 +usb2canfd.USB2CANHW() = 创建设备对象\n!usb2canfdUSB2CANHW. +!usb2canfdUSB2CANHW.LoadDll() = 加载DLL +!usb2canfdUSB2CANHW.FlashHw() = 刷新硬件 +!usb2canfdUSB2CANHW.GetDevInfo() = 获取设备信息 +!usb2canfdUSB2CANHW.GetAvailableHW() = 获取有效设备,需要先FlashHw()刷新 +!usb2canfdUSB2CANHW.OpenDevice() = 打开设备 +!usb2canfdUSB2CANHW.CloseDevice() = 关闭设备 +!usb2canfdUSB2CANHW.isConnected() = 是否已连接 +!usb2canfdUSB2CANHW.SendMsg() = 发送报文 +!usb2canfdUSB2CANHW.GetMsg() = 接收报文 +end intellisense**/ + diff --git a/main.aardio b/main.aardio new file mode 100644 index 0000000..cc4abf9 --- /dev/null +++ b/main.aardio @@ -0,0 +1,79 @@ +import fonts.fontAwesome; +import win.ui; +/*DSG{{*/ +mainForm = win.form(text="ALV-77B上位机";right=984;bottom=642;bgcolor=16777215;border="none";max=false) +mainForm.add( +caption={cls="bkplus";text="P417-77";left=35;top=12;right=160;bottom=30;color=15780518;dl=1;dt=1;font=LOGFONT(h=-16);z=5}; +custom={cls="custom";text="1";left=0;top=40;right=985;bottom=643;bgcolor=16777215;db=1;dl=1;dr=1;dt=1;z=1}; +logo={cls="bkplus";text='\uF0E4';left=6;top=9;right=35;bottom=34;color=15780518;dl=1;dt=1;font=LOGFONT(h=-18;name='FontAwesome');z=4}; +navDiag={cls="plus";text="诊断";left=421;top=5;right=541;bottom=40;align="left";color=16777215;dl=1;dt=1;font=LOGFONT(h=-16);iconStyle={align="left";font=LOGFONT(h=-19;name='FontAwesome');padding={left=12;top=4}};iconText='\uF108';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=39;bottom=1};x=0.5;y=0.2;z=8}; +navFirst={cls="plus";text="控制";left=180;top=5;right=300;bottom=40;align="left";color=16777215;dl=1;dt=1;font=LOGFONT(h=-16);iconStyle={align="left";font=LOGFONT(h=-19;name='FontAwesome');padding={left=12;top=4}};iconText='\uF00A';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=39;bottom=1};x=0.5;y=0.2;z=3}; +navHelp={cls="plus";text="信号";left=300;top=5;right=420;bottom=40;align="left";color=16777215;dl=1;dt=1;font=LOGFONT(h=-16);iconStyle={align="left";font=LOGFONT(h=-19;name='FontAwesome');padding={left=12;top=4}};iconText='\uF012';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=39;bottom=1};x=0.5;y=0.2;z=7}; +navSetting={cls="plus";text="设置";left=541;top=5;right=661;bottom=40;align="left";color=16777215;dl=1;dt=1;font=LOGFONT(h=-16);iconStyle={align="left";font=LOGFONT(h=-19;name='FontAwesome');padding={left=12;top=4}};iconText='\uF0AD';notify=1;paddingLeft=1;paddingRight=1;paddingTop=3;textPadding={left=39;bottom=1};x=0.5;y=0.2;z=6}; +titleBar={cls="bkplus";left=0;top=0;right=985;bottom=41;bgcolor=14977280;dl=1;dr=1;dt=1;z=2} +) +/*}}*/ + +import win.ui.simpleWindow; +win.ui.simpleWindow( mainForm ); + +import win.ui.tabs; +var tbs = win.ui.tabs( + mainForm.navFirst, + mainForm.navSetting, + mainForm.navHelp, + mainForm.navDiag +); + +tbs.skin({ + foreground={ + active=0xFFFFFFFF; + default=0x00FFFFFF; + hover=0x38FFFFFF + }; + color={ + default=0xFFFFFFFF; + }; + checked={ + foreground={default=0xFFFFFFFF;}; + color={default=0xFF42A875;}; + } +}) + +tbs.loadForm(1,"\dlg\show.aardio" ); +tbs.loadForm(2,"\dlg\switch.aardio" ); +tbs.loadForm(3,"\dlg\diagnostic.aardio"); +tbs.loadForm(4,"\dlg\setting.aardio" ); + +subscribe("语言",function(conf){ + if(conf == "English"){ + mainForm.navFirst.text = "Control" + mainForm.navSetting.text = "setting" + mainForm.navHelp.text = "Signal" + } + else { + mainForm.navFirst.text = "控制" + mainForm.navSetting.text = "设置" + mainForm.navHelp.text = "信号" + } + +} ) + +mainForm.navFirst.skin( + background = { + hover = "/res/images/btn-hover.png"; + focus = "/res/images/btn-focus.jpg"; + active = "/res/images/btn-active.png"; + disabled = "/res/images/btn-disabled.png"; + } +) +mainForm.navFirst.oncommand = function(id,event){ + FreshPos(); +} + +tbs.selIndex = 4; + + +mainForm.show(); +//mainForm.fullscreen(); +return win.loopMessage(); \ No newline at end of file diff --git a/res/P417.png b/res/P417.png new file mode 100644 index 0000000..f014ff6 Binary files /dev/null and b/res/P417.png differ diff --git a/res/icon.ico b/res/icon.ico new file mode 100644 index 0000000..dfbb71b Binary files /dev/null and b/res/icon.ico differ