Главная страница
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.049 c
11-1080468630
Рома
2004-03-28 14:10
2004.10.10
Присоединение exe к exe


3-1094798680
Михаил Дарий
2004-09-10 10:44
2004.10.10
Проблема с украинской буквой "і" и "ї"


1-1095838030
Clampo
2004-09-22 11:27
2004.10.10
скинка на текст


6-1091450984
mazepa
2004-08-02 16:49
2004.10.10
лажа с sendtext


1-1095941420
Aleksandr.
2004-09-23 16:10
2004.10.10
Как TListBox у назначить свою сортировку?