Beispiel #1
0
 private async Task OnAccelerometerEvent(GattCharacteristic sender,
                                         GattCharacteristicValueEventArgs eventArgs)
 {
     if (Handler != null)
     {
         var x = BitConverter.ToInt16(eventArgs.Value) / 1000.0;
         var y = BitConverter.ToInt16(eventArgs.Value, 2) / 1000.0;
         var z = BitConverter.ToInt16(eventArgs.Value, 4) / 1000.0;
         await Handler(x, y, z);
     }
 }
Beispiel #2
0
 private async Task OnPinEvent(GattCharacteristic sender,
                               GattCharacteristicValueEventArgs eventArgs)
 {
     for (var i = 0; i < eventArgs.Value.Length; i += 2)
     {
         var pin  = eventArgs.Value[i];
         var data = eventArgs.Value[i + 1];
         if (Handler != null)
         {
             await Handler(pin, data);
         }
     }
 }
Beispiel #3
0
        private async Task OnBatteryEvent(GattCharacteristic sender,
                                          GattCharacteristicValueEventArgs eventArgs)
        {
            var p = eventArgs.Value[0];
            var g = Guid.Parse(await sender.GetUUIDAsync());

            if (g == BATTERY_LEVEL_UUID)
            {
                if (Handler != null)
                {
                    await Handler(p);
                }
            }
            else
            {
                Log.Warning($"Unknown characteristic, UUID is {g}.");
            }
        }
Beispiel #4
0
        private async Task OnButtonEvent(GattCharacteristic sender,
                                         GattCharacteristicValueEventArgs eventArgs)
        {
            var p = BitConverter.ToBoolean(eventArgs.Value);
            var g = Guid.Parse(await sender.GetUUIDAsync());

            if (g == BUTTON_A_CHARACTERISTIC)
            {
                await Handler(Button.A, p);
            }
            else if (g == BUTTON_B_CHARACTERISTIC)
            {
                await Handler(Button.B, p);
            }
            else
            {
                Log.Warning($"Unknown Button Pressed, UUID is {g}.");
            }
        }
Beispiel #5
0
        private static async Task characteristic_Value(GattCharacteristic characteristic, GattCharacteristicValueEventArgs e)
        {
            try
            {
                var uuid = await characteristic.GetUUIDAsync();

                PrintCharacteristicValue(uuid, e.Value);
            }
            catch (Exception ex)
            {
                Console.Error.WriteLine(ex);
            }
        }
Beispiel #6
0
        private async Task OnHubEvent(GattCharacteristic sender, GattCharacteristicValueEventArgs eventArgs)
        {
            var msg = new Message(eventArgs.Value);

            switch (msg.Type)
            {
            case Message.MessageType.HubProperties:
                if (_callbacks[(int)msg.PropertyType] != null)
                {
                    // NOTE: Callbacks are one-off, set by previous request operations
                    // LEGO protocol sucks, we cannot just read values, we have to write a request and wait for the next notification.
                    // Because every LOGO LPF2 Hub has only one service and one characteristic, so they decided to multiplex this only channel.
                    var cb = _callbacks[(int)msg.PropertyType];
                    _callbacks[(int)msg.PropertyType] = null;
                    if (cb != null)
                    {
                        await cb(msg);
                    }
                }
                else
                {
                    await OnHubProperties(msg);
                }

                break;

            // case Message.MessageType.HubActions:
            //     break;
            // case Message.MessageType.HubAlerts:
            //     break;
            case Message.MessageType.HubAttachedIO:
                await OnAttachedIo(msg);

                break;

            // case Message.MessageType.GenericErrorMessage:
            //     break;
            // case Message.MessageType.HardwareNetworkCommands:
            //     break;
            // case Message.MessageType.FirmwareUpdateGoIntoBootMode:
            //     break;
            // case Message.MessageType.FirmwareUpdateLockMemory:
            //     break;
            // case Message.MessageType.FirmwareUpdateLockStatusReport:
            //     break;
            // case Message.MessageType.FirmwareLockStatus:
            //     break;
            // case Message.MessageType.PortInformationRequest:
            //     break;
            // case Message.MessageType.PortModeInformationRequest:
            //     break;
            // case Message.MessageType.PortInputFormatSetupSingle:
            //     break;
            // case Message.MessageType.PortInputFormatSetupCombined:
            //     break;
            case Message.MessageType.PortInformation:
                await OnPortInformation(msg);

                break;

            case Message.MessageType.PortModeInformation:
                await OnPortModeInformation(msg);

                break;

            case Message.MessageType.PortValueSingle:
                await OnSensorMessage(msg);

                break;

            // case Message.MessageType.PortValueCombined:
            //     break;
            // case Message.MessageType.PortInputFormatSingle:
            //     break;
            // case Message.MessageType.PortInputFormatCombined:
            //     break;
            // case Message.MessageType.VirtualPortSetup:
            //     break;
            // case Message.MessageType.PortOutputCommand:
            //     break;
            case Message.MessageType.PortOutputCommandFeedback:
                await OnPortAction(msg);

                break;
            }

            await OnMessage(msg);
        }