Ejemplo n.º 1
0
        public async Task SendAsync(SPPMessage msg)
        {
            if (!IsConnected)
            {
                OnBluetoothError(new BluetoothException(BluetoothException.ErrorCodes.SendFailed, "Attempted to send command to disconnected device"));
                return;
            }

            try
            {
                Log.Verbose($"<< Outgoing: {msg}");

                foreach (var hook in ScriptManager.Instance.MessageHooks)
                {
                    hook?.OnMessageSend(ref msg);
                }

                var raw = msg.EncodeMessage();

                foreach (var hook in ScriptManager.Instance.RawStreamHooks)
                {
                    hook?.OnRawDataSend(ref raw);
                }

                await _backend.SendAsync(raw);
            }
            catch (BluetoothException ex)
            {
                OnBluetoothError(ex);
            }
        }
Ejemplo n.º 2
0
        private void OnNewDataAvailable(byte[] frame)
        {
            ArrayList data = new ArrayList(frame);

            do
            {
                try
                {
                    SPPMessage msg = SPPMessage.DecodeMessage(data.OfType <byte>().ToArray());

                    MessageReceived?.Invoke(this, msg);

                    if (msg.TotalPacketSize >= data.Count)
                    {
                        break;
                    }
                    data.RemoveRange(0, msg.TotalPacketSize);
                }
                catch (InvalidDataException e)
                {
                    InvalidDataException?.Invoke(this, e);
                }
            } while (data.Count > 0);

            NewDataAvailable?.Invoke(this, frame);
        }
Ejemplo n.º 3
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            VersionOfMR         = msg.Payload[0];
            EarType             = msg.Payload[1];
            BatteryL            = msg.Payload[2];
            BatteryR            = msg.Payload[3];
            IsCoupled           = Convert.ToBoolean(msg.Payload[4]);
            MainConnection      = (Constants.DeviceInv)msg.Payload[5];
            WearState           = (Constants.WearStates)msg.Payload[6];
            AmbientSoundEnabled = Convert.ToBoolean(msg.Payload[7]);
            AmbientSoundMode    = (Constants.AmbientType)msg.Payload[8];
            AmbientSoundVolume  = msg.Payload[9];
            EqualizerEnabled    = Convert.ToBoolean(msg.Payload[10]);
            EqualizerMode       = msg.Payload[11];

            if (msg.Size > 13)
            {
                TouchpadLock    = Convert.ToBoolean(msg.Payload[12]);
                TouchpadOptionL = (Constants.TouchOption)((msg.Payload[13] & 0xF0) >> 4);
                TouchpadOptionR = (Constants.TouchOption)(msg.Payload[13] & 0x0F);
            }
            else
            {
                TouchpadLock    = Convert.ToBoolean((msg.Payload[12] & 0xF0) >> 4);
                TouchpadOptionL = (Constants.TouchOption)(msg.Payload[12] & 0x0F);
                TouchpadOptionR = (Constants.TouchOption)(msg.Payload[12] & 0x0F);
            }
        }
Ejemplo n.º 4
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            ControlId = (FirmwareConstants.ControlIds)msg.Payload[0];

            switch (ControlId)
            {
            case FirmwareConstants.ControlIds.SendMtu:
                MtuSize = BitConverter.ToInt16(msg.Payload, 1);
                MtuSize = MtuSize > 650 ? (short)650 : MtuSize;
                break;

            case FirmwareConstants.ControlIds.ReadyToDownload:
                Id = BitConverter.ToInt16(msg.Payload, 1);
                break;

            default:
                Log.Debug($"FotaControlParser: Unknown ControlId {msg.Payload[0]}");
                break;
            }
        }
Ejemplo n.º 5
0
 public void SendAsync(SPPMessage msg)
 {
     lock (_transmitpadlock)
     {
         _transmitterQueue.Enqueue(msg);
     }
 }
Ejemplo n.º 6
0
        private async void LoadDump_OnClick(object?sender, RoutedEventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog {
                Filters = _filters, AllowMultiple = false
            };

            string[]? paths = await dlg.ShowAsync(this);

            if (paths == null || paths.Length < 1)
            {
                return;
            }

            ArrayList data;

            try
            {
                data = new ArrayList(await File.ReadAllBytesAsync(paths[0]));
                _cache.Clear();
                _cache.AddRange((byte[])data.ToArray(typeof(byte)));
                _hexDump.Text = HexUtils.Dump(_cache.ToArray());
            }
            catch (Exception ex)
            {
                await new MessageBox
                {
                    Title       = "Error while reading file",
                    Description = ex.Message
                }.ShowDialog(this);
                return;
            }
            do
            {
                try
                {
                    SPPMessage        msg    = SPPMessage.DecodeMessage((byte[])data.ToArray(typeof(byte)));
                    RecvMsgViewHolder holder = new RecvMsgViewHolder(msg);
                    _vm.MsgTableDataSource?.Add(holder);

                    if (msg.TotalPacketSize >= data.Count)
                    {
                        break;
                    }
                    data.RemoveRange(0, msg.TotalPacketSize);
                }
                catch (InvalidPacketException ex)
                {
                    await new MessageBox
                    {
                        Title       = "Error while parsing file",
                        Description = ex.Message
                    }.ShowDialog(this);
                    _vm.MsgTableDataView.Refresh();
                    return;
                }
            } while (data.Count > 0);

            _vm.MsgTableDataView.Refresh();
        }
