В настоящее время я портирую приложение 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, который просто не подходит из-за аппаратного обеспечения, на которое переносится приложение.
Если возможно, я бы хотел реализовать более простое решение и сохранить структуры, используемые в настоящее время приложением, - чтобы попытаться сохранить все кросс-совместимым.
Есть ли способ достичь этого?Или я застрял с переписыванием валовых частей приложения?