Beispiel #1
0
    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 >>>>>>>>>>>>>>>>>>>>>>>>>>");
            }
        }
    }
Beispiel #2
0
    /**
     * ゲイン調整済みデータ受信時の動作
     */
    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;
        }
    }
Beispiel #3
0
    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());
            }
        }
    }