脑波设备mindwaveTGC接口示例

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
", 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
");
		WSACleanup();
		return 1;
	}
	else
		printf("The Winsock 2.2 dll was found okay
");

	// 连接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
");
		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
", str.c_str());
	ret = send(sock, str.c_str(), str.length(), 0);  // 发送数据给TGC
	printf("ret=%d
", 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);  // 收报文,
为报文结束标记
			if(ret > 0)
			{
				if(buf[index] == '
')
				{
					buf[index] = 0;
					break;
				}
				index++;
			}
		}

		// 分析json数据包
		reader.parse(buf, packet);

		// 输出json报文
		printf("%s
", writer.write(packet).c_str());

		// 输出脑波数据
		str = writer.write(packet);
		if(strstr(str.c_str(), "eSense"))
		{
			printf("%s
", str.c_str());	
		// system("pause");
		}
		
		// 输出眨眼数据,用TGC接口可以获取用户是否眨眼
		if(strstr(str.c_str(), "blink"))
		{
			printf("%s
", str.c_str());	
			system("pause");
		}
		
	}

	system("pause");

	return 0;
}


原文地址:https://www.cnblogs.com/new0801/p/6177182.html