Есть следующая проблема. Хочется управлять драйвером Windows CE напрямую, используя функцию DeviceIoControl, но вот возникли затруднения, я не знаю коды функции, используемых при вызове дрювера в Windows CE, и как правильно надо создавать фаил порта, к кот. буду обращаться. Если есть умные люди, просвятите!
24.07.06 18:22: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Управлять необходимо портом COM1: (т.е.соответственно отвечающим за него дрювером)
Желательно выполнять все возможные действия, такие как формирование структуры DCB,отправка и прием байта и прочие остальные. (А вообще хорошо бы было бы узнать сами коды функций управления, кот. надо задавать в команде DeviceIoControl во втором параметре). Так же очень интерессует вопрос как можно отследить момент выдачи из сдвигового регистра последнего бита в отправляемом байте (линия Tx)на COM порте!!!!!!! или хотя бы как это реализовывается, когда мы ставим в структуре DCB dcb.fRtsControl = RTS_CONTROL_TOGGLE !!!!!!! т.к. в данном случае сигнал RTS будет активен только в момент передачи байта и ни ms больше( что мне в принципе и требуется)!!!
Здравствуйте, PCI, Вы писали:
PCI>Управлять необходимо портом COM1: (т.е.соответственно отвечающим за него дрювером)
PCI>Желательно выполнять все возможные действия, такие как формирование структуры DCB,отправка и прием байта и прочие остальные. (А вообще хорошо бы было бы узнать сами коды функций управления, кот. надо задавать в команде DeviceIoControl во втором параметре). Так же очень интерессует вопрос как можно отследить момент выдачи из сдвигового регистра последнего бита в отправляемом байте (линия Tx)на COM порте!!!!!!! или хотя бы как это реализовывается, когда мы ставим в структуре DCB dcb.fRtsControl = RTS_CONTROL_TOGGLE !!!!!!! т.к. в данном случае сигнал RTS будет активен только в момент передачи байта и ни ms больше( что мне в принципе и требуется)!!!
IOCTL определены в файле PEGDSER.H который распространяется с Platform Builder. Советую отыскать и посмотреть как реализован драйвер COM порта, он в исходниках.
Если под рукой не окажется PB привожу содержимое файла:
#define FILE_DEVICE_SERIAL_PORT 0x0000001b
#define IOCTL_SERIAL_SET_BREAK_ON CTL_CODE(FILE_DEVICE_SERIAL_PORT, 1,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_BREAK_OFF CTL_CODE(FILE_DEVICE_SERIAL_PORT, 2,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_DTR CTL_CODE(FILE_DEVICE_SERIAL_PORT, 3,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_CLR_DTR CTL_CODE(FILE_DEVICE_SERIAL_PORT, 4,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_RTS CTL_CODE(FILE_DEVICE_SERIAL_PORT, 5,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_CLR_RTS CTL_CODE(FILE_DEVICE_SERIAL_PORT, 6,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_XOFF CTL_CODE(FILE_DEVICE_SERIAL_PORT, 7,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_XON CTL_CODE(FILE_DEVICE_SERIAL_PORT, 8,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_WAIT_MASK CTL_CODE(FILE_DEVICE_SERIAL_PORT, 9,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_WAIT_MASK CTL_CODE(FILE_DEVICE_SERIAL_PORT,10,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_WAIT_ON_MASK CTL_CODE(FILE_DEVICE_SERIAL_PORT,11,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_COMMSTATUS CTL_CODE(FILE_DEVICE_SERIAL_PORT,12,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_MODEMSTATUS CTL_CODE(FILE_DEVICE_SERIAL_PORT,13,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_PROPERTIES CTL_CODE(FILE_DEVICE_SERIAL_PORT,14,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_TIMEOUTS CTL_CODE(FILE_DEVICE_SERIAL_PORT,15,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_TIMEOUTS CTL_CODE(FILE_DEVICE_SERIAL_PORT,16,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_PURGE CTL_CODE(FILE_DEVICE_SERIAL_PORT,17,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_QUEUE_SIZE CTL_CODE(FILE_DEVICE_SERIAL_PORT,18,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_IMMEDIATE_CHAR CTL_CODE(FILE_DEVICE_SERIAL_PORT,19,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_GET_DCB CTL_CODE(FILE_DEVICE_SERIAL_PORT,20,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_SET_DCB CTL_CODE(FILE_DEVICE_SERIAL_PORT,21,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_ENABLE_IR CTL_CODE(FILE_DEVICE_SERIAL_PORT,22,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_SERIAL_DISABLE_IR CTL_CODE(FILE_DEVICE_SERIAL_PORT,23,METHOD_BUFFERED,FILE_ANY_ACCESS)
// Bluetooth serial IOCTLs are defined in bt_api.h. They are kept here to reserve the spot.
#define IOCTL_BLUETOOTH_GET_RFCOMM_CHANNEL CTL_CODE(FILE_DEVICE_SERIAL_PORT,24,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define IOCTL_BLUETOOTH_GET_PEER_DEVICE CTL_CODE(FILE_DEVICE_SERIAL_PORT,25,METHOD_BUFFERED,FILE_ANY_ACCESS)