Главная страница
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.026 c
6-29503
Forsaz
2003-12-03 20:46
2004.02.10
Пароль и имя USERA в ХР.


1-29403
Islander
2004-02-01 00:09
2004.02.10
Как проверить свернуто ли приложение или нет?


1-29407
Xerx
2004-01-31 22:35
2004.02.10
вырезание части файла


14-29521
REA
2004-01-21 16:52
2004.02.10
Купить гитару


3-29197
Тимохов
2004-01-20 11:17
2004.02.10
Про TClientDataSet.