void OnMeasureDataEvent(Hot2gEnumerations.EnumHot2gMeasResult e, object meas_data, string device_address) { //- 注意:3種類のBLEパケットが来るのでここは21Hzくらい。10Hz(Ac1) ,10Hz(Gyro), 1Hz(HR)... Debug.Log("1===:" + e + "::" + this.m_Mode); if (this.m_Mode == eMode.GainSetting) { /* 手動ゲイン調整 */ adjustGain(m_nfb, m_gc, e, meas_data, m_Logger);//- -> State will change to RecieveData after this. } else if (this.m_Mode == eMode.RecieveData) { /* データ受信 */ receiveData(m_nfb, e, meas_data, m_Logger); } else if (this.m_Mode == eMode.ResetGain) { /* ゲインリセット */ resetGain(m_nfb, m_gc); //- -> State will change to Waiting after this. } else if (this.m_Mode == eMode.Waiting) { /* データ受信 */ receiveData(m_nfb, e, meas_data, m_Logger); } //- Check status GyroScope.Stability st_stability = this.dataStore.stability[this.dataStore.stability.Count - 1]; Debug.Log("Check2 " + "stability: " + st_stability.ToString() + " / state2:" + state2.ToString() + " / mode: " + Hot2gApplication.Instance.mode.ToString()); //- RecieveData to Waiting if (Hot2gApplication.Instance.mode == eMode.RecieveData) { if (st_stability != GyroScope.Stability.Stabled || state2 != eState.OnHead) { resetGain(m_nfb, m_gc); //GainSetDeray(); Hot2gApplication.instance.setStateToWating();//- to Waiting Debug.Log("Check2 " + "GainReset!!!***************************"); } } else if (Hot2gApplication.Instance.mode == eMode.Waiting) { if (st_stability == GyroScope.Stability.Stabled && state2 == eState.OnHead) { Hot2gApplication.instance.setStateToMGC();//- --> MGC --> RecieveData Debug.Log("Check2 " + "MGC Start >>>>>>>>>>>>>>>>>>>>>>>>>>"); } } }
/** * ゲイン調整済みデータ受信時の動作 */ private void receiveData(BrainDataFeedbacker nfb, Hot2gEnumerations.EnumHot2gMeasResult e, object data, DataLogger logger) { switch (e) { /*XB-01*/ case Hot2gEnumerations.EnumHot2gMeasResult.Ac1ch: //Debug.Log("Ac1ch:" + LitJson.JsonMapper.ToJson(data)); //- check afterGainCounter checkAfterGainCounter(); if (Hot2gApplication.Instance.datastore.stability.Count > 1) { Debug.Log("Ac1chRec: [ " + Hot2gApplication.Instance.mode.ToString() + " ]/[ " + Hot2gApplication.Instance.datastore.stability[Hot2gApplication.Instance.datastore.stability.Count - 1] + " ]/[: " + Hot2gApplication.Instance.state2.ToString() + " ]/[G1: " + Hot2gApplication.Instance.m_gc.getL1Gain() + "][G3: " + Hot2gApplication.Instance.m_gc.getL3Gain() + " ]/[Raw 1: " + Hot2gApplication.Instance.datastore.l1Ac[Hot2gApplication.Instance.datastore.l1Ac.Count - 1] + " ]/[Raw 3: " + Hot2gApplication.Instance.datastore.l3Ac[Hot2gApplication.Instance.datastore.l3Ac.Count - 1] + " ]/ after MGC: " + Hot2gApplication.Instance.afterMGC_counter.ToString() ); } Xb01data xbData = this.dataStore.add(data as Hot2gMeasData1chAc, nfb.calcActivenessFromBuffered()); state2 = updateStatusOnHead(); //- check XB-01 On head status nfb.bufferActiveness(); //- calc Brain activation level if (logger != null) { logger.write(xbData.ConvCSV()); } break; #if false case Hot2gEnumerations.EnumHot2gMeasResult.Ac2ch: { when(Hot2gDevInfo().valDevType) { /* HOT-2000 */ Hot2gEnumerations.EnumHot2gDevType.HOT2000->{ val hot2Data = this.dataStore.add(data as Hot2gMeasData2chAc) logger?.write(hot2Data) } /* HOT-1000 */ Hot2gEnumerations.EnumHot2gDevType.HOT1000->{ val hot1data = this.dataStore.add(data as Hot2gMeasData2chAc) logger?.write(hot1data) } } #endif /* 心拍数 */ case Hot2gEnumerations.EnumHot2gMeasResult.HeartRate: this.dataStore.add(data as Hot2gMeasDataHR); break; /* 脈波振幅関連係数 */ case Hot2gEnumerations.EnumHot2gMeasResult.HRElement1: this.dataStore.add(data as Hot2gMeasDataHRElement); break; /* 姿勢変化のチェック */ case Hot2gEnumerations.EnumHot2gMeasResult.MotionBatt: GyroScope.Stability s_pre = this.dataStore.stability[this.dataStore.stability.Count - 1]; GyroScope.Stability s = this.dataStore.add(data as Hot2gMeasDataMotBatt); break; } }
void adjustGain(BrainDataFeedbacker nfb, GainController gc, Hot2gEnumerations.EnumHot2gMeasResult e, object data, DataLogger logger) { switch (e) { case Hot2gEnumerations.EnumHot2gMeasResult.Ac1ch: if (!gc.addData(data as Hot2gMeasData1chAc)) { //- changing gain m_API.setMgcGain(gc.setCurrentGainAsIS()); gc.clearBuffer(); afterMGC_counter = afterMGC_counter_MAX; } break; case Hot2gEnumerations.EnumHot2gMeasResult.Ac2ch: gc.addData(data as Hot2gMeasData1chAc); break; default: return; } if (gc.getIsMGCFailure()) { if (gc.retryCounter < 3) { //- reset gain parameter and peripheral's setting gc.retryCounter++; gc.reset(); m_API.setMgcGain(gc.setCurrentGainAsIS()); afterMGC_counter = afterMGC_counter_MAX; // Debug.Log("TEST\nMGC: Retrying..."); } else { //- give up MGC gc.resetAll(); m_API.setMgcGain(gc.setCurrentGainAsIS()); afterMGC_counter = afterMGC_counter_MAX; m_Mode = eMode.Waiting; // Debug.Log("TEST\nMGC: Stop retry."); } } if (!gc.isFixed) { Debug.Log("Hot2gApp gc is Not Fixed"); //nfb.bufferUnstable(); //黒背景にする return; } Debug.Log("MGC Fixed."); /* [CMD] ゲイン設定 */ //if (m_Mode != eMode.GainSetting) return; m_API.setMgcGain(gc.mastering); afterMGC_counter = afterMGC_counter_MAX; /* ゲイン設定完了後の接続状態管理 */ this.m_Mode = eMode.RecieveData; nfb.resetBrainCals(); this.dataStore.addReaction("MGC (L1:" + m_gc.getL1Gain().ToString("N0") + " L3:" + m_gc.getL3Gain().ToString("N0") + ")"); if (m_Meta == null) { m_Meta = new Hot2gMeta(); m_Meta.measured = System.DateTime.Now.ToString("yyyy-MM-dd.HH.mm.ss"); m_Meta.mac = m_API.getConnectedAddress(); m_Meta.type = "XB-01"; m_Meta.gender = "null"; m_Meta.age = 0; m_Meta.designId = "null"; if (logger != null) { logger.write(m_Meta.ToCSV()); logger.write(Xb01data.csvHeader); logger.write(gc.toString()); } } }