Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.10;
Скачать: CL | DM;

Вниз

Чтение из com-порта...   Найти похожие ветки 

 
Mr.Nobody   (2003-11-25 22:17) [0]

Помогите чайнику...
Я пишу в com-порт некий запрос, а устройство на этом порту шлет мне ответ. Проблема в следующем: заранее не известно, какой длины будет этот ответ. Вопрос соответственно: можли ли узнать эту длину перед чтение. Сейчас делаю так: читаю посимвольно до наступления timeout"а...


 
Evgeny V ©   (2003-11-26 06:03) [1]

Правильно делаешь, если нет заранее известного размера ответа. Можно не посимвольно, а сразу все что пришло, до наступления тайм-аута. Хотя если устройство твое, то лучше бы какой бы протокольчик организовать, но наверное не твое


 
Mr.Nobody   (2003-11-26 11:34) [2]

Нет, устройство не мое... ну всмысле мое... разработка не моя.
Я просниферил как с этим устройством общается другая прога. Ну так вот она после каждой записи в порт посылает запрос IOCTL_SERIAL_GET_COMMSTATUS и тока потом читает. Мне почему-то кажется что по этому запросу и определяется длина данных, которые готовы к прочтению. Поискал про этот запрос в MSDN - ничего внятного, все ссылки на DDK, а драйвер писать у меня чо-то желания нет. Кто-нить чо-нить про этот запрос знает?


 
MaxDDinc   (2003-11-26 19:59) [3]

Доброго времени суток. Есть библиотечка "pcomm.dll" для работы с расширителями Com"порта, там есть все, если интересно, мыльте.
А посоветую следующее: (для pcomm.dll)
1. Проверяем, есть что-то в буфере IN
2. Если есть, то забираем, ждем секунду и снова проверяем
3. Если ничего больше нет, то и пакет закончен


 
shane54 ©   (2003-11-26 20:20) [4]

Убери тока лищнее (лень самому):

procedure ReadFromHSMHost(var p_hsm_cmdi : integer; var p_hsm_cmds : string);
var
v_flag : boolean;
v_size, v_errs, v_mask : DWord;
v_cmdarr : array [0..4000] of char;
begin
v_flag := true;
while v_flag do
begin
v_mask := 0;
WaitCommEvent(HSMHostPort, v_mask, @Ovr);
if (v_mask and EV_RXFLAG) = EV_RXFLAG then
begin
ClearCommError(HSMHostPort, v_errs, @Stat);
v_size := Stat.cbInQue;
ReadFile(HSMHostPort, v_cmdarr, v_size, v_size, @Ovr);
p_hsm_cmds := String(v_cmdarr);
v_flag := false;
end;
end;
p_hsm_cmdi := StrToInt(Copy(p_hsm_cmds, 2, 4));
p_hsm_cmds := Copy(p_hsm_cmds, 6, v_size - 7);
end;



Страницы: 1 вся ветка

Текущий архив: 2004.02.10;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.015 c
1-29398
Islander
2004-02-01 02:05
2004.02.10
Как проверить, показывается ли у приложения кнопка на TaskBar?


14-29524
гогениус
2004-01-21 19:42
2004.02.10
Нужна ваша помощь


4-29653
frost
2003-12-06 15:21
2004.02.10
Буфер Windows


4-29678
MScorp
2003-12-08 13:26
2004.02.10
Заблокировать компьютер


14-29534
Cosinus
2004-01-21 15:48
2004.02.10
О воровстве....