commit fe83261e37400cb5d801e9fdd97c834fbc615d6a Author: sunbeam Date: Sat May 14 15:57:52 2022 +0800 初版 diff --git a/USB2XXX.dll b/USB2XXX.dll new file mode 100644 index 0000000..b7649ce Binary files /dev/null and b/USB2XXX.dll differ diff --git a/default.aproj b/default.aproj new file mode 100644 index 0000000..09c5116 --- /dev/null +++ b/default.aproj @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/lib/config.aardio b/lib/config.aardio new file mode 100644 index 0000000..a1cbfc5 --- /dev/null +++ b/lib/config.aardio @@ -0,0 +1,20 @@ +//config 配置文件 +import fsys.config; +config = fsys.config("/config/"); +//config = fsys.config( io.appData("/软件作者/应用程序名/") ); + +//不需要序列化的配置名字前请添加下划线 +namespace config { + __appName = "应用程序名"; + __appVersion = "1.0.0.01"; + __appDescription = "这是一个测试程序"; + __website = "http://www.aardio.com/"; +} + +/**intellisense(config) +__appName = 应用程序名 +__appVersion = 应用程序内部版本号 +__appDescription = 程序说明 +__website = 官方网站 +? = 配置文件名,\n读写配置并序列化为一个表对象,\n表的成员值可以是支持序列化的普通变量,支持table对象\n配置文件在首次使用时自动加载,退出程序时自动保存\n!fsys_table. +end intellisense**/ \ No newline at end of file diff --git a/lib/usb2canfd.aardio b/lib/usb2canfd.aardio new file mode 100644 index 0000000..8f0eea5 --- /dev/null +++ b/lib/usb2canfd.aardio @@ -0,0 +1,310 @@ +/* +*使用说明: +*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 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]; //报文的数据。 + } + + 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(){ + import console; + 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){ + if(index > HwNum) + { //如果序号大于最大硬件数 + return 0; + } + var ret = DllHandle.USB_OpenDevice(AvailableHW[index].hLINHW) + + 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); + + if(ret == 0){//调用成功 + Hwconnected = AvailableHW[index].hLINHW; + Chconntected = channel; + } + else { + Hwconnected = null + Chconntected = null; + } + + return ret; + } + + //关闭设备 + CloseDevice = function(){ + //console.print("-----------------CloseDevice ---------") + 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 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; + var ret = DllHandle.CANFD_SendMsg(Hwconnected,Chconntected,msg,1); + + return ret; + } + + //从设备缓冲区获取报文 + GetMsg = function(){ + var ret = 0; + var retdata = {}; + 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) + + return retdata; + } + + GetDiag = function(data){ + if(#data<2){ + return 0,1; + } + var UDSAddr = ..usb2canfd.CAN_UDS_ADDR() + UDSAddr.Flag = 1;//使用扩展帧 + UDSAddr.AddrFormats = 0; + UDSAddr.ReqID = 0x18dadff1; + UDSAddr.ResID = 0x18daf1df; + UDSAddr.MaxDLC = 8; + var req_data = ..raw.buffer(#data); + for(i=1;#data;1){ + req_data[i] = data[i]; + } + ret = DllHandle.CAN_UDS_Request(Hwconnected,CANIndex,UDSAddr,req_data,#data); + var res_data = ..raw.buffer(4096); + //sleep(10); + var ret = DllHandle.CAN_UDS_Response(Hwconnected,CANIndex,UDSAddr,res_data,1000); + + return ret,2,res_data; + } + + + + } +} + + +/**intellisense() +usb2canfd = 图莫斯CANFD驱动 +usb2canfd.USB2CANHW = USB2CAN库 +usb2canfd.USB2CANHW() = 创建设备对象\n!usb2canfdUSB2CANHW. +!usb2canfdUSB2CANHW.LoadDll() = 加载DLL +!usb2canfdUSB2CANHW.FlashHw() = 刷新硬件 +!usb2canfdUSB2CANHW.GetDevInfo() = 获取设备信息 +!usb2canfdUSB2CANHW.GetAvailableHW() = 获取有效设备,需要先FlashHw()刷新 +!usb2canfdUSB2CANHW.OpenDevice() = 打开设备 +!usb2canfdUSB2CANHW.CloseDevice() = 关闭设备 +!usb2canfdUSB2CANHW.isConnected() = 是否已连接 +!usb2canfdUSB2CANHW.SendMsg() = 发送报文 +!usb2canfdUSB2CANHW.GetMsg() = 接收报文 +end intellisense**/ + diff --git a/libusb-1.0.dll b/libusb-1.0.dll new file mode 100644 index 0000000..5377cb4 Binary files /dev/null and b/libusb-1.0.dll differ diff --git a/main.aardio b/main.aardio new file mode 100644 index 0000000..56a9299 --- /dev/null +++ b/main.aardio @@ -0,0 +1,123 @@ +import win.ui; +/*DSG{{*/ +mainForm = win.form(text="CAN_Bootloader";right=599;bottom=399;border="dialog frame";max=false) +mainForm.add( +btnConnect={cls="button";text="连接";left=204;top=64;right=289;bottom=90;z=4}; +btnFlash={cls="button";text="开始刷写";left=152;top=180;right=272;bottom=205;z=10}; +btnFresh={cls="button";text="刷新";left=204;top=28;right=288;bottom=54;z=2}; +btnOpen={cls="button";text="打开文件";left=31;top=180;right=131;bottom=206;z=9}; +btnReadF186={cls="button";text="读取当前会话";left=19;top=293;right=118;bottom=321;z=14}; +btnReadHw={cls="button";text="读取硬件版本号";left=17;top=263;right=116;bottom=291;z=13}; +btnReadSw={cls="button";text="读取软件版本号";left=17;top=233;right=116;bottom=261;z=11}; +btnTest={cls="button";text="测试";left=173;top=355;right=272;bottom=383;z=12}; +cbbChannel={cls="combobox";left=58;top=64;right=191;bottom=90;edge=1;items={};mode="dropdown";z=3}; +cbbDev={cls="combobox";left=58;top=27;right=191;bottom=53;edge=1;items={};mode="dropdown";z=1}; +edFile={cls="edit";left=27;top=141;right=281;bottom=165;edge=1;readonly=1;z=8}; +edit={cls="edit";left=296;top=8;right=582;bottom=383;edge=1;multiline=1;z=5}; +static={cls="static";text="设备";left=1;top=28;right=61;bottom=52;align="center";center=1;transparent=1;z=6}; +static2={cls="static";text="通道";left=1;top=66;right=61;bottom=90;align="center";center=1;transparent=1;z=7} +) +/*}}*/ + +import win; +import usb2canfd; + + +Display = function(str){ + mainForm.edit.print(tostring(time()) + " " + str); +} + + + +CANHw = usb2canfd.USB2CANHW(); +var ret = CANHw.LoadDll(); +if(ret == 0){ + Display("DLL加载成功"); +} + + + +mainForm.cbbChannel.add("通道1"); +mainForm.cbbChannel.add("通道2"); +mainForm.cbbChannel.selIndex = 1 + + +mainForm.btnFresh.oncommand = function(id,event){ + mainForm.cbbDev.clear(); + var hwnum = CANHw.FlashHw(); + if(hwnum == 0){ + mainForm.cbbDev.text = "未找到硬件" + } + else { + var allhw = CANHw.GetAvailableHW(); + for(i=1;#allhw;1){ + mainForm.cbbDev.add(allhw[i].name); + } + } + mainForm.cbbDev.selIndex = 1 + ::PostThreadMessage(thrdId,100,0,0)//自定义消息 +} + +mainForm.btnConnect.oncommand = function(id,event){ + ::PostThreadMessage(thrdId,101,mainForm.cbbDev.selIndex,mainForm.cbbChannel.selIndex - 1)//自定义消息 + /* + var ret = CANHw.OpenDevice(mainForm.cbbDev.selIndex,mainForm.cbbChannel.selIndex - 1);//通道为0和1 + if(ret == 0){ + Display("连接成功"); + } + else { + Display("连接失败"); + } + */ +} + +//CAN通讯线程 +import thread.command; +var listener = thread.command(); +listener.$Display = function(str){ + Display(str); +} + +//线程函数 +var CanThread = function(){ + + //线程函数内部要添加自已的import语句 + import win; + import console; + console.log("线程开始运行") + loadcodex("\user\CanThread.aardio");//加载线程程序 + //在子线程启动消息循环 + win.loopMessage(FuncLoopMsg) +} +var DiagReadDID = function(did){ + ::PostThreadMessage(thrdId,110,did,0)//自定义消息 +} +var Diag10Req = function(num){ + ::PostThreadMessage(thrdId,111,num,0)//自定义消息 +} + + +mainForm.btnReadSw.oncommand = function(id,event){ + DiagReadDID(0xF195); +} + + +mainForm.btnReadHw.oncommand = function(id,event){ + DiagReadDID(0xF192); +} + +mainForm.btnReadF186.oncommand = function(id,event){ + DiagReadDID(0xF186); +} + +mainForm.btnTest.oncommand = function(id,event){ + Diag10Req(0x03); +} + +thrdHandle,thrdId = thread.create( CanThread ) + + + + +mainForm.show(); +return win.loopMessage(); \ No newline at end of file diff --git a/user/CanThread.aardio b/user/CanThread.aardio new file mode 100644 index 0000000..81889b1 --- /dev/null +++ b/user/CanThread.aardio @@ -0,0 +1,196 @@ +import usb2canfd; +import thread.command; +import win.timer; +//初始化CAN句柄对象 +CANHw = usb2canfd.USB2CANHW(); +CANHw.LoadDll(); + +DiagReqID = 0x18dadff1; +DiagRespID = 0x18daf1df; + +//注册一个消息钩子函数 +FuncLoopMsg = function(msg){ + //console.log( "收到消息",msg.message ); + //console.dumpJson(msg); + select(msg.message) { + case 100 {//刷新硬件 + FuncFreshHw(); + } + case 101 { + FuncConnect(msg.wParam,msg.lParam); + } + case 102 { + FuncBootload(); + } + case 103 { + FuncStop(); + } + case 110 {//readDID + FuncReadDID(msg.wParam); + } + case 111 { + FuncReq10(msg.wParam); + } + case 112 { + FuncReq28(msg.wParam); + } + case 113 { + FuncReq85(msg.wParam); + } + case 114 { + FuncReq27(msg.wParam); + } + else { + + } + } +} + + + + +FuncFreshHw = function(){ + var hwnum = CANHw.FlashHw(); + if(hwnum == 0){ + //mainForm.cbbDev.text = "未找到硬件" + } + else { + FuncDisplay("找到硬件") + } +} + +FuncConnect = function(dev,chn){ + var ret = CANHw.OpenDevice(dev,chn); + if(ret == 0){ + FuncDisplay("连接成功"); + } + else { + FuncDisplay("连接失败"); + } +} + +FuncDisplay = function(str){ + thread.command.$Display(str);//"线程" + +} + + +loadcodex("\user\Diag10code.aardio"); +loadcodex("\user\Diag22code.aardio"); +loadcodex("\user\Diag85code.aardio"); +loadcodex("\user\Diag28code.aardio"); +loadcodex("\user\Diag7Fcode.aardio"); + +var RespState = 0; + +FuncDiagPro = function(diagmsg){ + //console.log("诊断服务") + //console.dumpJson(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 { + } + case 0x74 { + } + case 0x76 { + } + 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)) + } + else { + } + } + RespState = diagmsg.sid; +} + +FuncStop = function(){ + stopflag = 1; +} + +FuncWait = function(sid){ + for(i=1;40;1){ + sleep(100); + if(RespState == (sid + 0x40)){//正响应 + return 0; + } + errsid,errnrc = FuncGetNrc() + if(errsid == sid){ + if(errnrc == 0x78){ + FuncClrNrc();//等待 + i = 1; + } + else { + return 1; //负响应 + } + + } + } + +} + + +FuncBootload = function(){ + +} + + + + +timer1 = win.timer(,1); +diagresp = {} +timer1.onTimer = function(){ + if(CANHw.isConnected() == false){ + return; + } + ret = CANHw.GetMsg(); + 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] <= 0x06){ + //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){ + 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); + } + } + } + + + } + } + +} +timer1.enable(); +FuncDisplay("正在运行"); + + diff --git a/user/Diag10code.aardio b/user/Diag10code.aardio new file mode 100644 index 0000000..b1cde35 --- /dev/null +++ b/user/Diag10code.aardio @@ -0,0 +1,26 @@ + +//发送 +FuncReq10 = function(num){ + if(num >= 1 && num <= 3){ + var data = {0x02,0x10,num,0,0,0,0,0}; + CANHw.SendMsg(DiagReqID,data); + } + +} +//接收 +FuncDiag10Pro = function(data){ + //console.dumpJson(data); + select(data[1]) { + case 1 { + FuncDisplay("进入默认会话") + } + case 2 { + FuncDisplay("进入boot会话") + } + case 3 { + FuncDisplay("进入扩展会话") + } + else { + } + } +} diff --git a/user/Diag22code.aardio b/user/Diag22code.aardio new file mode 100644 index 0000000..4a33976 --- /dev/null +++ b/user/Diag22code.aardio @@ -0,0 +1,38 @@ +var diag22state = 0; +//发送 +FuncReadDID = function(did){ + if(CANHw.isConnected() == false){ + return; + } + var data = {0x03,0x22,did>>8,did&0xff,0,0,0,0}; + CANHw.SendMsg(DiagReqID,data); + diag22state = 1; +} + +//接收 +FuncDiag22Pro = function(data){ + //console.log("诊断22服务") + if(#data < 3){ + return; + } + var did = (data[1]<<8) + data[2]; + select(did) { + case 0xF192 { + FuncDisplay("硬件版本号"); + FuncDisplay(string.pack(table.slice(data,3))); + } + case 0xF195 { + FuncDisplay("软件版本号"); + FuncDisplay(string.pack(table.slice(data,3))); + } + case 0xF186 { + FuncDisplay("当前会话: " + tostring(data[3])); + + } + case !=0 { + } + else { + } + } + +} \ No newline at end of file diff --git a/user/Diag27code.aardio b/user/Diag27code.aardio new file mode 100644 index 0000000..0c647e9 --- /dev/null +++ b/user/Diag27code.aardio @@ -0,0 +1,25 @@ +//发送 +FuncReq27 = function(num){ + if(num >= 1 && num <= 3){ + var data = {0x02,0x28,num,0,0,0,0,0}; + CANHw.SendMsg(DiagReqID,data); + } + +} +//接收 +FuncDiag27Pro = function(data){ + //console.dumpJson(data); + select(data[1]) { + case 1 { + FuncDisplay("使能接收,禁能发送") + } + case 2 { + FuncDisplay("28 - TDB02") + } + case 3 { + FuncDisplay("28 - TDB03") + } + else { + } + } +} \ No newline at end of file diff --git a/user/Diag28code.aardio b/user/Diag28code.aardio new file mode 100644 index 0000000..e1ba67b --- /dev/null +++ b/user/Diag28code.aardio @@ -0,0 +1,26 @@ + +//发送 +FuncReq28 = function(num){ + if(num >= 1 && num <= 3){ + var data = {0x02,0x28,num,0,0,0,0,0}; + CANHw.SendMsg(DiagReqID,data); + } + +} +//接收 +FuncDiag28Pro = function(data){ + //console.dumpJson(data); + select(data[1]) { + case 1 { + FuncDisplay("使能接收,禁能发送") + } + case 2 { + FuncDisplay("28 - TDB02") + } + case 3 { + FuncDisplay("28 - TDB03") + } + else { + } + } +} \ No newline at end of file diff --git a/user/Diag7Fcode.aardio b/user/Diag7Fcode.aardio new file mode 100644 index 0000000..d1d9fe5 --- /dev/null +++ b/user/Diag7Fcode.aardio @@ -0,0 +1,25 @@ + +var errSID=0,errNRC=0; +FuncGetNrc = function(){ + return errSID,errNRC; +} +FuncClrNrc = function(){ + //return errSID,errNRC; + errSID = 0; + errNRC = 0; +} + +//接收 +FuncDiag7FPro = function(data){ + //console.dumpJson(data); + select(data[2]) { + case 0x78 { + FuncDisplay("服务正忙") + } + else { + FuncDisplay("错误") + } + } + errSID = data[1]; + errNRC = data[2]; +} \ No newline at end of file diff --git a/user/Diag85code.aardio b/user/Diag85code.aardio new file mode 100644 index 0000000..b3975b0 --- /dev/null +++ b/user/Diag85code.aardio @@ -0,0 +1,27 @@ + +//发送 +FuncReq85 = function(num){ + if(num >= 1 && num <= 3){ + var data = {0x02,0x85,num,0,0,0,0,0}; + CANHw.SendMsg(DiagReqID,data); + } + +} +//接收 +FuncDiag85Pro = function(data){ + //console.dumpJson(data); + select(data[1]) { + case 0x01 { + FuncDisplay("DTC - 01") + } + case 0x02 { + FuncDisplay("DTC禁能") + } + case 3 { + FuncDisplay("DTC - 01") + } + else { + FuncDisplay("DTC - TDB") + } + } +} \ No newline at end of file