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; }