В настоящее время я портирую приложение Win32 на POSIX. Само программное обеспечение было выпущено пару десятилетий назад и использовалось для обновления проприетарных машин.
Хотя большинство функций было относительно легко заменить простыми макросами и некоторыми более мелкими функциями, вызывающими функции POSIX, функции, связанные с коммуникацией RS232, оказались трудными.
Приложение использует эти функции для связи через RS232:
BOOL GetCommState(HANDLE comPort, DCB* dataControlBlock);
BOOL SetCommState(HANDLE comPort, DCB* dataControlBlock);
BOOL GetCommTimeouts(HANDLE comPort, LPCOMMTIMEOUTS comTimeouts);
BOOL SetCommTimeouts(HANDLE comPort, LPCOMMTIMEOUTS comTimeouts);
BOOL SetCommMask(HANDLE comPort, DWORD eventMask);
BOOL GetCommMask(HANDLE comPort, LPDWORD eventMask);
BOOL WaitCommEvent(HANDLE comPort, LPDWORD eventMask, LPOVERLAPPED overlapped);
Наряду со следующими структурами:
typedef struct _DCB { /*...*/ } DCB, *LPDCB;
typedef struct _COMMTIMEOUTS { /*...*/ } COMMTIMEOUTS, *LPCOMMTIMEOUTS;
Во время поиска я наткнулся на эту ссылку, в которой упоминаются termios.h и sys / select .h, но структура этих заголовков, на мой взгляд, слишком отличается. В других ответах упоминалось использование Wine, что просто не вариант из-за оборудования, на которое переносится приложение.
Если возможно, я хотел бы реализовать более простое решение и сохранить структуры, которые в настоящее время используются приложением - в попытке сохранить все перекрестную совместимость.
Есть ли способ добиться этого?
Или я застрял с переписыванием брутто-частей приложения?
boost::asio
. Работает как для Windows, так и для Linux. Но перед тем как начать, проверьте, можете ли вы собратьboost
для своей целевой машины. В общем, возможно - мы запускаемboost
даже наARMv5
процессорах. - person grapes   schedule 20.12.2018RS232 to send (raw) data to a proprierary ECU
и в чем проблема? - person 0___________   schedule 20.12.2018