Ejemplo n.º 1
0
        public async Task <bool> RefreshData()
        {
            var mfd = await CharFeedback.ReadValueAsync(BluetoothCacheMode.Uncached);

            Data = RestDeviceData.FromBuffer(mfd.Value);
            return(true);
        }
        public static RestDeviceData FromBuffer(IBuffer buffer)
        {
            var retval = new RestDeviceData();
            var data   = new byte[buffer.Length];

            DataReader.FromBuffer(buffer).ReadBytes(data);
            //RestDevice.Dbg("manufacturer data: " + BitConverter.ToString(data));

            int i = 0; // data index

            while (i < data.Length)
            {
                switch (data[i])
                {
                case B_HEADER1:
                case B_HEADER2:
                    // TODO: verify header
                    i += 3;
                    break;

                case B_COLOR:
                    retval.Color = Color.FromArgb(data[i + 4], data[i + 1], data[i + 2], data[i + 3]);
                    i           += 5;
                    break;

                case B_EVENT_NEXT:
                    // TODO: parse next event
                    i += 6;
                    break;

                case B_PRESET_POWER:
                    // TODO: parse preset
                    retval.Power = (data[i + 1] & 0b1100_0000) != 0b1100_0000;
                    i           += 2;
                    break;

                case B_AUDIO:
                    retval.AudioTrack = (AudioTrack)data[i + 1];
                    retval.Volume     = data[i + 2];
                    i += 3;
                    break;

                case B_TIME:
                    // TODO: parse time
                    i += 5;
                    break;

                case B_EVENT_ACTIVE:
                    // TODO: parse active event
                    i += 2;
                    break;

                case 0:
                    i += 1;
                    break;

                default:
                    RestDevice.Dbg("unknown data id: " + data[i].ToString("X"));
                    i += 1;
                    break;
                }
            }

            RestDevice.Dbg($"power:{retval.Power}, color:{retval.Color}, vol:{retval.Volume}, trk: {retval.AudioTrack}");
            return(retval);
        }