Fuer die Kommunikation zwischen Experimentalsteuerungsprogramm und iView X-Programm wurde ein kleines Interface geschrieben, das die low-level-Routinen zur UDP-Kommunikation kapselt. Es ist lauffaehig unter DOS+djgpp+watt-32 und Unix/Linux+Allegro.
Die Schnittstelle kommt als Pseudo-header-Datei, d.h. als .h-Datei, die einfach am Anfang des Experimentalsteuerungsprogramms per #include
eingebunten werden kann. Wegen des geringen Umfangs und regelmaessiger Aenderungen schien es nicht lohnenswerte daraus eine vollbluetige C-Bibliothek zu bauen.
Das Header-file liegt hier.
Eine kommentierte [http://www.math.uni-bielefeld.de/~hkaelber/psycho/demo_ivx.zip][Demo]] zeigt eine vereinfachte Anwendung des Interface, mit der man einen Punkt durch Augenbewegungen ueber den Bildschirm steuern kann. Die folgende knappe Gebrauchsanleitung ist daraus entnommen:
Howto...use ivx_udp.h --------------------- 1. socket am Ende von init_system initialisieren defaults fuer socket-init sind: init_iviewsocket("192.168.1.10", 4444, "192.168.1.1", 4444) 2. An entsprechender Stelle iview (d.h. recording und streaming) starten. (in dieser Datei von start_iview() erledigt) 3. Kalibrierungsbildschirm anzeigen: manual_calib() (s.u., Anm.) 4. Daten an socket screiben: z.B. send_udp("ET_REC\n") (immer '\n'-terminieren!) 5. Daten von socket lesen: (alle Lesevorgaenge speichern den Inhalt des gelesenen Pakets in udp_buffer) a. "blind" naechstes Paket aus der UDP-queue lesen: receive_udp() (liefert 1 bei Erfolg; -1 bei Misserfolg); deprecated! liefert meistens ein um einige ms veraltetes Paket. b. "schlau" (was man will) _zeitaktuelles_ Paket lesen: receive_current_udp2(timer_counter) > braucht Zeiger auf (irgendeinen) timer_counter > wartet auf naechstes noch ankommendes (!) Paket; > gibt Meldung (in dbgFile), wenn laenger als kritischer Wert (CRITICAL_RECV_TIME) gewartet (was absolute Ausnahme ist!) c. "noch schlauer" Koordinaten, die im aktuellen Paket uebermittelt wurden anfordern: get_gaze_position(int *, int*, int *timer_counter) 6. An passender Stelle iview (d.h .recording und streaming) stoppen (in dieser Datei von stop_iview() erledigt) 7. socket (in shutdown_system) schliessen: shutdown_iviewsocket()
http://www.math.uni-bielefeld.de/~hkaelber/psycho/beformat1.pl
Vergleicht Roh- und begaze-event-Daten-file und fuegt von begaze gefressene MSGs in das event-file ein. Bei allen beformat-Skripten kann nicht davon ausgegangen werden, dass sie out-of-the-box fuer alle IVX-Datensaetze funktionieren. Ihr Ergebnis sollte geprueft werden.
usage: beformat1.pl BEGAZE_FILE RAWDATA_FILE OUTPUT_FILE
http://www.math.uni-bielefeld.de/~hkaelber/psycho/beformat2.pl
Gleiche Funktionalitaet wie beformat1.pl plus spaltenweise Umformatierung sodass jeder Parameter von Sakkaden-, Fixations- und Blink-events seine eigene Spalte hat.
http://www.math.uni-bielefeld.de/~hkaelber/psycho/beformat3.pl
Gleiche Funktionalitaet wie beformat2.pl plus spaltenweise Umformatierung sodass jeder Parameter von save_result-Messages seine eigene Spalte hat (d.h. ist experimentspezifisch!)
http://www.math.uni-bielefeld.de/~hkaelber/psycho/eda_convert.pl
Fuegt in ein event-File die Messages ein, die fuer eine Weiterverarbeitung durch den Eyedata-Analyser benoetigt werden. Setzt die vorherige Anwendung von beformat1.pl voraus und matcht das set-Ende auf eine "save_result"-Message, was evtl. angepasst werden muss.