-
Добрый день! Не поможет ли кто разобраться с тем, как грамотно написать программу для работы с USB-BlueTooth модулем? Модуль обеспечивает эмуляцию порта RS232 для BlueTooth. Для стандартного порта – работаю через API. При попытке инициализировать через API порт BlueTooth (система поставила его под номером COM24) возникают ошибки уже на этапе открытия файла. Для обычного порта функция com := CreateFile( PChar(cport [port]), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); даёт ненулевое значение com (1904) и далее все функции инициализации работают нормально. Для BlueTooth порта функция даёт значение com 4294967295, то есть ненулевое, не ошибочное, но далее все функции инициализации дают ошибочные значения. При этом попытка работы через стандартную Windows программу Terminal даёт положительные результаты – данные через COM24 передаются и принимаются. Не подскажете ли как грамотно работать с RS232 портом, эмулируемымы ИдгуЕщщер?
-
ненулевое <> не ошибочное
-
To specify a COM port number greater than 9, use the following syntax: "\\.\COM10". This syntax works for all port numbers and hardware that allows COM port numbers to be specified.
If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call GetLastError
-
> 4294967295
4294967295=INVALID_HANDLE_VALUE
-
First of all really thank you. I used the syntax “\\.\COM10”. It is work. But there is a “one side connection”. The data transmit in one direction – from external BlueTooth module to IBM PC BlueTooth. (Terminal works at both sides.) Could you help me to solve the problrm?
-
а ты чо по инглишу то шпариш :) яте процитировал справку по CreateFile а про сомпорт я ни бе, ни ме ;)
-
Спасибо. ПОчти помогло, только наполовину - данные пкркдаются только от модуля на компьютер, а в обратную сторону нет. Может, кто знает, как сделать, чтобы в обе стороны?
-
Нашёл средство, но оно вызвало новые проблемы. Передаю по COM я так:
procedure TMy_Com.putb_ex (b_cnt : dword; var res : boolean); { Send of the buffer contents. }
var b_send : dword; ev_word : dword;
begin
if b_cnt > 1024 then begin res := False; Exit; end;
SetCommMask (com, EV_TXEMPTY);
WriteFile(com, Tx_Buffer, b_cnt, b_send, nil);
// WaitCommEvent (com, // ev_word, // nil);
if b_send = b_cnt then begin res := True; end else begin res := False; end;
end;
При попытке работать через BlueTooth WaitCommEvent ждёт бесконечно. После исключения функции из кода всё работает, но только под BlueTooth, понятно. В связи с этим, не подскажет ли кто, как определить, обычный COM у меня или BlueTooth?
-
книга Павел Агуров - Последовательные интерфейсы ПК . Практика программирования думаю что инфы лучшей, да ищо и на делфе в природе нет
-
-
> При попытке работать через BlueTooth WaitCommEvent ждёт > бесконечно.
эм... а проверять что вернул writefile - не надо?
а очень нужно знать когда txempty?
-
> USB-BlueTooth модулем?
... > В связи с этим, не подскажет ли кто, как определить, обычный > COM у меня или BlueTooth?
У каждого USB устройства есть VID и PID если USB преобразуется в COM-порт, то по VID&PID можно определить номер этого ком-порта как - я уже писал http://pda.delphimaster.net/?n=5&id=1246048804&p=2сообщение номер 29
|