Cenário GATT: recuperar dados 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]
Um aplicativo da Windows Store consome dados de um dispositivo LE Bluetooth enquanto é executado em primeiro plano.
Nesse exemplo, o aplicativo da Windows Store usa medições de temperatura de um dispositivo LE Bluetooth que implementa o Serviço de Termômetro de Integridade do LE Bluetooth. Na rotina de inicialização do aplicativo, o aplicativo especifica que deseja ser notificado quando uma nova medição de temperatura estiver disponível. Ao registrar um manipulador de eventos para o evento "Valor característico do termômetro alterado", o aplicativo receberá notificações de evento de valor característico alterado enquanto estiver sendo executado em primeiro plano.
Observe que, quando o aplicativo está suspenso, ele deve liberar todos os recursos do dispositivo e, quando retomar, deve executar enumeração do dispositivo e inicialização novamente.
function convertTemperature(temperatureData)
{
// Read temperature data in IEEE 11703 floating point format
// temperatureData[0] contains flags about optional data - not used
var mantissa = ((temperatureData[3] << 16) |
(temperatureData[2] << 8) |
(temperatureData[1] << 0));
var exponent = temperatureData[4];
return mantissa * Math.pow(10.0, exponent);
}
function initialize() {
var Gatt = Windows.Devices.Bluetooth.GenericAttributeProfile;
Windows.Devices.Enumeration.DeviceInformation.findAllAsync(
Gatt.GattDeviceService.getDeviceSelectorFromUuid(
Gatt.GattServiceUuids.healthThermometer),
null).done(function (devices) {
Gatt.GattDeviceService.fromIdAsync(devices[0].id)
.done(function (firstThermometerService) {
var thermometerCharacteristic = firstThermometerService
.getCharacteristics(
Gatt.GattCharacteristicUuids
.temperatureMeasurement)[0];
thermometerCharacteristic.onvaluechanged =
function (args) {
var temperatureData = Uint8Array(
args.characteristicValue.length);
Windows.Storage.Streams.DataReader.fromBuffer(
args.characteristicValue)
.readBytes(temperatureData);
// Interpret the temperature value
var temperature =
convertTemperature(temperatureData);
document.getElementById("outputDiv").innerText =
temperature.toString();
};
thermometerCharacteristic
.writeClientCharacteristicConfigurationDescriptorAsync(
Gatt
.GattClientCharacteristicConfigurationDescriptorValue
.notify);
});
});
}