[关闭]
@3013216027 2016-07-08T23:01:54.000000Z 字数 4124 阅读 2207

Emotiv 文档

emotiv

原文 翻译
Emotiv SDK Community Edition 3.3.3 @JBer


0. 特别说明


1. 数据字典

成员 数据类型 说明
channelId IEE_InputChannels_t 触点逻辑编号
fExists int 传感器存在否
pszLabel const char* 传感器标签
xLoc double 传感器中心到鼻子的距离
yLoc double 传感器中心到耳朵的距离
zLoc double 传感器中心到头顶的距离

成员 数据类型 说明
version int 版本
last_modified char[30] -

2. 头文件概览

头文件 说明
EmotivCloudClient.h 云存储相关
EmotivCloudErrorCode.h 云存储错误代码定义
FacialExpressionDetection.h 面部表情检测(gui知道它是怎么检测的- -)
Iedk.h 核心库,包括创建连接句柄等
IedkErrorCode.h 错误码定义
IEmoStateDLL.h 一些状态类型的宏和结构体定义
MentalCommandDetection.h 脑电命令识别

3. 核心库(数据、宏及函数)


3.1 相关数据结构

参考: 数据字典


3.2 宏定义

#define EDK_API


3.3 Typedefs

typedef 源类型 说明
EmoStateHandle void* 保存函数IEE_EmoStateCreate生成的状态结构
EmoEngineEventHandle void* 保存函数IEE_EmoEngineEventCreate生成的事件消息结构
IEE_DataChannel_t enum IEE_DataChannels_enum -
DataHandle void* 数据handler
IEE_Event_t enum IEE_Event_enum -
... ...
这部分单独说明无意义, 跳过! 参考后文的函数说明或参考emotiv-community-sdk

3.4 枚举类型


3.5 核心函数

  1. EmoEngineEventHandle eEvent = IEE_EmoEngineEventCreate();
  2. EmoStateHandle eState = IEE_EmoStateCreate();
  3. unsigned int engineUserID = -1; // => UNSIGNED_INT_MAX
  4. bool ready = false;
  5. int state = 0;
  6. /**
  7. * Insight的5个电极分别是:
  8. * 左眼AF3 右眼AF4
  9. * 左耳T7 右耳T8
  10. * 后脑勺Pz
  11. *
  12. */
  13. IEE_DataChannel_t = channelList[] = {IED_AF3, IED_AF4, IED_T7, IED_T8, IED_Pz };
  14. if (IEE_EngineConnect() != EDK_OK) {
  15. std::cout << "Emotiv Driver start up failed!" << std::endl;
  16. return -1;
  17. } else {
  18. std::cout << "Emotiv Driver start up success!" << std::endl;
  19. }
  20. while (true/*...*/) {
  21. state = IEE_EngineGetNextEvent(eEvent); // 获取下一个事件,保存至eEvent中
  22. if (state == EDK_OK) {
  23. IEE_Event_t eventType = IEE_EmoEngineEventGetType(eEvent);
  24. IEE_EmoEngineEventGetUserId(eEvent, &engineUserID);
  25. if (eventType == IEE_UserAdded) {
  26. std::cout << "User added" << std::endl;
  27. engineUserID = 0;
  28. IEE_FFTSetWindowingType(engineUserID, IEE_HAMMING);
  29. ready = true;
  30. }
  31. if (ready) {
  32. double alpha, low_beta, high_beta, gamma, theta;
  33. int channelCount = sizeof(channelList) / sizeof(channelList[0]); // or sizeof(channelList) / sizeof(IEE_DataChannel_t)
  34. for (int i = 0; i < channelCount; ++i) {
  35. int result = IEE_GetAverageBandPowers(engineUserID, channelList[i], &theta, &alpha, &low_beta, &high_beta, &gamma);
  36. if (result == EDK_OK) {
  37. // handle the detect result of theta/alpha/beta/gamma =>
  38. }
  39. }
  40. }
  41. }
  42. }
  43. IEE_EngineDisconnect();
  44. IEE_EmoStateFree(eState);
  45. IEE_EmoEngineEventFree(eEvent);

3.5.1 函数索引

函数名 功能
IEE_EngineConnect 初始化,程序初始化时调用
IEE_EngineRemoteConnect 初始化远程连接(host:port)
IEE_EngineDisconnect 断开连接,程序结束前调用
IEE_EnableDiagnostics 开启调试模式(指定日志文件名)
IEE_EmoEngineEventCreate 分配一个EmoEngine描述符(一块内存)
IEE_EmoEngineEventFree 释放EmoEngine描述符
IEE_EmoStateCreate 分配一个EmoState描述符
IEE_EmoStateFree 释放EmoState描述符
IEE_EmoEngineEventGetType 获取下一个EmoEngine事件
IEE_EmoEngineEventGetUserId 获取用户编号(UserId)
IEE_EmoEngineEventGetEmoState 复制一个EmoState描述符
IEE_EmoEngineEventGetEmoState 获取特定EmoEngine的EmoState
IEE_EngineGetNextEvent 获取下一个事件
IEE_EngineClearEventQueue 清空事件队列
IEE_EngineGetNumUser 获取当前已连接的设备数量
IEE_SetHardwarePlayerDisplay 设置设备上显示的用户编号(UserId)(仅USB Dongle)
IEE_GetHeadsetSettings 获取设备当前设置
IEE_SetHeadsetSettings 设备状态设置(UserId,采样频率等)
IEE_HeadsetGetSensorDetails 获取特定电极的信息
IEE_HardwareGetVersion 获取设备版本
IEE_SoftwareGetVersion 返回当前SDK版本号
IEE_HeadsetGetSerialNumber 获取序列号
IEE_HeadsetGetGyroDelta 获取陀螺仪的偏移量(原来还有陀螺仪)
IEE_HeadsetGyroRezero 重置陀螺仪状态
IEE_MotionDataCreate 分配一个<motion描述符>..(memory can hold motion data, 内存)
IEE_MotionDataFree 释放<motion描述符>..
IEE_MotionDataUpdateHandle 更新数据句柄(data handle)
IEE_MotionDataGet 解压<motion描述符>
IEE_MotionDataGetMultiChannels 获取多个电极的信息
IEE_MotionDataGetNumberOfSample 获取指定handle中的emotion样本大小(number)
IEE_MotionDataSetBufferSizeInSec 设置motion数据缓冲区的大小
IEE_MotionDataGetBufferSizeInSec 获取motion数据缓冲区的大小
IEE_MotionDataGetSamplingRate 获取motion数据流的采样率
IEE_EnableDetections 开启/关闭指定类型的检测
IEE_CheckDetectionsEnabled 检查指定类型的检测是否已开启
IEE_GetAverageBandPowers 获取(0.5s -*-> 2s内)平均信号强度
IEE_FFTSetWindowingType ?
IEE_FFTGetWindowingType ?

3.5.2 程序流程说明

参考 执行过程,核心执行过程如下

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注