Я работаю с устройством RS485, и мне нужно изменить его свойство FlowReplace передачи с 0x43 на 0x40. Вот мой журнал Eltima Serial Port Monitor.
В настоящее время это:
47 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM3)
STATUS_SUCCESS
IOCTL_SERIAL_GET_HANDFLOW - Request returns information about the configuration of the handshake flow control set for a COM port
ControlHandShake - 0x01 (SERIAL_DTR_CONTROL)
FlowReplace - 0x43 (SERIAL_AUTO_TRANSMIT | SERIAL_AUTO_RECEIVE | SERIAL_RTS_CONTROL)
XonLimit - 0
XoffLimit - 32768
Но это должно быть так:
64 IRP_MJ_DEVICE_CONTROL - Request operates a serial port (COM3)
STATUS_SUCCESS
IOCTL_SERIAL_GET_HANDFLOW - Request returns information about the configuration of the handshake flow control set for a COM port
ControlHandShake - 0x01 (SERIAL_DTR_CONTROL)
FlowReplace - 0x40 (SERIAL_RTS_CONTROL)
XonLimit - 0
XoffLimit - 32768
Разница между FlowReplace 0x43 и 0x40 заключается в этих двух флагах SERIAL_AUTO_TRANSMIT и SERIAL_AUTO_RECEIVE.
Возможно, я мог бы добиться этого, настроив структуру _SERIAL_HANDFLOW, но я бы хотел иметь кроссплатформенное решение, если нет другого пути.
Итак, есть ли способ исправить это, не вызывая родной дескриптор?
К сожалению, я ничего не могу найти здесь:
https://www.boost.org/doc/libs/1_64_0/boost/asio/serial_port_base.hpp
Задача ещё не решена.
Других решений пока нет …