Народ такой вопросик кто нибудь писал на си под винду прогу управления через LPT порт?И какие советы будут?Задача такова таймер на включение и выключения объектов.
Могу дать ссылки:Hardware Interface Programming in VC++ – Part I (Port Access)И там внизу статьи еще:Driver Development Part 1: Introduction to DriversThis article will go into the basics of creating a simple driver.Driver Development Part 2: Introduction to Implementing IOCTLsThis article will go deeper into the basics of creating a simple driver.A simple demo for WDM Driver developmentWDM Driver programming introduction with three Pseudo Drivers.API hooking revealedThe article demonstrates how to build a user mode Win32 API spying system
Также следует почитать Microsoft Platform SDK Help. Вот пример оттуда для СОМ порта, для LPT наверное аналогично, сам не пробовал
/* A sample program to illustrate setting up a serial port. */
#include
int main(int argc, char *argv[]){ DCB dcb; HANDLE hCom; BOOL fSuccess; char *pcCommPort = “COM2”;
hCom = CreateFile( pcCommPort, GENERIC_READ | GENERIC_WRITE, 0, // must be opened with exclusive-access NULL, // no security attributes OPEN_EXISTING, // must use OPEN_EXISTING 0, // not overlapped I/O NULL // hTemplate must be NULL for comm devices );
if (hCom == INVALID_HANDLE_VALUE) { // Handle the error. printf (“CreateFile failed with error %d.\n”, GetLastError()); return (1); }
// Build on the current configuration, and skip setting the size // of the input and output buffers with SetupComm.
fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess) { // Handle the error. printf (“GetCommState failed with error %d.\n”, GetLastError()); return (2); }
// Fill in DCB: 57,600 bps, 8 data bits, no parity, and 1 stop bit.
dcb.BaudRate = CBR_57600; // set the baud rate dcb.ByteSize = 8; // data size, xmit, and rcv dcb.Parity = NOPARITY; // no parity bit dcb.StopBits = ONESTOPBIT; // one stop bit
fSuccess = SetCommState(hCom, &dcb);
if (!fSuccess) { // Handle the error. printf (“SetCommState failed with error %d.\n”, GetLastError()); return (3); }
printf (“Serial port %s successfully reconfigured.\n”, pcCommPort); return (0);}
))))) ссылки не получились)))))но думаю, если интересно, то гугл найдет в 2 секИ что-то я не нашел CloseHandle, видать он автоматом закрывается, когда прога завершает работу. Ну и писать данные соответственно WriteFile. Успехов)
Слушай, тебе это на кой x? Я, конечно, учусь сейчас разрабатывать драйвера режима ядра. Пиши в асю или мыло. 271318967. zeromem@yandex.ru.А вообще, для такой работы нужно четко иметь представление о том, с каким драйвером работать и как он(драйвер) должен взаимодействовать с устройством. Хотя на твоем месте, я писал бы собственный драйвер. Хотя это очень трудно. WinAPI покажется детским лепетом.
sc, я тебя не совсем понял насчет ссылок. Тут просили просто рассказать как работать с драйвером для LPT.Hardware Interface Programming in VC++ – Part I (Port Access) я еще пойму, но остальное – это просто рассказывается о том как написать свой драйвер сначала в NT стиле, а потом в стиле WDM.
Ну а это вообще зачем?@API hooking revealed The article demonstrates how to build a user mode Win32 API spying system@
Кстати, мифка, ты случайем не разработчик NeverLands или так для прикола сайт добавил?
sc писал:И что-то я не нашел CloseHandle, видать он автоматом закрывается, когда прога завершает работу. Ну и писать данные соответственно WriteFile.—————————————Вообще да, закрывается. Только вот так делать лучше не надо. Может обернуться глюками.Про WriteFile скажу, что его одного не достаточно. Самый распространенный способ работы с драйвером это через IOCTL запросы. Если мне не отшибло память, то вызов WriteFile и сделает определенного типа IOCTL запрос.—————————————Ну и еще рах повторюсь, что нужно иметь представление о том с каким драйвером работать и как он работает с устройством.
А если свой драйвер не писать, а взять например любой для принтера, типа text generic? И слать туда данные на свое устройство. А что за объекты требуется вкл/выкл? )
Дружища пиши на Delphi, будет всё понятней и быстрее. Скачаешь пару компонентов и всё готова, работает как надо.
А если хочешь немного разобраться то можно вот почитать:Использование Visual Basic 6.0 для управления внешними устройствами и приём внешней информации (температура, давление, напряжение, ток и т.п.) через LPT портhttp://vbrussian.com/Article.asp?ID=101ZeroMem, А зачем вообще драйвер писать? Я давно-давно писал прогу под w2k для работы с модемом без всяких драйверов, если память не изменяет)) Неужели есть разница с LPT?
http://www.compdoc.ru/prog/pascal/work_with_lpt/http://junglewin.narod.ru/lpt.htmlВот еще пара статеек, может помогут
Со своим драйвером надежнее. Просто я не знаю вообще зачем челу работать с LPT. Если ему нужно лишь работать через определенную абстракцию, которую можно использовать с 3 го кольца, то пожалуйста. Но прога от этого проще не станет. А на Delphi, пожалуй, может выйти и сложнее, есди самому компоны писать.
Copyright ©