初版2.0

This commit is contained in:
sunbeam 2023-03-14 15:49:33 +08:00
commit ac0e51a552
25 changed files with 2632 additions and 0 deletions

6
.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
.build
dist
/config.ini
/libusb-1.0.dll
/log.txt
/USB2XXX.dll

26
CANThread/CAN_Msg.aardio Normal file
View File

@ -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);
}

256
CANThread/CanThread.aardio Normal file
View File

@ -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("正在运行");

View File

@ -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 );

View File

@ -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 {
}
}
}

View File

@ -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("复位成功")
}

View File

@ -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))
}
}
}

View File

@ -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;
}
}

View File

@ -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 {
}
}
}

View File

@ -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) + "成功");
}

View File

@ -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));
}
}
}

View File

@ -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")
}
}
}

View File

@ -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;
}

30
default.aproj Normal file
View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<project ver="10" name="P417上位机" libEmbed="true" icon="..." ui="win" output="P417上位机.exe" CompanyName="单位名称" FileDescription="P417上位机" LegalCopyright="Copyright (C) 作者 2022" ProductName="P417上位机" InternalName="P417上位机" FileVersion="0.0.0.06" ProductVersion="0.0.0.06" publishDir="/dist/" dstrip="false" local="false" ignored="false">
<file name="main.aardio" path="main.aardio" comment="main.aardio"/>
<folder name="资源文件" path="res" embed="true" local="false" ignored="false">
<file name="img001.png" path="res\img001.png" comment="res\img001.png"/>
<file name="img002.png" path="res\img002.png" comment="res\img002.png"/>
</folder>
<folder name="窗体文件" path="dlg" comment="目录" embed="true" local="false" ignored="false">
<file name="msg.aardio" path="dlg\msg.aardio" comment="dlg\msg.aardio"/>
<file name="setting.aardio" path="dlg\setting.aardio" comment="dlg\setting.aardio"/>
<file name="show.aardio" path="dlg\show.aardio" comment="dlg\show.aardio"/>
<file name="switch.aardio" path="dlg\switch.aardio" comment="dlg\switch.aardio"/>
<file name="diagnostic.aardio" path="dlg\diagnostic.aardio" comment="dlg\diagnostic.aardio"/>
</folder>
<folder name="CANThread" path="CANThread" comment="CANThread" local="false" embed="false" ignored="false">
<file name="CanThread.aardio" path="CANThread\CanThread.aardio" comment="CANThread\CanThread.aardio"/>
<file name="CanThreadStart.aardio" path="CANThread\CanThreadStart.aardio" comment="CANThread\CanThreadStart.aardio"/>
<file name="CAN_Msg.aardio" path="CANThread\CAN_Msg.aardio" comment="CANThread\CAN_Msg.aardio"/>
<file name="Diag10code.aardio" path="CANThread\Diag10code.aardio" comment="CANThread\Diag10code.aardio"/>
<file name="Diag11code.aardio" path="CANThread\Diag11code.aardio" comment="CANThread\Diag11code.aardio"/>
<file name="Diag22code.aardio" path="CANThread\Diag22code.aardio" comment="CANThread\Diag22code.aardio"/>
<file name="Diag27code.aardio" path="CANThread\Diag27code.aardio" comment="CANThread\Diag27code.aardio"/>
<file name="Diag28code.aardio" path="CANThread\Diag28code.aardio" comment="CANThread\Diag28code.aardio"/>
<file name="Diag2Ecode.aardio" path="CANThread\Diag2Ecode.aardio" comment="CANThread\Diag2Ecode.aardio"/>
<file name="Diag7Fcode.aardio" path="CANThread\Diag7Fcode.aardio" comment="CANThread\Diag7Fcode.aardio"/>
<file name="Diag85code.aardio" path="CANThread\Diag85code.aardio" comment="CANThread\Diag85code.aardio"/>
<file name="GeelySecurety.aardio" path="CANThread\GeelySecurety.aardio" comment="CANThread\GeelySecurety.aardio"/>
<file name="securety.aardio" path="CANThread\securety.aardio" comment="CANThread\securety.aardio"/>
</folder>
</project>

189
dlg/diagnostic.aardio Normal file
View File

@ -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;

314
dlg/msg.aardio Normal file
View File

