Frage zur Programmierung unter Mac OS X

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
robertmk
Posts: 29
Joined: Sat Jan 26, 2008 6:07 pm
Location: München

Frage zur Programmierung unter Mac OS X

Post by robertmk »

Hallo, da bin ich wieder. Mittlerweile funktioniert der IOW24 wunderbar. Habe testweise mal LEDs und Display angeschlossen und mit Applescript programmiert. So weit läuft es sehr schön. Aber ich habe einige Fragen zum SDK:

1. Ist es möglich mehrere IOWs mittels Applescript anzusprechen? Ich kann leider in der Doku und hier im Forum nichts dazu finden.

2. Ich habe auch mit Xcode getestet und habe da Probleme:

2.1 Zum einen zeigt mir IOWarriorCountInterfaces an, dass zwei IOWs angeschlossen sind. Ist das normal? Heißt das, dass Interface 0 und 1 gezählt werden oder werden tatsächlich 2 IOWs erkannt?

2.2 IOWarriorWriteInterface1(0x04, data); funktioniert bei mir nicht! Liefert -1. Erst über IOWarriorWriteToInterface(myInterface, 8, data); wird das Display angeschaltet! Liegt das daran, dass 2 IOWs erkannt werden?

So das wärs fürs erste. Schon mal Danke für Eure Hilfe.
Gruß Robert
Ilja A. Iwas
Posts: 7
Joined: Tue Dec 02, 2003 10:55 am

Re: Frage zur Programmierung unter Mac OS X

Post by Ilja A. Iwas »

robertmk wrote:Hallo, da bin ich wieder. Mittlerweile funktioniert der IOW24 wunderbar. Habe testweise mal LEDs und Display angeschlossen und mit Applescript programmiert. So weit läuft es sehr schön.

Freut mich zu hören.
robertmk wrote:Aber ich habe einige Fragen zum SDK:

1. Ist es möglich mehrere IOWs mittels Applescript anzusprechen? Ich kann leider in der Doku und hier im Forum nichts dazu finden.
Nein, dies ist nicht möglich. Per AppleScript kann man nur den ersten IOWarrior ansprechen.
robertmk wrote:2. Ich habe auch mit Xcode getestet und habe da Probleme:

2.1 Zum einen zeigt mir IOWarriorCountInterfaces an, dass zwei IOWs angeschlossen sind. Ist das normal? Heißt das, dass Interface 0 und 1 gezählt werden oder werden tatsächlich 2 IOWs erkannt?
Ja, das ist normal. Interface 0 ist für den Access der einzelnen Pins, Interface 1 für die speziellen Funktionen (LCD, etc.).

robertmk wrote:2.2 IOWarriorWriteInterface1(0x04, data); funktioniert bei mir nicht! Liefert -1. Erst über IOWarriorWriteToInterface(myInterface, 8, data); wird das Display angeschaltet! Liegt das daran, dass 2 IOWs erkannt werden?
IOWarriorWriteInterface1 ist eine Funktion aus der ersten Version der IOWarrior Library, die nur den IOWarrior40 unterstützt. IOWarriorWriteToInterface ist richtig.

robertmk wrote:So das wärs fürs erste. Schon mal Danke für Eure Hilfe.
Gern geschehen,
Ilja
robertmk
Posts: 29
Joined: Sat Jan 26, 2008 6:07 pm
Location: München

Re: Frage zur Programmierung unter Mac OS X

Post by robertmk »

Hi Ilja,
Ilja A. Iwas wrote:Nein, dies ist nicht möglich. Per AppleScript kann man nur den ersten IOWarrior ansprechen.
mhh schade. Habe ich mir schon fast gedacht. Aber ich will eh auf Xcode umsteigen.
Ilja A. Iwas wrote:IOWarriorWriteInterface1 ist eine Funktion aus der ersten Version der IOWarrior Library, die nur den IOWarrior40 unterstützt. IOWarriorWriteToInterface ist richtig.
Ah ok. Das wußte ich vorher nicht. Danke für deine Antwort.

