DATA-Port, STATUS-Port und CONTROL-Port am LPT



  • Hallo zusammen,

    ich setzt mich jetzt schon seit Stunden mit der Parallelportprogrammierung unter Win2k auseinander.
    Also direkt auf Register zugreifen mit outp und inp funktioniert ja unter Win2k nicht mehr.
    Tools die auf Treiberebene laufen und das wieder erlauben hab ich ausprobiert, jedoch habe ich damit keine vernünftigen Ergebnisse erzielt.

    Laut FAQ/google sollte das ja so gehen:

    HANDLE hCom = CreateFile("lpt1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    
    char writeByte=12;
    int len=1;
    unsigned long dwBytesWritten;
    
    WriteFile(hCom, &writeByte, len, &dwBytesWritten, NULL);
    

    bzw. für's lesen:

    HANDLE hCom = CreateFile("lpt1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    
    char readByte;
    int len=1;
    unsigned long dwBytesReceived;
    
    ReadFile(hCom, &readByte, len, &dwBytesReceived, NULL);
    
    cout << readByte;
    

    Wenn ich jetzt nicht komplett alles verpeilt habe, kann ich damit beliebig daten auf den Port schreiben, jedoch nur in den DATA-Port.
    Aber wie greife ich (lesend oder schreibend) auf den STATUS- bzw. den CONTROL-Port (brauche ich ja für strobe, busy...) zu???

    Für Antworten (oder besser ein Kurzes Beispiel) wäre ich sehr dankbar, da ich mit meinem Latein langsam am Ende bin.

    Gruß
    Threaddy



  • Bin mir nicht sicher, aber evtl. brauchst du EscapeCommFunction 🙂



  • Hi,

    danke für die Anwort. Aber ich glaube das kann man nur für die serielle Schnittstelle verwenden. Hatte das vor einiger Zeit mal dazu verwendet RTS und DTR auf com1 zu steuern (hat auch funktioniert).
    Mehr gibt die MSDN da nicht her.

    Gibts evtl. so was wie EscapeLPTFunctions?
    Danke im voraus!

    Gruß
    Threaddy



  • Geht nur über einen eigenen Device Driver (bin mir aber nicht 100% sicher). Ein Beispiel findest Du im DDK.

    Blackbird



  • Hi ich programmiere nebenbei noch mit nem AVR da hatte ich auch probleme mit XP dazu hatte ich mal das hier gefunden und dir rausgesucht. Vielleicht kannst damit was anfangen.

    On Windows NT, 2000, and XP user applications cannot directly access the parallel port. However, kernel mode drivers can access the parallel port. giveio.sys is a driver that can allow user applications to set the state of the parallel port pins.

    Before using AVRDUDE, the giveio.sys driver must be loaded. The accompanying command-line program, loaddrv.exe, can do just that.

    To make things even easier there are 3 batch files that are also included:

    install_giveio.bat Install and start the giveio driver.
    status_giveio.bat Check on the status of the giveio driver.
    remove_giveio.bat Stop and remove the giveio driver from memory.
    These 3 batch files calls the loaddrv program with various options to install, start, stop, and remove the driver.

    When you first execute install_giveio.bat, loaddrv.exe and giveio.sys must be in the current directory. When install_giveio.bat is executed it will copy giveio.sys from your current directory to your Windows directory. It will then load the driver from the Windows directory. This means that after the first time install_giveio is executed, you should be able to subsequently execute the batch file from any directory and have it successfully start the driver.

    Wenn du die Datein bei google oder so nicht findest schreib mich per pn an dann kann ich sie dir auch schicken.
    MfG schirrmie



  • Hi,

    danke für die Antworten.
    giveio.sys hab ich bei sourceforge gefunden. Hab's kurz hier am Laptop ausprobiert und hab 'ne Fehlermeldung bekommen (hat ja auch kein LPT). Probier das erst mal noch auf nem Desktop-PC.

    Bin mir jetzt allerdings nicht sicher wie ich den Treiber dann unter C++ ansprechen soll. Im Readme stand dazu nicht wirklich was. Normalerweise brauch ich doch da 'n Header-File, oder lieg ich da jetzt komplett falsch?

    Für weitere Infos wäre ich sehr dankbar. Wäre nett wenn jemand mal 'n paar Zeilen Quellcode posten könnte (das hat doch sicher schon mal jemand gemacht).

    Im Voraus besten Dank!
    Gruß
    Threaddy



  • Hi,
    Also leider kann ich dir nicht sagen wie du es in C/C++ implementieren musst.
    Wie gesagt es gibt die 3 dateien
    install_giveio.bat Install and start the giveio driver.
    status_giveio.bat Check on the status of the giveio driver.
    remove_giveio.bat Stop and remove the giveio driver from memory.

    Ich würde die dateien einfach aus dem Programm aufrufen.
    Die ich dir zur not auch schicken könnte falls du die nicht findest.

    MfG schirrmie


Anmelden zum Antworten