Ejemplo n.º 7
0
 public void OnMessageAvailable(ref SPPMessage msg)
 {
     if (msg.Id == SPPMessage.MessageIds.MSG_ID_DEBUG_SKU)
     {
         Log.Information("[Script] DumpSKU: " + HexUtils.Dump(msg.Payload, showAscii: true, showHeader: false, showOffset: false));
         ScriptManager.Instance.UnregisterHook(this);
     }
 }
Ejemplo n.º 8
0
 private void BluetoothServiceMessageReceived(object sender, SPPMessage e)
 {
     Dispatcher.BeginInvoke((Action)(() =>
     {
         RecvMsgViewHolder holder = new RecvMsgViewHolder(e);
         recvTable.Items.Add(holder);
     }));
 }
Ejemplo n.º 9
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            AmbientVolume = msg.Payload[0];
        }
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            OptionType = (Constants.TouchOption)msg.Payload[0];
        }
Ejemplo n.º 11
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            Mode = (NoiseControlMode)msg.Payload[0];
        }
Ejemplo n.º 12
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            ResultCode = (SpatialAudioControl)msg.Payload[0];
        }
Ejemplo n.º 13
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            OptionType = TouchOption.ToUniversal(msg.Payload[0]);
        }
Ejemplo n.º 14
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            Enabled = Convert.ToBoolean(msg.Payload[0]);
        }
Ejemplo n.º 15
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            OptionType = DeviceSpec.TouchMap.FromByte(msg.Payload[0]);
        }
Ejemplo n.º 16
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            BuildString = System.Text.Encoding.ASCII.GetString(msg.Payload);
        }
Ejemplo n.º 17
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            ResultCode = msg.Payload[0];
        }
Ejemplo n.º 18
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            SppRoleState = (SppRoleStates)msg.Payload[0];
            Device       = (Devices)msg.Payload[1];
        }
Ejemplo n.º 19
0
 public RecvMsgViewHolder(SPPMessage msg)
 {
     Id           = GetEnumName(typeof(SPPMessage.MessageIds), msg.Id);
     Payload      = BitConverter.ToString(msg.Payload).Replace("-", " ");
     PayloadAscii = Hex.DumpAscii(msg.Payload);
     Type         = GetEnumName(typeof(SPPMessage.MsgType), msg.Type);
     Size         = $"{msg.Size} bytes";
     CRC16        = (msg.CRC16 == 0 ? "Pass" : "Fail");
     Message      = msg;
 }
Ejemplo n.º 20
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            DataSize           = BitConverter.ToInt32(msg.Payload, 0);
            PartialDataMaxSize = BitConverter.ToInt16(msg.Payload, 4);
            FragmentCount      = (int)Math.Ceiling((double)DataSize / (double)PartialDataMaxSize);
        }
Ejemplo n.º 21
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            if (ActiveModel == Models.Buds)
            {
                EarType        = msg.Payload[0];
                BatteryL       = msg.Payload[1];
                BatteryR       = msg.Payload[2];
                IsCoupled      = Convert.ToBoolean(msg.Payload[3]);
                MainConnection = (DeviceInv)msg.Payload[4];
                WearState      = (WearStates)msg.Payload[5];
            }
            else
            {
                Revision       = msg.Payload[0];
                BatteryL       = msg.Payload[1];
                BatteryR       = msg.Payload[2];
                IsCoupled      = Convert.ToBoolean(msg.Payload[3]);
                MainConnection = (DeviceInv)msg.Payload[4];

                PlacementL = (PlacementStates)((msg.Payload[5] & 240) >> 4);
                PlacementR = (PlacementStates)(msg.Payload[5] & 15);
                if (PlacementL == PlacementStates.Wearing && PlacementR == PlacementStates.Wearing)
                {
                    WearState = WearStates.Both;
                }
                else if (PlacementL == PlacementStates.Wearing)
                {
                    WearState = WearStates.L;
                }
                else if (PlacementR == PlacementStates.Wearing)
                {
                    WearState = WearStates.R;
                }
                else
                {
                    WearState = WearStates.None;
                }

                if (ActiveModel == Models.BudsPro && msg.Payload[6] == 101)
                {
                    /* Cradle disconnected */
                    BatteryCase = 0;
                }
                else
                {
                    BatteryCase = msg.Payload[6];
                }
            }
        }
