脑波设备mindwave数据流二次开发示例
数据流开发神念科技提供了两个文件ThinkGearStreamParse.h和ThinkGearStreamParse.cpp两个文件,主要接口为:
宏定义:
/* Data CODE definitions */
#define PARSER_CODE_BATTERY 0x01
#define PARSER_CODE_POOR_QUALITY 0x02
#define PARSER_CODE_ATTENTION 0x04
#define PARSER_CODE_MEDITATION 0x05
#define PARSER_CODE_8BITRAW_SIGNAL 0x06
#define PARSER_CODE_RAW_MARKER 0x07
#define PARSER_CODE_RAW_SIGNAL 0x80
#define PARSER_CODE_EEG_POWERS 0x81
#define PARSER_CODE_ASIC_EEG_POWER_INT 0x83
表示数据类型
typedef struct _ThinkGearStreamParser {
unsigned char type;
unsigned char state;
unsigned char lastByte;
unsigned char payloadLength;
unsigned char payloadBytesReceived;
unsigned char payload[256];
unsigned char payloadSum;
unsigned char chksum;
void (*handleDataValue)( unsigned char extendedCodeLevel,
unsigned char code, unsigned char numBytes,
const unsigned char *value, void *customData );
void *customData;
} ThinkGearStreamParser;
分析结构体,保存着buffer和状态机
int
THINKGEAR_initParser( ThinkGearStreamParser *parser, unsigned char parserType,
void (*handleDataValueFunc)(
unsigned char extendedCodeLevel,
unsigned char code, unsigned char numBytes,
const unsigned char *value, void *customData),
void *customData );
初始化分析状态机
int
THINKGEAR_parseByte( ThinkGearStreamParser *parser, unsigned char byte );
分析数据,每收到一个字节,都送到状态机里去处理。
示例代码如下:
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include "ThinkGearStreamParser.h" #define USE_COMPORT "com3" #if 0
/* Data CODE definitions */
#define PARSER_CODE_BATTERY 0x01
#define PARSER_CODE_POOR_QUALITY 0x02
#define PARSER_CODE_ATTENTION 0x04
#define PARSER_CODE_MEDITATION 0x05
#define PARSER_CODE_8BITRAW_SIGNAL 0x06
#define PARSER_CODE_RAW_MARKER 0x07 #define PARSER_CODE_RAW_SIGNAL 0x80
#define PARSER_CODE_EEG_POWERS 0x81
#define PARSER_CODE_ASIC_EEG_POWER_INT 0x83
#endif // 处理数据回调函数
void handleDataValueFunc( unsigned char extendedCodeLevel,
unsigned char code, // 数据类型
unsigned char numBytes, // 数据长度
const unsigned char *value, // 数据
void *customData ) // 自定义数据
{
static int meditation = 0;
static int attention = 0;
static int count = 0;
if(extendedCodeLevel == 0)
{
switch(code)
{
// 如果是信号质量,则打印信号质量
case PARSER_CODE_POOR_QUALITY:
printf("the PARSER_CODE_POOR_QUALITY is %d\n", value[0]&0xff);
break;
// 04是专注度数据
case 0x04:
count ++;
attention = value[0]&0xff;
printf("the attention is %d\n", attention);
break;
// 05是放松度数据
case 0x05:
count++;
meditation = value[0]& 0xff;
printf("the meditation is %d\n", value[0]& 0xff);
break;
}
} } int main()
{
// 定义神念数据分析流结构体
ThinkGearStreamParser parser;
int quitFlag = 0; // 初始化结构体
::THINKGEAR_initParser(&parser, PARSER_TYPE_PACKETS, handleDataValueFunc, &quitFlag); // 打开串口,蓝牙已经被转换为串口了
HANDLE hCom;
hCom = CreateFileA(USE_COMPORT,
GENERIC_READ|GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
if(hCom == INVALID_HANDLE_VALUE)
{
printf("Error open serial\n");
exit(1);
} // 一序列串口设置
COMMTIMEOUTS TimeOuts;
if(!SetupComm(hCom, 2048, 2048))
return false; //设定读超时
TimeOuts.ReadIntervalTimeout = MAXDWORD;
TimeOuts.ReadTotalTimeoutMultiplier = 0;
TimeOuts.ReadTotalTimeoutConstant = 0; //设定写超时
TimeOuts.WriteTotalTimeoutMultiplier = 100;
TimeOuts.WriteTotalTimeoutConstant = 500;
if(!SetCommTimeouts(hCom, &TimeOuts))
return 0;//设置超时 DCB dcb;
GetCommState(hCom, &dcb);
dcb.BaudRate = 57600; //波特率为57600
dcb.ByteSize = 8; //每个字节有8位
dcb.Parity = NOPARITY; //无奇偶校验位
dcb.StopBits = ONESTOPBIT; //两个停止位
if(!SetCommState(hCom, &dcb))
return 0; if(!PurgeComm(hCom, PURGE_TXCLEAR|PURGE_RXCLEAR))
return 0; // 从串口下接收数据
unsigned char streamByte;
DWORD dwRead;
while(!quitFlag)
{
// 从串口读取一个字节,然后把字节送到神念分析接口去分析
if(ReadFile(hCom, &streamByte, 1, &dwRead, NULL))
THINKGEAR_parseByte(&parser, streamByte);
} CloseHandle(hCom);
}
脑波设备mindwave数据流二次开发示例的更多相关文章
- 脑波设备mindwave二次开发框架
神念科技提供的mindwave提供了脑波耳机和相应的游戏,这些游戏你可以通过购买神念科技的mindwave耳机来获取,这里不多作介绍. 我们作为程序员,如果有了相应的创意,也可以通过他们提供的二次开发 ...
- 脑波设备mindwave TGCD接口开发示例
对于TGCD的开发,神念科技提供的文件包括,头文件thinkgear.h,thinkgear.lib,thinkgear.dll,有这三个文件,在win32下开发就不是什么难事了吧 如果是java语言 ...
- 脑波设备mindwave介绍
脑波,又称之为脑电波,是人大脑发出的电波,非常的微弱,只能通过设备来检测. 人的脑波在不同状态下,会不同,因此可以通过脑波来量化分析人的精神状态. 科学家讲脑电波分为四种,以下为详细解释(摘自百度百科 ...
- 脑波设备mindwaveTGC接口示例
TGC是一个后台应用程序,它负责和脑波设备建立连接,并获取数据,另一方面,它打开了一个端口在监听,让二次开发的应用程序,可以通过socket连接到这个TGC后台程序,获取脑波数据并展示,这种接口适合非 ...
- SkylineDemoForWeb JavaScript二次开发示例代码
SkylineDemoForWeb JavaScript二次开发示例代码 http://files.cnblogs.com/files/yitianhe/SkylineDemoForWeb.zip
- Revit二次开发示例:ModelessForm_ExternalEvent
使用Idling事件处理插件任务. #region Namespaces using System; using System.Collections.Generic; using Autodesk. ...
- Revit二次开发示例:Journaling
关于Revit Journal读写的例子. #region Namespaces using System; using System.Collections.Generic; using Sys ...
- Revit二次开发示例:HelloRevit
本示例实现Revit和Revit打开的文件的相关信息. #region Namespaces using System; using System.Collections.Generic; using ...
- Revit二次开发示例:EventsMonitor
在该示例中,插件在Revit启动时弹出事件监控选择界面,供用户设置,也可在添加的Ribbon界面完成设置.当Revit进行相应操作时,弹出窗体会记录事件时间和名称. #region Namespace ...
随机推荐
- BZOJ 1416: [NOI2006]神奇的口袋( 高精度 )
把x1~xn当成是1~n, 答案是不会变的. 然后直接模拟就行了...... P.S 双倍经验... BZOJ1416 && BZOJ1498 -------------------- ...
- 解决Ubuntu DNS解析慢、上网速度慢
自从ubuntu升级到10.04后,上网速度感觉变慢了很多(ADSL),原因也众说分云,有说是firefox浏览器造成的,于是用chrome访问,速度依然很慢,可见不是由于浏览器造成的. 网速慢, 是 ...
- Gridlayout动态添加
//类似数组[行, 列] //表示起始位置为0,占据2行 GridLayout.Spec rowSpec=GridLayout.spec(0, 2, GridLayout.UNDEFINED); // ...
- 9.java.lang.ClassCastException
java.lang.ClassCastException 数据类型转换异常 当试图将对某个对象强制执行向下转型,但该对象又不可转换又不可转换为其子类的实例时将引发该异常,如下列代码. Object o ...
- Oracle中强行断开用户连接的方法
版权声明:本文为博主原创文章,未经博主允许不得转载. 首先查找目标用户的当前进程,注意是serial#而不是serial,网上有的介绍漏掉了#: select sid,serial# from v$s ...
- Oracle EBS-SQL (SYS-10):锁定表查询.sql
/*死锁查询-1*/ SELECT o.object_name, l.session_id,l.process, l.locked_mode FROM v$locked_object l , dba_ ...
- sql server 2012 镜像和出现的问题
镜像安装的环境: 主机:win server 2012 , sql server 2012 ,ip:192.168.1.189 PC账户:administrator 备机:win server 20 ...
- alois
Background It's not simple to know what happens in a bigger network. There's a multitude of applicat ...
- 计算机原理学习(2)-- 存储器和I/O设备和总线
前言 前一篇文章介绍了冯诺依曼体系结构的计算机的基本工作原理,其中主要介绍了CPU的结构和工作原理.这一篇主要来介绍存储区,总线,以及IO设备等其他几大组件,来了解整个计算机是如何工作的. 这些东西都 ...
- Android TXT文件读写
package com.wirelessqa.helper; import java.io.FileInputStream; import java.io.FileOutputStream; impo ...