Главная страница
Навигация по странице:

  • COMMPROP

  • DCBlength

  • GetCommProperties . Если поле wPacketLength

  • GetCommProperties . Чаще всего дополнительная информация представлена в виде структуры MODEMDEVCAPS, которая размещается на месте поля wcProvChar

  • CommConfigDialog

  • Титов О.Работа с коммуникационными портами (COM и LPT) в программах для Win32. Титов О.Работа с коммуникационными портами (COM и LPT) в програм. Работа с коммуникационными портами (com и lpt) в программах для Win32. Автор Титов Олег


    Скачать 276 Kb.
    НазваниеРабота с коммуникационными портами (com и lpt) в программах для Win32. Автор Титов Олег
    АнкорТитов О.Работа с коммуникационными портами (COM и LPT) в программах для Win32.doc
    Дата22.10.2017
    Размер276 Kb.
    Формат файлаdoc
    Имя файлаТитов О.Работа с коммуникационными портами (COM и LPT) в програм.doc
    ТипДокументы
    #9678
    КатегорияЭлектротехника. Связь. Автоматика
    страница6 из 9
    1   2   3   4   5   6   7   8   9

    Структура COMMPROP


    Исчерпывающая информация о возможностях коммуникационного устройства и драйвера содержится в структуре COMMPROP:

    typedef struct _COMMPROP {{

    WORD wPacketLength; // packet size, in bytes

    WORD wPacketVersion; // packet version

    DWORD dwServiceMask; // services implemented

    DWORD dwReserved1; // reserved

    DWORD dwMaxTxQueue; // max Tx bufsize, in bytes

    DWORD dwMaxRxQueue; // max Rx bufsize, in bytes

    DWORD dwMaxBaud; // max baud rate, in bps

    DWORD dwProvSubType; // specific provider type

    DWORD dwProvCapabilities; // capabilities supported

    DWORD dwSettableParams; // changable parameters

    DWORD dwSettableBaud; // allowable baud rates

    WORD wSettableData; // allowable byte sizes

    WORD wSettableStopParity; // stop bits/parity allowed

    DWORD dwCurrentTxQueue; // Tx buffer size, in bytes

    DWORD dwCurrentRxQueue; // Rx buffer size, in bytes

    DWORD dwProvSpec1; // provider-specific data

    DWORD dwProvSpec2; // provider-specific data

    WCHAR wcProvChar[1]; // provider-specific data

    } COMMPROP;

    Поля этой структуры описывают все возможности драйвера. Вы не можете выйти за пределы этих возможностей. Вот какое значение имеют поля:

    wPacketLength


    Задает размер, в байтах, структуры COMMPROP.

    wPacketVersion


    Номер версии структуры.

    dwServiceMask


    Битовая маска. Для коммуникационных устройств всегда SP_SERIALCOMM, включая модемы.

    dwReserved1


    Зарезервировано и не используется.

    dwMaxTxQueue


    Максимальный размер, в байтах, внутреннего буфера передачи драйвера. Нулевое значение свидетельствует об отсутствии ограничения.

    dwMaxRxQueue


    Максимальный размер, в байтах, внутреннего буфера приема драйвера. Нулевое значение свидетельствует об отсутствии ограничения.

    dwMaxBaud


    Максимально допустимая скорость обмена, в битах в секунду (бпс). Возможны следующие значения данного поля:

    • BAUD_075 75 бпс.

    • BAUD_110 110 бпс.

    • BAUD_134_5 134.5 бпс.

    • BAUD_150 150 бпс.

    • BAUD_300 300 бпс.

    • BAUD_600 600 бпс.

    • BAUD_1200 1200 бпс.

    • BAUD_1800 1800 бпс.

    • BAUD_2400 2400 бпс.

    • BAUD_4800 4800 бпс.

    • BAUD_7200 7200 бпс.

    • BAUD_9600 9600 бпс.

    • BAUD_14400 14400 бпс.

    • BAUD_19200 19200 бпс.

    • BAUD_38400 38400 бпс.

    • BAUD_56K 56K бпс.

    • BAUD_57600 57600 бпс.

    • BAUD_115200 115200 бпс.

    • BAUD_128K 128K бпс.

    • BAUD_USER Допускается программирование скорости обмена

    dwProvSubType


    Тип коммуникационного порта. Возможны следующие значения данного поля:

    • PST_FAX Факс

    • PST_LAT LAT протокол

    • PST_MODEM Модем

    • PST_NETWORK_BRIDGE Сетевой мост

    • PST_PARALLELPORT Параллельный порт

    • PST_RS232 Последовательный порт RS-232

    • PST_RS422 Порт RS-422

    • PST_RS423 Порт RS-423

    • PST_RS449 Порт RS-449

    • PST_SCANNER Сканнер

    • PST_TCPIP_TELNET Протокол TCP/IP TelnetR

    • PST_UNSPECIFIED Неизвестное устройство

    • PST_X25 Устройство стандарта X.25

    dwProvCapabilities


    Битовая маска. Определяет возможности предоставляемые устройством. Возможны следующие значения:

    • PCF_16BITMODE Поддерживается специальный 16-битный режим.

    • PCF_DTRDSR Поддерживаются сигналы DTR/DSR.

    • PCF_INTTIMEOUTS Поддерживается межсимвольный тайм-аут.

    • PCF_PARITY_CHECK Поддерживается контроль четности.

    • PCF_RLSD Поддерживается определение наличия сигнала в приемной линии.

    • PCF_RTSCTS Поддерживаются сигналы RTS/CTS.

    • PCF_SETXCHAR Поддерживаются задаваемые символы XON/XOFF.

    • PCF_SPECIALCHARS Поддерживаются спецсимволы.

    • PCF_TOTALTIMEOUTS Поддерживаются общие тайм-ауты (ожидаемое время).

    • PCF_XONXOFF Поддерживается программное (XON/XOFF) управление потоком.

    • PCF_XONXOFF Поддерживается программное (XON/XOFF) управление потоком.

    dwSettableParams


    Битовая маска. Определяет допустимые для изменения параметры. Возможны следующие значения:

    • SP_BAUD Скорость обмена.

    • SP_DATABITS Бит в символе.

    • SP_HANDSHAKING Рукопожатие (управление потоком).

    • SP_PARITY Четность.

    • SP_PARITY_CHECK Контроль четности.

    • SP_RLSD Детектирование наличия сигнала в приемной линии.

    • SP_STOPBITS Количество стоповых бит.

    dwSettableBaud


    Битовая маска. Определяет допустимый набор скоростей обмена. Допустимые для данного поля значения указаны в описании поля dwMaxBaud.

    wSettableData


    • Битовая маска. Определяет допустимые длины символов, в битах. Возможны следующие значения:

    • DATABITS_5 5 бит

    • DATABITS_6 6 бит

    • DATABITS_7 7 бит

    • DATABITS_8 8 бит

    • DATABITS_16 16 бит

    • DATABITS_16Х Специальный широкий канал через аппаратную последовательную линию.

    wSettableStopParity


    Битовая маска. Определяет допустимое количество стоповых бит и режимы четности. Возможны следующие значения:

    • STOPBITS_10 Один стоповый бит

    • STOPBITS_15 Полтора стоповыx бита

    • STOPBITS_20 Два стоповых бита

    • PARITY_NONE Без четности

    • PARITY_ODD Доплнение до нечетности

    • PARITY_EVEN Дополнение до четности

    • PARITY_MARK Бит четности всегда "1"

    • PARITY_SPACE Бит четности всегда "0"

    dwCurrentTxQueue


    Определяет текущий размер, в байтах, внутренней очереди передачи драйвера. Нулевое значение свидетельствует о недоступности данного параметра.

    dwCurrentRxQueue


    Определяет текущий размер, в байтах, внутренней очереди приема драйвера. Нулевое значение свидетельствует о недоступности данного параметра.

    dwProvSpec1


    Устройство-зависимые данные. Программа должна игнорировать содержимое данного поля, за исключением случаев, когда Вы точно знаете формат этих данных. Занесите в данное поле значение COMMPROP_INITIALIZED, если поле wPacketLength уже содержит правильное значение.

    dwProvSpec2


    Устройство-зависимые данные. Программа должна игнорировать содержимое данного поля, за исключением случаев, когда Вы точно знаете формат этих данных.

    wcProvChar


    Устройство-зависимые данные. Программа должна игнорировать содержимое данного поля, за исключением случаев, когда Вы точно знаете формат этих данных.

    Информация хранящаяся в структуре COMMPROP требуется редко, так как чаще всего точно известно с каким типом портов будет работать программа.

    Остановлюсь чуть подробнее на описании некоторых полей. Поле wPacketLength играет несколько иную роль, чем поле DCBlength структуры DCB, хотя из его описания это не следует. Секрет прост. Поле wcProvChar, расположенное в конце структуры, может содержать, а может и не содержать, данных. Вы не в состоянии это узнать не запросив информацию. В свою очередь, перед запросом информации Вы должны выделить (и обнулить) память под структуру COMMPROP. Поэтому последовательность шагов для получения всей информации следующая:

    • Выделить память под структуру COMMPROP.

    • Запросить информацию у системы вызвав функцию GetCommProperties_._Если_поле_wPacketLength'>GetCommProperties.

    • Если поле wPacketLength содержит значение большее sizeof(COMMPROP), то имеется дополнительная информация. Для ее получения измените размер ранее выделенного блока памяти, новый размер должен быть равен значению занесенному системой в поле wPacketLength. Установите в поле wProvSpec1 значение COMMPROP_INITIALIZED, это будет означать, что выделен достаточный блок памяти для получения дополнительной информации. Повторно вызовите функцию GetCommProperties.

    Чаще всего дополнительная информация представлена в виде структуры MODEMDEVCAPS, которая размещается на месте поля wcProvChar, если поле dwProvSubType содержит значение PST_MODEM.

    Получить информацию об устройстве в виде структуры COMMPROP можно уже упоминавшейся функцией GetCommProperies. Вот как выглядит ее прототип:

    BOOL GetCommProperties(

    HANDLE hFile,

    LPCOMMPROP lpCommProp

    );

    Запросить информацию можно только об уже открытом устройстве. При этом для структуры, адресуемой вторым параметром, должна быть выделена память. Приведу пример получения информации о коммуникационном устройстве:

    #include

    . . .

    HANDLE port;

    COMMPROP *pr;

    . . .

    port=CreateFile("COM2",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);

    pr=(COMMPROP*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(COMMPROP));

    GetCommProperties(port,pr);

    if(pr->wPacketLength != sizeof(COMMPROP)) {{

    pr=(COMMPROP*)HeapRealloc(GetProcessHeap(),HEAP_ZERO_MEMORY,pr,pr->wPacketLength);

    pr->wProvSpec1=COMMPROP_INITIALIZED;

    GetCommProperties(port,pr);

    }

    . . .

    HeapFree(GetProcessHeap(),0,pr);

    CloseHandle(port);

    . . .

    Не всегда настройку порта можно жестко зашить в код программы. Внешние устройства могут позволять изменять параметры линии связи, чаще всего скорость обмена, которая зависит от длины соединительного кабеля. В таких случаях разумно предоставить пользователю самому задавать режимы обмена. Можно самому разработать соответствующий настроечный диалог, а можно воспользоваться стандартным, предоставляемым операционной системой, а точнее, производителем порта. Стандартный диалог выводится функцией CommConfigDialog, которая работает со структурой COMMCONFIG. Как и в случае со структурой DCB, заполнять структуру COMMCONFIG можно вручную или вызовом соответствующих функций.
    1   2   3   4   5   6   7   8   9


    написать администратору сайта