示例#1
0
 public static SPPMessage SetOptions(TouchOption.Universal left, TouchOption.Universal right)
 {
     byte[] payload = new byte[2];
     payload[0] = TouchOption.ToRawByte(left);
     payload[1] = TouchOption.ToRawByte(right);
     return(new SPPMessage(SPPMessage.MessageIds.MSG_ID_SET_TOUCHPAD_OPTION,
                           SPPMessage.MsgType.Request, payload));
 }
        public override void ParseMessage(SPPMessage msg)
        {
            if (msg.Id != HandledType)
            {
                return;
            }

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

            if (ActiveModel == Model.Buds)
            {
                Revision            = msg.Payload[0];
                EarType             = msg.Payload[1];
                BatteryL            = msg.Payload[2];
                BatteryR            = msg.Payload[3];
                IsCoupled           = Convert.ToBoolean(msg.Payload[4]);
                MainConnection      = (DeviceInv)msg.Payload[5];
                WearState           = (WearStates)msg.Payload[6];
                AmbientSoundEnabled = Convert.ToBoolean(msg.Payload[7]);
                AmbientSoundMode    = (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 = TouchOption.ToUniversal((msg.Payload[13] & 0xF0) >> 4);
                    TouchpadOptionR = TouchOption.ToUniversal(msg.Payload[13] & 0x0F);
                    if (Revision >= 3)
                    {
                        SeamlessConnectionEnabled = msg.Payload[14] == 0;
                    }
                }
                else
                {
                    TouchpadLock    = Convert.ToBoolean((msg.Payload[12] & 0xF0) >> 4);
                    TouchpadOptionL = TouchOption.ToUniversal(msg.Payload[12] & 0x0F);
                    TouchpadOptionR = TouchOption.ToUniversal(msg.Payload[12] & 0x0F);
                    if (Revision >= 3)
                    {
                        SeamlessConnectionEnabled = msg.Payload[13] == 0;
                    }
                }
            }
            else
            {
                Revision       = msg.Payload[0];
                EarType        = msg.Payload[1];
                BatteryL       = msg.Payload[2];
                BatteryR       = msg.Payload[3];
                IsCoupled      = Convert.ToBoolean(msg.Payload[4]);
                MainConnection = (DeviceInv)msg.Payload[5];

                PlacementL = (PlacementStates)((msg.Payload[6] & 240) >> 4);
                PlacementR = (PlacementStates)(msg.Payload[6] & 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;
                }

                BatteryCase = msg.Payload[7];

                if (ActiveModel == Model.BudsPlus)
                {
                    AmbientSoundEnabled = Convert.ToBoolean(msg.Payload[8]);
                    AmbientSoundVolume  = msg.Payload[9];

                    AdjustSoundSync = msg.Payload[10] == 1;
                    EqualizerMode   = msg.Payload[11];
                    TouchpadLock    = Convert.ToBoolean(msg.Payload[12]);

                    TouchpadOptionL = TouchOption.ToUniversal((msg.Payload[13] & 240) >> 4);
                    TouchpadOptionR = TouchOption.ToUniversal(msg.Payload[13] & 15);

                    OutsideDoubleTap = msg.Payload[14] == 1;

                    short leftColor  = BitConverter.ToInt16(msg.Payload, 15);
                    short rightColor = BitConverter.ToInt16(msg.Payload, 17);
                    DeviceColor = (Color)(leftColor != rightColor ? 0 : leftColor);

                    if (Revision >= 8)
                    {
                        SideToneEnabled = msg.Payload[19] == 1;
                    }

                    if (Revision >= 9)
                    {
                        ExtraHighAmbientEnabled = msg.Payload[20] == 1;
                    }

                    if (Revision >= 11)
                    {
                        SeamlessConnectionEnabled = msg.Payload[21] == 0;
                    }
                }
                else if (ActiveModel == Model.BudsLive)
                {
                    AdjustSoundSync = msg.Payload[8] == 1;
                    EqualizerMode   = msg.Payload[9];
                    TouchpadLock    = Convert.ToBoolean(msg.Payload[10]);

                    TouchpadOptionL = TouchOption.ToUniversal((msg.Payload[11] & 240) >> 4);
                    TouchpadOptionR = TouchOption.ToUniversal(msg.Payload[11] & 15);

                    NoiceCancelling = msg.Payload[12] == 1;
                    VoiceWakeUp     = msg.Payload[13] == 1;

                    short leftColor  = BitConverter.ToInt16(msg.Payload, 14);
                    short rightColor = BitConverter.ToInt16(msg.Payload, 16);
                    DeviceColor = (Color)(leftColor != rightColor ? 0 : leftColor);

                    VoiceWakeUpLang = msg.Payload[18];

                    if (Revision >= 3)
                    {
                        SeamlessConnectionEnabled = msg.Payload[19] == 0;
                    }
                    if (Revision >= 4)
                    {
                        FmmRevision = msg.Payload[20];
                    }
                    if (Revision >= 5)
                    {
                        RelieveAmbient = msg.Payload[21] == 1;
                    }
                }
            }
        }