diff --git a/src/adapter.c b/src/adapter.c
index bd20921..9f063b4 100644
--- a/src/adapter.c
+++ b/src/adapter.c
DBG("sending set mode command for index %u", adapter->dev_id);
+ if (kernel_conn_control) {
+ if (mode)
+ set_mode(adapter, MGMT_OP_SET_CONNECTABLE, mode);
+ else
+ /* This also disables discoverable so we're done */
+ return set_mode(adapter, MGMT_OP_SET_CONNECTABLE,
+ mode);
+ }
+
if (mgmt_send(adapter->mgmt, MGMT_OP_SET_DISCOVERABLE,
adapter->dev_id, sizeof(cp), &cp,
set_mode_complete, adapter, NULL) > 0)
len = sizeof(mode);
break;
case MGMT_SETTING_DISCOVERABLE:
+ if (kernel_conn_control) {
+ if (mode) {
+ set_mode(adapter, MGMT_OP_SET_CONNECTABLE,
+ mode);
+ } else {
+ opcode = MGMT_OP_SET_CONNECTABLE;
+ param = &mode;
+ len = sizeof(mode);
+ break;
+ }
+ }
+
memset(&cp, 0, sizeof(cp));
cp.val = mode;
if (cp.val)
set_mode(adapter, MGMT_OP_SET_LE, 0x01);
set_mode(adapter, MGMT_OP_SET_PAIRABLE, 0x01);
- set_mode(adapter, MGMT_OP_SET_CONNECTABLE, 0x01);
+ if (!kernel_conn_control)
+ set_mode(adapter, MGMT_OP_SET_CONNECTABLE, 0x01);
if (adapter->stored_discoverable && !adapter->discoverable_timeout)
set_discoverable(adapter, 0x01, 0);