BluetoothLEDevice.prototype.addConnectStateChangeListener = function() {
console.log('Entered BluetoothLEDevice.addConnectStateChangeListener()');
- //TODO validate
- //TODO call c++ layer
+ var args = AV.validateMethod(arguments, [
+ {
+ name: 'listener',
+ type: AV.Types.LISTENER,
+ values: ['onconnected', 'ondisconnected']
+ }
+ ]);
+
+ var that = this;
+
+ var func = function(event) {
+ if (event.address === that.address && args.listener[event.action]) {
+ args.listener[event.action](that);
+ }
+ }
+
+ var watchId = _bleConnectChangeListener.addListener(func);
+
+ return watchId;
};
BluetoothLEDevice.prototype.removeConnectStateChangeListener = function() {
console.log('Entered BluetoothLEDevice.removeConnectStateChangeListener()');
- //TODO validate
- //TODO call c++ layer
+ var args = AV.validateMethod(arguments, [
+ {
+ name: 'watchID',
+ type: AV.Types.LONG
+ }
+ ]);
+
+ _bleConnectChangeListener.removeListener(args.watchID);
};
// class BluetoothDevice ////////////////////////////////////////////////////
'BluetoothGATTCharacteristic_removeValueChangeListener'
);
+var _bleConnectChangeListener = _multipleListenerBuilder(
+ 'BluetoothLEConnectChangeCallback',
+ function(listener, event) {
+ listener(event);
+ },
+ 'BluetoothLEDevice_addConnectStateChangeListener',
+ 'BluetoothLEDevice_removeConnectStateChangeListener'
+);
+
BluetoothGATTCharacteristic.prototype.addValueChangeListener = function() {
console.log('Entered BluetoothGATTCharacteristic.addValueChangeListener()');
const std::string kManufacturerData = "manufacturerData";
const std::string kId = "id";
const std::string kData = "data";
+const std::string kAction = "action";
+
+const std::string kOnConnected = "onconnected";
+const std::string kOnDisconnected = "ondisconnected";
+const std::string kConnectChangeEvent = "BluetoothLEConnectChangeCallback";
}
BluetoothLEDevice::BluetoothLEDevice(BluetoothInstance& instance)
- : instance_(instance) {
+ : instance_(instance),
+ is_listener_set_(false) {
int ret = bt_gatt_set_connection_state_changed_cb(GattConnectionState, this);
if (BT_ERROR_NONE != ret && BT_ERROR_ALREADY_DONE != ret) {
LoggerE("Can't add connection state listener: %d", ret);
void BluetoothLEDevice::AddConnectStateChangeListener(
const picojson::value& data, picojson::object& out) {
LoggerD("Entered");
+
+ is_listener_set_ = true;
+
+ ReportSuccess(out);
}
void BluetoothLEDevice::RemoveConnectStateChangeListener(
const picojson::value& data, picojson::object& out) {
LoggerD("Entered");
+
+ is_listener_set_ = false;
+
+ ReportSuccess(out);
}
void BluetoothLEDevice::GattConnectionState(int result, bool connected,
return;
}
+ if (le_device->is_listener_set_) {
+
+ picojson::value value = picojson::value(picojson::object());
+ picojson::object* data_obj = &value.get<picojson::object>();
+ if (connected) {
+ LoggerD("OnConnected");
+ data_obj->insert(std::make_pair(kAction, picojson::value(kOnConnected)));
+ } else {
+ LoggerD("OnDisconnected");
+ data_obj->insert(
+ std::make_pair(kAction, picojson::value(kOnDisconnected)));
+ }
+
+ data_obj->insert(
+ std::make_pair(kDeviceAddress, picojson::value(remote_address)));
+
+ le_device->instance_.FireEvent(kConnectChangeEvent, value);
+ }
+
auto it = le_device->connecting_.find(remote_address);
if (le_device->connecting_.end() == it) {
LoggerW("Given address is not in waiting connections list");