Partilhar via


Cenário GATT: controlar a apresentação de dados do dispositivo LE Bluetooth (HTML)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]

Os dispositivos LE Bluetooth de um aplicativo da Windows Store podem exibir um serviço de bateria que fornece o nível de bateria atual ao usuário. O serviço de bateria inclui um descritor PresentationFormat opcional que permite alguma flexibilidade na interpretação dos dados de nível de bateria. Esse cenário fornece exemplo de um aplicativo que funciona com esse dispositivo e utiliza a propriedade PresentationFormats para formatar um valor característico, antes de apresentá-lo ao usuário.

function initialize() {
    var Gatt = Windows.Devices.Bluetooth.GenericAttributeProfile;
    Windows.Devices.Enumeration.DeviceInformation.findAllAsync(
        Gatt.GattDeviceService.getDeviceSelectorFromUuid(
            Gatt.GattServiceUuids.battery),
        null).done(function (batteryServices) {
          Gatt.GattDeviceService.fromIdAsync(batteryServices[0].id)
            .done(function (firstBatteryService) {
              var batteryLevelCharacteristic = firstBatteryService
                    .getCharacteristics(
                        Gatt.GattCharacteristicUuids.batteryLevel)[0];

                batteryLevelCharacteristic.onvaluechanged =
                    function (args) {
                        var levelData = Windows.Storage.Streams.DataReader
                            .fromBuffer(args.characteristicValue)
                            .readByte();

                        // Retrieve the GattCharacteristic sender
                        var sender = args.target;

                        // if the sender Characteristic has a presentation
                        // format use that information to format the value
                        var levelValue;
                        if (args.target.presentationFormats.length > 0) {
                            levelValue = levelData *
                                Math.pow(
                                    10.0,
                                    args.target
                                        .presentationFormats[0].exponent);
                        } else {
                            levelValue = levelData;
                        }

                        outputDiv.innerText = levelValue.toString();
                    };

                batteryLevelCharacteristic
                    .writeClientCharacteristicConfigurationDescriptorAsync(
                    Gatt
                      .GattClientCharacteristicConfigurationDescriptorValue
                          .notify).done(function (status) {
                            if (Gatt.GattCommunicationStatus.unreachable ==
                                status) {
                              outputDiv.innerText =
                                  "Writing to the device failed !";
                            }
                          });
            });
        });
}