@3013216027
2016-07-08T23:01:54.000000Z
字数 4124
阅读 2207
emotiv
原文 | 翻译 |
---|---|
Emotiv SDK Community Edition 3.3.3 | @JBer |
IInputSensorDescriptor_struct
#include <Iedk.h>
成员 | 数据类型 | 说明 |
---|---|---|
channelId |
IEE_InputChannels_t |
触点逻辑编号 |
fExists |
int |
传感器存在否 |
pszLabel |
const char* |
传感器标签 |
xLoc |
double |
传感器中心到鼻子的距离 |
yLoc |
double |
传感器中心到耳朵的距离 |
zLoc |
double |
传感器中心到头顶的距离 |
profileVerInfo
#include <EmotivCloudClient.h>
成员 | 数据类型 | 说明 |
---|---|---|
version |
int |
版本 |
last_modified |
char[30] |
- |
头文件 | 说明 |
---|---|
EmotivCloudClient.h |
云存储相关 |
EmotivCloudErrorCode.h |
云存储错误代码定义 |
FacialExpressionDetection.h |
面部表情检测(gui知道它是怎么检测的- -) |
Iedk.h |
核心库,包括创建连接句柄等 |
IedkErrorCode.h |
错误码定义 |
IEmoStateDLL.h |
一些状态类型的宏和结构体定义 |
MentalCommandDetection.h |
脑电命令识别 |
#include "IedkErrorCode.h"
#include "IEmoStateDLL.h"
#include "FacialExpressionDetection.h"
#include "MentalCommandDetection.h"
参考: 数据字典
#define EDK_API
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 |
EmoEngineEventHandle eEvent = IEE_EmoEngineEventCreate();
EmoStateHandle eState = IEE_EmoStateCreate();
unsigned int engineUserID = -1; // => UNSIGNED_INT_MAX
bool ready = false;
int state = 0;
/**
* Insight的5个电极分别是:
* 左眼AF3 右眼AF4
* 左耳T7 右耳T8
* 后脑勺Pz
*
*/
IEE_DataChannel_t = channelList[] = {IED_AF3, IED_AF4, IED_T7, IED_T8, IED_Pz };
if (IEE_EngineConnect() != EDK_OK) {
std::cout << "Emotiv Driver start up failed!" << std::endl;
return -1;
} else {
std::cout << "Emotiv Driver start up success!" << std::endl;
}
while (true/*...*/) {
state = IEE_EngineGetNextEvent(eEvent); // 获取下一个事件,保存至eEvent中
if (state == EDK_OK) {
IEE_Event_t eventType = IEE_EmoEngineEventGetType(eEvent);
IEE_EmoEngineEventGetUserId(eEvent, &engineUserID);
if (eventType == IEE_UserAdded) {
std::cout << "User added" << std::endl;
engineUserID = 0;
IEE_FFTSetWindowingType(engineUserID, IEE_HAMMING);
ready = true;
}
if (ready) {
double alpha, low_beta, high_beta, gamma, theta;
int channelCount = sizeof(channelList) / sizeof(channelList[0]); // or sizeof(channelList) / sizeof(IEE_DataChannel_t)
for (int i = 0; i < channelCount; ++i) {
int result = IEE_GetAverageBandPowers(engineUserID, channelList[i], &theta, &alpha, &low_beta, &high_beta, &gamma);
if (result == EDK_OK) {
// handle the detect result of theta/alpha/beta/gamma =>
}
}
}
}
}
IEE_EngineDisconnect();
IEE_EmoStateFree(eState);
IEE_EmoEngineEventFree(eEvent);
函数名 | 功能 |
---|---|
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 |
|
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 |
? |
参考 执行过程,核心执行过程如下
主程序执行前先用IEE_EngineConnect
连接
连接成功后,进入事件循环
事件循环中,使用IEE_EngineGetNextEvent
获取下一个事件,并处理
IEE_UserAdded
事件来临,则通过IEE_FFTSetWindowingType
设置Windowing
类型IEE_GetAverageBandPowers
等函数获取状态消息或其他信息并做响应