Hi Lukasz, Maybe unrelated, but I'm looking for a way to enforce BlueZ to run LE only (central) under linux 3.13. btmgmt bredr seems to do this, but could I do it via some "config-level" setting to ensure no one on the system can initiate anything else than LE related things. best David On 23 Apr 2014, at 00:16, Lukasz Rymanowski <lukasz.rymanowski@xxxxxxxxx> wrote: > This patch adds possibility to start BlueZ only in LE mode only. > > It is useful for testing purpose, when you want test BlueZ in > peripheral mode against any dual mode device. > --- > android/README | 3 +++ > android/bluetooth.c | 7 ++++++- > android/hal-bluetooth.c | 15 ++++++++++++++- > android/hal-msg.h | 1 + > 4 files changed, 24 insertions(+), 2 deletions(-) > > diff --git a/android/README b/android/README > index 6254d34..9b08610 100644 > --- a/android/README > +++ b/android/README > @@ -166,6 +166,9 @@ options. > > Property Value Description > ------------------------------------------- > +mode le_only Enable BlueZ in Low Energy mode only. > + <none> Enable BlueZ in default mode - enable br/edr/le > + if possible. > handsfree hfp Enable Handsfree Profile (HFP) with narrowband > speech only > hfp_wbs Enable Handsfree Profile (HFP) with narrowband > diff --git a/android/bluetooth.c b/android/bluetooth.c > index 93c7935..923285c 100644 > --- a/android/bluetooth.c > +++ b/android/bluetooth.c > @@ -3894,10 +3894,15 @@ static const struct ipc_handler cmd_handlers[] = { > > void bt_bluetooth_register(struct ipc *ipc, uint8_t mode) > { > - DBG(""); > + DBG("mode 0x%x", mode); > > hal_ipc = ipc; > > + if ((mode == HAL_MODE_LE_ONLY) && > + (adapter.current_settings & MGMT_SETTING_LE) && > + (adapter.current_settings & MGMT_SETTING_BREDR)) > + set_mode(MGMT_OP_SET_BREDR, 0x00); > + > ipc_register(hal_ipc, HAL_SERVICE_ID_BLUETOOTH, cmd_handlers, > G_N_ELEMENTS(cmd_handlers)); > } > diff --git a/android/hal-bluetooth.c b/android/hal-bluetooth.c > index 48d5ea2..69009ff 100644 > --- a/android/hal-bluetooth.c > +++ b/android/hal-bluetooth.c > @@ -29,6 +29,8 @@ > #include "hal-ipc.h" > #include "hal-utils.h" > > +#define MODE_PROPERTY_NAME "persist.sys.bluetooth.mode" > + > static const bt_callbacks_t *bt_hal_cbacks = NULL; > > #define enum_prop_to_hal(prop, hal_prop, type) do { \ > @@ -412,6 +414,17 @@ static const struct hal_ipc_handler ev_handlers[] = { > } > }; > > +static uint8_t get_mode(void) > +{ > + char value[PROPERTY_VALUE_MAX]; > + > + if (property_get(MODE_PROPERTY_NAME, value, "") > 0 && > + (!strcasecmp(value, "le_only"))) > + return HAL_MODE_LE_ONLY; > + > + return HAL_MODE_DEFAULT; > +} > + > static int init(bt_callbacks_t *callbacks) > { > struct hal_cmd_register_module cmd; > @@ -433,7 +446,7 @@ static int init(bt_callbacks_t *callbacks) > } > > cmd.service_id = HAL_SERVICE_ID_BLUETOOTH; > - cmd.mode = HAL_MODE_DEFAULT; > + cmd.mode = get_mode(); > > status = hal_ipc_cmd(HAL_SERVICE_ID_CORE, HAL_OP_REGISTER_MODULE, > sizeof(cmd), &cmd, NULL, NULL, NULL); > diff --git a/android/hal-msg.h b/android/hal-msg.h > index ed0a67a..db21870 100644 > --- a/android/hal-msg.h > +++ b/android/hal-msg.h > @@ -55,6 +55,7 @@ static const char BLUEZ_HAL_SK_PATH[] = "\0bluez_hal_socket"; > #define HAL_OP_STATUS IPC_OP_STATUS > > #define HAL_MODE_DEFAULT 0x00 > +#define HAL_MODE_LE_ONLY 0x01 > > #define HAL_OP_REGISTER_MODULE 0x01 > struct hal_cmd_register_module { > -- > 1.8.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html