示例#1
0
    /// <summary>
    /// デバイスとペアリングする
    /// </summary>
    /// <param name="deviceName">デバイス名</param>
    /// <param name="deviceAdress">デバイスのBLEアドレス</param>
    /// <param name="index">iOSでのみ使用するデバイス識別番号</param>
    IEnumerator Parering(string deviceName, string deviceAdress, int index = 0)
    {
        if (DeviceActivationStatus == DeviceActivationStatusType.App)
        {
            BluetoothManager.Instance.ChangeServiceUUIDToNormal();
        }
        else
        {
            BluetoothManager.Instance.ChangeServiceUUIDToFirmwareUpdate();
        }

        //Bluetoothが有効か確認
        bool isBluetoothActive = false;

        yield return(StartCoroutine(CheckBluetoothIsActive((bool isActive) => isBluetoothActive = isActive)));

        if (!isBluetoothActive)
        {
            //Bluetooth無効時
            yield break;
        }
        //接続できてなければ、接続
        if (!UserDataManager.State.isConnectingDevice())
        {
            UpdateDialogAddButton.Show(deviceName + "に接続しています。",
                                       false,
                                       true,
                                       null,
                                       () =>
            {
                //キャンセルボタン押下時
                //デバイスとの接続を切る
                BluetoothManager.Instance.Disconnect();
            },
                                       "OK",
                                       "キャンセル");
            bool isDeviceConnectSuccess = false;
            yield return(StartCoroutine(DeviceConnect(deviceName, deviceAdress, (bool isSuccess) => isDeviceConnectSuccess = isSuccess, index)));

            Debug.Log("Connecting_Result:" + isDeviceConnectSuccess);
            UpdateDialogAddButton.Dismiss();
            if (!isDeviceConnectSuccess)
            {
                //デバイス接続に失敗すれば	、接続失敗した旨を伝えるダイアログを表示する
                yield return(StartCoroutine(TellFailedConnect(deviceName)));

                yield break;
            }
        }
        UpdateDialog.Show("同期中");

        // デバイスがアプリ状態なら、バージョンを取得する
        if (DeviceActivationStatus == DeviceActivationStatusType.App)
        {
            //バージョン取得
            bool isGetVersionSuccess = false;
            yield return(StartCoroutine(GetVersion((bool isSuccess) => isGetVersionSuccess = isSuccess)));

            Debug.Log("GetVersion_Result:" + isGetVersionSuccess);
            if (!isGetVersionSuccess)
            {
                //バージョン取得に失敗すれば
                UpdateDialog.Dismiss();
                //同期に失敗した旨のダイアログを表示する
                yield return(StartCoroutine(TellFailedSync()));

                yield break;
            }
        }

        // デバイス状態がアプリならデバイス情報を取得する
        if (DeviceActivationStatus == DeviceActivationStatusType.App)
        {
            //デバイス情報取得
            bool     isGetDeviceInfoSuccess = false;
            DateTime deviceTime             = DateTime.MinValue;
            yield return(StartCoroutine(GetDeviceInfo((bool isSuccess, DateTime _deviceTime) =>
            {
                isGetDeviceInfoSuccess = isSuccess;
                deviceTime = _deviceTime;
            })));

            Debug.Log("GetDeviceInfo_Result:" + isGetDeviceInfoSuccess);
            if (!isGetDeviceInfoSuccess)
            {
                //デバイス情報取得に失敗すれば
                UpdateDialog.Dismiss();
                //同期に失敗した旨のダイアログを表示する
                yield return(StartCoroutine(TellFailedSync()));

                yield break;
            }

            //デバイス時刻補正
            bool isCorrectDeviceTimeSuccess = false;
            yield return(StartCoroutine(CorrectDeviceTime((bool isSuccess) => isCorrectDeviceTimeSuccess = isSuccess, deviceTime)));

            Debug.Log("CorrectDeviceTime_Result:" + isCorrectDeviceTimeSuccess);
            if (!isCorrectDeviceTimeSuccess)
            {
                //デバイス時刻補正に失敗すれば
                UpdateDialog.Dismiss();
                //設定の変更に失敗した旨のダイアログを表示する
                yield return(StartCoroutine(TellFailedChangeSetting()));

                yield break;
            }
        }

        UpdateDialog.Dismiss();
        //ペアリングが完了した事を記録
        UserDataManager.State.SaveDoneDevicePareing();
        //接続したデバイスを記憶しておく
        UserDataManager.Device.SavePareringBLEAdress(deviceAdress);
        UserDataManager.Device.SavePareringDeviceName(deviceName);
        //完了ダイアログ表示
        yield return(StartCoroutine(ShowPareringCompleteDialog(deviceName)));

        //データの復元が必要であればデータを復元する
        if (UserDataManager.State.isNessesaryRestore())
        {
            bool isCompleteRestore = false;
            if (UserDataManager.State.GetRestoreDataCount() == 0)
            {
                //初回復元の場合
                FtpFunction.RestoreData(this, () => isCompleteRestore = true);
                yield return(new WaitUntil(() => isCompleteRestore));

                //ファームウェアアップデートが必要か確認する
                yield return(StartCoroutine(FarmwareVersionCheckFlow()));
            }
            else
            {
                //復元再開の場合
                FtpFunction.ReRestoreData(this, () => isCompleteRestore = true);
                yield return(new WaitUntil(() => isCompleteRestore));
            }
        }
        //ホーム画面に遷移
        SceneTransitionManager.LoadLevel(SceneTransitionManager.LoadScene.Home);
    }