@ -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<<len) - 1));
}
import win.timer;
MsgProTable = {0x300,0x305,0x307,0x309,
0x400,0x401,0x402,0x403,0x404,0x405,0x406,0x407,0x408,
0x410,0x411,0x412,0x413,0x414,0x415,0x416,0x417,0x418};
MsgProTimer = win.timer(,100);
MsgProTimer.onTimer = function(){
for(k,v in MsgProTable){
var ret = CT_GetRxMsg(v);
if(ret != null){
MsgPro(v,ret);
}
}
}
MsgPro = function(id,data){
if(data == null){
return ;
}
select(id) {
case 0x309 {
prx = data[3];
pry = data[4];
prs = getbitdata(data[1],4,2);
}
case 0x300 {
plx = data[4];
ply = data[5];
pls = getbitdata(data[2],4,2);
}
case 0x305 {
keyLdown = getbitdata(data[1],1,2);
keyLok = getbitdata(data[1],4,2);
keyLup = getbitdata(data[2],0,2);
keyLright = getbitdata(data[2],3,2);
keyLleft = getbitdata(data[2],6,2);
keyL1 = getbitdata(data[3],4,2);
keyL2 = getbitdata(data[1],6,2);
keyL3 = getbitdata(data[6],6,2);
sldLlr = getbitdata(data[5],1,3);
sldLud = getbitdata(data[8],5,3);
}
case 0x307 {
keyRleft = getbitdata(data[1],0,2);
keyRdown = getbitdata(data[1],3,2);
keyRok = getbitdata(data[1],6,2);
keyRup = getbitdata(data[2],3,2);
keyRright = getbitdata(data[2],6,2);
keyR1 = getbitdata(data[4],6,2);
keyR2 = getbitdata(data[3],2,2);
keyR3 = getbitdata(data[3],0,2);
sldRlr = getbitdata(data[5],5,3);
sldRud = getbitdata(data[5],1,3);
sldRvol = getbitdata(data[4],2,3);
}
case 0x400 {
press_baseline_data[1] = data[1] + ((data[2]&0x0f)<<8);
press_signal_data[1] = data[3] + ((data[4]&0x0f)<<8);
press_baseline[1]=press_baseline_data[1];
press_signal[1]=press_signal_data[1];
}
case 0x401 {
//console.log(1);
lkey_baseline_data[1] = data[1] + ((data[2]&0x0f)<<8);
lkey_signal_data[1] = data[3] + ((data[4]&0x0f)<<8);
lkey_baseline_data[2] = data[5] + ((data[6]&0x0f)<<8);
lkey_signal_data[2] = data[7] + ((data[8]&0x0f)<<8);
lkey_baseline[1]=lkey_baseline_data[1];
lkey_signal[1]=lkey_signal_data[1];
lkey_baseline[2]=lkey_baseline_data[2];
lkey_signal[2]=lkey_signal_data[2];
}
case 0x402 {
lkey_baseline_data[3] = data[1] + ((data[2]&0x0f)<<8);
lkey_signal_data[3] = data[3] + ((data[4]&0x0f)<<8);
lkey_baseline_data[4] = data[5] + ((data[6]&0x0f)<<8);
lkey_signal_data[4] = data[7] + ((data[8]&0x0f)<<8);
lkey_baseline[3]=lkey_baseline_data[3];
lkey_signal[3]=lkey_signal_data[3];
lkey_baseline[4]=lkey_baseline_data[4];
lkey_signal[4]=lkey_signal_data[4];
}
case 0x403 {
lkey_baseline_data[5] = data[1] + ((data[2]&0x0f)<<8);
lkey_signal_data[5] = data[3] + ((data[4]&0x0f)<<8);
lkey_baseline_data[6] = data[5] + ((data[6]&0x0f)<<8);
lkey_signal_data[6] = data[7] + ((data[8]&0x0f)<<8);
lkey_baseline[5]=lkey_baseline_data[5];
lkey_signal[5]=lkey_signal_data[5];
lkey_baseline[6]=lkey_baseline_data[6];
lkey_signal[6]=lkey_signal_data[6];
}
case 0x404 {
lkey_baseline_data[7] = data[1] + ((data[2]&0x0f)<<8);
lkey_signal_data[7] = data[3] + ((data[4]&0x0f)<<8);
lkey_baseline_data[8] = data[5] + ((data[6]&0x0f)<<8);
lkey_signal_data[8] = data[7] + ((data[8]&0x0f)<<8);
lkey_baseline[7]=lkey_baseline_data[7];
lkey_signal[7]=lkey_signal_data[7];
lkey_baseline[8]=lkey_baseline_data[8];
lkey_signal[8]=lkey_signal_data[8];
}
case 0x405 {
lkey_baseline_data[9] = data[1] + ((data[2]&0x0f)<<8);
lkey_signal_data[9] = data[3] + ((data[4]&0x0f)<<8);
lkey_baseline_data[10] = data[5] + ((data[6]&0x0f)<<8);
lkey_signal_data[10] = data[7] + ((data[8]&0x0f)<<8);
lkey_baseline[9]=lkey_baseline_data[9];
lkey_signal[9]=lkey_signal_data[9];
lkey_baseline[10]=lkey_baseline_data[10];
lkey_signal[10]=lkey_signal_data[10];
}
case 0x406 {
lkey_baseline_data[11] = data[1] + ((data[2]&0x0f)<<8);
lkey_signal_data[11] = data[3] + ((data[4]&0x0f)<<8);
lkey_baseline_data[12] = data[5] + ((data[6]&0x0f)<<8);
lkey_signal_data[12] = data[7] + ((data[8]&0x0f)<<8);
lkey_baseline[11]=lkey_baseline_data[11];
lkey_signal[11]=lkey_signal_data[11];
lkey_baseline[12]=lkey_baseline_data[12];
lkey_signal[12]=lkey_signal_data[12];
}
case 0x407 {
lkey_baseline_data[13] = data[1] + ((data[2]&0x0f)<<8);
lkey_signal_data[13] = data[3] + ((data[4]&0x0f)<<8);
lkey_baseline_data[14] = data[5] + ((data[6]&0x0f)<<8);
lkey_signal_data[14] = data[7] + ((data[8]&0x0f)<<8);
lkey_baseline[13]=lkey_baseline_data[13];
lkey_signal[13]=lkey_signal_data[13];
lkey_baseline[14]=lkey_baseline_data[14];
lkey_signal[14]=lkey_signal_data[14];
}
case 0x408 {
lkey_baseline_data[15] = data[1] + ((data[2]&0x0f)<<8);
lkey_signal_data[15] = data[3] + ((data[4]&0x0f)<<8);
lkey_baseline_data[16] = data[5] + ((data[6]&0x0f)<<8);
lkey_signal_data[16] = data[7] + ((data[8]&0x0f)<<8);
lkey_baseline[15]=lkey_baseline_data[15];
lkey_signal[15]=lkey_signal_data[15];
lkey_baseline[16]=lkey_baseline_data[16];
lkey_signal[16]=lkey_signal_data[16];
}
case 0x410 {
press_baseline_data[2] = data[1] + ((data[2]&0x0f)<<8);
press_signal_data[2] = data[3] + ((data[4]&0x0f)<<8);
press_baseline[2]=press_baseline_data[2];
press_signal[2]=press_signal_data[2];
}
case 0x411 {
rkey_baseline_data[1] = data[1] + ((data[2]&0x0f)<<8);
rkey_signal_data[1] = data[3] + ((data[4]&0x0f)<<8);
rkey_baseline_data[2] = data[5] + ((data[6]&0x0f)<<8);
rkey_signal_data[2] = data[7] + ((data[8]&0x0f)<<8);
rkey_baseline[1]=rkey_baseline_data[1];
rkey_signal[1]=rkey_signal_data[1];
rkey_baseline[2]=rkey_baseline_data[2];
rkey_signal[2]=rkey_signal_data[2];
}
case 0x412 {
rkey_baseline_data[3] = data[1] + ((data[2]&0x0f)<<8);
rkey_baseline_data[4] = data[3] + ((data[4]&0x0f)<<8);
rkey_signal_data[3] = data[5] + ((data[6]&0x0f)<<8);
rkey_signal_data[4] = data[7] + ((data[8]&0x0f)<<8);
rkey_baseline[3]=rkey_baseline_data[3];
rkey_signal[3]=rkey_signal_data[3];
rkey_baseline[4]=rkey_baseline_data[4];
rkey_signal[4]=rkey_signal_data[4];
}
case 0x413 {
rkey_baseline_data[5] = data[1] + ((data[2]&0x0f)<<8);
rkey_baseline_data[6] = data[3] + ((data[4]&0x0f)<<8);
rkey_signal_data[5] = data[5] + ((data[6]&0x0f)<<8);
rkey_signal_data[6] = data[7] + ((data[8]&0x0f)<<8);
rkey_baseline[5]=rkey_baseline_data[5];
rkey_signal[5]=rkey_signal_data[5];
rkey_baseline[6]=rkey_baseline_data[6];
rkey_signal[6]=rkey_signal_data[6];
}
case 0x414 {
rkey_baseline_data[7] = data[1] + ((data[2]&0x0f)<<8);
rkey_baseline_data[8] = data[3] + ((data[4]&0x0f)<<8);
rkey_signal_data[7] = data[5] + ((data[6]&0x0f)<<8);
rkey_signal_data[8] = data[7] + ((data[8]&0x0f)<<8);
rkey_baseline[7]=rkey_baseline_data[7];
rkey_signal[7]=rkey_signal_data[7];
rkey_baseline[8]=rkey_baseline_data[8];
rkey_signal[8]=rkey_signal_data[8];
}
case 0x415 {
rkey_baseline_data[9] = data[1] + ((data[2]&0x0f)<<8);
rkey_baseline_data[10] = data[3] + ((data[4]&0x0f)<<8);
rkey_signal_data[9] = data[5] + ((data[6]&0x0f)<<8);
rkey_signal_data[10] = data[7] + ((data[8]&0x0f)<<8);
rkey_baseline[9]=rkey_baseline_data[9];
rkey_signal[9]=rkey_signal_data[9];
rkey_baseline[10]=rkey_baseline_data[10];
rkey_signal[10]=rkey_signal_data[10];
}
case 0x416 {
rkey_baseline_data[11] = data[1] + ((data[2]&0x0f)<<8);
rkey_baseline_data[12] = data[3] + ((data[4]&0x0f)<<8);
rkey_signal_data[11] = data[5] + ((data[6]&0x0f)<<8);
rkey_signal_data[12] = data[7] + ((data[8]&0x0f)<<8);
rkey_baseline[11]=rkey_baseline_data[11];
rkey_signal[11]=rkey_signal_data[11];
rkey_baseline[12]=rkey_baseline_data[12];
rkey_signal[12]=rkey_signal_data[12];
}
case 0x417 {
rkey_baseline_data[13] = data[1] + ((data[2]&0x0f)<<8);
rkey_baseline_data[14] = data[3] + ((data[4]&0x0f)<<8);
rkey_signal_data[13] = data[5] + ((data[6]&0x0f)<<8);
rkey_signal_data[14] = data[7] + ((data[8]&0x0f)<<8);
rkey_baseline[13]=rkey_baseline_data[13];
rkey_signal[13]=rkey_signal_data[13];
rkey_baseline[14]=rkey_baseline_data[14];
rkey_signal[14]=rkey_signal_data[14];
}
case 0x418 {
rkey_baseline_data[15] = data[1] + ((data[2]&0x0f)<<8);
rkey_baseline_data[16] = data[3] + ((data[4]&0x0f)<<8);
rkey_signal_data[15] = data[5] + ((data[6]&0x0f)<<8);
rkey_signal_data[16] = data[7] + ((data[8]&0x0f)<<8);
rkey_baseline[15]=rkey_baseline_data[15];
rkey_signal[15]=rkey_signal_data[15];
rkey_baseline[16]=rkey_baseline_data[16];
rkey_signal[16]=rkey_signal_data[16];
}
else {
}
}
}