Ejemplo n.º 22
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            WearState           = (WearStates)msg.Payload[0];
            LeftDetectionCount  = BitConverter.ToInt16(msg.Payload, 1);
            RightDetectionCount = BitConverter.ToInt16(msg.Payload, 3);
        }
Ejemplo n.º 23
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            PartialDataOffset = BitConverter.ToInt32(msg.Payload, 0);
            PartialDataSize   = BitConverter.ToInt16(msg.Payload, 4);
            RawData           = new byte[PartialDataSize];
            Array.Copy(msg.Payload, 6, RawData, 0, PartialDataSize);
        }
Ejemplo n.º 24
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            a = (char)msg.Payload[12];
            b = (char)msg.Payload[13];
            c = (char)msg.Payload[26];
            d = (char)msg.Payload[27];
        }
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            NAK            = (msg.Payload[3] & -128) != 0;
            ReceivedOffset = (((long)msg.Payload[1] & 255) << 8) | ((long)msg.Payload[0] & 255) |
                             (((long)msg.Payload[2] & 255) << 16) | (((long)msg.Payload[3] & 127) << 24);
            RequestPacketNumber = msg.Payload[4];
        }
Ejemplo n.º 26
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }
            var data = BitConverter.ToInt32(msg.Payload, 0);

            HardwareVersion       = (data & 1) == 0;
            SoftwareVersion       = (data & 2) == 0;
            TouchFirmwareVersion  = (data & 4) == 0;
            LeftSerialNo          = (data & 8) == 0;
            RightSerialNo         = (data & 16) == 0;
            LeftBluetoothAddress  = (data & 32) == 0;
            RightBluetoothAddress = (data & 64) == 0;
            LeftAcceleratorX      = (data & 128) == 0;
            LeftAcceleratorY      = (data & 256) == 0;
            LeftAcceleratorZ      = (data & 512) == 0;
            RightAcceleratorX     = (data & 1024) == 0;
            RightAcceleratorY     = (data & 2048) == 0;
            RightAcceleratorZ     = (data & 4096) == 0;
            LeftProximity         = (data & 8192) == 0;
            RightProximity        = (data & 16384) == 0;
            LeftThermistor        = (data & 32768) == 0;
            RightThermistor       = (data & 65536) == 0;
            LeftAdcSOC            = (data & 131072) == 0;
            LeftAdcVCell          = (data & 262144) == 0;
            LeftAdcCurrent        = (data & 524288) == 0;
            RightAdcSOC           = (data & 1048576) == 0;
            RightAdcVCell         = (data & 2097152) == 0;
            RightAdcCurrent       = (data & 4194304) == 0;
            LeftHall  = (data & 8388608) == 0;
            RightHall = (data & 16777216) == 0;


            bool result = true;

            foreach (PropertyInfo pi in GetType().GetProperties())
            {
                if (pi.PropertyType == typeof(bool) && pi.Name != "AllChecks" &&
                    pi.Name != "AllLeftAccelerator" && pi.Name != "AllRightAccelerator")
                {
                    if (!(bool)pi.GetValue(this))
                    {
                        result = false;
                    }
                }
            }

            AllLeftAccelerator  = LeftAcceleratorX && LeftAcceleratorY && LeftAcceleratorZ;
            AllRightAccelerator = RightAcceleratorX && RightAcceleratorY && RightAcceleratorZ;
            AllChecks           = result;
        }
Ejemplo n.º 27
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            ResultCode = msg.Payload[0];
            if (msg.Payload.Length > 1)
            {
                Confidence = msg.Payload[1];
            }
        }
Ejemplo n.º 28
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            byte[] left  = new byte[2];
            byte[] right = new byte[2];
            Array.Copy(msg.Payload, 0, left, 0, 2);
            Array.Copy(msg.Payload, 2, right, 0, 2);
            LeftBatteryType  = System.Text.Encoding.ASCII.GetString(left);
            RightBatteryType = System.Text.Encoding.ASCII.GetString(right);
        }
Ejemplo n.º 29
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            byte[] left  = new byte[11];
            byte[] right = new byte[11];
            Array.Copy(msg.Payload, 0, left, 0, 11);
            Array.Copy(msg.Payload, 11, right, 0, 11);
            LeftSerialNumber  = System.Text.Encoding.ASCII.GetString(left, 0, 11);
            RightSerialNumber = System.Text.Encoding.ASCII.GetString(right, 0, 11);
        }
Ejemplo n.º 30
0
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

            MessageId  = (SPPMessage.MessageIds)msg.Payload[0];
            ResultCode = msg.Payload[1];
            if (msg.Payload.Length > 2)
            {
                ExtraData = msg.Payload[2];
            }
        }