示例#2
0
 /// <summary>
 /// 接続中ダイアログを閉じる
 /// </summary>
 private void CloseConnectingDialog()
 {
     UpdateDialogAddButton.Dismiss();
 }
    //デバイス接続の流れ
    IEnumerator DeviceConnect(string deviceName, string deviceAdress, Action <bool> onResponse)
    {
        UpdateDialogAddButton.Show(deviceName + "に接続しています。",
                                   false,
                                   true,
                                   null,
                                   () => {
            //キャンセルボタン押下時
            //デバイスとの接続を切る
            BluetoothManager.Instance.Disconnect();
        },
                                   "OK",
                                   "キャンセル");
        bool   isSuccess   = false;     //接続成功
        bool   isFailed    = false;     //接続失敗
        string receiveData = "";        //デバイス接続で成功・失敗時に受け取るデータ(JSONにパースして使用)
        string uuid        = "";        //ペアリング中のデバイスのUUID(iOSでのみ必要)

                #if UNITY_IOS
        uuid = UserDataManager.Device.GetPareringDeviceUUID();
                #endif

        BluetoothManager.Instance.Connect(
            deviceAdress,
            (string data) => {
            //エラー時
            receiveData = data;
            isFailed    = true;
        },
            (string data) => {
            //接続完了時
            receiveData = data;
            isSuccess   = true;
        },
            uuid);
        yield return(new WaitUntil(() => isSuccess || isFailed));               //応答待ち

        if (isSuccess)
        {
            //接続成功時
            //接続したデバイス情報読み出し
            var    json   = Json.Deserialize(receiveData) as Dictionary <string, object>;
            string name   = (string)json["KEY1"];
            string adress = (string)json["KEY2"];
            //接続したデバイスを記憶しておく
            UserDataManager.Device.SavePareringBLEAdress(adress);
            UserDataManager.Device.SavePareringDeviceName(name);
            UpdateDialogAddButton.Dismiss();
        }
        else
        {
            //接続失敗時
            var json   = Json.Deserialize(receiveData) as Dictionary <string, object>;
            int error1 = Convert.ToInt32(json["KEY1"]);
            int error2 = Convert.ToInt32(json["KEY2"]);
            UpdateDialogAddButton.Dismiss();
                        #if UNITY_IOS
            if (error2 == -8)
            {
                //iOSの_reconnectionPeripheralコマンドでのみ返ってくる、これ以降接続できる見込みがないときのエラー
                Debug.Log("Connect_OcuurSeriousError");
                //接続を解除
                UserDataManager.State.SaveDeviceConnectState(false);
                //接続が解除された事を伝える
                DeviceStateManager.Instance.OnDeviceDisConnect();
                //ペアリングを解除
                UserDataManager.State.ClearDeviceParering();
                //ペアリングが解除されたことを伝える
                DeviceStateManager.Instance.OnDevicePrearingDisConnect();
                //接続に失敗した旨のダイアログを表示
                yield return(StartCoroutine(TellFailedConnect(deviceName)));

                //再度ペアリングを要求するダイアログを表示
                yield return(StartCoroutine(TellNeccesaryParering()));

                onResponse(false);
                yield break;
            }
                        #endif
            if (error2 == -3)                   //何らかの原因で接続できなかった場合(タイムアウト含む)
            {
                Debug.Log("OccurAnyError");
            }
            else if (error2 == -4)              //接続が切れた場合(GATTサーバには接続できたが、サービスまで全て接続できないと接続完了にはならない。)
            {
                Debug.Log("DisConnectedError");
            }
            //接続に失敗した旨のダイアログを表示
            yield return(StartCoroutine(TellFailedConnect(deviceName)));
        }
        onResponse(isSuccess);
    }