/// <summary> /// 初期設定用コルーチン /// </summary> /// <param name="callback_init"></param> /// <returns></returns> private IEnumerator InitCoroutine(UnityAction <bool> callback) { var wait = new WaitForSeconds(0.01f); //[PC→中継基板]リセット要求 Now_Status_Init = STATUS_INIT.RESET; SetSendCmd(string.Empty); //[中継基板→PC]使用センサ数指定の要求待ち while (Now_Status_Init != STATUS_INIT.SENSOR_CNT) { ChkTimeOver(); if (flg_TimeOver) { callback(true); yield break; } yield return(wait); } //[PC→中継基板]センサ数の送信 SetSendCmd(Def_SensorCnt.ToString("00")); Now_Status_Init = STATUS_INIT.SENSOR_ID_WAIT; //Debug.LogWarning("[PC→中継基板]センサ数の送信"); //センサーIDの指定をPC・中継基板間でやり取りする _init_SensorCnt = 0; while (_init_SensorCnt <= Def_SensorCnt) { //[中継基板→PC]使用センサ数のID要求待ち while (Now_Status_Init != STATUS_INIT.SENSOR_ID) { //Debug.Log("[中継基板→PC]使用センサ数のID要求待ち id:" + _init_SensorCnt.ToString("00")); ChkTimeOver(); if (flg_TimeOver) { callback(false); yield break; } yield return(wait); } //[PC→中継基板]センサーIDの送信 if (++_init_SensorCnt <= Def_SensorCnt) { SetSendCmd(_init_SensorCnt.ToString("00")); Now_Status_Init = STATUS_INIT.SENSOR_ID_WAIT; } } //全て終わったら次のモードに以降する callback(true); yield break; }
/// <summary> /// [初期設定]区切り文字で分割したデータを処理する /// </summary> /// <param name="_data"></param> void RecieveData_Check_Init(string[] _data) { if (_data == null) { return; } switch (Now_Status_Init) { //リセット要求を送信済み → 使用センサ数指定のコマンドの受信待ち case STATUS_INIT.RESET: if (FindKeyword_Init(_data, (byte)RECEIVECMD_PTN.REQ_SENSOR_CNT_0, (byte)RECEIVECMD_PTN.REQ_SENSOR_CNT_1)) { Now_Status_Init = STATUS_INIT.SENSOR_CNT; //センサ数の送信指示 } break; //センサーID指定の要求待ち case STATUS_INIT.SENSOR_ID_WAIT: //最後は"I:"を受信しない仕様 if (_init_SensorCnt < Def_SensorCnt) { if (FindKeyword_Init(_data, (byte)RECEIVECMD_PTN.REQ_SENSOR_ID_0, (byte)RECEIVECMD_PTN.REQ_SENSOR_ID_1)) { // Debug.LogWarning("I: を受信"); Now_Status_Init = STATUS_INIT.SENSOR_ID; //センサーIDの送信指示 } } else { char[] c = new char[2]; if (Def_SensorCnt >= 10) { c[0] = (char)Def_SensorCnt.ToString()[0]; c[1] = (char)Def_SensorCnt.ToString()[1]; } else { c[0] = '0'; c[1] = (char)Def_SensorCnt.ToString()[0]; } if (FindKeyword_Init(_data, (byte)c[0], (byte)c[1])) { // Debug.LogWarning("最後のIDを受信"); Now_Status_Init = STATUS_INIT.SENSOR_ID; //センサーIDの送信指示 } } break; } }