zoukankan      html  css  js  c++  java
  • 脑波设备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;
    }


  • 相关阅读:
    腾讯分析系统架构解析
    GreenPlum简单性能测试与分析--续
    我的一些提高效率的设置
    Windows 上借助注册表来修改键盘按键的映射
    WPF入门——Converter、XAML和Style
    30个极大提高开发效率的Visual Studio Code插件(转)
    USB PD充电
    macOS Mojave 美化一下终端
    WPF入门(4)——资源
    使用Duilib开发Windows软件(5)——使用VLC做视频播放
  • 原文地址:https://www.cnblogs.com/new0801/p/6177182.html
Copyright © 2011-2022 走看看