gecko/dom/bluetooth/common/BluetoothInterface.h
Thomas Zimmermann baa12dc8d8 Bug 1211948: Register Bluetooth Handsfree module in Handsfree manager, r=btian
This patch moves the code for registering and unregistering the
Handsfree backend module into the Handsfree manager. The respective
code in the backend itself has been removed.

The new design allows for a strict separation between Setup module
and Handsfree module.
2015-10-16 15:20:35 +02:00

1132 lines
39 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_BluetoothInterface_h
#define mozilla_dom_bluetooth_BluetoothInterface_h
#include "BluetoothCommon.h"
#include "mozilla/dom/bluetooth/BluetoothTypes.h"
#include "mozilla/ipc/DaemonSocketMessageHandlers.h"
BEGIN_BLUETOOTH_NAMESPACE
//
// Setup Interface
//
class BluetoothSetupResultHandler
: public mozilla::ipc::DaemonSocketResultHandler
{
public:
virtual void OnError(BluetoothStatus aStatus);
virtual void RegisterModule();
virtual void UnregisterModule();
virtual void Configuration();
protected:
virtual ~BluetoothSetupResultHandler() { }
};
class BluetoothSetupInterface
{
public:
virtual void RegisterModule(BluetoothSetupServiceId aId,
uint8_t aMode,
uint32_t aMaxNumClients,
BluetoothSetupResultHandler* aRes) = 0;
virtual void UnregisterModule(BluetoothSetupServiceId aId,
BluetoothSetupResultHandler* aRes) = 0;
virtual void Configuration(const BluetoothConfigurationParameter* aParam,
uint8_t aLen,
BluetoothSetupResultHandler* aRes) = 0;
protected:
virtual ~BluetoothSetupInterface();
};
//
// Socket Interface
//
class BluetoothSocketResultHandler
: public mozilla::ipc::DaemonSocketResultHandler
{
public:
virtual void OnError(BluetoothStatus aStatus);
virtual void Listen(int aSockFd);
virtual void Connect(int aSockFd, const BluetoothAddress& aBdAddress,
int aConnectionState);
virtual void Accept(int aSockFd, const BluetoothAddress& aBdAddress,
int aConnectionState);
protected:
virtual ~BluetoothSocketResultHandler() { }
};
class BluetoothSocketInterface
{
public:
// Init and Cleanup is handled by BluetoothInterface
virtual void Listen(BluetoothSocketType aType,
const BluetoothServiceName& aServiceName,
const BluetoothUuid& aServiceUuid,
int aChannel, bool aEncrypt, bool aAuth,
BluetoothSocketResultHandler* aRes) = 0;
virtual void Connect(const BluetoothAddress& aBdAddr,
BluetoothSocketType aType,
const BluetoothUuid& aServiceUuid,
int aChannel, bool aEncrypt, bool aAuth,
BluetoothSocketResultHandler* aRes) = 0;
virtual void Accept(int aFd, BluetoothSocketResultHandler* aRes) = 0;
virtual void Close(BluetoothSocketResultHandler* aRes) = 0;
protected:
virtual ~BluetoothSocketInterface();
};
//
// Handsfree Interface
//
class BluetoothHandsfreeNotificationHandler
{
public:
virtual void
ConnectionStateNotification(BluetoothHandsfreeConnectionState aState,
const BluetoothAddress& aBdAddr);
virtual void
AudioStateNotification(BluetoothHandsfreeAudioState aState,
const BluetoothAddress& aBdAddr);
virtual void
VoiceRecognitionNotification(BluetoothHandsfreeVoiceRecognitionState aState,
const BluetoothAddress& aBdAddr);
virtual void
AnswerCallNotification(const BluetoothAddress& aBdAddr);
virtual void
HangupCallNotification(const BluetoothAddress& aBdAddr);
virtual void
VolumeNotification(BluetoothHandsfreeVolumeType aType,
int aVolume,
const BluetoothAddress& aBdAddr);
virtual void
DialCallNotification(const nsAString& aNumber,
const BluetoothAddress& aBdAddr);
virtual void
DtmfNotification(char aDtmf,
const BluetoothAddress& aBdAddr);
virtual void
NRECNotification(BluetoothHandsfreeNRECState aNrec,
const BluetoothAddress& aBdAddr);
virtual void
WbsNotification(BluetoothHandsfreeWbsConfig aWbs,
const BluetoothAddress& aBdAddr);
virtual void
CallHoldNotification(BluetoothHandsfreeCallHoldType aChld,
const BluetoothAddress& aBdAddr);
virtual void
CnumNotification(const BluetoothAddress& aBdAddr);
virtual void
CindNotification(const BluetoothAddress& aBdAddr);
virtual void
CopsNotification(const BluetoothAddress& aBdAddr);
virtual void
ClccNotification(const BluetoothAddress& aBdAddr);
virtual void
UnknownAtNotification(const nsACString& aAtString,
const BluetoothAddress& aBdAddr);
virtual void
KeyPressedNotification(const BluetoothAddress& aBdAddr);
protected:
BluetoothHandsfreeNotificationHandler();
virtual ~BluetoothHandsfreeNotificationHandler();
};
class BluetoothHandsfreeResultHandler
: public mozilla::ipc::DaemonSocketResultHandler
{
public:
virtual void OnError(BluetoothStatus aStatus);
virtual void Connect();
virtual void Disconnect();
virtual void ConnectAudio();
virtual void DisconnectAudio();
virtual void StartVoiceRecognition();
virtual void StopVoiceRecognition();
virtual void VolumeControl();
virtual void DeviceStatusNotification();
virtual void CopsResponse();
virtual void CindResponse();
virtual void FormattedAtResponse();
virtual void AtResponse();
virtual void ClccResponse();
virtual void PhoneStateChange();
virtual void ConfigureWbs();
protected:
virtual ~BluetoothHandsfreeResultHandler() { }
};
class BluetoothHandsfreeInterface
{
public:
virtual void SetNotificationHandler(
BluetoothHandsfreeNotificationHandler* aNotificationHandler) = 0;
/* Connect / Disconnect */
virtual void Connect(const BluetoothAddress& aBdAddr,
BluetoothHandsfreeResultHandler* aRes) = 0;
virtual void Disconnect(const BluetoothAddress& aBdAddr,
BluetoothHandsfreeResultHandler* aRes) = 0;
virtual void ConnectAudio(const BluetoothAddress& aBdAddr,
BluetoothHandsfreeResultHandler* aRes) = 0;
virtual void DisconnectAudio(const BluetoothAddress& aBdAddr,
BluetoothHandsfreeResultHandler* aRes) = 0;
/* Voice Recognition */
virtual void StartVoiceRecognition(const BluetoothAddress& aBdAddr,
BluetoothHandsfreeResultHandler* aRes) = 0;
virtual void StopVoiceRecognition(const BluetoothAddress& aBdAddr,
BluetoothHandsfreeResultHandler* aRes) = 0;
/* Volume */
virtual void VolumeControl(BluetoothHandsfreeVolumeType aType, int aVolume,
const BluetoothAddress& aBdAddr,
BluetoothHandsfreeResultHandler* aRes) = 0;
/* Device status */
virtual void DeviceStatusNotification(
BluetoothHandsfreeNetworkState aNtkState,
BluetoothHandsfreeServiceType aSvcType,
int aSignal, int aBattChg, BluetoothHandsfreeResultHandler* aRes) = 0;
/* Responses */
virtual void CopsResponse(const char* aCops, const BluetoothAddress& aBdAddr,
BluetoothHandsfreeResultHandler* aRes) = 0;
virtual void CindResponse(int aSvc, int aNumActive, int aNumHeld,
BluetoothHandsfreeCallState aCallSetupState,
int aSignal, int aRoam, int aBattChg,
const BluetoothAddress& aBdAddr,
BluetoothHandsfreeResultHandler* aRes) = 0;
virtual void FormattedAtResponse(const char* aRsp,
const BluetoothAddress& aBdAddr,
BluetoothHandsfreeResultHandler* aRes) = 0;
virtual void AtResponse(BluetoothHandsfreeAtResponse aResponseCode,
int aErrorCode, const BluetoothAddress& aBdAddr,
BluetoothHandsfreeResultHandler* aRes) = 0;
virtual void ClccResponse(int aIndex, BluetoothHandsfreeCallDirection aDir,
BluetoothHandsfreeCallState aState,
BluetoothHandsfreeCallMode aMode,
BluetoothHandsfreeCallMptyType aMpty,
const nsAString& aNumber,
BluetoothHandsfreeCallAddressType aType,
const BluetoothAddress& aBdAddr,
BluetoothHandsfreeResultHandler* aRes) = 0;
/* Phone State */
virtual void PhoneStateChange(int aNumActive, int aNumHeld,
BluetoothHandsfreeCallState aCallSetupState,
const nsAString& aNumber,
BluetoothHandsfreeCallAddressType aType,
BluetoothHandsfreeResultHandler* aRes) = 0;
/* Wide Band Speech */
virtual void ConfigureWbs(const BluetoothAddress& aBdAddr,
BluetoothHandsfreeWbsConfig aConfig,
BluetoothHandsfreeResultHandler* aRes) = 0;
protected:
BluetoothHandsfreeInterface();
virtual ~BluetoothHandsfreeInterface();
};
//
// Bluetooth Advanced Audio Interface
//
class BluetoothA2dpNotificationHandler
{
public:
virtual void
ConnectionStateNotification(BluetoothA2dpConnectionState aState,
const BluetoothAddress& aBdAddr);
virtual void
AudioStateNotification(BluetoothA2dpAudioState aState,
const BluetoothAddress& aBdAddr);
virtual void
AudioConfigNotification(const BluetoothAddress& aBdAddr,
uint32_t aSampleRate,
uint8_t aChannelCount);
protected:
BluetoothA2dpNotificationHandler();
virtual ~BluetoothA2dpNotificationHandler();
};
class BluetoothA2dpResultHandler
: public mozilla::ipc::DaemonSocketResultHandler
{
public:
virtual void OnError(BluetoothStatus aStatus);
virtual void Connect();
virtual void Disconnect();
protected:
virtual ~BluetoothA2dpResultHandler() { }
};
class BluetoothA2dpInterface
{
public:
virtual void SetNotificationHandler(
BluetoothA2dpNotificationHandler* aNotificationHandler) = 0;
virtual void Connect(const BluetoothAddress& aBdAddr,
BluetoothA2dpResultHandler* aRes) = 0;
virtual void Disconnect(const BluetoothAddress& aBdAddr,
BluetoothA2dpResultHandler* aRes) = 0;
protected:
BluetoothA2dpInterface();
virtual ~BluetoothA2dpInterface();
};
//
// Bluetooth AVRCP Interface
//
class BluetoothAvrcpNotificationHandler
{
public:
virtual void
GetPlayStatusNotification();
virtual void
ListPlayerAppAttrNotification();
virtual void
ListPlayerAppValuesNotification(BluetoothAvrcpPlayerAttribute aAttrId);
virtual void
GetPlayerAppValueNotification(uint8_t aNumAttrs,
const BluetoothAvrcpPlayerAttribute* aAttrs);
virtual void
GetPlayerAppAttrsTextNotification(
uint8_t aNumAttrs, const BluetoothAvrcpPlayerAttribute* aAttrs);
virtual void
GetPlayerAppValuesTextNotification(uint8_t aAttrId, uint8_t aNumVals,
const uint8_t* aValues);
virtual void
SetPlayerAppValueNotification(
const BluetoothAvrcpPlayerSettings& aSettings);
virtual void
GetElementAttrNotification(uint8_t aNumAttrs,
const BluetoothAvrcpMediaAttribute* aAttrs);
virtual void
RegisterNotificationNotification(BluetoothAvrcpEvent aEvent,
uint32_t aParam);
virtual void
RemoteFeatureNotification(const BluetoothAddress& aBdAddr,
unsigned long aFeatures);
virtual void
VolumeChangeNotification(uint8_t aVolume, uint8_t aCType);
virtual void
PassthroughCmdNotification(int aId, int aKeyState);
protected:
BluetoothAvrcpNotificationHandler();
virtual ~BluetoothAvrcpNotificationHandler();
};
class BluetoothAvrcpResultHandler
: public mozilla::ipc::DaemonSocketResultHandler
{
public:
virtual void OnError(BluetoothStatus aStatus);
virtual void GetPlayStatusRsp();
virtual void ListPlayerAppAttrRsp();
virtual void ListPlayerAppValueRsp();
virtual void GetPlayerAppValueRsp();
virtual void GetPlayerAppAttrTextRsp();
virtual void GetPlayerAppValueTextRsp();
virtual void GetElementAttrRsp();
virtual void SetPlayerAppValueRsp();
virtual void RegisterNotificationRsp();
virtual void SetVolume();
protected:
virtual ~BluetoothAvrcpResultHandler() { }
};
class BluetoothAvrcpInterface
{
public:
virtual void SetNotificationHandler(
BluetoothAvrcpNotificationHandler* aNotificationHandler) = 0;
virtual void GetPlayStatusRsp(ControlPlayStatus aPlayStatus,
uint32_t aSongLen, uint32_t aSongPos,
BluetoothAvrcpResultHandler* aRes) = 0;
virtual void ListPlayerAppAttrRsp(
int aNumAttr, const BluetoothAvrcpPlayerAttribute* aPAttrs,
BluetoothAvrcpResultHandler* aRes) = 0;
virtual void ListPlayerAppValueRsp(int aNumVal, uint8_t* aPVals,
BluetoothAvrcpResultHandler* aRes) = 0;
/* TODO: redesign this interface once we actually use it */
virtual void GetPlayerAppValueRsp(uint8_t aNumAttrs, const uint8_t* aIds,
const uint8_t* aValues,
BluetoothAvrcpResultHandler* aRes) = 0;
/* TODO: redesign this interface once we actually use it */
virtual void GetPlayerAppAttrTextRsp(int aNumAttr, const uint8_t* aIds,
const char** aTexts,
BluetoothAvrcpResultHandler* aRes) = 0;
/* TODO: redesign this interface once we actually use it */
virtual void GetPlayerAppValueTextRsp(int aNumVal, const uint8_t* aIds,
const char** aTexts,
BluetoothAvrcpResultHandler* aRes) = 0;
virtual void GetElementAttrRsp(uint8_t aNumAttr,
const BluetoothAvrcpElementAttribute* aAttr,
BluetoothAvrcpResultHandler* aRes) = 0;
virtual void SetPlayerAppValueRsp(BluetoothAvrcpStatus aRspStatus,
BluetoothAvrcpResultHandler* aRes) = 0;
virtual void RegisterNotificationRsp(
BluetoothAvrcpEvent aEvent, BluetoothAvrcpNotification aType,
const BluetoothAvrcpNotificationParam& aParam,
BluetoothAvrcpResultHandler* aRes) = 0;
virtual void SetVolume(uint8_t aVolume,
BluetoothAvrcpResultHandler* aRes) = 0;
protected:
BluetoothAvrcpInterface();
virtual ~BluetoothAvrcpInterface();
};
//
// GATT Interface
//
class BluetoothGattNotificationHandler
{
public:
virtual void
RegisterClientNotification(BluetoothGattStatus aStatus,
int aClientIf,
const BluetoothUuid& aAppUuid);
virtual void
ScanResultNotification(const BluetoothAddress& aBdAddr,
int aRssi,
const BluetoothGattAdvData& aAdvData);
virtual void
ConnectNotification(int aConnId,
BluetoothGattStatus aStatus,
int aClientIf,
const BluetoothAddress& aBdAddr);
virtual void
DisconnectNotification(int aConnId,
BluetoothGattStatus aStatus,
int aClientIf,
const BluetoothAddress& aBdAddr);
virtual void
SearchCompleteNotification(int aConnId, BluetoothGattStatus aStatus);
virtual void
SearchResultNotification(int aConnId,
const BluetoothGattServiceId& aServiceId);
virtual void
GetCharacteristicNotification(int aConnId,
BluetoothGattStatus aStatus,
const BluetoothGattServiceId& aServiceId,
const BluetoothGattId& aCharId,
const BluetoothGattCharProp& aCharProperty);
virtual void
GetDescriptorNotification(int aConnId,
BluetoothGattStatus aStatus,
const BluetoothGattServiceId& aServiceId,
const BluetoothGattId& aCharId,
const BluetoothGattId& aDescriptorId);
virtual void
GetIncludedServiceNotification(int aConnId,
BluetoothGattStatus aStatus,
const BluetoothGattServiceId& aServiceId,
const BluetoothGattServiceId& aIncludedServId);
virtual void
RegisterNotificationNotification(int aConnId,
int aIsRegister,
BluetoothGattStatus aStatus,
const BluetoothGattServiceId& aServiceId,
const BluetoothGattId& aCharId);
virtual void
NotifyNotification(int aConnId,
const BluetoothGattNotifyParam& aNotifyParam);
virtual void
ReadCharacteristicNotification(int aConnId,
BluetoothGattStatus aStatus,
const BluetoothGattReadParam& aReadParam);
virtual void
WriteCharacteristicNotification(int aConnId,
BluetoothGattStatus aStatus,
const BluetoothGattWriteParam& aWriteParam);
virtual void
ReadDescriptorNotification(int aConnId,
BluetoothGattStatus aStatus,
const BluetoothGattReadParam& aReadParam);
virtual void
WriteDescriptorNotification(int aConnId,
BluetoothGattStatus aStatus,
const BluetoothGattWriteParam& aWriteParam);
virtual void
ExecuteWriteNotification(int aConnId, BluetoothGattStatus aStatus);
virtual void
ReadRemoteRssiNotification(int aClientIf,
const BluetoothAddress& aBdAddr,
int aRssi,
BluetoothGattStatus aStatus);
virtual void
ListenNotification(BluetoothGattStatus aStatus, int aServerIf);
virtual void
RegisterServerNotification(BluetoothGattStatus aStatus,
int aServerIf,
const BluetoothUuid& aAppUuid);
virtual void
ConnectionNotification(int aConnId,
int aServerIf,
bool aConnected,
const BluetoothAddress& aBdAddr);
virtual void
ServiceAddedNotification(BluetoothGattStatus aStatus,
int aServerIf,
const BluetoothGattServiceId& aServiceId,
const BluetoothAttributeHandle& aServiceHandle);
virtual void
IncludedServiceAddedNotification(
BluetoothGattStatus aStatus,
int aServerIf,
const BluetoothAttributeHandle& aServiceHandle,
const BluetoothAttributeHandle& aIncludedServiceHandle);
virtual void
CharacteristicAddedNotification(
BluetoothGattStatus aStatus,
int aServerIf,
const BluetoothUuid& aCharId,
const BluetoothAttributeHandle& aServiceHandle,
const BluetoothAttributeHandle& aCharacteristicHandle);
virtual void
DescriptorAddedNotification(
BluetoothGattStatus aStatus,
int aServerIf,
const BluetoothUuid& aCharId,
const BluetoothAttributeHandle& aServiceHandle,
const BluetoothAttributeHandle& aDescriptorHandle);
virtual void
ServiceStartedNotification(BluetoothGattStatus aStatus,
int aServerIf,
const BluetoothAttributeHandle& aServiceHandle);
virtual void
ServiceStoppedNotification(BluetoothGattStatus aStatus,
int aServerIf,
const BluetoothAttributeHandle& aServiceHandle);
virtual void
ServiceDeletedNotification(BluetoothGattStatus aStatus,
int aServerIf,
const BluetoothAttributeHandle& aServiceHandle);
virtual void
RequestReadNotification(int aConnId,
int aTransId,
const BluetoothAddress& aBdAddr,
const BluetoothAttributeHandle& aAttributeHandle,
int aOffset,
bool aIsLong);
virtual void
RequestWriteNotification(int aConnId,
int aTransId,
const BluetoothAddress& aBdAddr,
const BluetoothAttributeHandle& aAttributeHandle,
int aOffset,
int aLength,
const uint8_t* aValue,
bool aNeedResponse,
bool aIsPrepareWrite);
virtual void
RequestExecuteWriteNotification(int aConnId,
int aTransId,
const BluetoothAddress& aBdAddr,
bool aExecute); /* true: execute */
/* false: cancel */
virtual void
ResponseConfirmationNotification(BluetoothGattStatus aStatus,
int aHandle);
virtual void
IndicationSentNotification(int aConnId,
BluetoothGattStatus aStatus);
virtual void
CongestionNotification(int aConnId,
bool aCongested);
virtual void
MtuChangedNotification(int aConnId,
int aMtu);
protected:
BluetoothGattNotificationHandler();
virtual ~BluetoothGattNotificationHandler();
};
class BluetoothGattResultHandler
: public mozilla::ipc::DaemonSocketResultHandler
{
public:
virtual void OnError(BluetoothStatus aStatus);
virtual void RegisterClient();
virtual void UnregisterClient();
virtual void Scan();
virtual void Connect();
virtual void Disconnect();
virtual void Listen();
virtual void Refresh();
virtual void SearchService();
virtual void GetIncludedService();
virtual void GetCharacteristic();
virtual void GetDescriptor();
virtual void ReadCharacteristic();
virtual void WriteCharacteristic();
virtual void ReadDescriptor();
virtual void WriteDescriptor();
virtual void ExecuteWrite();
virtual void RegisterNotification();
virtual void DeregisterNotification();
virtual void ReadRemoteRssi();
virtual void GetDeviceType(BluetoothTypeOfDevice aType);
virtual void SetAdvData();
virtual void TestCommand();
virtual void RegisterServer();
virtual void UnregisterServer();
virtual void ConnectPeripheral();
virtual void DisconnectPeripheral();
virtual void AddService();
virtual void AddIncludedService();
virtual void AddCharacteristic();
virtual void AddDescriptor();
virtual void StartService();
virtual void StopService();
virtual void DeleteService();
virtual void SendIndication();
virtual void SendResponse();
protected:
virtual ~BluetoothGattResultHandler() { }
};
class BluetoothGattInterface
{
public:
virtual void SetNotificationHandler(
BluetoothGattNotificationHandler* aNotificationHandler) = 0;
/* Register / Unregister */
virtual void RegisterClient(const BluetoothUuid& aUuid,
BluetoothGattResultHandler* aRes) = 0;
virtual void UnregisterClient(int aClientIf,
BluetoothGattResultHandler* aRes) = 0;
/* Start / Stop LE Scan */
virtual void Scan(int aClientIf, bool aStart,
BluetoothGattResultHandler* aRes) = 0;
/* Connect / Disconnect */
virtual void Connect(int aClientIf,
const BluetoothAddress& aBdAddr,
bool aIsDirect, /* auto connect */
BluetoothTransport aTransport,
BluetoothGattResultHandler* aRes) = 0;
virtual void Disconnect(int aClientIf,
const BluetoothAddress& aBdAddr,
int aConnId,
BluetoothGattResultHandler* aRes) = 0;
/* Start / Stop advertisements to listen for incoming connections */
virtual void Listen(int aClientIf,
bool aIsStart,
BluetoothGattResultHandler* aRes) = 0;
/* Clear the attribute cache for a given device*/
virtual void Refresh(int aClientIf,
const BluetoothAddress& aBdAddr,
BluetoothGattResultHandler* aRes) = 0;
/* Enumerate Attributes */
virtual void SearchService(int aConnId,
bool aSearchAll,
const BluetoothUuid& aUuid,
BluetoothGattResultHandler* aRes) = 0;
virtual void GetIncludedService(
int aConnId,
const BluetoothGattServiceId& aServiceId,
bool aFirst,
const BluetoothGattServiceId& aStartServiceId,
BluetoothGattResultHandler* aRes) = 0;
virtual void GetCharacteristic(int aConnId,
const BluetoothGattServiceId& aServiceId,
bool aFirst,
const BluetoothGattId& aStartCharId,
BluetoothGattResultHandler* aRes) = 0;
virtual void GetDescriptor(int aConnId,
const BluetoothGattServiceId& aServiceId,
const BluetoothGattId& aCharId,
bool aFirst,
const BluetoothGattId& aDescriptorId,
BluetoothGattResultHandler* aRes) = 0;
/* Read / Write An Attribute */
virtual void ReadCharacteristic(int aConnId,
const BluetoothGattServiceId& aServiceId,
const BluetoothGattId& aCharId,
BluetoothGattAuthReq aAuthReq,
BluetoothGattResultHandler* aRes) = 0;
virtual void WriteCharacteristic(int aConnId,
const BluetoothGattServiceId& aServiceId,
const BluetoothGattId& aCharId,
BluetoothGattWriteType aWriteType,
BluetoothGattAuthReq aAuthReq,
const nsTArray<uint8_t>& aValue,
BluetoothGattResultHandler* aRes) = 0;
virtual void ReadDescriptor(int aConnId,
const BluetoothGattServiceId& aServiceId,
const BluetoothGattId& aCharId,
const BluetoothGattId& aDescriptorId,
BluetoothGattAuthReq aAuthReq,
BluetoothGattResultHandler* aRes) = 0;
virtual void WriteDescriptor(int aConnId,
const BluetoothGattServiceId& aServiceId,
const BluetoothGattId& aCharId,
const BluetoothGattId& aDescriptorId,
BluetoothGattWriteType aWriteType,
BluetoothGattAuthReq aAuthReq,
const nsTArray<uint8_t>& aValue,
BluetoothGattResultHandler* aRes) = 0;
/* Execute / Abort Prepared Write*/
virtual void ExecuteWrite(int aConnId,
int aIsExecute,
BluetoothGattResultHandler* aRes) = 0;
/* Register / Deregister Characteristic Notifications or Indications */
virtual void RegisterNotification(
int aClientIf,
const BluetoothAddress& aBdAddr,
const BluetoothGattServiceId& aServiceId,
const BluetoothGattId& aCharId,
BluetoothGattResultHandler* aRes) = 0;
virtual void DeregisterNotification(
int aClientIf,
const BluetoothAddress& aBdAddr,
const BluetoothGattServiceId& aServiceId,
const BluetoothGattId& aCharId,
BluetoothGattResultHandler* aRes) = 0;
virtual void ReadRemoteRssi(int aClientIf,
const BluetoothAddress& aBdAddr,
BluetoothGattResultHandler* aRes) = 0;
virtual void GetDeviceType(const BluetoothAddress& aBdAddr,
BluetoothGattResultHandler* aRes) = 0;
/* Set advertising data or scan response data */
virtual 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) = 0;
virtual void TestCommand(int aCommand,
const BluetoothGattTestParam& aTestParam,
BluetoothGattResultHandler* aRes) = 0;
/* Register / Unregister */
virtual void RegisterServer(const BluetoothUuid& aUuid,
BluetoothGattResultHandler* aRes) = 0;
virtual void UnregisterServer(int aServerIf,
BluetoothGattResultHandler* aRes) = 0;
/* Connect / Disconnect */
virtual void ConnectPeripheral(int aServerIf,
const BluetoothAddress& aBdAddr,
bool aIsDirect, /* auto connect */
BluetoothTransport aTransport,
BluetoothGattResultHandler* aRes) = 0;
virtual void DisconnectPeripheral(int aServerIf,
const BluetoothAddress& aBdAddr,
int aConnId,
BluetoothGattResultHandler* aRes) = 0;
/* Add a services / a characteristic / a descriptor */
virtual void AddService(int aServerIf,
const BluetoothGattServiceId& aServiceId,
uint16_t aNumHandles,
BluetoothGattResultHandler* aRes) = 0;
virtual void AddIncludedService(
int aServerIf,
const BluetoothAttributeHandle& aServiceHandle,
const BluetoothAttributeHandle& aIncludedServiceHandle,
BluetoothGattResultHandler* aRes) = 0;
virtual void AddCharacteristic(int aServerIf,
const BluetoothAttributeHandle& aServiceHandle,
const BluetoothUuid& aUuid,
BluetoothGattCharProp aProperties,
BluetoothGattAttrPerm aPermissions,
BluetoothGattResultHandler* aRes) = 0;
virtual void AddDescriptor(int aServerIf,
const BluetoothAttributeHandle& aServiceHandle,
const BluetoothUuid& aUuid,
BluetoothGattAttrPerm aPermissions,
BluetoothGattResultHandler* aRes) = 0;
/* Start / Stop / Delete a service */
virtual void StartService(int aServerIf,
const BluetoothAttributeHandle& aServiceHandle,
BluetoothTransport aTransport,
BluetoothGattResultHandler* aRes) = 0;
virtual void StopService(int aServerIf,
const BluetoothAttributeHandle& aServiceHandle,
BluetoothGattResultHandler* aRes) = 0;
virtual void DeleteService(int aServerIf,
const BluetoothAttributeHandle& aServiceHandle,
BluetoothGattResultHandler* aRes) = 0;
/* Send an indication or a notification */
virtual void SendIndication(
int aServerIf,
const BluetoothAttributeHandle& aCharacteristicHandle,
int aConnId,
const nsTArray<uint8_t>& aValue,
bool aConfirm, /* true: indication; false: notification */
BluetoothGattResultHandler* aRes) = 0;
/* Send a response for an incoming indication */
virtual void SendResponse(int aConnId,
int aTransId,
uint16_t aStatus,
const BluetoothGattResponse& aResponse,
BluetoothGattResultHandler* aRes) = 0;
protected:
BluetoothGattInterface();
virtual ~BluetoothGattInterface();
};
//
// Bluetooth Core Interface
//
class BluetoothNotificationHandler
{
public:
virtual void AdapterStateChangedNotification(bool aState);
virtual void AdapterPropertiesNotification(
BluetoothStatus aStatus, int aNumProperties,
const BluetoothProperty* aProperties);
virtual void RemoteDevicePropertiesNotification(
BluetoothStatus aStatus, const BluetoothAddress& aBdAddr,
int aNumProperties, const BluetoothProperty* aProperties);
virtual void DeviceFoundNotification(
int aNumProperties, const BluetoothProperty* aProperties);
virtual void DiscoveryStateChangedNotification(bool aState);
virtual void PinRequestNotification(const BluetoothAddress& aRemoteBdAddr,
const BluetoothRemoteName& aBdName,
uint32_t aCod);
virtual void SspRequestNotification(const BluetoothAddress& aRemoteBdAddr,
const BluetoothRemoteName& aBdName,
uint32_t aCod,
BluetoothSspVariant aPairingVariant,
uint32_t aPassKey);
virtual void BondStateChangedNotification(
BluetoothStatus aStatus, const BluetoothAddress& aRemoteBdAddr,
BluetoothBondState aState);
virtual void AclStateChangedNotification(
BluetoothStatus aStatus, const BluetoothAddress& aRemoteBdAddr,
BluetoothAclState aState);
virtual void DutModeRecvNotification(uint16_t aOpcode,
const uint8_t* aBuf, uint8_t aLen);
virtual void LeTestModeNotification(BluetoothStatus aStatus,
uint16_t aNumPackets);
virtual void EnergyInfoNotification(const BluetoothActivityEnergyInfo& aInfo);
virtual void BackendErrorNotification(bool aCrashed);
protected:
BluetoothNotificationHandler();
virtual ~BluetoothNotificationHandler();
};
class BluetoothResultHandler
: public mozilla::ipc::DaemonSocketResultHandler
{
public:
virtual void OnError(BluetoothStatus aStatus);
virtual void Init();
virtual void Cleanup();
virtual void Enable();
virtual void Disable();
virtual void GetAdapterProperties();
virtual void GetAdapterProperty();
virtual void SetAdapterProperty();
virtual void GetRemoteDeviceProperties();
virtual void GetRemoteDeviceProperty();
virtual void SetRemoteDeviceProperty();
virtual void GetRemoteServiceRecord();
virtual void GetRemoteServices();
virtual void StartDiscovery();
virtual void CancelDiscovery();
virtual void CreateBond();
virtual void RemoveBond();
virtual void CancelBond();
virtual void GetConnectionState();
virtual void PinReply();
virtual void SspReply();
virtual void DutModeConfigure();
virtual void DutModeSend();
virtual void LeTestMode();
virtual void ReadEnergyInfo();
protected:
virtual ~BluetoothResultHandler() { }
};
class BluetoothInterface
{
public:
static BluetoothInterface* GetInstance();
virtual void Init(BluetoothNotificationHandler* aNotificationHandler,
BluetoothResultHandler* aRes) = 0;
virtual void Cleanup(BluetoothResultHandler* aRes) = 0;
virtual void Enable(BluetoothResultHandler* aRes) = 0;
virtual void Disable(BluetoothResultHandler* aRes) = 0;
/* Adapter Properties */
virtual void GetAdapterProperties(BluetoothResultHandler* aRes) = 0;
virtual void GetAdapterProperty(BluetoothPropertyType,
BluetoothResultHandler* aRes) = 0;
virtual void SetAdapterProperty(const BluetoothProperty& aProperty,
BluetoothResultHandler* aRes) = 0;
/* Remote Device Properties */
virtual void GetRemoteDeviceProperties(const BluetoothAddress& aRemoteAddr,
BluetoothResultHandler* aRes) = 0;
virtual void GetRemoteDeviceProperty(const BluetoothAddress& aRemoteAddr,
BluetoothPropertyType aType,
BluetoothResultHandler* aRes) = 0;
virtual void SetRemoteDeviceProperty(const BluetoothAddress& aRemoteAddr,
const BluetoothProperty& aProperty,
BluetoothResultHandler* aRes) = 0;
/* Remote Services */
virtual void GetRemoteServiceRecord(const BluetoothAddress& aRemoteAddr,
const BluetoothUuid& aUuid,
BluetoothResultHandler* aRes) = 0;
virtual void GetRemoteServices(const BluetoothAddress& aRemoteAddr,
BluetoothResultHandler* aRes) = 0;
/* Discovery */
virtual void StartDiscovery(BluetoothResultHandler* aRes) = 0;
virtual void CancelDiscovery(BluetoothResultHandler* aRes) = 0;
/* Bonds */
virtual void CreateBond(const BluetoothAddress& aBdAddr,
BluetoothTransport aTransport,
BluetoothResultHandler* aRes) = 0;
virtual void RemoveBond(const BluetoothAddress& aBdAddr,
BluetoothResultHandler* aRes) = 0;
virtual void CancelBond(const BluetoothAddress& aBdAddr,
BluetoothResultHandler* aRes) = 0;
/* Connection */
virtual void GetConnectionState(const BluetoothAddress& aBdAddr,
BluetoothResultHandler* aRes) = 0;
/* Authentication */
virtual void PinReply(const BluetoothAddress& aBdAddr, bool aAccept,
const BluetoothPinCode& aPinCode,
BluetoothResultHandler* aRes) = 0;
virtual void SspReply(const BluetoothAddress& aBdAddr,
BluetoothSspVariant aVariant,
bool aAccept, uint32_t aPasskey,
BluetoothResultHandler* aRes) = 0;
/* DUT Mode */
virtual void DutModeConfigure(bool aEnable,
BluetoothResultHandler* aRes) = 0;
virtual void DutModeSend(uint16_t aOpcode, uint8_t* aBuf, uint8_t aLen,
BluetoothResultHandler* aRes) = 0;
/* LE Mode */
virtual void LeTestMode(uint16_t aOpcode, uint8_t* aBuf, uint8_t aLen,
BluetoothResultHandler* aRes) = 0;
/* Energy Info */
virtual void ReadEnergyInfo(BluetoothResultHandler* aRes) = 0;
/* Profile Interfaces */
virtual BluetoothSetupInterface* GetBluetoothSetupInterface() = 0;
virtual BluetoothSocketInterface* GetBluetoothSocketInterface() = 0;
virtual BluetoothHandsfreeInterface* GetBluetoothHandsfreeInterface() = 0;
virtual BluetoothA2dpInterface* GetBluetoothA2dpInterface() = 0;
virtual BluetoothAvrcpInterface* GetBluetoothAvrcpInterface() = 0;
virtual BluetoothGattInterface* GetBluetoothGattInterface() = 0;
protected:
BluetoothInterface();
virtual ~BluetoothInterface();
};
END_BLUETOOTH_NAMESPACE
#endif // mozilla_dom_bluetooth_BluetoothInterface_h