2015-05-18 16 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