Parallelport ansteuerung mit c++

Hi,

ich würde gerne eine c++ ansteuerung des LPT unter Windows 2000 Professional durchführen.

ich habe viel gefunden und ausprobiert, aber nix hat einwandfrei funktioniert…

Ich möchte nciht viel Graphischen bla haben, sondern am besten bei beispiel für eine Consolenanwendung… ganz simpel am besten, denn die durchführen wie visiualisierung mache ich dann selber…

Ganz vielen vielen Dank!

Hi nochmal,

hab vergessen, das ich nur einzelne Ports ansteuern will, z.B. den Kanal 1 oder so…

Also keine komplexen routinen :smile:

THX

Falls noch von Interesse: Treiber
Hi.

Ich hatte das auch mal ausprobiert um mit zwei Leitungen ein IIC-Interface zu implementieren. Das Problem:

unter Win98 und früher konntest du die Ports mit in(&portaddr) out(&portaddr, data) (so ungefähr) recht simpel ansteuern.

Leider mußt du seit Win2k richtige Treiber schreiben, was eindeutig ein paar Kilo schwerer ist.
Ich habe dann die ganze Geschichte auf Linux portiert und war glücklich.

Einzelne Leitungen kannst du nicht ansteuern, da immer 8-Bit-Zugriffe getätigt werden. Du musst also ein read-modify-write mit der entsprechenden Bitmaske machen, wenn die anderen Leitungen unberührt bleiben sollen. Wenn nicht, kannst du beliebige Werte rein schreiben.

Grüße
Till

Hi du,

versuchs mal hiermit

http://www.beyondlogic.org/porttalk/porttalk.htm

MfG Scuba

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Nicht schlecht, aber auf einen Tip eine Kollegen habe ich jetzt eine ganz witzige Möglichkeit im Netz gefunden…

Wichtig ist eigentlich inpout32.dll, diese setzt die Windoof-kontrolle außer kraft! (runterladen und in die C:\Winnt\inf**.** kopieren)

Der Wert am Außgang wird dann einfach unten durch den Wert „x“ im Hexcode festgelegt…

CODE:
/**************************************************/
/*** ***/
/*** Test2.c – test interface to inpout32.dll ***/
/*** ( http://www.logix4u.net/inpout32.htm ) ***/
/*** ***/
/*** Copyright © 2005, Douglas Beattie Jr. ***/
/*** ***/
/*** ***/
/*** http://www.hytherion.com/beattidp/ ***/
/*** ***/
/**************************************************/
/* Last Update: 2006.05.14
*/

/*******************************************************/
/* */
/* Builds with Borland’s Command-line C Compiler */
/* (free for public download from Borland.com, at */
/* http://www.borland.com/bcppbuilder/freecompiler ) */
/* */
/* Compile with: */
/* */
/* BCC32 -IC:\BORLAND\BCC55\INCLUDE TEST2.C */
/* */
/* */
/* Be sure to change PPORT_BASE (Port Base address) */
/* accordingly if your LPT port is addressed */
/* elsewhere. */
/* */
/*******************************************************/

#include
#include
#include

/* Definitions in the build of inpout32.dll are: */
/* short _stdcall Inp32(short PortAddress); */
/* void _stdcall Out32(short PortAddress, short data); */

/* prototype (function typedef) for DLL function Inp32: */

typedef short (_stdcall *inpfuncPtr)(short portaddr);
typedef void (_stdcall *oupfuncPtr)(short portaddr, short datum);

#define PPORT_BASE 0x378

// Prototypes for Test functions
void test_read8(void);
void test_write(void);
void test_write_datum(short datum);

/* After successful initialization, these 2 variables
will contain function pointers.
*/
inpfuncPtr inp32fp;
oupfuncPtr oup32fp;

/* Wrapper functions for the function pointers

  • call these functions to perform I/O.
    */
    short Inp32 (short portaddr)
    {
    return (inp32fp)(portaddr);
    }

void Out32 (short portaddr, short datum)
{
(oup32fp)(portaddr,datum);
}

int main(void)
{
HINSTANCE hLib;

short x;
int i;

/* Load the library */
hLib = LoadLibrary(„inpout32.dll“);

if (hLib == NULL) {
fprintf(stderr,„LoadLibrary Failed.\n“);
return -1;
}

/* get the address of the function */

inp32fp = (inpfuncPtr) GetProcAddress(hLib, „Inp32“);

if (inp32fp == NULL) {
fprintf(stderr,„GetProcAddress for Inp32 Failed.\n“);
return -1;
}

oup32fp = (oupfuncPtr) GetProcAddress(hLib, „Out32“);

if (oup32fp == NULL) {
fprintf(stderr,„GetProcAddress for Oup32 Failed.\n“);
return -1;
}

/*******************************************************/
/** IF WE REACHED HERE, INITIALIZED SUCCESSFUL ******/
/*******************************************************/

/* now test the functions */

/***** Read 8 bytes at I/O base address */
test_read8();

/***** Write 0x75 to data register and verify */
test_write();

/***** One more time, different value */
test_write_datum(0xAA);

/* finished - unload library and exit */
FreeLibrary(hLib);
return 0;
}

/*
TEST: Read inputs of 8 registers from PORT_BASE address
*/
void test_read8(void) {

short x;
int i;

/* Try to read 0x378…0x37F, LPT1: */

for (i=PPORT_BASE; (i[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]