spyro wrote:
in der doku steht, daß ein report an oder von interface1
immer 8 byte hat, inclusive der id.
in den funktionen die ich nutze muß ich die id und den void* angeben, wo die daten hinsollen/herkommen.
da fragt mann sich doch, wie die schreib/lesefunktion implementiert ist.
Testen kann ich mangels Mac nichts, aber hast Du diesen Kommentar im Header gelesen ?
/*!
@function IOWarriorReadInterface1
@abstract Reads a 7 byte output report from interface 1 of the first IOWarrior 40 device connected to this system. This function won't work for interfaces 1 of an IOWarrior 40 on Mac OS X 10.2.x.
@discussion Use this function to obtain data from the IOWarrior when in special mode. See the IOWarrior datasheet for details.
@param inReportID The report ID of the request. See the IO Warrior Datasheet for the appropriate values.
@param outData A pointer to a buffer where the data should be stored. Buffer has to be at least 7 bytes long
@result Returns 0 if reading operation was successfull. Returns a value different from 0 otherwise.
*/
int IOWarriorReadInterface1 (int inReportID, void *outData);
Ein kurzer Blick in den Sourcecode der Lib lässt dann auch noch den Verdacht aufkommen, dass es mit einem IOWarrior24 gar nicht funktionieren würde.
ReportId und 7 Bytes Daten sind wohl richtig für die von dir verwendete Library.
Ansonsten kann ich da leider nicht mehr weiterhelfen.
Der Remark im Header ist nur nicht korrigiert worden, es funktioniert auch mit dem IOW24. Herr Iwas ist momentan in den USA, ich weiss daher nicht, ob er hier im Forum mitliest, werde ihn aber mal kontaktieren.
nagut. warten wir erstmal ab. ich meine so weit kann ich ja der lösung nicht entfernt sein, weil ich ja schon den default-wert bekomme.
ich danke auf jeden fall.
fals herr iwas hier dann mitliest,
mich würde interessieren wie ich unter osx mehrere iowarrior bedienen kann, wenn ich die special-functions nutzen möchte.
im moment sehe ich nur IOWarriorWriteInterface1 und IOWarriorReadInterface1,
diese nehmen aber den erstbesten iow den sie finden.
ja damit hab ich s versucht, aber wie teile ich der funktion mit, daß ich interface1 benutzen möchte? ich bekomme ja nur die iowarriorlistnode um einen iowarrior auszuwählen, damit schreibe und lese ich ja alles was zu interface 0 soll,
aber ich finde nicht raus, wie ich damit interface1 ansprechen soll..
ich wollte meine derzeitigen erkenntnisse schreiben. ich hab mir den code vom iowarriorprobber angeschaut. es werden dort nicht die mir zu verfügung stehenden funktionen iowarriorwriteinterface1 und iowarriorreadinterface1 verwendet. es wird meines erachtens den vom betriebssystem bereitgestellten handles direkt daten übergeben. ich kann das aber nicht auf die schnelle durchschauen... leider.
mit dem prober gehts mit meiner software nicht und freitag ist abgabe...
*zu hülf*
spyro wrote:ja damit hab ich s versucht, aber wie teile ich der funktion mit, daß ich interface1 benutzen möchte? ich bekomme ja nur die iowarriorlistnode um einen iowarrior auszuwählen, damit schreibe und lese ich ja alles was zu interface 0 soll,
aber ich finde nicht raus, wie ich damit interface1 ansprechen soll..
Ich habe mir noch mal den Header IOWarriorLib.h angesehen und glaube (als nicht Mac-User):
Ein Element vom Typ struct IOWarriorListNode repräsentiert immer ein Interface des IOWarrior. Das Element IOWarriorListNode.interfaceType zeigt dann um welches Interface es sich handelt.
In Pseudo-Code sollte es also etwa so gehen:
int count=IOWarriorCountInterfaces ();
for (int i=0; i<=count;i++) {
IOWarriorListNode ln=IOWarriorInterfaceListNodeAtIndex (i);
if(ln.interfaceType==kIOWarrior24Interface1) {
//Das ist ein Interface1 für einen IOWarrior24 den man mit
//IOWarriorReadFromInterface und IOWarriorWriteToInterface
//benutzen kann
}
}