Привет сообщество StackOverflow
Я долго искал, но не могу найти решение своей проблемы.
Сейчас я работаю над проектом, где мне нужно перенести инструмент Windows на операционную систему Linux (Ubuntu 12.04LTS, если быть точным).
Инструмент для Windows написан на C ++, и поэтому я пытаюсь переписать инструмент на C ++ в Linux.
Проблема, с которой я сталкиваюсь на данный момент, заключается в том, что в Windows Solution есть часть, где он использует «MSG».
Вот фрагмент кода из решения Windows:
/** Callback to send CAN message */
#define CB_SEND_MSG( MSG ) CanWriteCB( MSG )
Я уже реализовал метод CanWriteCB, но не нашел в Linux эквивалента «MSG». Я нашел объявление MSG в инструменте Windows во включаемом файле «WinUser.h». Это выглядит следующим образом:
/*
* 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? Единственное, что я нашел, это как создать очередь сообщений, но я не знаю, как это мне вообще поможет?
Спасибо за ваше время
С наилучшими пожеланиями
Alex
MSG, которую вы упомянули, является макро-аргументом и не имеет отношения к struct tagMSG
совсем.
Linux имеет поддержку CAN с использованием SocketCAN которые реализуют интерфейс сокетов для шины CAN и поддерживают различные устройства HW. Самая близкая вещь к структуре сообщения CAN там struct can_frame
,