From: Pawel Wasowski
Date: Mon, 6 Jul 2020 14:24:35 +0000 (+0200)
Subject: [Bluetooth] Implement BluetoothGATTServer::getConnectionMtu()
X-Git-Tag: submit/tizen/20200831.125703~5
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5c1115ee8329214fcc7cfbaabc42a9737039409c;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git
[Bluetooth] Implement BluetoothGATTServer::getConnectionMtu()
Related ACR: TWDAPI-263
[Verification] The function was tested in Chrome Dev Tool and worked
fine.
Change-Id: I2fd9c719e8871cb5db86e2bc65f8fbbc853fa47d
Signed-off-by: Pawel Wasowski
---
diff --git a/src/bluetooth/bluetooth_api.js b/src/bluetooth/bluetooth_api.js
index 7c58de23..b2dd582c 100755
--- a/src/bluetooth/bluetooth_api.js
+++ b/src/bluetooth/bluetooth_api.js
@@ -2840,6 +2840,45 @@ BluetoothGATTServer.prototype.stop = function() {
}
}
+var BluetoothGATTServer_valid_getConnectionMtu_errors = ['InvalidStateError', 'NotSupportedError', 'UnknownError'];
+var BluetoothGATTServer_valid_getConnectionMtu_exceptions = ['TypeMismatchError', 'SecurityError'];
+
+BluetoothGATTServer.prototype.getConnectionMtu = function() {
+ privUtils_.log('Entered BluetoothGATTServer.getConnectionMtu()');
+ var args = AV.validateArgs(arguments, [
+ {
+ name: 'clientAddress',
+ type: AV.Types.STRING
+ },
+ {
+ name: 'successCallback',
+ type: AV.Types.FUNCTION
+ },
+ {
+ name: 'errorCallback',
+ type: AV.Types.FUNCTION,
+ optional: true
+ }
+ ]);
+
+ var callback = function(result) {
+ if (native.isFailure(result)) {
+ native.callIfPossible(args.errorCallback,
+ native.getErrorObjectAndValidate(result,
+ BluetoothGATTServer_valid_getConnectionMtu_errors, UnknownError));
+ } else {
+ args.successCallback(native.getResultObject(result));
+ }
+ };
+
+ var result = native.call('BluetoothGATTServerGetConnectionMtu',
+ {clientAddress: args.clientAddress}, callback);
+ if (native.isFailure(result)) {
+ throw native.getErrorObjectAndValidate(result, BluetoothGATTServer_valid_getConnectionMtu_exceptions,
+ UnknownError);
+ }
+}
+
var GATTServer = new BluetoothGATTServer();
// class BluetoothManager ///////////////////////////
diff --git a/src/bluetooth/bluetooth_gatt_server.cc b/src/bluetooth/bluetooth_gatt_server.cc
index 255433e4..b2273112 100644
--- a/src/bluetooth/bluetooth_gatt_server.cc
+++ b/src/bluetooth/bluetooth_gatt_server.cc
@@ -112,6 +112,23 @@ void BluetoothGATTServer::Stop(picojson::object& out) {
}
}
+void BluetoothGATTServer::GetConnectionMtu(const picojson::value& args,
+ picojson::object& out) {
+ ScopeLogger();
+
+ const auto client_address = args.get("clientAddress").get();
+
+ unsigned int mtu = 0;
+ auto ret = bt_gatt_server_get_device_mtu(client_address.c_str(), &mtu);
+ if (BT_ERROR_NONE != ret) {
+ LoggerE("bt_gatt_server_get_device_mtu(): %d (%s)", ret, get_error_message(ret));
+ ReportError(BluetoothErrorToPlatformResult(ret), &out);
+ }
+ LoggerD("bt_gatt_server_get_device_mtu(): success, MTU: %u", mtu);
+
+ ReportSuccess(picojson::value{static_cast(mtu)}, out);
+}
+
PlatformResult BluetoothGATTServer::Initialize() {
ScopeLogger();
diff --git a/src/bluetooth/bluetooth_gatt_server.h b/src/bluetooth/bluetooth_gatt_server.h
index 6c5d83d2..e28789c8 100644
--- a/src/bluetooth/bluetooth_gatt_server.h
+++ b/src/bluetooth/bluetooth_gatt_server.h
@@ -36,6 +36,7 @@ class BluetoothGATTServer {
void Start(picojson::object& out);
void Stop(picojson::object& out);
+ void GetConnectionMtu(const picojson::value& args, picojson::object& out);
static bool DestroyService(int total, int index, bt_gatt_h handle, void* user_data);
static bool DestroyCharacteristic(int total, int index, bt_gatt_h handle, void* user_data);
diff --git a/src/bluetooth/bluetooth_instance.cc b/src/bluetooth/bluetooth_instance.cc
index 2ff079ea..ccad4e76 100644
--- a/src/bluetooth/bluetooth_instance.cc
+++ b/src/bluetooth/bluetooth_instance.cc
@@ -102,6 +102,7 @@ BluetoothInstance::BluetoothInstance()
REGISTER_METHOD(BluetoothGATTServerStart);
REGISTER_METHOD(BluetoothGATTServerStop);
+ REGISTER_METHOD(BluetoothGATTServerGetConnectionMtu);
#undef REGISTER_METHOD
}
@@ -480,5 +481,24 @@ void BluetoothInstance::BluetoothGATTServerStop(const picojson::value& args,
ReportSuccess(out);
}
+void BluetoothInstance::BluetoothGATTServerGetConnectionMtu(const picojson::value& args,
+ picojson::object& out) {
+ ScopeLogger();
+
+ CHECK_PRIVILEGE_ACCESS(kPrivilegeBluetooth, &out);
+
+ double callback_id = args.get(JSON_CALLBACK_ID).get();
+ worker.add_job([this, callback_id, args] {
+ ScopeLogger("Async call: BluetoothGATTServerGetConnectionMtu");
+ picojson::value response = picojson::value(picojson::object());
+ picojson::object& async_out = response.get();
+ async_out[JSON_CALLBACK_ID] = picojson::value(callback_id);
+ this->bluetooth_gatt_server_.GetConnectionMtu(args, async_out);
+ this->PostMessage(response.serialize().c_str());
+ });
+
+ ReportSuccess(out);
+}
+
} // namespace bluetooth
} // namespace extension
diff --git a/src/bluetooth/bluetooth_instance.h b/src/bluetooth/bluetooth_instance.h
index 0ee235df..880949d1 100644
--- a/src/bluetooth/bluetooth_instance.h
+++ b/src/bluetooth/bluetooth_instance.h
@@ -110,6 +110,7 @@ class BluetoothInstance : public common::ParsedInstance {
picojson::object& out);
void BluetoothGATTServerStart(const picojson::value& args, picojson::object& out);
void BluetoothGATTServerStop(const picojson::value& args, picojson::object& out);
+ void BluetoothGATTServerGetConnectionMtu(const picojson::value& args, picojson::object& out);
BluetoothAdapter bluetooth_adapter_;
BluetoothDevice bluetooth_device_;