Ich habe bis jetzt immer in Java und C programmiert. Nun bin seit einiger Zeit auch endlich mal an Objectiv-C dran. ABER ich habe da meine Probleme! Muss doch noch einiges lernen was objective-C und xcode angeht :(

Vielleicht kannst du mir dabei auch helfen: Es geht um CFStringRef! Ich will gerne die IOW SerialNumber auslesen und schauen, ob ich den richtigen IOW nutze. Dachte mir so (wie gewohnt) ich nehme eine Konstante und vergleiche die mit der ausgelesenen Nummer. Ha ich verstehe diese CFStringRef nicht. Was genau ist das? Wie kann ich den Inhalt ausgeben? Wie lege ich eine Const CFStringRef mit der Serial an? Wie vergleiche ich CFStringRef? Habe im Netz geguckt, meine Bücher gewälzt, aber nicht so das richtige gefunden...

Fragen über fragen. Java ist im Moment irgendwie einfacher, aber ich hoffe wenn ich mal besser drinnen bin, wirds sich das geben. Naja wenigstens habe ich schon mal ein kleines Programm, dass mir was auf das LCD schreibt und die LED schaltet :D
Gruß Robert
towaibw
Posts: 198
Joined: Sat Dec 27, 2003 10:55 pm
Location: Berlin / Germany
Contact:

Post by towaibw »

Java ist im Moment irgendwie einfacher,...
Warum nimmst Du dann nicht einfach Java? Ich habe das API der iowkit.dll auf die MacOS lib gewrapt, so gut wie ich es konnte (leider nur mit Einschränkungen). Damit kannst Du IOWJ teilweise nutzen. Led's blinken lassen und Ausgaben auf das LCD funktionieren jedenfalls. Suche mal im Forum danach ;-)

Die Seriennummer habe ich wie folgt behandelt:

Code: Select all

/*
 * Class:     com_codemercs_iow_IowKit
 * Method:    getSerialNumber
 * Signature: (J)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_codemercs_iow_IowKit_getSerialNumber
  (JNIEnv *env, jclass cl, jlong handle)
 {
	//TODO check handle
	char zbuf[9];
	int index = handle * 2;
  
    // printf("Serial: %s\n",CFStringGetCStringPtr(interfaces[i]->serialNumber,kCFStringEncodingMacRoman));
    strcpy(zbuf,CFStringGetCStringPtr(interfaces[index]->serialNumber,kCFStringEncodingMacRoman));
	return (*env)->NewStringUTF(env,zbuf);
	
 }
Frage mich nur gerade, ob Dir das in irgend einer Form weiterhilft ;-), Sorry.
Vielleicht ist die init() funktion noch hilfreich:

Code: Select all

#include <string.h>
#include <stdlib.h>
#include "IOWarriorLib.h"
#include "iowkitjni.h"

//Globals
IOWarriorListNode* interfaces[32];
int interfaceCount = 0;

int init() {
	int i;
	interfaceCount = IOWarriorCountInterfaces();
	//*deb*/printf("IOW count = %d\n",interfaceCount);
	for(i=0; i < interfaceCount; i++) {
		interfaces[i] = IOWarriorInterfaceListNodeAtIndex(i);
	 
		/*deb	 
		printf("Serial: %s\n",CFStringGetCStringPtr(interfaces[i]->serialNumber,kCFStringEncodingMacRoman));
		printf("open ?: %d\n",interfaces[i]->interfaceOpen);
		printf("Type  : %d\n",interfaces[i]->interfaceType);
		printf("ID    : %x\n",idForIOWarriorInterfaceType(interfaces[i]->interfaceType));
		*/
	}
	if (interfaceCount == 0)
		return -1;
	else
		return interfaceCount/2;
} 
Also, der große MacOS Experte bin ich nicht, aber so hat es jedenfalls funktioniert. Kann sein, das es eleganter geht.

de.wagner_ibw.iow.ListDevices liefert (Rev ist gefaket):

Code: Select all

------ Version of iowkit library is 'IO-Warrior Kit V1.4 G4' --------
Number of plugged device(s): 3
Device1: IOW24,Handle[0],Id[5377],Rev[1011],Serial[00000153]
Device2: IOW56,Handle[1],Id[5379],Rev[1011],Serial[0000011D]
Device3: IOW40,Handle[2],Id[5376],Rev[1011],Serial[00002632]
Thomas
robertmk
Posts: 29
Joined: Sat Jan 26, 2008 6:07 pm
Location: München

Post by robertmk »

towaibw wrote:Warum nimmst Du dann nicht einfach Java? Ich habe das API der iowkit.dll auf die MacOS lib gewrapt, so gut wie ich es konnte (leider nur mit Einschränkungen). Damit kannst Du IOWJ teilweise nutzen. Led's blinken lassen und Ausgaben auf das LCD funktionieren jedenfalls. Suche mal im Forum danach ;-)
Hallo Thomas,

danke für deine Antwort. Habe irgendwo im Forum gelesen, dass Java nciht unter Mac OS X läuft. mhh, war wohl ein älterer Post. Danke für den Hinweis. Ich suche mal durchs Forum.

Eigentlich wollte ich ja was mit Objective-C machen. Wo genau liegen den die Einschränkungen? Was geht den nicht mit Java? Und was ich gerne wissen würde: Wie ist den die Geschwindigkeit im Vergleich zu C?

Besten Dank
Gruß Robert
towaibw
Posts: 198
Joined: Sat Dec 27, 2003 10:55 pm
Location: Berlin / Germany
Contact:

Einschränkungen

Post by towaibw »

Siehe hier,letzter Beitrag.
Ich würde behaupten, dass Java nicht langsamer als C ist (in Verbindung mit den IO-Warrior).

Thomas
robertmk
Posts: 29
Joined: Sat Jan 26, 2008 6:07 pm
Location: München

Re: Einschränkungen

Post by robertmk »

towaibw wrote:Ich würde behaupten, dass Java nicht langsamer als C ist (in Verbindung mit den IO-Warrior)
Ok verstehe. Muss ich mir mal Gedanken machen, ob ich damit auch hin komme. Bin mir noch nicht im klaren wie weit ich mit meinem Programm gehen.

Wo bekomme ich die Java API? Ist die im SDK dabei? Konnte da keine Infos zu finden.

Auf mein eigentliches Problem hat leider noch keiner antworten können? Denke die meisten arbeiten unter Windows oder Linux. Ist ja auch weniger ein IOW Problem. Bis bald
Gruß Robert
robertmk
Posts: 29
Joined: Sat Jan 26, 2008 6:07 pm
Location: München

Post by robertmk »

aha jetzt klappts
Gruß Robert
Post Reply