CAN 总线通信 - MSG 结构 (WinUser.h) Linux 等效

Can-Bus Communication - MSG-Structure (WinUser.h) Linux equivalent

你好 Whosebug 社区

我已经搜索了很长时间,但没有找到解决我问题的方法。 我现在正在做一个项目,我必须将 Windows 工具移植到 Linux 操作系统(具体来说是 Ubuntu 12.04LTS)。 基于 Windows 的工具是用 C++ 编写的,因此我试图在 Linux 上用 C++ 重写该工具。 我现在面临的问题是,在 Windows 解决方案中有一部分使用了 'MSG'。 这里是 Windows 解决方案的代码片段:

/** Callback to send CAN message */
#define CB_SEND_MSG( MSG )          CanWriteCB( MSG )

我已经实现了 CanWriteCB 方法,但我没有找到 Linux 等同于 'MSG'。我在包含文件 'WinUser.h' 中的 Windows 工具中找到了 MSG 的声明。这看起来如下:

/*
 * Message structure
 */
typedef struct tagMSG {
    HWND        hwnd;
    UINT        message;
    WPARAM      wParam;
    LPARAM      lParam;
    DWORD       time;
    POINT       pt;
#ifdef _MAC
    DWORD       lPrivate;
#endif
} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG;

不知道对你有没有帮助,这里也是'CanWriteCB'方法的实现:

boolean_t CanWriteCB( Can_Msg *msg )
{
    return (CanDispatcher_SendMsgByCanBus( msg ) == CanDisp_Err_Ok ) ? TRUE : FALSE;
}

const Det_Config detCfg = 
{
WriteDebugErrorData
};

有人知道如何在 Linux 平台上实现这种结构吗?我唯一发现的是如何创建消息队列,但我完全不知道这对我有什么帮助?

感谢您的宝贵时间

此致 亚历克斯

你说的MSG是宏参数,与struct tagMSG完全无关

Linux 使用 SocketCAN 实现了 CAN 总线的套接字接口,并支持各种硬件设备。最接近 CAN 消息结构的是 struct can_frame.