schaltet bit 1, 4 und 5 (mit 0 beginnend zu zählen). Weil der Hex-Code von '2' gleich 0x32 = 00110010 ist.Code:char buffer = '2';
schaltet nur D2 (ein).Code:char buffer = 0x02;
Der Rest des Programms sollte richtig sein.
Blackbird
Hallo, ich möchte auf den Datenbus (D0-D7) der parallelen Schnittstelle unter Win2k oder XP zugreifen, um ein RC-Auto fahren zu lassen. Ich wollte dies eigentlich mit CreateFile() & WriteFile() machen.
Hier ist mein Quellcode (C/C++):
Da passiert aber gar nichts und ich weiß nicht an was das liegen könnte.Code:#include<iostream> #include<windows.h> #include<conio.h> using namespace std; int main(void) { HANDLE hLPT; char buffer = '2'; //Für D1 DWORD written; hLPT = CreateFile ("LPT1",GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL); WriteFile(hLPT,&buffer,1,&written,NULL); getch(); CloseHandle(hLPT); return 0; }
Benutzte Visual Studio 7, wäre net wenn ihr mir helfen könntet.
Schon mal Danke im vorraus.
schaltet bit 1, 4 und 5 (mit 0 beginnend zu zählen). Weil der Hex-Code von '2' gleich 0x32 = 00110010 ist.Code:char buffer = '2';
schaltet nur D2 (ein).Code:char buffer = 0x02;
Der Rest des Programms sollte richtig sein.
Blackbird
Hi, erst mal Danke für die Antwort,
ich hab den Inhalt von [highlight=red:3499839663]char buffer[/highlight:3499839663] so wie oben gezeigt geändert,
leider funktioniert es immer noch nicht. Könnte es nicht noch an was anderem liegen?
wenn du die CreateFile metode benutzt reagiert der lpt port wie ein drucker. das heist die daten liegen nur kruz an gund gehen wieder weg
wenn das zeichen gesendet wurde. oder es wird überhaupt nicht gesendet da der port denkt hängt ist ja kein drucker dran.
da du die Pins einzel stuer willst mußt du direckt auf die Hardware entweder mit einer fertigen libary oder mit einem eingen Treiber.
Die treiber metode habe ich schon ma probiert ist nicht ganz einfach aber es tut. Die libarys gibt es im netz zum downloaden.
aber immer dran denken ab win2000 geht es immer nur mit treibern.
da dir sonst Hal auf die finger haut. bei dos oder so drafs du alles.
Gruß
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
Hi, vielen Dank für deine Antwort,
hast du eventuell deinen Treiber Quellcode
noch den du hier posten könntest?
[-o< Wär echt net.
der source ist aus dem Platform DDK von MS.
der source würde dir nicht viel nutzen da dir die ganzen header fehlen.
so spricht man ihn dann an
Code:void CReadWritePort::WriteByte(BYTE PortNumber,BYTE Data) { GENPORT_WRITE_INPUT InputBuffer; hndFile = CreateFile( "\\\\.\\GpdDev", // Open the Device "file" GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL ); if (hndFile == INVALID_HANDLE_VALUE) // Was the device opened? { MessageBox(NULL,"Unable to open the device.","PortIO",MB_OK); return; } IoctlCode = IOCTL_GPD_WRITE_PORT_UCHAR; InputBuffer.CharData = Data; DataLength = offsetof(GENPORT_WRITE_INPUT, CharData) + sizeof(InputBuffer.CharData); //sscanf("200", "%x", &PortNumber); //PortNumber = 0x3BC; InputBuffer.PortNumber = PortNumber; IoctlResult = DeviceIoControl( hndFile, // Handle to device IoctlCode, // IO Control code for Write &InputBuffer, // Buffer to driver. Holds port & data. DataLength, // Length of buffer in bytes. NULL, // Buffer from driver. Not used. 0, // Length of buffer in bytes. &ReturnedLength, // Bytes placed in outbuf. Should be 0. NULL // NULL means wait till I/O completes. ); if (IoctlResult) // Did the IOCTL succeed? { ATLTRACE("Wrote data %x to port %x\n", InputBuffer.CharData,InputBuffer.PortNumber); CString Dummy; Dummy.Format("%x",InputBuffer.CharData); if(PortNumber == 0) { SetDlgItemText(m_hMainDlg,IDC_DATEN_EDIT,Dummy); } if(PortNumber == 2) { SetDlgItemText(m_hMainDlg,IDC_STEUEROUT_EDIT,Dummy); } } else { ATLTRACE("Ioctl failed with code %ld\n", GetLastError() ); CString csMsg; csMsg.Format("Ioctl failed with code %ld",GetLastError()); MessageBox(NULL,csMsg,"PortIO",MB_OK); } if (!CloseHandle(hndFile)) // Close the Device "file". { ATLTRACE("Failed to close device.\n"); MessageBox(NULL,"Failed to close device","PortIO",MB_OK); } }
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
Also erst mal danke für die Antwort,
das mit dem Treiber schreiben ist mir zu viel arbeit und auch zu kompliziert,
ich mach des jetzt mit der inpout.dll
Lesezeichen