You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
4.6 KiB
C#

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!");
}
}
}
}