现场优化2
This commit is contained in:
@@ -56,6 +56,12 @@ namespace ZLGUSBCANFD
|
||||
/// </summary>
|
||||
public event Action<uint, ZDBC.DBCMessage>? OnDbcMessageDecoded;
|
||||
|
||||
/// <summary>
|
||||
/// 事件:当接收到任意 CAN/CANFD 原始报文时触发(不依赖 DBC,自定义报文也能收到)
|
||||
/// 参数:通道号, 帧ID, 数据, 时间戳(微秒), 是否FD, 数据长度
|
||||
/// </summary>
|
||||
public event Action<uint, uint, byte[], ulong, bool, byte>? OnRawMessageReceived;
|
||||
|
||||
public ZLGCANFD(uint deviceType = 76, uint deviceIndex = 0, int maxChannels = 4,
|
||||
string abitBaud = "500000", string dbitBaud = "2000000", bool enableTerminalResistance = true)
|
||||
{
|
||||
@@ -297,6 +303,10 @@ namespace ZLGUSBCANFD
|
||||
{
|
||||
IntPtr framePtr = IntPtr.Add(ptrCanBuffer, i * canStructSize);
|
||||
|
||||
// 触发原始报文事件(不依赖 DBC,自定义报文也能收到)
|
||||
var rawData = (ZLGCAN.ZCAN_Receive_Data)Marshal.PtrToStructure(framePtr, typeof(ZLGCAN.ZCAN_Receive_Data))!;
|
||||
OnRawMessageReceived?.Invoke(channelIndex, rawData.frame.can_id, rawData.frame.data, rawData.timestamp, false, rawData.frame.can_dlc);
|
||||
|
||||
// 只锁定当前通道的DBC句柄进行解码,高并发完全不卡顿
|
||||
lock (_channelLocks[channelIndex])
|
||||
{
|
||||
@@ -319,6 +329,10 @@ namespace ZLGUSBCANFD
|
||||
{
|
||||
IntPtr framePtr = IntPtr.Add(ptrCanFDBuffer, i * canfdStructSize);
|
||||
|
||||
// 触发原始报文事件(不依赖 DBC,自定义报文也能收到)
|
||||
var rawFdData = (ZLGCAN.ZCAN_ReceiveFD_Data)Marshal.PtrToStructure(framePtr, typeof(ZLGCAN.ZCAN_ReceiveFD_Data))!;
|
||||
OnRawMessageReceived?.Invoke(channelIndex, rawFdData.frame.can_id, rawFdData.frame.data, rawFdData.timestamp, true, rawFdData.frame.len);
|
||||
|
||||
lock (_channelLocks[channelIndex])
|
||||
{
|
||||
if (_isDbcLoadedArray[channelIndex] && ZDBC.ZDBC_Decode(_dbcHandles[channelIndex], ptrDbcMsg, framePtr, 1, 1))
|
||||
|
||||
Reference in New Issue
Block a user