LoveRead.info » Книги » Разная литература » Интернет-журнал "Домашняя лаборатория", 2007 №8 - Журнал «Домашняя лаборатория»

Интернет-журнал "Домашняя лаборатория", 2007 №8 - Журнал «Домашняя лаборатория»

Книгу Интернет-журнал "Домашняя лаборатория", 2007 №8 - Журнал «Домашняя лаборатория» читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

137 0 18:00, 15-09-2023

Книга Интернет-журнал "Домашняя лаборатория", 2007 №8 - Журнал «Домашняя лаборатория» читать онлайн бесплатно без регистрации

Большой и увлекательный, научно-прикладной и образовательный, но некоммерческий интернет-журнал, созданный группой энтузиастов. Интернет-журнал содержит материалы, найденные в Интернет или написанные для Интернет. Основная тематика статей — то, что можно сделать самому, от садовых поделок до сверхпроводников, но есть и просто полезные материалы.

    1 ... 320 321 322 323 324 325 326 327 328 ... 463
    Перейти на страницу:
    ct.ReadIntervalTimeout=10;

       ct.ReadTotalTimeoutMultiplier=ct.ReadTotalTimeoutConstant=0;

       ct.WriteTotalTimeoutMultiplier=ct.WriteTotalTimeoutConstant=0;

    port=CreateFile(COM2",GENERIC_READ|GENERIC_WRIТЕ,0,NULL,OPEN_EXISTING,0,NULL);

       SetCommState(port,dсb);

       SetCommTimeouts(port,&ct);

       HeapFree(GetProcessHeap 0,0,dсb);

       …

       CloseHandle(port);

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

    Первым делом, с помощью функции HeapAlloc, выделяется и заполняется нулями область памяти для DCB. Затем в поле DCBlength заносится размер структуры DCB в байтах. Зачем это нужно обсуждалось выше, при описании данного поля. Для общего (и наглядного) заполнения DCB использована функция BuildCommDCB. Будем считать, что нас устраивает информация занесенная в DCB, но требуется игнорировать нулевые байты при приеме. Так как BuildCommDCB не выполняет требуемых действий мы вручную изменяем соответствующее поле. Далее мы заполняем информацию о таймаутах. Общие тайм-ауты операций чтения и записи не используются, конец сообщения определяется по тайм-ауту между двумя последовательными символами большему 10 миллисекунд. Теперь можно открыть порт, что делается функцией CreateFile, и выполнить его настройку вызвав функции SetCommState и SetCommTimeots. После установки параметров порта структура DCB становится не нужной, поэтому можно освободить занимаемую ей память. Структура COMMTIMEOUTS в примере размещена статически, поэтому выделять под нее память и освобождать ее не требуется. Наконец, мы закрываем порт перед завершением.

    Функции HeapAlloc и HeapFree занимаются выделением и освобождением памяти из куч, которых в программе может быть несколько. Вместо этих функций можно использовать malloc (calloc) и free. Однако использование функций предоставляемых Win32 API позволяет сократить размер программы, что может быть не маловажно, если работа с портами ведется из DLL (например Вы пишете своеобразный псевдодрайвер для своего устройства). Есть и другие аргументы в пользу этой точки зрения, которую я Вам, впрочем, не навязываю.

    Рассмотренные структуры и функции позволяют программировать порт на достаточно низком уровне. Их, в большинстве случаев, более чем достаточно даже для тонкой настройки порта. Однако бывают и исключения. Например, под именем СОМ1 может скрываться вовсе не привычный порт RS-232, а какая-нибудь экзотика. Или порт может не позволять задавать скорость более 9600.

    Структура COMMPROP

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

    typedef struct _COMMPROP {{

        WORD wPacketLength; // packet size, in bytes

        WORD wPacketVersion; // packet version

        DWORD dwServiceMask; // services implemented

        DWORD dwReservedl; // 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

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

    ∙ 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 — 56К бпс

    • BAUD_57600 — 57600 бпс

    • BAUD_115200 — 115200 бпс

    • BAUD_128K — 128К бпс

    • 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_Х25 — Устройство стандарта 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

    Битовая

    1 ... 320 321 322 323 324 325 326 327 328 ... 463
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Валентина Валентина04 июль 13:25 Большое спасибо за интересную тему.  Сюжет заманчиввй,интересный. Жду продолжения ... Лекарь Фамильяров. Том 7 - Александр Лиманский
    2. Наталья По Наталья По01 июль 10:12 Ужасный перевод:(... Аркадия - Эрин Дум
    3. Вика Вика29 июнь 21:56 Какая хрень с первых строк.  У ребенка в 14 месяце не может быть черепно мозговой травмы при падании с дивана ... Вернуть семью любой ценой - Чарли Ви
    Все комметарии
    Новинки бесплатной онлайн библиотеки