数据流开发神念科技提供了两个文件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数据流二次开发示例的更多相关文章

  1. 脑波设备mindwave二次开发框架

    神念科技提供的mindwave提供了脑波耳机和相应的游戏,这些游戏你可以通过购买神念科技的mindwave耳机来获取,这里不多作介绍. 我们作为程序员,如果有了相应的创意,也可以通过他们提供的二次开发 ...

  2. 脑波设备mindwave TGCD接口开发示例

    对于TGCD的开发,神念科技提供的文件包括,头文件thinkgear.h,thinkgear.lib,thinkgear.dll,有这三个文件,在win32下开发就不是什么难事了吧 如果是java语言 ...

  3. 脑波设备mindwave介绍

    脑波,又称之为脑电波,是人大脑发出的电波,非常的微弱,只能通过设备来检测. 人的脑波在不同状态下,会不同,因此可以通过脑波来量化分析人的精神状态. 科学家讲脑电波分为四种,以下为详细解释(摘自百度百科 ...

  4. 脑波设备mindwaveTGC接口示例

    TGC是一个后台应用程序,它负责和脑波设备建立连接,并获取数据,另一方面,它打开了一个端口在监听,让二次开发的应用程序,可以通过socket连接到这个TGC后台程序,获取脑波数据并展示,这种接口适合非 ...

  5. SkylineDemoForWeb JavaScript二次开发示例代码

    SkylineDemoForWeb JavaScript二次开发示例代码 http://files.cnblogs.com/files/yitianhe/SkylineDemoForWeb.zip

  6. Revit二次开发示例:ModelessForm_ExternalEvent

    使用Idling事件处理插件任务. #region Namespaces using System; using System.Collections.Generic; using Autodesk. ...

  7. Revit二次开发示例:Journaling

    关于Revit Journal读写的例子.   #region Namespaces using System; using System.Collections.Generic; using Sys ...

  8. Revit二次开发示例:HelloRevit

    本示例实现Revit和Revit打开的文件的相关信息. #region Namespaces using System; using System.Collections.Generic; using ...

  9. Revit二次开发示例:EventsMonitor

    在该示例中,插件在Revit启动时弹出事件监控选择界面,供用户设置,也可在添加的Ribbon界面完成设置.当Revit进行相应操作时,弹出窗体会记录事件时间和名称. #region Namespace ...

随机推荐

  1. hadoop 2.6.0 yarn total memory metrics 不正常

    https://issues.apache.org/jira/browse/YARN-3432

  2. Android ORM SQL Top 5

    If you are developing an Android application, you will likely need to store data somewhere. You may ...

  3. laravel post请求失败

    今天继续研究laravel,在路由里注册了一个控制器路由Route::controller(). 先get请求一个页面 class UserController extends Controller{ ...

  4. 我来讲讲在c#中怎么进行xml文件操作吧,主要是讲解增删改查!

    我把我写的四种方法代码贴上来吧,照着写没啥问题. 注: <bookstore> <book> <Id>1</Id> <tate>2010-1 ...

  5. Blast使用详解

    Blast,全称Basic Local Alignment Search Tool,即"基于局部比对算法的搜索工具",由Altschul等人于1990年发布.Blast能够实现比较 ...

  6. WinSetupFromUSB – Install Windows XP from USB Flash Drive

    http://myeeeguides.wordpress.com/2008/11/15/winsetupfromusb-install-windows-xp-from-usb-flash-drive/ ...

  7. WPF 三态按钮(PNG贴图)

    原文 http://blog.csdn.net/power_YQ/article/details/7177183 <Window.Resources> Style x:Key=" ...

  8. dom元素和方法总结

    主要是参考<精通javascript>. 全局变量有: document.这个变量包含浏览器的html dom文档的引用. HTMElement 这个变量是所要html dom 元素的超类 ...

  9. [Oracle] Listener的动态注册

    在有Oracle Listener的动态注册之前,采用的是静态注册,所谓静态注册是指Oracle实例在启动时,读取listener.ora里的配置,然后注册到Listener,它主要有两个缺点: 1. ...

  10. C++_const

    //const在C不可以初始化数组 //const在C++可以用来初始化数组 #include <iostream> using namespace std; void main() { ...