TGC是一个后台应用程序,它负责和脑波设备建立连接,并获取数据,另一方面,它打开了一个端口在监听,让二次开发的应用程序,可以通过socket连接到这个TGC后台程序,获取脑波数据并展示,这种接口适合非常高级的语言开发的游戏或者是其他应用,比如用flash来开发的游戏。这里演示还是用c语言,演示连接端口以及获取数据的方法。

演示代码如下:

/*******************************************************************
* Copyright(c) 2014-2015 传智播客
* All rights reserved.
*
* 文件名称: main.cpp
* 简要描述: 该文件演示了脑波程序通过TGC与设备通信
*
* 创建日期: 2014-02-03
* 作者:
* 说明: 1.0
*
* 修改日期:
* 作者:
* 说明:
******************************************************************/
#include <WinSock2.h>
#include <stdio.h>
#include <json.h> extern char* SHA1(const unsigned char *pIn, char *pOut, int nOutLen); int main()
{
// 初始化socket环境
WORD wVersionRequested;
WSADATA wsaData;
int err; wVersionRequested = MAKEWORD(2, 2); err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
printf("WSAStartup failed with error: %d\n", err);
return 1;
} if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
printf("Could not find a usable version of Winsock.dll\n");
WSACleanup();
return 1;
}
else
printf("The Winsock 2.2 dll was found okay\n"); // 连接thinkgear,端口是13854
SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addr.sin_port = htons(13854);
int ret = connect(sock, (const sockaddr*)&addr, sizeof(addr));
if(ret < 0)
{
printf("connect error\n");
return 0;
} // 与TGC通信的数据格式是json包,具体的json包格式可以参考开发文档
Json::FastWriter writer;
Json::Reader reader; Json::Value packet;
std::string str; // 设置TGC 服务
packet.clear();
packet["enableRawOutput"] = false; // 不要原始数据
packet["format"] = "Json"; // 数据格式为json
// root.append(packet);
str = writer.write(packet);
printf("json=%s\n", str.c_str());
ret = send(sock, str.c_str(), str.length(), 0); // 发送数据给TGC
printf("ret=%d\n", ret); char buf[2048]={0};
while(1)
{
int index = 0;
memset(buf, 0, sizeof(buf));
//Sleep(1000); while(1)
{
ret = recv(sock, &buf[index], 1, 0); // 收报文,\r为报文结束标记
if(ret > 0)
{
if(buf[index] == '\r')
{
buf[index] = 0;
break;
}
index++;
}
} // 分析json数据包
reader.parse(buf, packet); // 输出json报文
printf("%s\n", writer.write(packet).c_str()); // 输出脑波数据
str = writer.write(packet);
if(strstr(str.c_str(), "eSense"))
{
printf("%s\n", str.c_str());
// system("pause");
} // 输出眨眼数据,用TGC接口可以获取用户是否眨眼
if(strstr(str.c_str(), "blink"))
{
printf("%s\n", str.c_str());
system("pause");
} } system("pause"); return 0;
}

05-11 01:00