diff --git a/system/bta/dm/bta_dm_act.cc b/system/bta/dm/bta_dm_act.cc index 0282bc7afb9ec84067e6c701120338dcbb191e19..6c665ab0019a37e66a3fc64f8523e37d975b5f55 100644 --- a/system/bta/dm/bta_dm_act.cc +++ b/system/bta/dm/bta_dm_act.cc @@ -2487,8 +2487,7 @@ void bta_dm_rm_cback(tBTA_SYS_CONN_STATUS status, uint8_t id, uint8_t app_id, if (((p_bta_dm_rm_cfg[j].app_id == app_id) || (p_bta_dm_rm_cfg[j].app_id == BTA_ALL_APP_ID)) && (p_bta_dm_rm_cfg[j].id == id)) { - role = p_bta_dm_rm_cfg[j].cfg; - + role = toBTA_PREF_ROLES(p_bta_dm_rm_cfg[j].cfg); if (role > p_dev->pref_role) p_dev->pref_role = role; break; } diff --git a/system/bta/include/bta_api.h b/system/bta/include/bta_api.h index 5b973574388a1143365a256015fadc2dc2c6328d..24ecd67dd6f05bed35ca3d8e2859940b85f609a7 100644 --- a/system/bta/include/bta_api.h +++ b/system/bta/include/bta_api.h @@ -119,14 +119,21 @@ typedef uint16_t typedef uint16_t tBTA_DM_CONN; -/* M/S preferred roles */ -#define BTA_ANY_ROLE 0x00 -#define BTA_CENTRAL_ROLE_PREF 0x01 -#define BTA_CENTRAL_ROLE_ONLY 0x02 -#define BTA_PERIPHERAL_ROLE_ONLY \ - 0x03 /* Used for PANU only, skip role switch to central */ - -typedef uint8_t tBTA_PREF_ROLES; +/* Central/peripheral preferred roles */ +typedef enum : uint8_t { + BTA_ANY_ROLE = 0x00, + BTA_CENTRAL_ROLE_PREF = 0x01, + BTA_CENTRAL_ROLE_ONLY = 0x02, + /* Used for PANU only, skip role switch to central */ + BTA_PERIPHERAL_ROLE_ONLY = 0x03, +} tBTA_PREF_ROLES; + +inline tBTA_PREF_ROLES toBTA_PREF_ROLES(uint8_t role) { + ASSERT_LOG(role <= BTA_PERIPHERAL_ROLE_ONLY, + "Passing illegal preferred role:0x%02x [0x%02x<=>0x%02x]", role, + BTA_ANY_ROLE, BTA_PERIPHERAL_ROLE_ONLY); + return static_cast<tBTA_PREF_ROLES>(role); +} inline std::string preferred_role_text(const tBTA_PREF_ROLES& role) { switch (role) {