Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Чтение из com-порта... [D7, WinXP]


Mr.Nobody ©   (2003-11-25 22:17:00) 

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


shane54   (2003-11-26 20:20:00) [1]

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

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;


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

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


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

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


Evgeny V   (2003-11-26 06:03:00) [4]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо