diff --git a/CAN_Bootloader/lib/usb2canfd.aardio b/CAN_Bootloader/lib/usb2canfd.aardio index 730c342..079ca27 100644 --- a/CAN_Bootloader/lib/usb2canfd.aardio +++ b/CAN_Bootloader/lib/usb2canfd.aardio @@ -55,6 +55,25 @@ namespace usb2canfd{ BYTE CAN_TXFP; //发送优先级管理,0-标识符决定,1-发送请求顺序决定 } + class CAN_FILTER_CONFIG{ + ctor( /*输入构造函数所需要的参数*/ ){ + + }; + type=me; + /*对象的所有成员必须用分号分隔*/ + BYTE Enable; //使能该过滤器,1-使能,0-禁止 + BYTE FilterIndex; //过滤器索引号,取值范围为0到13 + BYTE FilterMode; //过滤器模式,0-屏蔽位模式,1-标识符列表模式 + BYTE ExtFrame; //过滤的帧类型标志,为1 代表要过滤的为扩展帧,为0 代表要过滤的为标准帧。 + INT ID_Std_Ext; //验收码ID + INT ID_IDE; //验收码IDE + INT ID_RTR; //验收码RTR + INT MASK_Std_Ext; //屏蔽码ID,该项只有在过滤器模式为屏蔽位模式时有用 + INT MASK_IDE; //屏蔽码IDE,该项只有在过滤器模式为屏蔽位模式时有用 + INT MASK_RTR; //屏蔽码RTR,该项只有在过滤器模式为屏蔽位模式时有用 + } + + //CANfd信息帧的数据类型定义 class CANFD_MSG{ ctor( /*输入构造函数所需要的参数*/ ){ @@ -186,11 +205,49 @@ namespace usb2canfd{ return ret,DeviceInfo,funcstr; } + //获取设备信息 + GetNowInfo = function(){ + if(Hwconnected == null){ + return 0; + } + //DllHandle.USB_OpenDevice(Hwconnected); + var DeviceInfo = ..usb2canfd.DEVICE_INFO(); + var funcstr = ..raw.buffer(100); + + var ret = DllHandle.DEV_GetDeviceInfo(Hwconnected,DeviceInfo,funcstr); + + return ret,DeviceInfo,funcstr; + } + //获取有效硬件 GetAvailableHW = function(){ return AvailableHW; } + SetFilter = function(index){ + CANFilter = ..usb2canfd.CAN_FILTER_CONFIG(); + CANFilter.FilterIndex = 0; + CANFilter.Enable = 1; + CANFilter.ExtFrame = 0; //需要过滤接收的帧为标准帧 + CANFilter.FilterMode = 1;//标识符列表模式 + CANFilter.ID_IDE = 0; //接收到的数据帧IDE必须为1,也就是必须为扩展帧数据 + CANFilter.ID_RTR = 0; //接收到的帧类型必须为数据帧 + CANFilter.ID_Std_Ext = 0x620;//接收到的帧ID必须等于CANFilter.ID_Std_Ext设置的值 + var ret = DllHandle.CAN_Filter_Init(AvailableHW[index].hLINHW,0,CANFilter); + + CANFilter.FilterIndex = 1; + CANFilter.ID_Std_Ext = 0x610; + var ret = DllHandle.CAN_Filter_Init(AvailableHW[index].hLINHW,0,CANFilter); + + + for(i=2;13;1){ + CANFilter.FilterIndex = i; + CANFilter.Enable = 0; + DllHandle.CAN_Filter_Init(AvailableHW[index].hLINHW,0,CANFilter); + } + + } + //打开设备,包括初始化通道 OpenDevice = function(index,channel,canfd){ if(index > HwNum) @@ -227,7 +284,7 @@ namespace usb2canfd{ canconfig.CAN_Mode = 0x80;//0-正常模式 1-环回模式 0x80终端电阻 canconfig.CAN_ABOM = 0;//禁止自动离线 - canconfig.CAN_NART = 1;//禁止报文重传 + canconfig.CAN_NART = 0;//禁止报文重传 canconfig.CAN_RFLM = 0;//FIFO满之后覆盖旧报文 canconfig.CAN_TXFP = 1;//发送请求决定发送顺序 //配置波特率,波特率 = 42M/(BRP*(SJW+BS1+BS2)) @@ -237,6 +294,7 @@ namespace usb2canfd{ canconfig.CAN_SJW = 2; ret = DllHandle.CAN_Init(AvailableHW[index].hLINHW,channel,canconfig); //console.log("init ret = " + ret); + this.SetFilter(index); } canfd_connected = canfd; @@ -246,7 +304,7 @@ namespace usb2canfd{ } else { - Hwconnected = null + //Hwconnected = null Chconntected = null; } @@ -349,14 +407,22 @@ namespace usb2canfd{ else { //CAN do{ - var msgbuf = ..usb2canfd.CAN_MSG(); - ret = DllHandle.CAN_GetMsgWithSize(Hwconnected,CANIndex,msgbuf,1); + //raw.convertArray(raw.sizeof(..usb2canfd.CAN_MSG()) + var msgbuf = {}; + for(i=1;10;1){ + //msgbuf.push(new ..usb2canfd.CAN_MS()) + var temp = ..usb2canfd.CAN_MSG() + ..table.push(msgbuf,temp); + } + + //var msgbuf = ..raw.toarray(10,"struct",..usb2canfd.CAN_MS); + ret = DllHandle.CAN_GetMsgWithSize(Hwconnected,CANIndex,msgbuf[1],1); if(ret == 1){ var data = {}; - for(i=1;msgbuf.DataLen;1){ - data[i] = msgbuf.Data[i]; + for(i=1;msgbuf[1].DataLen;1){ + data[i] = msgbuf[1].Data[i]; } - var msg = {"id"=msgbuf.ID;"data"=data;};// + var msg = {"id"=msgbuf[1].ID;"data"=data;};// ..table.push(retdata,msg); } }while(ret > 0) @@ -388,6 +454,19 @@ namespace usb2canfd{ return ret,2,res_data; } + SetPower = function(state){ + var ret = DllHandle.LIN_EX_CtrlPowerOut(Hwconnected,state); + return ret; + } + + GetPower = function(){ + var buf = ..raw.buffer(10); + var ret = DllHandle.LIN_EX_GetVbatValue(Hwconnected,buf); + + return ret,buf; + } + + } diff --git a/CAN_Bootloader/user/CanThread.aardio b/CAN_Bootloader/user/CanThread.aardio index fbf00d3..2f704a7 100644 --- a/CAN_Bootloader/user/CanThread.aardio +++ b/CAN_Bootloader/user/CanThread.aardio @@ -93,6 +93,20 @@ FuncLoopMsg = function(msg){ } +var delay_const = 100000; +DelayTest = function(){ + import time.performance; + var tk = time.performance.tick(); + for(i=1;1000000;1) + { + } + var tk2 = time.performance.tick(); + tk2 = tk2 - tk; + delay_const = math.ceil(1000000*(1/tk2)); + FuncDisplay(delay_const); + //console.log(delay_const); +} + FuncFreshHw = function(){ @@ -194,20 +208,31 @@ FuncStartBoot = function(){ stopflag = 0; } +var delay = function(w){ + while(w){ + for(i=1;delay_const;1) + { + } + w -= 1; + } +} + var PackNext = 0x21; var Packdata = {}; var PackID = 0; var FuncSendPackage = function(){ while(#Packdata > 0) { - //sleep(0.3); + //sleep(1); + delay(1); 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(0.3); CANHw.SendMsg(PackID,data); - sleep(0.1); + PackNext += 1; if(PackNext > 0x2f){ PackNext = 0x20; @@ -289,3 +314,5 @@ timer1.enable(); FuncDisplay("正在运行"); +DelayTest(); +