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

Вниз

Помогите справиться с RTS последовательного порта   Найти похожие ветки 

 
dielectric ©   (2004-09-02 16:22) [0]

WinXP Устанавливаю в DCB dcb_RtsControlToggle RTS рухает через 10мс поле выдачи байта в линию, а нужно тютька в тютьку, использую EscapeCommFunction(PortH,CLRRTS) при dcb_RtsControlDisable по признаку EV_TXEMPTY рухает сразу же как устанавливается. Как же всётаки отследить последний байт
                          Заранее благодарен, Dielectric


 
Германн ©   (2004-09-03 02:08) [1]

Интересный вопрос! Узнаешь ответ - сообщи плиз!
Пока что "отследить последний байт" по EV_TXEMPTY, удавалось только при отключении аппаратного FIFO микросхемы UART.


 
dielectric ©   (2004-09-03 09:01) [2]

Пока что "отследить последний байт" по EV_TXEMPTY мне так и не удалось и при отключении аппаратного FIFO, RTS падает раньше (по осцилографу вижу), где то я слышал что EV_TXEMPTY появляется когда пуст буфер винды а не самого уарта. Кто скажет как прочитать регистр состояния порта в компе или какой другой способ определить конец выдачи, очень надо, пожалуйста. (напоминаю, у меня XP, не Win9X)
P.S. Даже на старом 51 уарте прерывание такое есть


 
Defunct ©   (2004-09-04 02:52) [3]

> P.S. Даже на старом 51 уарте прерывание такое есть

Отключить ком порты в текущей конфигурации винды. И работать с ними напрямую.

In/Out


 
Германн ©   (2004-09-05 03:28) [4]

2 Defunct ©   (04.09.04 02:52) [3]
>Отключить ком порты в текущей конфигурации винды. И работать с >ними напрямую.

>In/Out

Объясни тогда как? Как в NT работать "напрямую с портами"!
Без драйвера режима ядра?


 
dielectric ©   (2004-09-06 08:49) [5]

Я как бы сделал "прямое управление", т.е. напрямую запрашиваю байт состояния порта, RTS вырубается вовремя, но только при посредстве giveio.sys  

initialization
lpServiceArgVectors:=nil;
hSCMan:=OpenSCManager(Nil,Nil,SC_MANAGER_ALL_ACCESS);
hService:=CreateService(hSCMan,"giveio","giveio",SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER,
     SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL,PChar(ExtractFilePath(ParamStr(0))+"giveio.sys"),
     nil,nil,nil,nil,nil);
If hService<>0 then CloseServiceHandle(hService);
hService:=OpenService(hSCMan,"giveio",SERVICE_ALL_ACCESS);
If hService<>0 then
 begin
  StartService(hService,0,PChar(lpServiceArgVectors));
  CloseServiceHandle(hService);
 end;
hDevice:=CreateFile("\\.\giveio",GENERIC_READ or GENERIC_WRITE,0,PSECURITY_DESCRIPTOR(nil),OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
 CloseHandle(hDevice);
end.

вырезал из dataport.pas
я так понял стандартными способами х. добьёшься


 
Германн ©   (2004-09-07 02:49) [6]

Ну, я бы уточнил бы. "Стандартными" способами можно и нужно добиваться. Но "стандартный" для NT способ - написание драйвера!


 
dielectric ©   (2004-09-10 10:57) [7]

По любому придётся использовать нерегламентированые функции ядра, тобишь получиться тот же самый giveio



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

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

Наверх




Память: 0.48 MB
Время: 0.027 c
4-1093940056
Loki3D
2004-08-31 12:14
2004.10.10
перезагрузка выключение компьютера под разными ОС


14-1095717751
VAmpiro$
2004-09-21 02:02
2004.10.10
Что такое "Hendle" и как с ним боротся?


3-1094813399
Vilkkkka
2004-09-10 14:49
2004.10.10
Firebird &amp; Interbase


9-1086686588
Delpher_Gray
2004-06-08 13:23
2004.10.10
Обработко сообщений от мыши в консольной проге, D3D


1-1095855940
Рамиль
2004-09-22 16:25
2004.10.10
MDIChild аналог модальной формы