Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
[Win32] Я на #1. 27.09.03 18:40 Число просмотров: 2235
Автор: Tlo Статус: Незарегистрированный пользователь
|
Если посмотреть на реализацию драйвера serial.sys (8250 family of UARTS) в nt4ddk, то мы увидим, что на запрос о своих пропертях он вернет:
MaxBaud = SERIAL_BAUD_USER; // Просто. Без вариантов.
А для dwSettableBaud :
SettableBaud = SERIAL_BAUD_USER | X; // Тоесть BAUD_USER установлен всегда :)
Где X будет комбинацией SERIAL_BAUD_xxx для скоростей, для которых можно найти делитель частоты установленного UART.
Далее. При запросе на установку скорости порта драйвер берет параметр - скорость и опять проверяет - можно ли найти подходящий делитель частоты. Если да - то устанавливает, ели нет - то вываливает ошибку (к счастью не BSoD :).
Другими словами, получается, что наличие SERIAL_BAUD_USER дает возможность (пробывыать) устанавливать скорости, не ограниченные только конкретными SERIAL_BAUD_xxx, а любые.
Добавлю, что константы SERIAL_BAUD_xxx и BAUD_xxx соответствуют др. другу. А также, то, что известные мне (хоть таких и мало) PСI карточки с портами подставляют свои драйвера под serial.sys, то есть вышеизложенное касается их полностью.
Второй же вариант представляется вовсе сомнительным - если в SettableBaud установлены хотя бы 2 бита (кроме BAUD_USER), это уже означает, что скорость порта может устанавливаться, а не фиксирована, поэтому вводить для этого дополнительный флаг (BAUD_USER) непомикрософтовски необычно.
Однако никаких конкретных толкований в ddk этого флага (помимо того, что обозначено в msdn) не дается. Это означает, что какой-нить горячий студент (без понятий о микрософтовском стиле) вполне мог бы толковать его как #2.
Have fun.
|
<programming>
|
[win32] точный смысл значения baud_user для элементов commprop 26.09.03 20:12
Автор: leo <Леонид Юрьев> Статус: Elderman
|
В Win32 API существует структура COMMPROP, описывающая возможности COM-порта. Для её полей dwMaxBaud и dwSettableBaud определены битовы маски BAUD_075..BAUD_115200..BAUD_USER.
Значение BAUD_USER определено как "Programmable baud rates available".
Существует как минимум два мнения относительно трактовки этой фразы:
1) Если бит BAUD_USER установлен, то значить COM-порт позволяет устанавливать не только уже определенные скорости (2400, 9600, и т.д.), но и нестандартные скорости (например 48000 или 64000).
2) Установка бита BAUD_USER означает что скорость порта в принципе может меняться, т.е. не фиксирована аппаратно.
Прошу компетентно высказаться, что есть правильно.
Я придерживаюсь первого варианта, что вызывает проблемы у софта, авторы которого считают правильным второй вариант.
|
|
[Win32] Я на #1. 27.09.03 18:40
Автор: Tlo Статус: Незарегистрированный пользователь
|
Если посмотреть на реализацию драйвера serial.sys (8250 family of UARTS) в nt4ddk, то мы увидим, что на запрос о своих пропертях он вернет:
MaxBaud = SERIAL_BAUD_USER; // Просто. Без вариантов.
А для dwSettableBaud :
SettableBaud = SERIAL_BAUD_USER | X; // Тоесть BAUD_USER установлен всегда :)
Где X будет комбинацией SERIAL_BAUD_xxx для скоростей, для которых можно найти делитель частоты установленного UART.
Далее. При запросе на установку скорости порта драйвер берет параметр - скорость и опять проверяет - можно ли найти подходящий делитель частоты. Если да - то устанавливает, ели нет - то вываливает ошибку (к счастью не BSoD :).
Другими словами, получается, что наличие SERIAL_BAUD_USER дает возможность (пробывыать) устанавливать скорости, не ограниченные только конкретными SERIAL_BAUD_xxx, а любые.
Добавлю, что константы SERIAL_BAUD_xxx и BAUD_xxx соответствуют др. другу. А также, то, что известные мне (хоть таких и мало) PСI карточки с портами подставляют свои драйвера под serial.sys, то есть вышеизложенное касается их полностью.
Второй же вариант представляется вовсе сомнительным - если в SettableBaud установлены хотя бы 2 бита (кроме BAUD_USER), это уже означает, что скорость порта может устанавливаться, а не фиксирована, поэтому вводить для этого дополнительный флаг (BAUD_USER) непомикрософтовски необычно.
Однако никаких конкретных толкований в ddk этого флага (помимо того, что обозначено в msdn) не дается. Это означает, что какой-нить горячий студент (без понятий о микрософтовском стиле) вполне мог бы толковать его как #2.
Have fun.
|
|
|