diff --git a/profiles/input/device.c b/profiles/input/device.c
index 9f89f44..6ec0a4c 100644
--- a/profiles/input/device.c
+++ b/profiles/input/device.c
classic_bonded_only = state;
}
+bool input_get_classic_bonded_only(void)
+{
+ return classic_bonded_only;
+}
+
static void input_device_enter_reconnect_mode(struct input_device *idev);
static int connection_disconnect(struct input_device *idev, uint32_t flags);
diff --git a/profiles/input/device.h b/profiles/input/device.h
index 5a077f9..f61e8a5 100644
--- a/profiles/input/device.h
+++ b/profiles/input/device.h
void input_set_idle_timeout(int timeout);
void input_enable_userspace_hid(bool state);
void input_set_classic_bonded_only(bool state);
+bool input_get_classic_bonded_only(void);
void input_set_auto_sec(bool state);
int input_device_register(struct btd_service *service);
diff --git a/profiles/input/server.c b/profiles/input/server.c
index f2c8c0f..2bd5e92 100644
--- a/profiles/input/server.c
+++ b/profiles/input/server.c
{
struct input_server *server;
GError *err = NULL;
+ BtIOSecLevel sec_level = input_get_classic_bonded_only() ?
+ BT_IO_SEC_MEDIUM : BT_IO_SEC_LOW;
server = g_new0(struct input_server, 1);
bacpy(&server->src, src);
server, NULL, &err,
BT_IO_OPT_SOURCE_BDADDR, src,
BT_IO_OPT_PSM, L2CAP_PSM_HIDP_CTRL,
- BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_LOW,
+ BT_IO_OPT_SEC_LEVEL, sec_level,
BT_IO_OPT_INVALID);
if (!server->ctrl) {
error("Failed to listen on control channel");
server, NULL, &err,
BT_IO_OPT_SOURCE_BDADDR, src,
BT_IO_OPT_PSM, L2CAP_PSM_HIDP_INTR,
- BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_LOW,
+ BT_IO_OPT_SEC_LEVEL, sec_level,
BT_IO_OPT_INVALID);
if (!server->intr) {
error("Failed to listen on interrupt channel");