Epochandler - xenobyte/INF-PRO-FHL GitHub Wiki

Epoc Wrapper

##Motivation

  • Wrapper um objektorientiert arbeiten zu können, da das mitgelieferte SDK in C und dementsprechend nicht objektorientiert geschrieben
  • Defizite der schlecht dokumentierten API aufheben Funktionen
  • Abfragen von: ** Konzentration ** Meditation ** Frustration ** Aufregung ** Einzelwerte der 14 Elektroden ** Gyroskop Werte ** Timestamp ** Counter

Mögliche Weiterentwicklung

  • expressive Fähigkeiten
  • kognitive Fähigkeiten
  • Profiler mit Lernen/Trainieren
  • automatisches Update und Benachrichtigung (Observer)
  • integrierter Server

##Aufbau

...

##Einrichtung

Bevor der EpocHandler benutzt werden kann ist wichtig dass

  • Im Verzeichnis src/EpocHandler/Debug/ Die Dateien edk.dll und src/EpocHandler/Debug/edk_utils.dll vorhanden sind.
  • Im src/EpocHandler/EpocHandler/lib/ Verzeichnis die Dateien edk.lib, edk_utils.lib, glut32.lib vorhanden sind.
  • Im Verzeichnis src/EpocHandler/EpocHandler/include Verzeichnis die Dateien edk.h, edkErrorCode.h, EmoStateDLL.h vorhanden sind.
  • In Visual Studio muss das Includeverzeichnis src/EpocHandler/EpocHandler/include für das Projekt eingestelt werden. Das geht über Rechtsklick auf das Project, dort Eigenschaften anklicken und dann KonfigurationsEigenschaften/VC++-Verzeichnisse/Includeverzeichnisse

##Verwendung

Siehe auch: DoxyGen Dokumentation in src/EpocHandler/man/index.html

Daten aktualisieren

int EpocHandler::updateData()

Rückgabewert: int : Anzahl der gesammelten Datensätze

Da es passieren kann das das 0 Daten gesammelt wurden, muss dies überprüft werden und eventuell erneut ausgeführt werden.

Wenn 0 Datensätze gesammelt wurden bleiben alte Daten gespeichert.

Daten abfragen

Enum EE_DataChannel_t: ED_COUNTER, ED_GYROX, ED_GYROY, ED_TIMESTAMP, ED_FUNC_ID, ED_FUNC_VALUE, ED_MARKER, ED_SYNC_SIGNAL, ED_AF3, ED_F7, ED_F3, ED_FC5, ED_T7, ED_P7, ED_O1, ED_O2, ED_P8, ED_T8, ED_FC6, ED_F4, ED_F8, ED_AF4

Je Key wird ein double Array mit der Größe der gesammelten Daten aus updateData() zurückgegeben.

Daten eines einzelnen Channels

double* EpocHandler::getChannelData(EE_DataChannel_t channel)

Rückgabewert: double Array der Größe von updateData

Affektive Daten

double EpocHandler::getEngagement()

Rückgabewert: double Wert der Konzentration innerhalb des update Zeitraums

double EpocHandler::getFrustration()

Rückgabewert: double Wert der Frustration innerhalb des update Zeitraums

double EpocHandler::getMeditation()

Rückgabewert: double Wert der Meditation innerhalb des update Zeitraums

double EpocHandler::getExcitment()

Rückgabewert: double Wert der Aufregung innerhalb des update Zeitraums einzeln per DataChannel Frustration, etc immer einzeln

Beispiel:

EpocHandler a;
int sampleCount = 0;
while (!(sampleCount = a.updateData()))
{
	Sleep(100);
	std::cout << "Fetching Data again" << std::endl;
}
double* gyrox = a.getChannelData(EE_DataChannel_t::ED_COUNTER);
double b = gyrox[0];
std::cout << a.getFrustration() << std::endl;
std::cout << a.getEngagement() << std::endl << a.getExcitment() << std::endl << a.getMeditation() << std::endl;

Was ist aufgefallen?

connect()

stellt nicht sicher das eine Verbindung besteht

add()

user benötigt zeit, funktioniert nicht wenn man es nur einmal macht