Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

работа с com-портом [D7, WinXP]


M_Corvinus ©   (2009-05-21 14:42:00) 

есть программка
вот ее соединение с портом (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?
или можно обойтись и без этой строки?

все остальное работает

заранее благодарен за ответ


Сергей М.   (2009-05-21 16:39:00) [1]


> это далеко не модем


Не модем.
Но подключается или не подключается он к линии состояния устройства COM-порта - это ты должен выяснить сам. Судя по приведенному тобой протоколу похоже что подключается. Если подключается и ты желаешь контролировать состояние устройства через файловый поток, получаемый при при вызовах ReadFile, то подача команды IOCTL_SERIAL_LSRMST_INSERT действительно необходима.

Константа IOCTL_SERIAL_LSRMST_INSERT расчитывается как показано в [5]


M_Corvinus   (2009-05-21 16:30:00) [2]

это эмбосер, если знаеш, что это такое

я потому и спрашиваю про эту строку, потому что это далеко не модем :)
он принимает команды от тестовой версии программы, но мне интересно не возникнет ли проблема при дальнейшем использовании.

а если вдруг возникнет, то как повторить эту строку  на delphi


Сергей М.   (2009-05-21 16:19:00) [3]


> не будет ли проблем с устройством, которое подключено к
> порту, если я пропущу этот момент.


Т.е. ты пишешь приложение для работы с произвольным устройством, не обязательно являющимся модемом ?

Обрати внимание


> разрешает или запрещает помещение значений состояния линии
> и состояния модема


Сергей М.   (2009-05-21 16:16:00) [4]

http://msdn.microsoft.com/en-us/library/ms904001.aspx
http://source.winehq.org/source/include/ddk/ntddser.h


M_Corvinus   (2009-05-21 16:14:00) [5]

Вот что я нашел:

Управляющий код IOCTL_SERIAL_LSRMST_INSERT разрешает или запрещает помещение значений состояния линии и состояния модема в обычный поток данных, который прикладная программа получает через посредство функции ReadFile.

Я работаю с портом через обычные функции.
И у меня уже есть работающие программы для com-порта

Для данного устройства есть прога в комплекте, но она малофункциональная
Я хочу написать похожую

я перехватывал команды которые прога посылает на устройство и столкнулся с этой строкой
всё остальное мне знакомо и я знаю как его настроить
Меня интересует, зачем ЭТА строка в инициализации порта.

не будет ли проблем с устройством, которое подключено к порту, если я пропущу этот момент.


Сергей М.   (2009-05-21 15:58:00) [6]

Так а ты что, лезешь в порт через DEVICE_IO_CONTROL ?
А чем не подходят обычные файловые методы доступа к этому ресурсу ?


M_Corvinus   (2009-05-21 15:50:00) [7]

я пробовал использовать эту функцию
вот что delphi думает по поводу IOCTL_SERIAL_LSRMST_INSERT

[Error] ComPort.pas(188): Undeclared identifier: 'IOCTL_SERIAL_LSRMST_INSERT'


Сергей М.   (2009-05-21 15:30:00) [8]

http://msdn.microsoft.com/en-us/library/aa363403(VS.85).aspx


Наверх

Титульная страница Поиск, карта сайта Написать письмо