Связь по шине Can-Bus — MSG-структура (WinUser.h) Linux-эквивалент

Привет сообщество 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

1

Решение

MSG, которую вы упомянули, является макро-аргументом и не имеет отношения к struct tagMSG совсем.

Linux имеет поддержку CAN с использованием SocketCAN которые реализуют интерфейс сокетов для шины CAN и поддерживают различные устройства HW. Самая близкая вещь к структуре сообщения CAN там struct can_frame,

0

Другие решения