示例#1
0
void logMotionData() {
    IEE_MotionDataUpdateHandle(0, motionDataHandle);

    unsigned int samplesTaken = 0;
    IEE_MotionDataGetNumberOfSample(motionDataHandle, & samplesTaken);

    for (int i = samplesTaken; i > 0; i--) {
        for (int j = 0; j < NUMBER_OF_CHANNELS; j++) {
            double * data = new double[samplesTaken];
            IEE_MotionDataGet(motionDataHandle, motionDataChannels[j], data, samplesTaken);
            std::cout << data[i] << ", ";
            delete[] data;
        }
        std::cout << "\n";
    }
}
示例#2
0
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;
}