初版2.0
This commit is contained in:
commit
ac0e51a552
6
.gitignore
vendored
Normal file
6
.gitignore
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
.build
|
||||
dist
|
||||
/config.ini
|
||||
/libusb-1.0.dll
|
||||
/log.txt
|
||||
/USB2XXX.dll
|
26
CANThread/CAN_Msg.aardio
Normal file
26
CANThread/CAN_Msg.aardio
Normal 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
256
CANThread/CanThread.aardio
Normal 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("正在运行");
|
||||
|
||||
|
119
CANThread/CanThreadStart.aardio
Normal file
119
CANThread/CanThreadStart.aardio
Normal 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 );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
33
CANThread/Diag10code.aardio
Normal file
33
CANThread/Diag10code.aardio
Normal 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 {
|
||||
}
|
||||
}
|
||||
}
|
9
CANThread/Diag11code.aardio
Normal file
9
CANThread/Diag11code.aardio
Normal 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("复位成功")
|
||||
}
|
80
CANThread/Diag22code.aardio
Normal file
80
CANThread/Diag22code.aardio
Normal 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))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
77
CANThread/Diag27code.aardio
Normal file
77
CANThread/Diag27code.aardio
Normal 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;
|
||||
}
|
||||
|
||||
}
|
27
CANThread/Diag28code.aardio
Normal file
27
CANThread/Diag28code.aardio
Normal 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 {
|
||||
}
|
||||
}
|
||||
}
|
59
CANThread/Diag2Ecode.aardio
Normal file
59
CANThread/Diag2Ecode.aardio
Normal 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) + "成功");
|
||||
|
||||
}
|
46
CANThread/Diag7Fcode.aardio
Normal file
46
CANThread/Diag7Fcode.aardio
Normal 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));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
27
CANThread/Diag85code.aardio
Normal file
27
CANThread/Diag85code.aardio
Normal 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")
|
||||
}
|
||||
}
|
||||
}
|
85
CANThread/GeelySecurety.aardio
Normal file
85
CANThread/GeelySecurety.aardio
Normal 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
30
default.aproj
Normal 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
189
dlg/diagnostic.aardio
Normal 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
314
dlg/msg.aardio
Normal 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
53
dlg/setting.aardio
Normal 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
218
dlg/show.aardio
Normal 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
382
dlg/switch.aardio
Normal 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
17
lib/config.aardio
Normal 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
121
lib/style.aardio
Normal 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
379
lib/usb2canfd.aardio
Normal 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
79
main.aardio
Normal 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
BIN
res/P417.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 433 KiB |
BIN
res/icon.ico
Normal file
BIN
res/icon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 34 KiB |
Loading…
x
Reference in New Issue
Block a user