1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef BluetoothRemoteGATTCharacteristic_h
#define BluetoothRemoteGATTCharacteristic_h
#include "bindings/core/v8/ScriptWrappable.h"
#include "core/dom/ContextLifecycleObserver.h"
#include "core/dom/DOMArrayPiece.h"
#include "core/dom/DOMDataView.h"
#include "modules/EventTargetModules.h"
#include "modules/bluetooth/BluetoothRemoteGATTService.h"
#include "platform/heap/Handle.h"
#include "public/platform/modules/bluetooth/web_bluetooth.mojom-blink.h"
#include "wtf/text/WTFString.h"
#include <memory>
namespace blink {
class BluetoothCharacteristicProperties;
class BluetoothDevice;
class ExecutionContext;
class ScriptPromise;
class ScriptState;
// BluetoothRemoteGATTCharacteristic represents a GATT Characteristic, which is
// a basic data element that provides further information about a peripheral's
// service.
//
// Callbacks providing WebBluetoothRemoteGATTCharacteristicInit objects are
// handled by CallbackPromiseAdapter templatized with this class. See this
// class's "Interface required by CallbackPromiseAdapter" section and the
// CallbackPromiseAdapter class comments.
class BluetoothRemoteGATTCharacteristic final
: public EventTargetWithInlineData,
public ContextLifecycleObserver {
USING_PRE_FINALIZER(BluetoothRemoteGATTCharacteristic, dispose);
DEFINE_WRAPPERTYPEINFO();
USING_GARBAGE_COLLECTED_MIXIN(BluetoothRemoteGATTCharacteristic);
public:
explicit BluetoothRemoteGATTCharacteristic(
ExecutionContext*,
mojom::blink::WebBluetoothRemoteGATTCharacteristicPtr,
BluetoothRemoteGATTService*,
BluetoothDevice*);
static BluetoothRemoteGATTCharacteristic* create(
ExecutionContext*,
mojom::blink::WebBluetoothRemoteGATTCharacteristicPtr,
BluetoothRemoteGATTService*,
BluetoothDevice*);
// Save value.
void setValue(DOMDataView*);
void dispatchCharacteristicValueChanged(const Vector<uint8_t>& value);
// ContextLifecycleObserver interface.
void contextDestroyed(ExecutionContext*) override;
// USING_PRE_FINALIZER interface.
// Called before the object gets garbage collected.
void dispose();
// Notify our embedder that we should stop any notifications.
// The function only notifies the embedder once.
void notifyCharacteristicObjectRemoved();
// EventTarget methods:
const AtomicString& interfaceName() const override;
ExecutionContext* getExecutionContext() const;
// Interface required by garbage collection.
DECLARE_VIRTUAL_TRACE();
// IDL exposed interface:
BluetoothRemoteGATTService* service() { return m_service; }
String uuid() { return m_characteristic->uuid; }
BluetoothCharacteristicProperties* properties() { return m_properties; }
DOMDataView* value() const { return m_value; }
ScriptPromise getDescriptor(ScriptState*,
const StringOrUnsignedLong& descriptor,
ExceptionState&);
ScriptPromise getDescriptors(ScriptState*, ExceptionState&);
ScriptPromise getDescriptors(ScriptState*,
const StringOrUnsignedLong& descriptor,
ExceptionState&);
ScriptPromise readValue(ScriptState*);
ScriptPromise writeValue(ScriptState*, const DOMArrayPiece&);
ScriptPromise startNotifications(ScriptState*);
ScriptPromise stopNotifications(ScriptState*);
DEFINE_ATTRIBUTE_EVENT_LISTENER(characteristicvaluechanged);
protected:
// EventTarget overrides.
void addedEventListener(const AtomicString& eventType,
RegisteredEventListener&) override;
private:
friend class BluetoothRemoteGATTDescriptor;
BluetoothRemoteGATTServer* getGatt() { return m_service->device()->gatt(); }
void ReadValueCallback(ScriptPromiseResolver*,
mojom::blink::WebBluetoothResult,
const Optional<Vector<uint8_t>>& value);
void WriteValueCallback(ScriptPromiseResolver*,
const Vector<uint8_t>& value,
mojom::blink::WebBluetoothResult);
void NotificationsCallback(ScriptPromiseResolver*,
mojom::blink::WebBluetoothResult);
ScriptPromise getDescriptorsImpl(ScriptState*,
mojom::blink::WebBluetoothGATTQueryQuantity,
const String& descriptorUUID = String());
void GetDescriptorsCallback(
const String& characteristicInstanceId,
mojom::blink::WebBluetoothGATTQueryQuantity,
ScriptPromiseResolver*,
mojom::blink::WebBluetoothResult,
Optional<Vector<mojom::blink::WebBluetoothRemoteGATTDescriptorPtr>>
descriptors);
mojom::blink::WebBluetoothRemoteGATTCharacteristicPtr m_characteristic;
Member<BluetoothRemoteGATTService> m_service;
bool m_stopped;
Member<BluetoothCharacteristicProperties> m_properties;
Member<DOMDataView> m_value;
Member<BluetoothDevice> m_device;
};
} // namespace blink
#endif // BluetoothRemoteGATTCharacteristic_h
|