работа с портами в winxp
Написать сервис или драйвер, которые в режиме ядра будут делать out в порт.
то есть стандартными апи функциями ничего не добиться? как я понимаю outport & inport под виндоуз не работают...
если ножки стандартные data-овские, то открыть как файл.
если нестандартные, то тоже можно, как файл, но уже с извратами, и не все ножки
если нестандартные, то тоже можно, как файл, но уже с извратами, и не все ножки
createfile?
да
Вообщем есть у меня на лпт порту самодельное устройство с 8 светодиодиками, которые приделаны к дата пинам лпт.В работоспособности девайса сомнений нет. Как мне на конкретную ножку через writefile подать данные, чтобы диод загорелся?Пробовал вот так:
#include "stdafx.h"
#include "windows.h"
#include "iostream.h"
void main
{
HANDLE hLPT=CreateFile("LPT1",GENERIC_READ,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hLPT!=INVALID_HANDLE_VALUE)
{
cout << " Ok Open LPT1" << endl;
int p=255;
DWORD dw;
OVERLAPPED ov;
WriteFile(hLPT,&p,sizeof(p&dw,&ov);
CloseHandle(hLPT);
}
else cout << "Error Open" << endl;
}
Ни одна не загорается
Правда потом понял у меня writefile возвращается с ошибкой номер 5 ERROR_ACCESS_DENIED.Как это поправить мож кто знает?
#include "stdafx.h"
#include "windows.h"
#include "iostream.h"
void main
{
HANDLE hLPT=CreateFile("LPT1",GENERIC_READ,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hLPT!=INVALID_HANDLE_VALUE)
{
cout << " Ok Open LPT1" << endl;
int p=255;
DWORD dw;
OVERLAPPED ov;
WriteFile(hLPT,&p,sizeof(p&dw,&ov);
CloseHandle(hLPT);
}
else cout << "Error Open" << endl;
}
Ни одна не загорается
Правда потом понял у меня writefile возвращается с ошибкой номер 5 ERROR_ACCESS_DENIED.Как это поправить мож кто знает?
Правда потом понял у меня writefile возвращается с ошибкой номер 5 ERROR_ACCESS_DENIED.Ну это понятно. Ты же пишешь
HANDLE hLPT=CreateFile("LPT1", GENERIC_READ ,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); А сам пишешь в устройство. Ставь GENERIC_WRITE вместо GENERIC_READ.
блин после предыдущей модификации не заметил
) ща попробую. теперь 6-ую выдает ERROR_INVALID_HANDLE .Хотя createfile нормально открывает порт(успешно)
) ща попробую. теперь 6-ую выдает ERROR_INVALID_HANDLE .Хотя createfile нормально открывает порт(успешно)попробовать так
Проверить, что lpt называется именно lpt1 и что он определился в Windows-е (включен в биосе)
HANDLE hLPT=CreateFile("LPT1", GENERIC_READ | GENERIC_WRITE ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
Проверить, что lpt называется именно lpt1 и что он определился в Windows-е (включен в биосе)
Кажись надо писать "LPT1:"
PS. Хотя не, ничего про LPT в MSDN-е не вижу, только про COM пишут. Может и нельзя LPT через CreateFile открыть
PS. Хотя не, ничего про LPT в MSDN-е не вижу, только про COM пишут. Может и нельзя LPT через CreateFile открыть

какой-то у тебя неправильный msdn
навскидку
http://support.microsoft.com/default.aspx?scid=kb;en-us;823179&Product=vb6
в качестве, имени можно попробовать и (если записывать в коде, то слэшей соответственно будет в два раза больше)
навскидку
http://support.microsoft.com/default.aspx?scid=kb;en-us;823179&Product=vb6
в качестве, имени можно попробовать и (если записывать в коде, то слэшей соответственно будет в два раза больше)
так он его открывает успешно.Хендл получает нормально.Ошибки в открытии никакой нет.Или все равно может быть в дальнейшем что-то не так?
Все попробовал. 0 реакции.Все также.Открытие порта ок.Получение хендла ок.Запись - ошибка номер 6.Инвалид хэндл.Бред какой-то.
У меня есть программка кем-то другим написанная(без исходников там можно по битам данные в лпт кидать.Так вот с нее лампочки загораются и тухнут как милые.(так что лпт определен и работает хорошо)
У меня есть программка кем-то другим написанная(без исходников там можно по битам данные в лпт кидать.Так вот с нее лампочки загораются и тухнут как милые.(так что лпт определен и работает хорошо)
OVERLAPPED нафиг убери
int p=255;
DWORD dw;
WriteFile(hLPT,&p,sizeof(p&dw,0);
прогресс есть: Пишет OK Open LPT1 и виснет нах
всмысле не завершается
Сейчас вариант такой:
всмысле не завершаетсяСейчас вариант такой:
void main
{
HANDLE hLPT=CreateFile("LPT1", GENERIC_WRITE ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hLPT!=INVALID_HANDLE_VALUE)
{
cout << " Ok Open LPT1" << endl;
int p=255;
DWORD dw;
int t=WriteFile(hLPT,&p,sizeof(p&dw,NULL);
CloseHandle(hLPT);
}
else cout << "Error Open" << endl;
}
Ждет когда ему железка подтвердит прием данных.
ботай функцию SetCommState
тебе ее с правильными параметрами надо вызывать перед WriteFile-ом.
ps
Также еще можно повызывать функцию SetCommTimeouts
тебе ее с правильными параметрами надо вызывать перед WriteFile-ом.
ps
Также еще можно повызывать функцию SetCommTimeouts
SetCommState только для Serial портов 

А мб. это надо делать через UNC-пути? Всё-таки, LPT1 - это порт принтера и открываться он должен, по идее, как текстовый файл. - для вывода текста.
Оставить комментарий
skyformstd
как можно осуществить? например доступ к LPT и к конкретной его ножке?