IOW Handle an Objekt binden

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
finalcu
Posts: 26
Joined: Fri Nov 13, 2009 8:53 am

IOW Handle an Objekt binden

Post by finalcu »

Hallo Zusammen,

ich habe folgende Funktion:

Code: Select all

IOWKIT_HANDLE ioHandles[IOWKIT_MAX_DEVICES];

bool deviceInitialisation() {
	ioHandles[0] = IowKitOpenDevice();
	if (ioHandles[0] != NULL)
	{
		// ... success, count devices
		numDevs = IowKitGetNumDevs();
		cout << "Devices found: " << numDevs << endl;
		// get all IO-Warriors
		for(int i = 1; i <= numDevs; i++) {
			ioHandles[i] = IowKitGetDeviceHandle(i);
			// assign to control objects
                        ...
		}
	}
	else {
		return false;
	}
	return true;
}
Jetzt würde ich gerne an der markierten Stelle (...) die einzelnen Handles an ein Objekt binden. Die Klasse dafür könnte so aussehen:

Code: Select all

class IOW40Control {
private:
	IOWKIT_HANDLE iow_handle;
public:
	IOW40Control();
        read();
        write();
	virtual ~IOW40Control();
};
Die Klasse hat dann Member Funktionen, die das Schreiben und Lesen erledigen. Wichtig ist, dass ich von nun an nur noch über das Objekt auf die IOW's zugreife, d.h das ioHandle[] array brauche ich nicht mehr. Wie programmiere ich das sauber?

Gruss und Dankeschön.

finalcu
User avatar
Christoph Jung
Posts: 673
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: IOW Handle an Objekt binden

Post by Christoph Jung »

Ich glaube da ist das hier das falsche Forum. Hier handelt es sich um reine Programmierung und deren Grundsätze und nicht um ein konkretes Problem.
Für solche Fälle einfach an ein C++ Forum wenden.
Software developer
finalcu
Posts: 26
Joined: Fri Nov 13, 2009 8:53 am

Re: IOW Handle an Objekt binden

Post by finalcu »

Da hast du wahrscheinlich recht. Ich weiss nur nicht wie ich mit den Handles umgehen muss. Wenn ich zum Beispiel ioHandles[0] = IoKitOpenDevice() aufrufe, kann ich in meinemObjekt dann ein neues Handle erstellen und new_handle = IoKitGetDevice() aufrufen oder sind die Devices dann schon an das Array ioHandles[0] vergeben? In diesem Fall müsste ich dann das ioHandle dem Objekt irgendwie übergeben...
User avatar
Christoph Jung
Posts: 673
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: IOW Handle an Objekt binden

Post by Christoph Jung »

Bei IowKitOpenDevice() wird die DLL geladen und das erste Gerät als Handle zurückgegeben.
Die anderen Handlels werden über IowKitGetDeviceHandle() geholt. Das muss man aber manuell in einer Routine durchführen.
In der Duko zur DLL steht das alles beschrieben drin.

So in etwa, wenn man das in eine seperate Variable speichern will.

Code: Select all


IOWKIT_HANDLE ioHandle;
IOWKIT_HANDLE subHandle[16];

	ioHandle = IowKitOpenDevice();

	if(ioHandle != NULL){

		numDev = IowKitGetNumDevs();

		for(ULONG i=0; i<numDev; i++){
			subHandle[i] = IowKitGetDeviceHandle(i+1);
		}	
	}
Software developer
finalcu
Posts: 26
Joined: Fri Nov 13, 2009 8:53 am

Re: IOW Handle an Objekt binden

Post by finalcu »

Danke für deine Antwort. Soweit hatte ich das auch von der Doku verstanden. Was für mich noch unklar ist: Nehmen wir an wir haben 3 IOW's und führen deinen Code aus. Sind danach die IOW handles subhandle[0], subhandle[1] und subhandle[2] oder verbirgt sich der erste IOW im ioHandle. Falls ja, was ist dann in subhandle[0]?
User avatar
Christoph Jung
Posts: 673
Joined: Sun Oct 08, 2006 3:43 pm
Location: Germany / Berlin
Contact:

Re: IOW Handle an Objekt binden

Post by Christoph Jung »

Mein Code speichert alle Handels seperat in subHandle ab. Also subHandle[0] ist ioHandle.
Ist etwas anders als in der Doku aber tut seinen Dienst. Der Dokucode macht das selbe, nutzt aber gleich ein Handle-Array zum speichern.
Software developer
towaibw
Posts: 198
Joined: Sat Dec 27, 2003 10:55 pm
Location: Berlin / Germany
Contact:

Re: IOW Handle an Objekt binden

Post by towaibw »

Hi finalcu,

also, wie ich so etwas machen würde, kannst du dir bei IOWJ ansehen (Achtung Reklame ;-). Da verfolge ich auch den objektorientierten Ansatz, allerdings in Java. Meiner Meinung nach gibt es da nur eine Möglichkeit: Wenn du das Array mit den Handles hast, die Objekte sofort erzeugen und die dann von eine Factory auf Verlangen herausgeben lassen. Wenn du mehrer IOWs angeschlossen hast, musst du die eh über den Typ oder die Seriennummer auseinanderhalten.

Bei mir heist die Klasse IowFactory und die Methoden

Code: Select all

public AbstractIowDevice getIowDevice() throws NoSuchElementException;
public AbstractIowDevice getIowDevice(String serial)throws NoSuchElementException;
public Iow40 getIow40Device() throws NoSuchElementException;
public Iow40 getIow40Device(String serial) throws NoSuchElementException;
public Iow24 getIow24Device() throws NoSuchElementException;
public Iow24 getIow24Device(String serial) throws NoSuchElementException; 
public Iow56 getIow56Device() throws NoSuchElementException;
public Iow56 getIow56Device(String serial) throws NoSuchElementException; 
just my 64 cents

Thomas
Post Reply