From 3c5905232e18e8b97a17bc9f61bc35778863beda Mon Sep 17 00:00:00 2001 From: DoHyun Pyun Date: Tue, 3 Sep 2019 10:06:26 +0900 Subject: [PATCH] Add the auto accept logic for the headless speaker profile Change-Id: I4c5aff7aae23e819c0aea23b69f0ceea5d049e08 Signed-off-by: DoHyun Pyun --- bt-oal/bluez_hal/CMakeLists.txt | 1 + bt-oal/bluez_hal/src/bt-hal-agent.c | 6 +++++ include/bt-internal-types.h | 48 +++++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+) diff --git a/bt-oal/bluez_hal/CMakeLists.txt b/bt-oal/bluez_hal/CMakeLists.txt index 4b96021..d099a2a 100644 --- a/bt-oal/bluez_hal/CMakeLists.txt +++ b/bt-oal/bluez_hal/CMakeLists.txt @@ -56,6 +56,7 @@ SET(PKG_MODULES gobject-2.0 bundle gio-unix-2.0 + capi-system-info ) INCLUDE(FindPkgConfig) diff --git a/bt-oal/bluez_hal/src/bt-hal-agent.c b/bt-oal/bluez_hal/src/bt-hal-agent.c index 4e57787..79a51df 100644 --- a/bt-oal/bluez_hal/src/bt-hal-agent.c +++ b/bt-oal/bluez_hal/src/bt-hal-agent.c @@ -690,6 +690,12 @@ static gboolean __bt_hal_confirm_request(GapAgentPrivate *agent, GDBusProxy *dev _gap_agent_get_path(agent)); } else { DBG("Headless Confirmation"); + + if (TIZEN_FEATURE_BLUEZ_SPEAKER_REFERENCE) { + /* Reply the ssp confirmation automaticaly */ + gap_agent_reply_confirmation(agent, GAP_AGENT_ACCEPT, NULL); + } + __bt_hal_send_ssp_request_events(address, name, passkey, device_class, BT_SSP_VARIANT_PASSKEY_CONFIRMATION); } diff --git a/include/bt-internal-types.h b/include/bt-internal-types.h index b3a0f03..2a47799 100644 --- a/include/bt-internal-types.h +++ b/include/bt-internal-types.h @@ -698,8 +698,20 @@ typedef enum { _PROFILE_COMMON = 0x20, } tizen_profile_t; +typedef enum { + _MODEL_UNKNOWN = 0, + _MODEL_COMMON = 0x1, + _MODEL_TM1 = 0x2, + _MODEL_TM2 = 0x4, + _MODEL_TW1 = 0x8, + _MODEL_TW2 = 0x10, + _MODEL_TW3 = 0x20, + _MODEL_RPI3 = 0x40, +} tizen_model_t; + /* For optimization, make this extern and define in a shared C file */ extern tizen_profile_t profile; +static tizen_model_t model = _MODEL_UNKNOWN; extern bt_plugin_info_t *headed_plugin_info; /* Accessing system info */ @@ -750,6 +762,41 @@ static inline tizen_profile_t get_tizen_profile() return profile; } + +static inline tizen_model_t get_tizen_model(void) +{ + char *model_name = NULL; + + if (__builtin_expect(model != _MODEL_UNKNOWN, 1)) + return model; + + system_info_get_platform_string("http://tizen.org/system/model_name", &model_name); + + if (model_name == NULL) { + model = _MODEL_COMMON; + return model; + } + + if (!strcasecmp(model_name, "TM1")) + model = _MODEL_TM1; + else if (!strcasecmp(model_name, "TM2")) + model = _MODEL_TM2; + else if (!strcasecmp(model_name, "TW1")) + model = _MODEL_TW1; + else if (!strcasecmp(model_name, "TW2")) + model = _MODEL_TW2; + else if (!strcasecmp(model_name, "TW3")) + model = _MODEL_TW3; + else if (!strcasecmp(model_name, "rpi3")) + model = _MODEL_RPI3; + else + model = _MODEL_COMMON; + + free(model_name); + + return model; +} + #define TIZEN_PROFILE_WEARABLE (get_tizen_profile() == _PROFILE_WEARABLE) #define TIZEN_PROFILE_IVI (get_tizen_profile() == _PROFILE_IVI) #define TIZEN_PROFILE_TV (get_tizen_profile() == _PROFILE_TV) @@ -759,6 +806,7 @@ static inline tizen_profile_t get_tizen_profile() #define TIZEN_FEATURE_TELEPHONY_ENABLED (get_tizen_profile() & (_PROFILE_MOBILE)) #define TIZEN_FEATURE_FLIGHTMODE_ENABLED (get_tizen_profile() & (_PROFILE_MOBILE | _PROFILE_WEARABLE)) #define TIZEN_FEATURE_BT_USB_DONGLE (get_tizen_profile() & (_PROFILE_TV)) +#define TIZEN_FEATURE_BLUEZ_SPEAKER_REFERENCE ((get_tizen_model()) == _MODEL_RPI3 && (get_tizen_profile()) == _PROFILE_COMMON) #ifdef __cplusplus } -- 2.7.4