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_;