Пример #1
0
        //--------------------------------------------------------Events:---------------------------------------------------------------------\\
        #region --Events--
        private async void CACHE_CharacteristicChanged(OnewheelCharacteristicsCache sender, Events.CharacteristicChangedEventArgs args)
        {
            if (args.UUID.Equals(OnewheelCharacteristicsCache.CHARACTERISTIC_UART_SERIAL_READ) && !(args.NEW_VALUE is null) && args.NEW_VALUE.Length > 0)
            {
                // Reverse back the byte order because we need the raw date send by the board:
                Utils.ReverseByteOrderIfNeeded(args.NEW_VALUE);

                AddSerialReadDataToCache(args.NEW_VALUE);
                if (unlock.CheckIfFirstChallengeBytesMatch(SERIAL_READ_CACHE) && SERIAL_READ_CACHE.Count == 20)
                {
                    await unlock.CalcAndSendResponseAsync(SERIAL_READ_CACHE, ONEWHEEL);

                    await ONEWHEEL.UnsubscribeFromCharacteristicAsync(OnewheelCharacteristicsCache.CHARACTERISTIC_UART_SERIAL_READ);

                    await ONEWHEEL.SubscribeToCharacteristicsAsync(OnewheelCharacteristicsCache.SUBSCRIBE_TO_CHARACTERISTICS);

                    // Send the Gemini firmware revision every UNLOCK_PERIOD to keep the board unlocked:
                    StartUnlockTimer();
                    OnewheelConnectionHelper.INSTANCE.CACHE.CharacteristicChanged -= CACHE_CharacteristicChanged;
                }
            }
        }