2015-05-18 19 views
1

你好的StackOverflow社区CAN-BUS通信 - MSG-结构(WINUSER.H)的Linux相当于

我搜索了好一阵子,但现在我不觉得我的问题的解决方案。 我正在开发一个项目,我必须将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的等同于“味精”一个。我在包含文件'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平台上?我唯一发现的是如何创建Message Queue,但我不知道这对我有什么帮助?

谢谢您的时间

问候 亚历

+0

发布代码中的'MSG'甚至不是一个类型名称 - 它是一个宏参数名称。它可能是'x'。 –

+0

我知道这件事。问题是,当我右键点击'MSG'来检查'MSG'的定义时,我被重定向到确切的那个我在WinUser头文件中发布的CodeSnippet。因此,我假设这两者之间肯定存在关系。我真的需要这个宏吗?是不是比调用CanWriteCB函数而不是宏更复杂?或者如果我这样做,整个项目会被搞砸吗? – ZanderEso

+0

您的IDE误导了您。您不应该试图获取MSG的定义 - 它只是一个宏观参数名称。这不是一种类型,它没有定义。 –

回答

0

你提到的味精是一种宏观的说法,并且是无关struct tagMSG可言。

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