|
|
|
|
|
using CompressorXN_Common;
|
|
|
|
|
|
using System;
|
|
|
|
|
|
using System.Text;
|
|
|
|
|
|
using USB2XXX;
|
|
|
|
|
|
|
|
|
|
|
|
namespace CompressorXN_Communication.TuMos
|
|
|
|
|
|
{
|
|
|
|
|
|
public class BaseTMS
|
|
|
|
|
|
{
|
|
|
|
|
|
private static USB_DEVICE.DEVICE_INFO DevInfo = new USB_DEVICE.DEVICE_INFO();
|
|
|
|
|
|
private static Int32[] DevHandles = new Int32[20];
|
|
|
|
|
|
protected static int DevHandle = 0;
|
|
|
|
|
|
protected static Byte WriteCANIndex = 0;
|
|
|
|
|
|
protected static Byte ReadCANIndex = 0;
|
|
|
|
|
|
private static bool state;
|
|
|
|
|
|
private static Int32 DevNum = 0;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 打开设备
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
|
public static (bool isOk, string msg) OpenDevice()
|
|
|
|
|
|
{
|
|
|
|
|
|
return (true, "连接成功");
|
|
|
|
|
|
//扫描查找设备
|
|
|
|
|
|
DevNum = USB_DEVICE.USB_ScanDevice(DevHandles);
|
|
|
|
|
|
if (DevNum <= 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
return (false, $"无设备连接!");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DevHandle = DevHandles[0];
|
|
|
|
|
|
//打开设备
|
|
|
|
|
|
state = USB_DEVICE.USB_OpenDevice(DevHandle);
|
|
|
|
|
|
if (!state)
|
|
|
|
|
|
{
|
|
|
|
|
|
return (false, $"打开设备异常:state={state}!");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//获取固件信息
|
|
|
|
|
|
StringBuilder FuncStr = new StringBuilder(256);
|
|
|
|
|
|
state = USB_DEVICE.DEV_GetDeviceInfo(DevHandle, ref DevInfo, FuncStr);
|
|
|
|
|
|
if (!state)
|
|
|
|
|
|
{
|
|
|
|
|
|
return (false, $"获取设备信息异常:state={state}!");
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.WriteLine($"{DateTime.Now}>>>>Firmware Info:");
|
|
|
|
|
|
Console.WriteLine(" Name:" + Encoding.Default.GetString(DevInfo.FirmwareName));
|
|
|
|
|
|
Console.WriteLine(" Build Date:" + Encoding.Default.GetString(DevInfo.BuildDate));
|
|
|
|
|
|
Console.WriteLine(" Firmware Version:v{0}.{1}.{2}", (DevInfo.FirmwareVersion >> 24) & 0xFF, (DevInfo.FirmwareVersion >> 16) & 0xFF, DevInfo.FirmwareVersion & 0xFFFF);
|
|
|
|
|
|
Console.WriteLine(" Hardware Version:v{0}.{1}.{2}", (DevInfo.HardwareVersion >> 24) & 0xFF, (DevInfo.HardwareVersion >> 16) & 0xFF, DevInfo.HardwareVersion & 0xFFFF);
|
|
|
|
|
|
Console.WriteLine(" Functions:" + DevInfo.Functions.ToString("X8"));
|
|
|
|
|
|
Console.WriteLine(" Functions String:" + FuncStr);
|
|
|
|
|
|
}
|
|
|
|
|
|
GlobalVar.DevHandle = DevHandle;
|
|
|
|
|
|
|
|
|
|
|
|
return (true, "连接成功");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 初始化CAN
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="bps"></param>
|
|
|
|
|
|
public static void CanInit(uint bps)
|
|
|
|
|
|
{
|
|
|
|
|
|
USB2CAN.CAN_INIT_CONFIG CANConfig = new USB2CAN.CAN_INIT_CONFIG();
|
|
|
|
|
|
//波特率
|
|
|
|
|
|
var ret = USB2CAN.CAN_GetCANSpeedArg(DevHandle, ref CANConfig, bps);
|
|
|
|
|
|
if (ret != USB2CAN.CAN_SUCCESS)
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.WriteLine("Get CAN Speed failed!");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.WriteLine("Get CAN Speed Success!");
|
|
|
|
|
|
}
|
|
|
|
|
|
//初始化配置CAN
|
|
|
|
|
|
CANConfig.CAN_Mode = 0x80;//正常模式
|
|
|
|
|
|
CANConfig.CAN_ABOM = 0;//禁止自动离线
|
|
|
|
|
|
CANConfig.CAN_NART = 1;//禁止报文重传
|
|
|
|
|
|
CANConfig.CAN_RFLM = 0;//FIFO满之后覆盖旧报文
|
|
|
|
|
|
CANConfig.CAN_TXFP = 1;//发送请求决定发送顺序
|
|
|
|
|
|
ret = USB2CAN.CAN_Init(DevHandle, WriteCANIndex, ref CANConfig);
|
|
|
|
|
|
|
|
|
|
|
|
if (ret != USB2CAN.CAN_SUCCESS)
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.WriteLine("Config Send CAN failed!");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.WriteLine("Config Send CAN Success!");
|
|
|
|
|
|
}
|
|
|
|
|
|
//配置过滤器,接收所有数据
|
|
|
|
|
|
//int[] pIdList = new int[1] { Convert.ToInt32(GlobalVar.agreementMsgVM.ReciveId, 16) };
|
|
|
|
|
|
//byte idListLen = 1;
|
|
|
|
|
|
//ret = USB2CAN.CAN_FilterList_Init(DevHandle, ReadCANIndex, pIdList, idListLen);
|
|
|
|
|
|
//if (ret != USB2CAN.CAN_SUCCESS)
|
|
|
|
|
|
//{
|
|
|
|
|
|
// Console.WriteLine("Config CAN Filter failed!");
|
|
|
|
|
|
// return;
|
|
|
|
|
|
//}
|
|
|
|
|
|
//else
|
|
|
|
|
|
//{
|
|
|
|
|
|
// Console.WriteLine("Config CAN Filter Success!");
|
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
//启动CAN接收数据
|
|
|
|
|
|
ret = USB2CAN.CAN_StartGetMsg(GlobalVar.DevHandle, GlobalVar.ReadCANIndex);
|
|
|
|
|
|
if (ret != USB2CAN.CAN_SUCCESS)
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.WriteLine("Start CAN failed!");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
Console.WriteLine("Start CAN Success!");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|