Commit [1] introduced a dependency with the HID plugin in the HoG code As a result, building with --disable-hid --enable-hog caused linker errors due to undefined references to HID-related functions: ``` > ./configure --disable-hid --enable-hog > make /usr/bin/ld: profiles/input/bluetoothd-hog.o: in function `hog_accept': /home/../bluez/profiles/input/hog.c:184:(.text.hog_accept+0xbb): undefined reference to `input_get_auto_sec' /usr/bin/ld: profiles/input/bluetoothd-hog.o: in function `hog_disconnect': /home/../bluez/profiles/input/hog.c:205:(.text.hog_disconnect+0x12): undefined reference to `input_get_userspace_hid' collect2: error: ld returned 1 exit status make[1]: *** [Makefile:6344: src/bluetoothd] Error 1 make: *** [Makefile:4695: all] Error 2 ``` This patch duplicate the read of the 'UserspaceHID=persist' config entry in the HoG plugin file to remove the dependency on the HID plugin files. [1] 1782bfd79 input: Add support for UserspaceHID=persist Fixes: https://github.com/bluez/bluez/issues/1228 --- profiles/input/device.c | 5 ----- profiles/input/device.h | 1 - profiles/input/hog.c | 14 ++++++++++++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/profiles/input/device.c b/profiles/input/device.c index a7bc4d44f..3642cc326 100644 --- a/profiles/input/device.c +++ b/profiles/input/device.c @@ -112,11 +112,6 @@ void input_set_userspace_hid(char *state) error("Unknown value '%s'", state); } -uint8_t input_get_userspace_hid(void) -{ - return uhid_state; -} - void input_set_classic_bonded_only(bool state) { classic_bonded_only = state; diff --git a/profiles/input/device.h b/profiles/input/device.h index 036a88980..905669502 100644 --- a/profiles/input/device.h +++ b/profiles/input/device.h @@ -22,7 +22,6 @@ struct input_conn; void input_set_idle_timeout(int timeout); void input_set_userspace_hid(char *state); -uint8_t input_get_userspace_hid(void); void input_set_classic_bonded_only(bool state); bool input_get_classic_bonded_only(void); diff --git a/profiles/input/hog.c b/profiles/input/hog.c index f82648fec..a3c876cf9 100644 --- a/profiles/input/hog.c +++ b/profiles/input/hog.c @@ -40,7 +40,6 @@ #include "src/shared/gatt-client.h" #include "src/plugin.h" -#include "device.h" #include "suspend.h" #include "attrib/att.h" #include "attrib/gattrib.h" @@ -55,6 +54,7 @@ struct hog_device { static gboolean suspend_supported = FALSE; static bool auto_sec = true; +static bool uhid_state_persist = false; static struct queue *devices = NULL; static void hog_device_accept(struct hog_device *dev, struct gatt_db *db) @@ -203,7 +203,7 @@ static int hog_disconnect(struct btd_service *service) { struct hog_device *dev = btd_service_get_user_data(service); - if (input_get_userspace_hid() == UHID_PERSIST) + if (uhid_state_persist) bt_hog_detach(dev->hog, false); else bt_hog_detach(dev->hog, true); @@ -229,6 +229,7 @@ static void hog_read_config(void) GKeyFile *config; GError *err = NULL; bool config_auto_sec; + char *uhid_enabled; config = g_key_file_new(); if (!config) { @@ -253,6 +254,15 @@ static void hog_read_config(void) } else g_clear_error(&err); + uhid_enabled = g_key_file_get_string(config, "General", + "UserspaceHID", &err); + if (!err) { + DBG("input.conf: UserspaceHID=%s", uhid_enabled); + uhid_state_persist = strcasecmp(uhid_enabled, "persist") == 0; + free(uhid_enabled); + } else + g_clear_error(&err); + g_key_file_free(config); } -- 2.49.0