53
dlg/setting.aardio Normal file
View File

@ -0,0 +1,53 @@
import win.ui;
/*DSG{{*/
setting = win.form(text="aardio form";right=984;bottom=589)
setting.add(
btnConnect={cls="plus";text="连接";left=318;top=142;right=502;bottom=178;bgcolor=11580047;dl=0.32;dt=0.24;font=LOGFONT(h=-16;name='FontAwesome');iconStyle={align="left";font=LOGFONT(h=-16;name='FontAwesome');padding={left=20}};iconText='\uF066';notify=1;tabstop=1;z=3};
btnFresh={cls="plus";text="刷新";left=122;top=142;right=306;bottom=178;bgcolor=11580047;dl=0.12;dt=0.24;font=LOGFONT(h=-16;name='FontAwesome');iconStyle={align="left";font=LOGFONT(h=-16;name='FontAwesome');padding={left=20}};iconText='\uF021';notify=1;tabstop=1;z=2};
cbbDev={cls="combobox";left=123;top=89;right=372;bottom=115;ah=1;aw=1;dl=0.12;dt=0.15;edge=1;items={};mode="dropdown";z=5};
plus5={cls="plus";text="English";left=126;top=230;right=244;bottom=261;ah=1;align="left";aw=1;dl=0.13;dt=0.39;font=LOGFONT(h=-20;name='FontAwesome');iconStyle={align="left";font=LOGFONT(h=-16;name='FontAwesome');padding={left=5}};iconText='\uF0C8';notify=1;textPadding={left=30};z=1};
static={cls="static";left=121;top=32;right=434;bottom=48;transparent=1;z=6};
static4={cls="static";text="V2.0 20230314";left=5;top=556;right=241;bottom=587;font=LOGFONT(h=-22);notify=1;transparent=1;z=4}
)
/*}}*/
import usb2canfd;
import win.timer
import console;
loadcodex("\dlg\msg.aardio");
loadcodex("\CANThread\CanThreadStart.aardio");
setting.btnConnect.disabled = 1;
setting.btnFresh.oncommand = function(id,event){
setting.cbbDev.clear();//清空下拉框,防止反复刷新叠加
CT_Fresh();
sleep(100);
var ret = CT_GetCANHw();
if(ret != null && #ret > 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;

218
dlg/show.aardio Normal file
View File

@ -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();

382
dlg/switch.aardio Normal file
View File

@ -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;

17
lib/config.aardio Normal file
View File

@ -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**/

121
lib/style.aardio Normal file
View File

@ -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
}
}
}

379
lib/usb2canfd.aardio Normal file
View File

@ -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**/

79
main.aardio Normal file
View File

@ -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();

BIN
res/P417.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 433 KiB

BIN
res/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB