Can-Bus通信 - MSG-Structure(WinUser.h)Linux等价物

时间:2015-05-18 12:10:03

标签: c++ linux windows porting can-bus

Hello StackOverflow社区

我已经搜索了很长一段时间,但我找不到解决问题的方法。 我现在正在开展一个项目,我必须将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方法,但我找不到与MSG'等效的Linux。我在包含文件' 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平台上实现这种结构吗?我发现的唯一一件事是如何创建一个消息队列,但我不知道这对我有什么帮助呢?

感谢您的时间

祝你好运 亚历

1 个答案:

答案 0 :(得分:0)

您提到的MSG是一个宏参数,与struct tagMSG完全无关。

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