Пример #1
0
        // Save device
        public async void SaveDevice(BleDeviceInfo Device)
        {
            Log.Debug(TAG, "Save Device " + Device.DeviceAddress);
            var SaveTask = MyBleController.SaveDeviceAsync(Device);

            try
            {
                await SaveTask;

                if (SaveTask.IsCompleted)
                {
                    if (SaveTask.Exception == null)
                    {
                        Log.Debug(TAG, "Save Device success");
                    }
                    else
                    {
                        Log.Debug(TAG, "Save Device Failed " + SaveTask.Exception.Message);
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Debug(TAG, "Save Device Failed  " + ex.Message);
            }
        }
Пример #2
0
        // Delete device
        public async void DeleteDevice(BleDeviceInfo Device, int pos)
        {
            Log.Debug(TAG, "Delete Device " + Device.DeviceAddress);
            var DeleteTask = MyBleController.DeleteDeviceAsync(Device);

            try
            {
                await DeleteTask;

                if (DeleteTask.IsCompleted)
                {
                    if (DeleteTask.Exception == null)
                    {
                        Log.Debug(TAG, "Delete Device success");
                        BleDeviceInfoList.RemoveAt(pos);
                        Adapter.NotifyDataSetChanged();
                    }
                    else
                    {
                        Log.Debug(TAG, "Delete Device Failed " + DeleteTask.Exception.Message);
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Debug(TAG, "Delete Device Failed  " + ex.Message);
            }
        }
Пример #3
0
 public override void OnDeviceDiscover(BleDeviceInfo Device)
 {
     Log.Debug("BleController", "onDeviceDiscover : " + Device.DeviceName);
     if (!BLEControllerActivity.IsAdded(Device))
     {
         BLEControllerActivity.BleDeviceInfoList.Add(Device);
     }
     BLEControllerActivity.Adapter.NotifyDataSetChanged();
 }
Пример #4
0
 //Check if the device is added
 static public bool IsAdded(BleDeviceInfo Device)
 {
     foreach (BleDeviceInfo device in BleDeviceInfoList)
     {
         if (device.DeviceAddress == Device.DeviceAddress)
         {
             return(true);
         }
     }
     return(false);
 }
Пример #5
0
    /// <summary>
    /// 監聽到藍芽裝置時之觸發事件
    /// </summary>
    /// <param name="watcher"></param>
    /// <param name="eventArgs"></param>
    private void OnAdvertisementReceived(BluetoothLEAdvertisementWatcher watcher, BluetoothLEAdvertisementReceivedEventArgs eventArgs)
    {
        bleDeviceInfo = new BleDeviceInfo();

        // Get iBeacon specific data
        bleDeviceInfo.BeaconData = eventArgs.Advertisement.iBeaconParseAdvertisement(eventArgs.RawSignalStrengthInDBm);

        // The received signal strength indicator (RSSI)
        bleDeviceInfo.rssi = eventArgs.RawSignalStrengthInDBm;

        // Get Device BluetoothAddress (To HEX)
        bleDeviceInfo.bluetoothAddress = eventArgs.BluetoothAddress.ToString("X");


        afterReceivedAction();
        return;
    }
Пример #6
0
        /// <summary>
        /// 同時符合以下三種情況才開門
        /// 1.接收之 Beacon RSSI 高於門檻值
        /// 2.紅外線動作感測器感測到使用者
        /// 3.掃描到的Device存於資料庫中
        /// </summary>
        /// <param name="beaconData"></param>
        /// <returns></returns>
        private bool OpenDoorValidationByDeviceInfo(BleDeviceInfo bleDeviceInfo)
        {
            string deviceKey = bleDeviceInfo.bluetoothAddress;
            int    rssi      = bleDeviceInfo.rssi;

            // 如果掃描到有beacon資料
            if (bleDeviceInfo.BeaconData.UUID != String.Empty)
            {
                deviceKey = bleDeviceInfo.BeaconData.UUID;
                rssi      = bleDeviceInfo.BeaconData.Rssi;
            }



            // Device Bluetooth Address  From DB
            var matchDevice = (
                from x in userDevicesInfoList
                where x.DEVICE_KEY.IndexOf(deviceKey, StringComparison.OrdinalIgnoreCase) >= 0 &&              //忽略大小寫
                x.EXTEND_VALUE <= rssi                   //rssi 大於預設值
                select x);

            if (matchDevice.Count() == 0)
            {
                return(false);
            }

#if (ARM)
            // PIR Sensor
            if (!phyDeviceController.IsPIRSensorDetected())
            {
                return(false);
            }
#endif



            return(true);
        }
Пример #7
0
        public override View GetView(int position, View convertView, ViewGroup parent)
        {
            var view = convertView;
            FoundDevicesAdapterViewHolder holder = null;
            BleDeviceInfo Device = FoundDevices.ElementAt(position);

            if (view != null)
            {
                holder = view.Tag as FoundDevicesAdapterViewHolder;
            }

            if (holder == null)
            {
                var inflater = context.GetSystemService(Context.LayoutInflaterService).JavaCast <LayoutInflater>();
                view     = inflater.Inflate(Resource.Layout.Child_layout, parent, false);
                holder   = new FoundDevicesAdapterViewHolder(view);
                view.Tag = holder;
            }

            holder.DeviceName.Text = Device.DeviceName;
            holder.Address.Text    = Device.DeviceAddress;

            return(view);
        }
 public async Task SaveDeviceAsync(BleDeviceInfo bleDeviceInfo) =>
 await SaveDevice(bleDeviceInfo).CastTask();
 public async Task DeleteDeviceAsync(BleDeviceInfo bleDeviceInfo) =>
 await DeleteDevice(bleDeviceInfo).CastTask();