mirror of
https://github.com/classilla/tenfourfox.git
synced 2025-01-01 06:33:22 +00:00
997 lines
40 KiB
C++
997 lines
40 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef mozilla_dom_bluetooth_bluedroid_BluetoothDaemonGattInterface_h
|
|
#define mozilla_dom_bluetooth_bluedroid_BluetoothDaemonGattInterface_h
|
|
|
|
#include "BluetoothDaemonHelpers.h"
|
|
#include "BluetoothInterface.h"
|
|
#include "mozilla/ipc/DaemonRunnables.h"
|
|
|
|
BEGIN_BLUETOOTH_NAMESPACE
|
|
|
|
using mozilla::ipc::DaemonSocketPDU;
|
|
using mozilla::ipc::DaemonSocketPDUHeader;
|
|
using mozilla::ipc::DaemonSocketResultHandler;
|
|
|
|
class BluetoothDaemonGattModule
|
|
{
|
|
public:
|
|
enum {
|
|
SERVICE_ID = 0x09
|
|
};
|
|
|
|
enum {
|
|
OPCODE_ERROR = 0x00,
|
|
OPCODE_CLIENT_REGISTER = 0x01,
|
|
OPCODE_CLIENT_UNREGISTER = 0x02,
|
|
OPCODE_CLIENT_SCAN = 0x03,
|
|
OPCODE_CLIENT_CONNECT = 0x04,
|
|
OPCODE_CLIENT_DISCONNECT = 0x05,
|
|
OPCODE_CLIENT_LISTEN =0x06,
|
|
OPCODE_CLIENT_REFRESH = 0x07,
|
|
OPCODE_CLIENT_SEARCH_SERVICE = 0x08,
|
|
OPCODE_CLIENT_GET_INCLUDED_SERVICE = 0x09,
|
|
OPCODE_CLIENT_GET_CHARACTERISTIC = 0x0a,
|
|
OPCODE_CLIENT_GET_DESCRIPTOR = 0x0b,
|
|
OPCODE_CLIENT_READ_CHARACTERISTIC = 0x0c,
|
|
OPCODE_CLIENT_WRITE_CHARACTERISTIC = 0x0d,
|
|
OPCODE_CLIENT_READ_DESCRIPTOR = 0x0e,
|
|
OPCODE_CLIENT_WRITE_DESCRIPTOR = 0x0f,
|
|
OPCODE_CLIENT_EXECUTE_WRITE = 0x10,
|
|
OPCODE_CLIENT_REGISTER_NOTIFICATION = 0x11,
|
|
OPCODE_CLIENT_DEREGISTER_NOTIFICATION = 0x12,
|
|
OPCODE_CLIENT_READ_REMOTE_RSSI = 0x13,
|
|
OPCODE_CLIENT_GET_DEVICE_TYPE = 0x14,
|
|
OPCODE_CLIENT_SET_ADV_DATA = 0x15,
|
|
OPCODE_CLIENT_TEST_COMMAND = 0x16,
|
|
OPCODE_SERVER_REGISTER = 0x17,
|
|
OPCODE_SERVER_UNREGISTER = 0x18,
|
|
OPCODE_SERVER_CONNECT_PERIPHERAL = 0x19,
|
|
OPCODE_SERVER_DISCONNECT_PERIPHERAL = 0x1a,
|
|
OPCODE_SERVER_ADD_SERVICE = 0x1b,
|
|
OPCODE_SERVER_ADD_INCLUDED_SERVICE = 0x1c,
|
|
OPCODE_SERVER_ADD_CHARACTERISTIC = 0x1d,
|
|
OPCODE_SERVER_ADD_DESCRIPTOR = 0x1e,
|
|
OPCODE_SERVER_START_SERVICE = 0x1f,
|
|
OPCODE_SERVER_STOP_SERVICE = 0x20,
|
|
OPCODE_SERVER_DELETE_SERVICE = 0x21,
|
|
OPCODE_SERVER_SEND_INDICATION = 0x22,
|
|
OPCODE_SERVER_SEND_RESPONSE = 0x23
|
|
// TODO: Add L support
|
|
};
|
|
|
|
virtual nsresult Send(DaemonSocketPDU* aPDU,
|
|
DaemonSocketResultHandler* aRes) = 0;
|
|
|
|
void SetNotificationHandler(
|
|
BluetoothGattNotificationHandler* aNotificationHandler);
|
|
|
|
//
|
|
// Commands
|
|
//
|
|
|
|
/* Register / Unregister */
|
|
nsresult ClientRegisterCmd(const BluetoothUuid& aUuid,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ClientUnregisterCmd(int aClientIf,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
/* Start / Stop LE Scan */
|
|
nsresult ClientScanCmd(int aClientIf, bool aStart,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
/* Connect / Disconnect */
|
|
nsresult ClientConnectCmd(int aClientIf,
|
|
const BluetoothAddress& aBdAddr,
|
|
bool aIsDirect, /* auto connect */
|
|
BluetoothTransport aTransport,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ClientDisconnectCmd(int aClientIf,
|
|
const BluetoothAddress& aBdAddr,
|
|
int aConnId,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
/* Start / Stop advertisements to listen for incoming connections */
|
|
nsresult ClientListenCmd(int aClientIf,
|
|
bool aIsStart,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
/* Clear the attribute cache for a given device*/
|
|
nsresult ClientRefreshCmd(int aClientIf,
|
|
const BluetoothAddress& aBdAddr,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
/* Enumerate Attributes */
|
|
nsresult ClientSearchServiceCmd(int aConnId,
|
|
bool aFiltered,
|
|
const BluetoothUuid& aUuid,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ClientGetIncludedServiceCmd(
|
|
int aConnId,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
bool aContinuation,
|
|
const BluetoothGattServiceId& aStartServiceId,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ClientGetCharacteristicCmd(int aConnId,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
bool aContinuation,
|
|
const BluetoothGattId& aStartCharId,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ClientGetDescriptorCmd(int aConnId,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
const BluetoothGattId& aCharId,
|
|
bool aContinuation,
|
|
const BluetoothGattId& aDescriptorId,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
/* Read / Write An Attribute */
|
|
nsresult ClientReadCharacteristicCmd(
|
|
int aConnId,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
const BluetoothGattId& aCharId,
|
|
BluetoothGattAuthReq aAuthReq,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ClientWriteCharacteristicCmd(
|
|
int aConnId,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
const BluetoothGattId& aCharId,
|
|
BluetoothGattWriteType aWriteType,
|
|
int aLength,
|
|
BluetoothGattAuthReq aAuthReq,
|
|
char* aValue,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ClientReadDescriptorCmd(int aConnId,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
const BluetoothGattId& aCharId,
|
|
const BluetoothGattId& aDescriptorId,
|
|
BluetoothGattAuthReq aAuthReq,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ClientWriteDescriptorCmd(int aConnId,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
const BluetoothGattId& aCharId,
|
|
const BluetoothGattId& aDescriptorId,
|
|
BluetoothGattWriteType aWriteType,
|
|
int aLength,
|
|
BluetoothGattAuthReq aAuthReq,
|
|
char* aValue,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
/* Execute / Abort Prepared Write*/
|
|
nsresult ClientExecuteWriteCmd(int aConnId,
|
|
int aIsExecute,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
/* Register / Deregister Characteristic Notifications or Indications */
|
|
nsresult ClientRegisterNotificationCmd(
|
|
int aClientIf,
|
|
const BluetoothAddress& aBdAddr,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
const BluetoothGattId& aCharId,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ClientDeregisterNotificationCmd(
|
|
int aClientIf,
|
|
const BluetoothAddress& aBdAddr,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
const BluetoothGattId& aCharId,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ClientReadRemoteRssiCmd(int aClientIf,
|
|
const BluetoothAddress& aBdAddr,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ClientGetDeviceTypeCmd(const BluetoothAddress& aBdAddr,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
/* Set advertising data or scan response data */
|
|
nsresult ClientSetAdvDataCmd(int aServerIf,
|
|
bool aIsScanRsp,
|
|
bool aIsNameIncluded,
|
|
bool aIsTxPowerIncluded,
|
|
int aMinInterval,
|
|
int aMaxInterval,
|
|
int aApperance,
|
|
uint16_t aManufacturerLen,
|
|
char* aManufacturerData,
|
|
uint16_t aServiceDataLen,
|
|
char* aServiceData,
|
|
uint16_t aServiceUUIDLen,
|
|
char* aServiceUUID,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ClientTestCommandCmd(int aCommand,
|
|
const BluetoothGattTestParam& aTestParam,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
/* Register / Unregister */
|
|
nsresult ServerRegisterCmd(const BluetoothUuid& aUuid,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ServerUnregisterCmd(int aServerIf,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
/* Connect / Disconnect */
|
|
nsresult ServerConnectPeripheralCmd(int aServerIf,
|
|
const BluetoothAddress& aBdAddr,
|
|
bool aIsDirect,
|
|
BluetoothTransport aTransport,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ServerDisconnectPeripheralCmd(
|
|
int aServerIf,
|
|
const BluetoothAddress& aBdAddr,
|
|
int aConnId,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
/* Add a services / a characteristic / a descriptor */
|
|
nsresult ServerAddServiceCmd(int aServerIf,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
uint16_t aNumHandles,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ServerAddIncludedServiceCmd(
|
|
int aServerIf,
|
|
const BluetoothAttributeHandle& aServiceHandle,
|
|
const BluetoothAttributeHandle& aIncludedServiceHandle,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ServerAddCharacteristicCmd(
|
|
int aServerIf,
|
|
const BluetoothAttributeHandle& aServiceHandle,
|
|
const BluetoothUuid& aUuid,
|
|
BluetoothGattCharProp aProperties,
|
|
BluetoothGattAttrPerm aPermissions,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ServerAddDescriptorCmd(
|
|
int aServerIf,
|
|
const BluetoothAttributeHandle& aServiceHandle,
|
|
const BluetoothUuid& aUuid,
|
|
BluetoothGattAttrPerm aPermissions,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
/* Start / Stop / Delete a service */
|
|
nsresult ServerStartServiceCmd(int aServerIf,
|
|
const BluetoothAttributeHandle& aServiceHandle,
|
|
BluetoothTransport aTransport,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ServerStopServiceCmd(int aServerIf,
|
|
const BluetoothAttributeHandle& aServiceHandle,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
nsresult ServerDeleteServiceCmd(
|
|
int aServerIf,
|
|
const BluetoothAttributeHandle& aServiceHandle,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
/* Send an indication or a notification */
|
|
nsresult ServerSendIndicationCmd(
|
|
int aServerIf,
|
|
const BluetoothAttributeHandle& aCharacteristicHandle,
|
|
int aConnId,
|
|
int aLength,
|
|
bool aConfirm,
|
|
uint8_t* aValue,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
/* Send a response for an incoming indication */
|
|
nsresult ServerSendResponseCmd(int aConnId,
|
|
int aTransId,
|
|
uint16_t aStatus,
|
|
const BluetoothGattResponse& aResponse,
|
|
BluetoothGattResultHandler* aRes);
|
|
// TODO: Add L support
|
|
|
|
protected:
|
|
void HandleSvc(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU, DaemonSocketResultHandler* aRes);
|
|
|
|
//
|
|
// Responses
|
|
//
|
|
|
|
typedef mozilla::ipc::DaemonResultRunnable0<
|
|
BluetoothGattResultHandler, void>
|
|
ResultRunnable;
|
|
|
|
typedef mozilla::ipc::DaemonResultRunnable1<
|
|
BluetoothGattResultHandler, void,
|
|
BluetoothTypeOfDevice, BluetoothTypeOfDevice>
|
|
ClientGetDeviceTypeResultRunnable;
|
|
|
|
typedef mozilla::ipc::DaemonResultRunnable1<
|
|
BluetoothGattResultHandler, void, BluetoothStatus, BluetoothStatus>
|
|
ErrorRunnable;
|
|
|
|
void ErrorRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientRegisterRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientUnregisterRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientScanRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientConnectRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientDisconnectRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientListenRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientRefreshRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientSearchServiceRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientGetIncludedServiceRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientGetCharacteristicRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientGetDescriptorRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientReadCharacteristicRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientWriteCharacteristicRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientReadDescriptorRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientWriteDescriptorRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientExecuteWriteRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientRegisterNotificationRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientDeregisterNotificationRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientReadRemoteRssiRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientGetDeviceTypeRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientSetAdvDataRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ClientTestCommandRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ServerRegisterRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ServerUnregisterRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ServerConnectPeripheralRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ServerDisconnectPeripheralRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ServerAddServiceRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ServerAddIncludedServiceRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ServerAddCharacteristicRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ServerAddDescriptorRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ServerStartServiceRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ServerStopServiceRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ServerDeleteServiceRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ServerSendIndicationRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
void ServerSendResponseRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
BluetoothGattResultHandler* aRes);
|
|
|
|
// TODO: Add L support
|
|
|
|
void HandleRsp(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
DaemonSocketResultHandler* aRes);
|
|
|
|
//
|
|
// Notifications
|
|
//
|
|
|
|
class NotificationHandlerWrapper;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable3<
|
|
NotificationHandlerWrapper, void,
|
|
BluetoothGattStatus, int, BluetoothUuid,
|
|
BluetoothGattStatus, int, const BluetoothUuid&>
|
|
ClientRegisterNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable3<
|
|
NotificationHandlerWrapper, void,
|
|
BluetoothAddress, int, BluetoothGattAdvData,
|
|
const BluetoothAddress&, int, const BluetoothGattAdvData&>
|
|
ClientScanResultNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable4<
|
|
NotificationHandlerWrapper, void,
|
|
int, BluetoothGattStatus, int, BluetoothAddress,
|
|
int, BluetoothGattStatus, int, const BluetoothAddress&>
|
|
ClientConnectNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable4<
|
|
NotificationHandlerWrapper, void,
|
|
int, BluetoothGattStatus, int, BluetoothAddress,
|
|
int, BluetoothGattStatus, int, const BluetoothAddress&>
|
|
ClientDisconnectNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable2<
|
|
NotificationHandlerWrapper, void,
|
|
int, BluetoothGattStatus>
|
|
ClientSearchCompleteNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable2<
|
|
NotificationHandlerWrapper, void,
|
|
int, BluetoothGattServiceId,
|
|
int, const BluetoothGattServiceId&>
|
|
ClientSearchResultNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable5<
|
|
NotificationHandlerWrapper, void,
|
|
int, BluetoothGattStatus, BluetoothGattServiceId,
|
|
BluetoothGattId, BluetoothGattCharProp,
|
|
int, BluetoothGattStatus, const BluetoothGattServiceId&,
|
|
const BluetoothGattId&, const BluetoothGattCharProp&>
|
|
ClientGetCharacteristicNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable5<
|
|
NotificationHandlerWrapper, void,
|
|
int, BluetoothGattStatus, BluetoothGattServiceId,
|
|
BluetoothGattId, BluetoothGattId,
|
|
int, BluetoothGattStatus, const BluetoothGattServiceId&,
|
|
const BluetoothGattId&, const BluetoothGattId&>
|
|
ClientGetDescriptorNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable4<
|
|
NotificationHandlerWrapper, void,
|
|
int, BluetoothGattStatus, BluetoothGattServiceId, BluetoothGattServiceId,
|
|
int, BluetoothGattStatus, const BluetoothGattServiceId&,
|
|
const BluetoothGattServiceId&>
|
|
ClientGetIncludedServiceNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable5<
|
|
NotificationHandlerWrapper, void,
|
|
int, int, BluetoothGattStatus,
|
|
BluetoothGattServiceId, BluetoothGattId,
|
|
int, int, BluetoothGattStatus,
|
|
const BluetoothGattServiceId&, const BluetoothGattId&>
|
|
ClientRegisterNotificationNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable2<
|
|
NotificationHandlerWrapper, void,
|
|
int, BluetoothGattNotifyParam,
|
|
int, const BluetoothGattNotifyParam&>
|
|
ClientNotifyNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable3<
|
|
NotificationHandlerWrapper, void,
|
|
int, BluetoothGattStatus, BluetoothGattReadParam,
|
|
int, BluetoothGattStatus, const BluetoothGattReadParam&>
|
|
ClientReadCharacteristicNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable3<
|
|
NotificationHandlerWrapper, void,
|
|
int, BluetoothGattStatus, BluetoothGattWriteParam,
|
|
int, BluetoothGattStatus, const BluetoothGattWriteParam&>
|
|
ClientWriteCharacteristicNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable3<
|
|
NotificationHandlerWrapper, void,
|
|
int, BluetoothGattStatus, BluetoothGattReadParam,
|
|
int, BluetoothGattStatus, const BluetoothGattReadParam&>
|
|
ClientReadDescriptorNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable3<
|
|
NotificationHandlerWrapper, void,
|
|
int, BluetoothGattStatus, BluetoothGattWriteParam,
|
|
int, BluetoothGattStatus, const BluetoothGattWriteParam&>
|
|
ClientWriteDescriptorNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable2<
|
|
NotificationHandlerWrapper, void,
|
|
int, BluetoothGattStatus>
|
|
ClientExecuteWriteNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable4<
|
|
NotificationHandlerWrapper, void,
|
|
int, BluetoothAddress, int, BluetoothGattStatus,
|
|
int, const BluetoothAddress&, int, BluetoothGattStatus>
|
|
ClientReadRemoteRssiNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable2<
|
|
NotificationHandlerWrapper, void,
|
|
BluetoothGattStatus, int>
|
|
ClientListenNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable3<
|
|
NotificationHandlerWrapper, void,
|
|
BluetoothGattStatus, int, BluetoothUuid,
|
|
BluetoothGattStatus, int, const BluetoothUuid&>
|
|
ServerRegisterNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable4<
|
|
NotificationHandlerWrapper, void,
|
|
int, int, bool, BluetoothAddress,
|
|
int, int, bool, const BluetoothAddress&>
|
|
ServerConnectionNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable4<
|
|
NotificationHandlerWrapper, void,
|
|
BluetoothGattStatus, int, BluetoothGattServiceId, BluetoothAttributeHandle,
|
|
BluetoothGattStatus, int, const BluetoothGattServiceId&,
|
|
const BluetoothAttributeHandle&>
|
|
ServerServiceAddedNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable4<
|
|
NotificationHandlerWrapper, void,
|
|
BluetoothGattStatus, int, BluetoothAttributeHandle,
|
|
BluetoothAttributeHandle,
|
|
BluetoothGattStatus, int, const BluetoothAttributeHandle&,
|
|
const BluetoothAttributeHandle&>
|
|
ServerIncludedServiceAddedNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable5<
|
|
NotificationHandlerWrapper, void,
|
|
BluetoothGattStatus, int, BluetoothUuid, BluetoothAttributeHandle,
|
|
BluetoothAttributeHandle,
|
|
BluetoothGattStatus, int, const BluetoothUuid&,
|
|
const BluetoothAttributeHandle&, const BluetoothAttributeHandle&>
|
|
ServerCharacteristicAddedNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable5<
|
|
NotificationHandlerWrapper, void,
|
|
BluetoothGattStatus, int, BluetoothUuid, BluetoothAttributeHandle,
|
|
BluetoothAttributeHandle,
|
|
BluetoothGattStatus, int, const BluetoothUuid&,
|
|
const BluetoothAttributeHandle&, const BluetoothAttributeHandle&>
|
|
ServerDescriptorAddedNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable3<
|
|
NotificationHandlerWrapper, void,
|
|
BluetoothGattStatus, int, BluetoothAttributeHandle,
|
|
BluetoothGattStatus, int, const BluetoothAttributeHandle&>
|
|
ServerServiceStartedNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable3<
|
|
NotificationHandlerWrapper, void,
|
|
BluetoothGattStatus, int, BluetoothAttributeHandle,
|
|
BluetoothGattStatus, int, const BluetoothAttributeHandle&>
|
|
ServerServiceStoppedNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable3<
|
|
NotificationHandlerWrapper, void,
|
|
BluetoothGattStatus, int, BluetoothAttributeHandle,
|
|
BluetoothGattStatus, int, const BluetoothAttributeHandle&>
|
|
ServerServiceDeletedNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable6<
|
|
NotificationHandlerWrapper, void,
|
|
int, int, BluetoothAddress, BluetoothAttributeHandle,
|
|
int, bool,
|
|
int, int, const BluetoothAddress&, const BluetoothAttributeHandle&,
|
|
int, bool>
|
|
ServerRequestReadNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable9<
|
|
NotificationHandlerWrapper, void,
|
|
int, int, BluetoothAddress, BluetoothAttributeHandle,
|
|
int, int, nsAutoArrayPtr<uint8_t>, bool, bool,
|
|
int, int, const BluetoothAddress&, const BluetoothAttributeHandle&,
|
|
int, int, const uint8_t*, bool, bool>
|
|
ServerRequestWriteNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable4<
|
|
NotificationHandlerWrapper, void,
|
|
int, int, BluetoothAddress, bool,
|
|
int, int, const BluetoothAddress&, bool>
|
|
ServerRequestExecuteWriteNotification;
|
|
|
|
typedef mozilla::ipc::DaemonNotificationRunnable2<
|
|
NotificationHandlerWrapper, void,
|
|
BluetoothGattStatus, int>
|
|
ServerResponseConfirmationNotification;
|
|
|
|
class ClientGetDeviceTypeInitOp;
|
|
class ClientScanResultInitOp;
|
|
class ServerConnectionInitOp;
|
|
class ServerRequestWriteInitOp;
|
|
class ServerCharacteristicAddedInitOp;
|
|
class ServerDescriptorAddedInitOp;
|
|
|
|
void ClientRegisterNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientScanResultNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientConnectNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientDisconnectNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientSearchCompleteNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientSearchResultNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientGetCharacteristicNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientGetDescriptorNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientGetIncludedServiceNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientRegisterNotificationNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientNotifyNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientReadCharacteristicNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientWriteCharacteristicNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientReadDescriptorNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientWriteDescriptorNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientExecuteWriteNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientReadRemoteRssiNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ClientListenNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ServerRegisterNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ServerConnectionNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ServerServiceAddedNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ServerIncludedServiceAddedNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ServerCharacteristicAddedNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ServerDescriptorAddedNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ServerServiceStartedNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ServerServiceStoppedNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ServerServiceDeletedNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ServerRequestReadNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ServerRequestWriteNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ServerRequestExecuteWriteNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
void ServerResponseConfirmationNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU);
|
|
|
|
// TODO: Add L support
|
|
|
|
void HandleNtf(const DaemonSocketPDUHeader& aHeader,
|
|
DaemonSocketPDU& aPDU,
|
|
DaemonSocketResultHandler* aRes);
|
|
|
|
static BluetoothGattNotificationHandler* sNotificationHandler;
|
|
};
|
|
|
|
class BluetoothDaemonGattInterface final
|
|
: public BluetoothGattInterface
|
|
{
|
|
class CleanupResultHandler;
|
|
class InitResultHandler;
|
|
|
|
public:
|
|
BluetoothDaemonGattInterface(BluetoothDaemonGattModule* aModule);
|
|
~BluetoothDaemonGattInterface();
|
|
|
|
void SetNotificationHandler(
|
|
BluetoothGattNotificationHandler* aNotificationHandler) override;
|
|
|
|
/* Register / Unregister */
|
|
void RegisterClient(const BluetoothUuid& aUuid,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
void UnregisterClient(int aClientIf,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
/* Start / Stop LE Scan */
|
|
void Scan(int aClientIf, bool aStart,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
/* Connect / Disconnect */
|
|
void Connect(int aClientIf,
|
|
const BluetoothAddress& aBdAddr,
|
|
bool aIsDirect, /* auto connect */
|
|
BluetoothTransport aTransport,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
void Disconnect(int aClientIf,
|
|
const BluetoothAddress& aBdAddr,
|
|
int aConnId,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
/* Start / Stop advertisements to listen for incoming connections */
|
|
void Listen(int aClientIf,
|
|
bool aIsStart,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
/* Clear the attribute cache for a given device*/
|
|
void Refresh(int aClientIf,
|
|
const BluetoothAddress& aBdAddr,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
/* Enumerate Attributes */
|
|
void SearchService(int aConnId,
|
|
bool aSearchAll,
|
|
const BluetoothUuid& aUuid,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
void GetIncludedService(int aConnId,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
bool aFirst,
|
|
const BluetoothGattServiceId& aStartServiceId,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
void GetCharacteristic(int aConnId,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
bool aFirst,
|
|
const BluetoothGattId& aStartCharId,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
void GetDescriptor(int aConnId,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
const BluetoothGattId& aCharId,
|
|
bool aFirst,
|
|
const BluetoothGattId& aDescriptorId,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
/* Read / Write An Attribute */
|
|
void ReadCharacteristic(int aConnId,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
const BluetoothGattId& aCharId,
|
|
BluetoothGattAuthReq aAuthReq,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
void WriteCharacteristic(int aConnId,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
const BluetoothGattId& aCharId,
|
|
BluetoothGattWriteType aWriteType,
|
|
BluetoothGattAuthReq aAuthReq,
|
|
const nsTArray<uint8_t>& aValue,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
void ReadDescriptor(int aConnId,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
const BluetoothGattId& aCharId,
|
|
const BluetoothGattId& aDescriptorId,
|
|
BluetoothGattAuthReq aAuthReq,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
void WriteDescriptor(int aConnId,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
const BluetoothGattId& aCharId,
|
|
const BluetoothGattId& aDescriptorId,
|
|
BluetoothGattWriteType aWriteType,
|
|
BluetoothGattAuthReq aAuthReq,
|
|
const nsTArray<uint8_t>& aValue,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
/* Execute / Abort Prepared Write*/
|
|
void ExecuteWrite(int aConnId,
|
|
int aIsExecute,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
|
|
/* Register / Deregister Characteristic Notifications or Indications */
|
|
void RegisterNotification(int aClientIf,
|
|
const BluetoothAddress& aBdAddr,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
const BluetoothGattId& aCharId,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
void DeregisterNotification(int aClientIf,
|
|
const BluetoothAddress& aBdAddr,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
const BluetoothGattId& aCharId,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
void ReadRemoteRssi(int aClientIf,
|
|
const BluetoothAddress& aBdAddr,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
void GetDeviceType(const BluetoothAddress& aBdAddr,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
/* Set advertising data or scan response data */
|
|
void SetAdvData(int aServerIf,
|
|
bool aIsScanRsp,
|
|
bool aIsNameIncluded,
|
|
bool aIsTxPowerIncluded,
|
|
int aMinInterval,
|
|
int aMaxInterval,
|
|
int aApperance,
|
|
uint16_t aManufacturerLen, char* aManufacturerData,
|
|
uint16_t aServiceDataLen, char* aServiceData,
|
|
uint16_t aServiceUuidLen, char* aServiceUuid,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
void TestCommand(int aCommand,
|
|
const BluetoothGattTestParam& aTestParam,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
/* Register / Unregister */
|
|
void RegisterServer(const BluetoothUuid& aUuid,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
void UnregisterServer(int aServerIf,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
/* Connect / Disconnect */
|
|
void ConnectPeripheral(int aServerIf,
|
|
const BluetoothAddress& aBdAddr,
|
|
bool aIsDirect, /* auto connect */
|
|
BluetoothTransport aTransport,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
void DisconnectPeripheral(int aServerIf,
|
|
const BluetoothAddress& aBdAddr,
|
|
int aConnId,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
/* Add a services / a characteristic / a descriptor */
|
|
void AddService(int aServerIf,
|
|
const BluetoothGattServiceId& aServiceId,
|
|
uint16_t aNumHandles,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
void AddIncludedService(int aServerIf,
|
|
const BluetoothAttributeHandle& aServiceHandle,
|
|
const BluetoothAttributeHandle& aIncludedServiceHandle,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
void AddCharacteristic(int aServerIf,
|
|
const BluetoothAttributeHandle& aServiceHandle,
|
|
const BluetoothUuid& aUuid,
|
|
BluetoothGattCharProp aProperties,
|
|
BluetoothGattAttrPerm aPermissions,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
void AddDescriptor(int aServerIf,
|
|
const BluetoothAttributeHandle& aServiceHandle,
|
|
const BluetoothUuid& aUuid,
|
|
BluetoothGattAttrPerm aPermissions,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
/* Start / Stop / Delete a service */
|
|
void StartService(int aServerIf,
|
|
const BluetoothAttributeHandle& aServiceHandle,
|
|
BluetoothTransport aTransport,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
void StopService(int aServerIf,
|
|
const BluetoothAttributeHandle& aServiceHandle,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
void DeleteService(int aServerIf,
|
|
const BluetoothAttributeHandle& aServiceHandle,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
/* Send an indication or a notification */
|
|
void SendIndication(
|
|
int aServerIf,
|
|
const BluetoothAttributeHandle& aCharacteristicHandle,
|
|
int aConnId,
|
|
const nsTArray<uint8_t>& aValue,
|
|
bool aConfirm, /* true: indication, false: notification */
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
/* Send a response for an incoming indication */
|
|
void SendResponse(int aConnId,
|
|
int aTransId,
|
|
uint16_t aStatus,
|
|
const BluetoothGattResponse& aResponse,
|
|
BluetoothGattResultHandler* aRes) override;
|
|
|
|
private:
|
|
void DispatchError(BluetoothGattResultHandler* aRes,
|
|
BluetoothStatus aStatus);
|
|
void DispatchError(BluetoothGattResultHandler* aRes, nsresult aRv);
|
|
|
|
BluetoothDaemonGattModule* mModule;
|
|
};
|
|
|
|
END_BLUETOOTH_NAMESPACE
|
|
|
|
#endif // mozilla_dom_bluetooth_bluedroid_BluetoothDaemonGattInterface_h
|