void initializeEmotivEngine() { if (IEE_EngineConnect() != EDK_OK) { throw std::runtime_error("Cannot connect to emotiv engine"); } motionDataHandle = IEE_MotionDataCreate(); IEE_MotionDataSetBufferSizeInSec(SECONDS); }
int main(int argc, char** argv) { EmoEngineEventHandle eEvent = IEE_EmoEngineEventCreate(); EmoStateHandle eState = IEE_EmoStateCreate(); unsigned int userID = 0; float secs = 1; unsigned int datarate = 0; bool readytocollect = false; int state = 0; try { if (argc != 2) { throw std::runtime_error("Please supply the log file name.\n" "Usage: MotionDataLogger [log_file_name]."); } std::cout << "===================================================================" << std::endl; std::cout << "Example to show how to log Motion Data from EmoDriver." << std::endl; std::cout << "===================================================================" << std::endl; if (IEE_EngineConnect() != EDK_OK) throw std::runtime_error("Emotiv Driver start up failed."); std::cout << "Start receiving IEEG Data! " << "Press any key to stop logging...\n" << std::endl; std::ofstream ofs(argv[1],std::ios::trunc); ofs << header << std::endl; DataHandle hMotionData = IEE_MotionDataCreate(); IEE_MotionDataSetBufferSizeInSec(secs); std::cout << "Buffer size in secs:" << secs << std::endl; while (!_kbhit()) { state = IEE_EngineGetNextEvent(eEvent); if (state == EDK_OK) { IEE_Event_t eventType = IEE_EmoEngineEventGetType(eEvent); IEE_EmoEngineEventGetUserId(eEvent, &userID); // Log the EmoState if it has been updated if (eventType == IEE_UserAdded) { std::cout << "User added"; readytocollect = true; } } if (readytocollect) { IEE_MotionDataUpdateHandle(0, hMotionData); unsigned int nSamplesTaken=0; IEE_MotionDataGetNumberOfSample(hMotionData, &nSamplesTaken); std::cout << "Updated " << nSamplesTaken << std::endl; if (nSamplesTaken != 0) { double* data = new double[nSamplesTaken]; for (int sampleIdx=0 ; sampleIdx<(int)nSamplesTaken ; ++ sampleIdx) { for (int i = 0 ; i<sizeof(targetChannelList)/sizeof(IEE_MotionDataChannel_t) ; i++) { IEE_MotionDataGet(hMotionData, targetChannelList[i], data, nSamplesTaken); ofs << data[sampleIdx] << ","; } ofs << std::endl; } delete[] data; } } #ifdef _WIN32 Sleep(1); #endif #ifdef __linux__ usleep(10000); #endif } ofs.close(); IEE_MotionDataFree(hMotionData); } catch (const std::runtime_error& e) { std::cerr << e.what() << std::endl; std::cout << "Press any key to exit..." << std::endl; getchar(); } IEE_EngineDisconnect(); IEE_EmoStateFree(eState); IEE_EmoEngineEventFree(eEvent); return 0; }