private IEnumerator ConnectToMyndband() { clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); while (clientSocket == null || !clientSocket.Connected) { myndbandState = MyndbandState.Connecting; onMyndbandStateChanged.Invoke(Enum.GetName(typeof(MyndbandState), myndbandState), "Establishing connection to ThinkGear Socket.."); yield return(new WaitForSeconds(0.5f)); try { clientSocket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 13854)); } catch (SocketException e) { UnityEngine.Debug.LogError(e.Message); myndbandState = MyndbandState.Disconnected; onMyndbandStateChanged.Invoke(Enum.GetName(typeof(MyndbandState), myndbandState), "Could not connect to the ThinkGear Socket.."); } if (myndbandState == MyndbandState.Disconnected) { yield return(new WaitForSeconds(2f)); } } onMyndbandStateChanged.Invoke(Enum.GetName(typeof(MyndbandState), myndbandState), "Waiting for data..Make sure that Myndband is paired with PC."); byte[] myWriteBuffer = Encoding.ASCII.GetBytes(@"{""enableRawOutput"": true, ""format"": ""Json""}"); SendData(myWriteBuffer); stream = new NetworkStream(clientSocket, true); StateObject state = new StateObject(); state.workSocket = clientSocket; stream.BeginRead(state.buffer, 0, StateObject.BufferSize, new AsyncCallback(ReceiveCallback), state); StartCoroutine("ParseData"); yield return(null); }
void Start() { if (instance == null) { instance = this; } DontDestroyOnLoad(this); rawEegPacketList = new List <MyndbandEvent>(); loggedRawEegList = new List <MyndbandEvent>(); myndbandPacketList = new List <MyndbandEvent>(); loggedmyndbandPacketList = new List <MyndbandEvent>(); myndbandState = MyndbandState.Disconnected; onMyndbandStateChanged.Invoke(Enum.GetName(typeof(MyndbandState), myndbandState), ""); StartCoroutine("ConnectToMyndband"); }
private IEnumerator ParseData() { while (true) { if (rawEegPacketList.Count > 0) { if (myndbandState == MyndbandState.Connecting) { myndbandState = MyndbandState.ReceivingData; } rawEegData = null; try { rawEegData = (IDictionary)JsonConvert.Import(typeof(IDictionary), rawEegPacketList.Last().packet); } catch (System.Exception e) { } if (rawEegData != null) { if (myndbandState != MyndbandState.ReceivingData) { myndbandState = MyndbandState.ReceivingData; StartCoroutine("UpdateSignalStrength"); } if (UpdateRawdataEvent != null) { UpdateRawdataEvent(int.Parse(rawEegData["rawEeg"].ToString())); } } } if (myndbandPacketList.Count > 0) { myndbandData = null; try { myndbandData = (IDictionary)JsonConvert.Import(typeof(IDictionary), myndbandPacketList.Last().packet); } catch (System.Exception e) { } if (myndbandData != null) { if (myndbandData.Contains("status")) { if (myndbandState != MyndbandState.Connected && myndbandState != MyndbandState.ReceivingData) { myndbandState = MyndbandState.Connected; string subStatus = "Socket is " + myndbandData["status"].ToString() + "..Make sure that Myndband is paired with PC."; onMyndbandStateChanged.Invoke(Enum.GetName(typeof(MyndbandState), myndbandState), subStatus); } } if (myndbandData.Contains("poorSignalLevel")) { signalStrength = int.Parse(myndbandData["poorSignalLevel"].ToString()); if (UpdatePoorSignalEvent != null) { UpdatePoorSignalEvent(int.Parse(myndbandData["poorSignalLevel"].ToString())); } if (myndbandData.Contains("eSense")) { IDictionary eSense = (IDictionary)myndbandData["eSense"]; if (UpdateAttentionEvent != null) { UpdateAttentionEvent(int.Parse(eSense["attention"].ToString())); } if (UpdateMeditationEvent != null) { UpdateMeditationEvent(int.Parse(eSense["meditation"].ToString())); } } if (myndbandData.Contains("eegPower")) { IDictionary eegPowers = (IDictionary)myndbandData["eegPower"]; if (UpdateDeltaEvent != null) { UpdateDeltaEvent(float.Parse(eegPowers["delta"].ToString())); } if (UpdateThetaEvent != null) { UpdateThetaEvent(float.Parse(eegPowers["theta"].ToString())); } if (UpdateLowAlphaEvent != null) { UpdateLowAlphaEvent(float.Parse(eegPowers["lowAlpha"].ToString())); } if (UpdateHighAlphaEvent != null) { UpdateHighAlphaEvent(float.Parse(eegPowers["highAlpha"].ToString())); } if (UpdateLowBetaEvent != null) { UpdateLowBetaEvent(float.Parse(eegPowers["lowBeta"].ToString())); } if (UpdateHighBetaEvent != null) { UpdateHighBetaEvent(float.Parse(eegPowers["highBeta"].ToString())); } if (UpdateLowGammaEvent != null) { UpdateLowGammaEvent(float.Parse(eegPowers["lowGamma"].ToString())); } if (UpdateHighGammaEvent != null) { UpdateHighGammaEvent(float.Parse(eegPowers["highGamma"].ToString())); } } } else if (myndbandData.Contains("blinkStrength") && UpdateBlinkEvent != null) { UpdateBlinkEvent(int.Parse(myndbandData["blinkStrength"].ToString())); } } } yield return(new WaitForSeconds(updateFrequency)); } }