mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1163499 - Part 1: Revise BluetoothGattInterface and result handler for daemon support. r=tzimmermann
This commit is contained in:
parent
8f5273f47d
commit
e9c7840743
@ -729,9 +729,9 @@ struct BluetoothGattReadParam {
|
||||
BluetoothGattServiceId mServiceId;
|
||||
BluetoothGattId mCharId;
|
||||
BluetoothGattId mDescriptorId;
|
||||
uint8_t mValue[BLUETOOTH_GATT_MAX_ATTR_LEN];
|
||||
uint32_t mValueType;
|
||||
uint16_t mValueLength;
|
||||
uint16_t mValueType;
|
||||
uint8_t mValue[BLUETOOTH_GATT_MAX_ATTR_LEN];
|
||||
uint8_t mStatus;
|
||||
};
|
||||
|
||||
@ -743,14 +743,24 @@ struct BluetoothGattWriteParam {
|
||||
};
|
||||
|
||||
struct BluetoothGattNotifyParam {
|
||||
uint8_t mValue[BLUETOOTH_GATT_MAX_ATTR_LEN];
|
||||
nsString mBdAddr;
|
||||
BluetoothGattServiceId mServiceId;
|
||||
BluetoothGattId mCharId;
|
||||
uint16_t mLength;
|
||||
uint8_t mValue[BLUETOOTH_GATT_MAX_ATTR_LEN];
|
||||
bool mIsNotify;
|
||||
};
|
||||
|
||||
struct BluetoothGattTestParam {
|
||||
nsString mBdAddr;
|
||||
BluetoothUuid mUuid;
|
||||
uint16_t mU1;
|
||||
uint16_t mU2;
|
||||
uint16_t mU3;
|
||||
uint16_t mU4;
|
||||
uint16_t mU5;
|
||||
};
|
||||
|
||||
/**
|
||||
* EIR Data Type, Advertising Data Type (AD Type) and OOB Data Type Definitions
|
||||
* Please refer to https://www.bluetooth.org/en-us/specification/\
|
||||
|
@ -9,7 +9,6 @@
|
||||
|
||||
#include "BluetoothCommon.h"
|
||||
#include "mozilla/dom/bluetooth/BluetoothTypes.h"
|
||||
#include "mozilla/dom/TypedArray.h"
|
||||
|
||||
BEGIN_BLUETOOTH_NAMESPACE
|
||||
|
||||
@ -632,16 +631,28 @@ protected:
|
||||
{ }
|
||||
};
|
||||
|
||||
class BluetoothGattClientResultHandler
|
||||
class BluetoothGattResultHandler
|
||||
{
|
||||
public:
|
||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(BluetoothGattClientResultHandler)
|
||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(BluetoothGattResultHandler)
|
||||
|
||||
virtual void OnError(BluetoothStatus aStatus)
|
||||
{
|
||||
BT_WARNING("Received error code %d", (int)aStatus);
|
||||
}
|
||||
|
||||
virtual void Init() { }
|
||||
virtual void Cleanup() { }
|
||||
|
||||
protected:
|
||||
virtual ~BluetoothGattResultHandler() { }
|
||||
};
|
||||
|
||||
class BluetoothGattClientResultHandler : public BluetoothGattResultHandler
|
||||
{
|
||||
public:
|
||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(BluetoothGattClientResultHandler)
|
||||
|
||||
virtual void RegisterClient() { }
|
||||
virtual void UnregisterClient() { }
|
||||
|
||||
@ -671,6 +682,7 @@ public:
|
||||
virtual void ReadRemoteRssi() { }
|
||||
virtual void GetDeviceType() { }
|
||||
virtual void SetAdvData() { }
|
||||
virtual void TestCommand() { }
|
||||
|
||||
protected:
|
||||
virtual ~BluetoothGattClientResultHandler() { }
|
||||
@ -678,23 +690,6 @@ protected:
|
||||
|
||||
// TODO: Add GattServerResultHandler
|
||||
|
||||
class BluetoothGattResultHandler
|
||||
{
|
||||
public:
|
||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(BluetoothGattResultHandler)
|
||||
|
||||
virtual void OnError(BluetoothStatus aStatus)
|
||||
{
|
||||
BT_WARNING("Received error code %d", (int)aStatus);
|
||||
}
|
||||
|
||||
virtual void Init() { }
|
||||
virtual void Cleanup() { }
|
||||
|
||||
protected:
|
||||
virtual ~BluetoothGattResultHandler() { }
|
||||
};
|
||||
|
||||
class BluetoothGattClientInterface
|
||||
{
|
||||
public:
|
||||
@ -815,14 +810,18 @@ public:
|
||||
int aMinInterval,
|
||||
int aMaxInterval,
|
||||
int aApperance,
|
||||
uint8_t aManufacturerLen,
|
||||
const ArrayBuffer& aManufacturerData,
|
||||
uint8_t aServiceDataLen,
|
||||
const ArrayBuffer& aServiceData,
|
||||
uint8_t aServiceUUIDLen,
|
||||
const ArrayBuffer& aServiceUUID,
|
||||
uint16_t aManufacturerLen,
|
||||
char* aManufacturerData,
|
||||
uint16_t aServiceDataLen,
|
||||
char* aServiceData,
|
||||
uint16_t aServiceUUIDLen,
|
||||
char* aServiceUUID,
|
||||
BluetoothGattClientResultHandler* aRes) = 0;
|
||||
|
||||
virtual void TestCommand(int aCommand,
|
||||
const BluetoothGattTestParam& aTestParam,
|
||||
BluetoothGattClientResultHandler* aRes) = 0;
|
||||
|
||||
protected:
|
||||
BluetoothGattClientInterface();
|
||||
virtual ~BluetoothGattClientInterface();
|
||||
|
@ -1031,44 +1031,22 @@ void
|
||||
BluetoothGattClientHALInterface::SetAdvData(
|
||||
int aServerIf, bool aIsScanRsp, bool aIsNameIncluded,
|
||||
bool aIsTxPowerIncluded, int aMinInterval, int aMaxInterval, int aApperance,
|
||||
uint8_t aManufacturerLen, const ArrayBuffer& aManufacturerData,
|
||||
uint8_t aServiceDataLen, const ArrayBuffer& aServiceData,
|
||||
uint8_t aServiceUUIDLen, const ArrayBuffer& aServiceUUID,
|
||||
uint16_t aManufacturerLen, char* aManufacturerData,
|
||||
uint16_t aServiceDataLen, char* aServiceData,
|
||||
uint16_t aServiceUUIDLen, char* aServiceUUID,
|
||||
BluetoothGattClientResultHandler* aRes)
|
||||
{
|
||||
/* FIXME: This method allocates a large amount of memory on the
|
||||
* stack. It should be rewritten to prevent the pending stack
|
||||
* overflow. Additionally |ArrayBuffer| seems like the wrong data
|
||||
* type here. Why not use plain pointers instead?
|
||||
*/
|
||||
|
||||
bt_status_t status;
|
||||
#if ANDROID_VERSION >= 21
|
||||
char manufacturerData[aManufacturerLen + 1];
|
||||
char serviceData[aServiceDataLen + 1];
|
||||
char serviceUUID[aServiceUUIDLen + 1];
|
||||
|
||||
if (NS_SUCCEEDED(Convert(aManufacturerData, manufacturerData)) ||
|
||||
NS_SUCCEEDED(Convert(aServiceData, serviceData)) ||
|
||||
NS_SUCCEEDED(Convert(aServiceUUID, serviceUUID))) {
|
||||
status = mInterface->set_adv_data(
|
||||
aServerIf, aIsScanRsp, aIsNameIncluded, aIsTxPowerIncluded,
|
||||
aMinInterval, aMaxInterval, aApperance,
|
||||
aManufacturerLen, manufacturerData,
|
||||
aServiceDataLen, serviceData, aServiceUUIDLen, serviceUUID);
|
||||
} else {
|
||||
status = BT_STATUS_PARM_INVALID;
|
||||
}
|
||||
status = mInterface->set_adv_data(
|
||||
aServerIf, aIsScanRsp, aIsNameIncluded, aIsTxPowerIncluded,
|
||||
aMinInterval, aMaxInterval, aApperance,
|
||||
aManufacturerLen, aManufacturerData,
|
||||
aServiceDataLen, aServiceData, aServiceUUIDLen, aServiceUUID);
|
||||
#elif ANDROID_VERSION >= 19
|
||||
char value[aManufacturerLen + 1];
|
||||
|
||||
if (NS_SUCCEEDED(Convert(aManufacturerData, value))) {
|
||||
status = mInterface->set_adv_data(
|
||||
aServerIf, aIsScanRsp, aIsNameIncluded, aIsTxPowerIncluded, aMinInterval,
|
||||
aMaxInterval, aApperance, aManufacturerLen, value);
|
||||
} else {
|
||||
status = BT_STATUS_PARM_INVALID;
|
||||
}
|
||||
status = mInterface->set_adv_data(
|
||||
aServerIf, aIsScanRsp, aIsNameIncluded, aIsTxPowerIncluded, aMinInterval,
|
||||
aMaxInterval, aApperance, aManufacturerLen, aManufacturerData);
|
||||
#else
|
||||
status = BT_STATUS_UNSUPPORTED;
|
||||
#endif
|
||||
@ -1080,6 +1058,32 @@ BluetoothGattClientHALInterface::SetAdvData(
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothGattClientHALInterface::TestCommand(
|
||||
int aCommand, const BluetoothGattTestParam& aTestParam,
|
||||
BluetoothGattClientResultHandler* aRes)
|
||||
{
|
||||
bt_status_t status;
|
||||
#if ANDROID_VERSION >= 19
|
||||
btgatt_test_params_t testParam;
|
||||
|
||||
if (NS_SUCCEEDED(Convert(aTestParam, testParam))) {
|
||||
status = mInterface->test_command(aCommand, &testParam);
|
||||
} else {
|
||||
status = BT_STATUS_PARM_INVALID;
|
||||
}
|
||||
#else
|
||||
status = BT_STATUS_UNSUPPORTED;
|
||||
#endif
|
||||
|
||||
if (aRes) {
|
||||
DispatchBluetoothGattClientHALResult(
|
||||
aRes, &BluetoothGattClientResultHandler::TestCommand,
|
||||
ConvertDefault(status, STATUS_FAIL));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// TODO: Add GATT Server Interface
|
||||
|
||||
// GATT Interface
|
||||
|
@ -138,12 +138,14 @@ public:
|
||||
int aMinInterval,
|
||||
int aMaxInterval,
|
||||
int aApperance,
|
||||
uint8_t aManufacturerLen,
|
||||
const ArrayBuffer& aManufacturerData,
|
||||
uint8_t aServiceDataLen, const ArrayBuffer& aServiceData,
|
||||
uint8_t aServiceUUIDLen, const ArrayBuffer& aServiceUUID,
|
||||
uint16_t aManufacturerLen, char* aManufacturerData,
|
||||
uint16_t aServiceDataLen, char* aServiceData,
|
||||
uint16_t aServiceUUIDLen, char* aServiceUUID,
|
||||
BluetoothGattClientResultHandler* aRes);
|
||||
|
||||
void TestCommand(int aCommand, const BluetoothGattTestParam& aTestParam,
|
||||
BluetoothGattClientResultHandler* aRes);
|
||||
|
||||
protected:
|
||||
BluetoothGattClientHALInterface(
|
||||
#if ANDROID_VERSION >= 19
|
||||
|
@ -262,16 +262,20 @@ Convert(const btgatt_srvc_id_t& aIn, BluetoothGattServiceId& aOut)
|
||||
nsresult
|
||||
Convert(const btgatt_read_params_t& aIn, BluetoothGattReadParam& aOut)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
rv = Convert(aIn.srvc_id, aOut.mServiceId);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsresult rv = Convert(aIn.srvc_id, aOut.mServiceId);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
rv = Convert(aIn.char_id, aOut.mCharId);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
rv = Convert(aIn.descr_id, aOut.mDescriptorId);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
memcpy(aOut.mValue, aIn.value.value, aIn.value.len);
|
||||
aOut.mValueLength = aIn.value.len;
|
||||
@ -284,16 +288,20 @@ Convert(const btgatt_read_params_t& aIn, BluetoothGattReadParam& aOut)
|
||||
nsresult
|
||||
Convert(const btgatt_write_params_t& aIn, BluetoothGattWriteParam& aOut)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
rv = Convert(aIn.srvc_id, aOut.mServiceId);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsresult rv = Convert(aIn.srvc_id, aOut.mServiceId);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
rv = Convert(aIn.char_id, aOut.mCharId);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
rv = Convert(aIn.descr_id, aOut.mDescriptorId);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
aOut.mStatus = aIn.status;
|
||||
|
||||
@ -303,16 +311,20 @@ Convert(const btgatt_write_params_t& aIn, BluetoothGattWriteParam& aOut)
|
||||
nsresult
|
||||
Convert(const btgatt_notify_params_t& aIn, BluetoothGattNotifyParam& aOut)
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
rv = Convert(aIn.bda, aOut.mBdAddr);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsresult rv = Convert(aIn.bda, aOut.mBdAddr);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
rv = Convert(aIn.srvc_id, aOut.mServiceId);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
rv = Convert(aIn.char_id, aOut.mCharId);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
memcpy(aOut.mValue, aIn.value, aIn.len);
|
||||
aOut.mLength = aIn.len;
|
||||
@ -320,6 +332,41 @@ Convert(const btgatt_notify_params_t& aIn, BluetoothGattNotifyParam& aOut)
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
Convert(const BluetoothGattTestParam& aIn, btgatt_test_params_t& aOut)
|
||||
{
|
||||
nsresult rv = Convert(aIn.mBdAddr, *aOut.bda1);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
rv = Convert(aIn.mUuid, *aOut.uuid1);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
rv = Convert(aIn.mU1, aOut.u1);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
rv = Convert(aIn.mU2, aOut.u2);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
rv = Convert(aIn.mU3, aOut.u3);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
rv = Convert(aIn.mU4, aOut.u4);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
rv = Convert(aIn.mU5, aOut.u5);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
#endif // ANDROID_VERSION >= 19
|
||||
|
||||
#if ANDROID_VERSION >= 21
|
||||
|
@ -891,6 +891,9 @@ Convert(const btgatt_write_params_t& aIn, BluetoothGattWriteParam& aOut);
|
||||
|
||||
nsresult
|
||||
Convert(const btgatt_notify_params_t& aIn, BluetoothGattNotifyParam& aOut);
|
||||
|
||||
nsresult
|
||||
Convert(const BluetoothGattTestParam& aIn, btgatt_test_params_t& aOut);
|
||||
#endif // ANDROID_VERSION >= 19
|
||||
|
||||
#if ANDROID_VERSION >= 21
|
||||
|
Loading…
Reference in New Issue
Block a user