Конференция "WinAPI" » работа с com-портом [D7, WinXP]
 
  • M_Corvinus © (21.05.09 14:42) [0]
    есть программка
    вот ее соединение с портом (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?
    или можно обойтись и без этой строки?

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

    заранее благодарен за ответ
  • Сергей М. © (21.05.09 15:30) [1]
  • M_Corvinus © (21.05.09 15:50) [2]
    я пробовал использовать эту функцию
    вот что delphi думает по поводу IOCTL_SERIAL_LSRMST_INSERT

    [Error] ComPort.pas(188): Undeclared identifier: 'IOCTL_SERIAL_LSRMST_INSERT'
  • Сергей М. © (21.05.09 15:58) [3]
    Так а ты что, лезешь в порт через DEVICE_IO_CONTROL ?
    А чем не подходят обычные файловые методы доступа к этому ресурсу ?
  • M_Corvinus © (21.05.09 16:14) [4]
    Вот что я нашел:

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

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

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

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

    не будет ли проблем с устройством, которое подключено к порту, если я пропущу этот момент.
  • Сергей М. © (21.05.09 16:16) [5]
  • Сергей М. © (21.05.09 16:19) [6]

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


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

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


    > разрешает или запрещает помещение значений состояния линии
    > и состояния модема
  • M_Corvinus © (21.05.09 16:30) [7]
    это эмбосер, если знаеш, что это такое

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

    а если вдруг возникнет, то как повторить эту строку  на delphi
  • Сергей М. © (21.05.09 16:39) [8]

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


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

    Константа IOCTL_SERIAL_LSRMST_INSERT расчитывается как показано в [5]
 
Конференция "WinAPI" » работа с com-портом [D7, WinXP]
Есть новые Нет новых   [134434   +27][b:0][p:0]