Exemplo n.º 1
0
        void ExecuteNavigateToDeviceCommand(ADeviceModel device)
        {
            var args = new NavigationParameters {
                { "Device", device }
            };

            NavigationService.Navigate <ADeviceView>(args);
        }
Exemplo n.º 2
0
        private void OnWatcherReceived(BluetoothLEAdvertisementWatcher sender, BluetoothLEAdvertisementReceivedEventArgs args)
        {
            var nameSection = args.Advertisement.DataSections.FirstOrDefault(i => i.DataType == 0x09);

            if (nameSection == null)
            {
                return;
            }
            var uuidSection   = args.Advertisement.DataSections.FirstOrDefault(i => i.DataType == 0x07);
            var vendorSection = args.Advertisement.DataSections.FirstOrDefault(i => i.DataType == 0xFF);

            if (uuidSection == null && vendorSection == null)
            {
                return;
            }
            short vid, pid; byte mid; string mac;

            if (uuidSection != null)
            {
                CryptographicBuffer.CopyToByteArray(uuidSection.Data, out var data1);
                Array.Reverse(data1);
                var uuidStr = BitConverter.ToString(data1).Replace("-", string.Empty);
                var uuid    = Guid.Parse(uuidStr);
                if (uuid != UUID.ATC_CUSTOM_SERVICE && uuid != UUID.UTC_CUSTOM_SERVICE)
                {
                    return;
                }
                CryptographicBuffer.CopyToByteArray(nameSection.Data, out var data2);
                var mixed   = Encoding.ASCII.GetString(data2);
                var pattern = @"(?<LETTER>[ACQRab])(?<NUMBER>\d{3})(?<MAC>(?i)[A-F|0-9]{4})";
                var match   = Regex.Match(mixed, pattern);
                if (!match.Success)
                {
                    return;
                }
                vid = 0x2E19;
                mid = 0;
                var letter = match.Groups["LETTER"].Value.ToUpper();
                var number = match.Groups["NUMBER"].Value;
                // 兼容老版本
                if (letter.Equals("A", StringComparison.OrdinalIgnoreCase) || letter.Equals("C", StringComparison.OrdinalIgnoreCase))
                {
                    pid = 0x036B;
                    //name = letter == "A" ? $"Additel {number}" : $"ConST {number}";
                }
                else
                {
                    var firstByte = Encoding.ASCII.GetBytes(letter)[0];
                    //var higher = firstByte.GetHigher();
                    var lower = firstByte.GetLower();
                    pid = (short)(lower == 1 ? 0x036B : 0x518B);
                    //name = higher == 5 ? $"ConST {number}" : $"Additel {number}";
                }
                mac = match.Groups["MAC"].Value;
            }
            else
            {
                CryptographicBuffer.CopyToByteArray(vendorSection.Data, out var data);
                if (data.Length < 11)
                {
                    return;
                }
                // VId
                var vidArray = new byte[2];
                Array.Copy(data, 0, vidArray, 0, vidArray.Length);
                vid = BitConverter.ToInt16(vidArray, 0);
                if (vid != 0x2E19 && vid != 0x045E)
                {
                    return;
                }
                // PId
                var pidArray = new byte[2];
                Array.Copy(data, 2, pidArray, 0, pidArray.Length);
                pid = BitConverter.ToInt16(pidArray, 0);
                // MId
                var midArray = new byte[1];
                Array.Copy(data, 4, midArray, 0, midArray.Length);
                mid = midArray[0];
                // MAC
                var macArray = new byte[6];
                Array.Copy(data, 5, macArray, 0, macArray.Length);
                mac = BitConverter.ToString(macArray).Replace('-', ':');
            }
            Application.Current.Dispatcher.Invoke(() =>
            {
                var deviceModel = DeviceModels.FirstOrDefault(i => i.MAC == mac);
                if (deviceModel != null)
                {
                    deviceModel.RSSI = args.RawSignalStrengthInDBm;
                }
                else
                {
                    deviceModel = new ADeviceModel(args.BluetoothAddress, vid, pid, mid, mac, args.RawSignalStrengthInDBm);
                    DeviceModels.Add(deviceModel);
                }
            });
        }
Exemplo n.º 3
0
        public override void OnNavigatedTo(NavigationContext context)
        {
            base.OnNavigatedTo(context);

            Model = (ADeviceModel)context.Parameters["Device"];
        }