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); } }
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); } } }
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}."); } }
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}."); } }
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); } }
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); }