-
есть программка вот ее соединение с портом (portmon)
2 0.00004945 ntvdm.exe IRP_MJ_CREATE Serial0 SUCCESS Options: Open 3 0.00000279 ntvdm.exe IOCTL_SERIAL_GET_BAUD_RATE Serial0 SUCCESS 4 0.00000196 ntvdm.exe IOCTL_SERIAL_GET_LINE_CONTROL Serial0 SUCCESS 5 0.00000168 ntvdm.exe IOCTL_SERIAL_GET_CHARS Serial0 SUCCESS 6 0.00000168 ntvdm.exe IOCTL_SERIAL_GET_HANDFLOW Serial0 SUCCESS 7 0.00000168 ntvdm.exe IOCTL_SERIAL_GET_BAUD_RATE Serial0 SUCCESS 8 0.00000168 ntvdm.exe IOCTL_SERIAL_GET_LINE_CONTROL Serial0 SUCCESS 9 0.00000168 ntvdm.exe IOCTL_SERIAL_GET_CHARS Serial0 SUCCESS 10 0.00000168 ntvdm.exe IOCTL_SERIAL_GET_HANDFLOW Serial0 SUCCESS 11 0.00000810 ntvdm.exe IOCTL_SERIAL_SET_BAUD_RATE Serial0 SUCCESS Rate: 1200 12 0.00000419 ntvdm.exe IOCTL_SERIAL_CLR_RTS Serial0 SUCCESS 13 0.00000419 ntvdm.exe IOCTL_SERIAL_CLR_DTR Serial0 SUCCESS 14 0.00000307 ntvdm.exe IOCTL_SERIAL_SET_LINE_CONTROL Serial0 SUCCESS StopBits: 1 Parity: NONE WordLength: 7 15 0.00000196 ntvdm.exe IOCTL_SERIAL_SET_CHAR Serial0 SUCCESS EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:13 16 0.00000810 ntvdm.exe IOCTL_SERIAL_SET_HANDFLOW Serial0 SUCCESS Shake:0 Replace:0 XonLimit:2048 XoffLimit:512 17 0.00000196 ntvdm.exe IOCTL_SERIAL_LSRMST_INSERT Serial0 SUCCESS Char: ffffffff 18 0.00000447 ntvdm.exe IOCTL_SERIAL_SET_QUEUE_SIZE Serial0 SUCCESS InSize: 8192 OutSize: 100 19 0.00000168 ntvdm.exe IOCTL_SERIAL_GET_TIMEOUTS Serial0 SUCCESS 20 0.00000196 ntvdm.exe IOCTL_SERIAL_SET_TIMEOUTS Serial0 SUCCESS RI:-1 RM:0 RC:0 WM:0 WC:0 21 0.00000419 ntvdm.exe IOCTL_SERIAL_SET_DTR Serial0 SUCCESS 22 0.00000419 ntvdm.exe IOCTL_SERIAL_CLR_RTS Serial0 SUCCESS 23 0.00000447 ntvdm.exe IOCTL_SERIAL_CLR_RTS Serial0 SUCCESS 24 0.00000168 ntvdm.exe IOCTL_SERIAL_GET_LINE_CONTROL Serial0 SUCCESS 25 0.00000335 ntvdm.exe IOCTL_SERIAL_SET_LINE_CONTROL Serial0 SUCCESS StopBits: 1 Parity: NONE WordLength: 5 26 0.00000168 ntvdm.exe IOCTL_SERIAL_GET_LINE_CONTROL Serial0 SUCCESS 27 0.00000307 ntvdm.exe IOCTL_SERIAL_SET_LINE_CONTROL Serial0 SUCCESS StopBits: 1 Parity: NONE WordLength: 8 28 0.00000782 ntvdm.exe IOCTL_SERIAL_SET_BAUD_RATE Serial0 SUCCESS Rate: 9600 29 0.00000754 ntvdm.exe IOCTL_SERIAL_GET_MODEMSTATUS Serial0 SUCCESS 30 0.00000531 ntvdm.exe IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR CTS DSR RLSD ERR RING 31 0.00000000 ntvdm.exe IOCTL_SERIAL_WAIT_ON_MASK Serial0
меня интересует строка:
IOCTL_SERIAL_LSRMST_INSERT Serial0 SUCCESS Char: ffffffff
что это значит, и как это повторить на Delphi? или можно обойтись и без этой строки?
все остальное работает
заранее благодарен за ответ
-
-
я пробовал использовать эту функцию вот что delphi думает по поводу IOCTL_SERIAL_LSRMST_INSERT
[Error] ComPort.pas(188): Undeclared identifier: 'IOCTL_SERIAL_LSRMST_INSERT'
-
Так а ты что, лезешь в порт через DEVICE_IO_CONTROL ? А чем не подходят обычные файловые методы доступа к этому ресурсу ?
-
Вот что я нашел:
Управляющий код IOCTL_SERIAL_LSRMST_INSERT разрешает или запрещает помещение значений состояния линии и состояния модема в обычный поток данных, который прикладная программа получает через посредство функции ReadFile.
Я работаю с портом через обычные функции. И у меня уже есть работающие программы для com-порта
Для данного устройства есть прога в комплекте, но она малофункциональная Я хочу написать похожую
я перехватывал команды которые прога посылает на устройство и столкнулся с этой строкой всё остальное мне знакомо и я знаю как его настроить Меня интересует, зачем ЭТА строка в инициализации порта.
не будет ли проблем с устройством, которое подключено к порту, если я пропущу этот момент.
-
-
> не будет ли проблем с устройством, которое подключено к > порту, если я пропущу этот момент.
Т.е. ты пишешь приложение для работы с произвольным устройством, не обязательно являющимся модемом ?
Обрати внимание
> разрешает или запрещает помещение значений состояния линии > и состояния модема
-
это эмбосер, если знаеш, что это такое
я потому и спрашиваю про эту строку, потому что это далеко не модем :) он принимает команды от тестовой версии программы, но мне интересно не возникнет ли проблема при дальнейшем использовании.
а если вдруг возникнет, то как повторить эту строку на delphi
-
> это далеко не модем
Не модем. Но подключается или не подключается он к линии состояния устройства COM-порта - это ты должен выяснить сам. Судя по приведенному тобой протоколу похоже что подключается. Если подключается и ты желаешь контролировать состояние устройства через файловый поток, получаемый при при вызовах ReadFile, то подача команды IOCTL_SERIAL_LSRMST_INSERT действительно необходима.
Константа IOCTL_SERIAL_LSRMST_INSERT расчитывается как показано в [5]
|