Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b152923b authored by Jakub Pawlowski's avatar Jakub Pawlowski
Browse files

Expose connection update callback (1/3)

Test: manual
Bug: 30622771
Change-Id: I94d25f6f22b42fb1432a9288c97b82503d57db86
parent cbbaf1d7
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -64,6 +64,9 @@ static void bta_gattc_cong_cback(uint16_t conn_id, bool congested);
static void bta_gattc_phy_update_cback(tGATT_IF gatt_if, uint16_t conn_id,
                                       uint8_t tx_phy, uint8_t rx_phy,
                                       uint8_t status);
static void bta_gattc_conn_update_cback(tGATT_IF gatt_if, uint16_t conn_id,
                                        uint16_t interval, uint16_t latency,
                                        uint16_t timeout, uint8_t status);

static tGATT_CBACK bta_gattc_cl_cback = {bta_gattc_conn_cback,
                                         bta_gattc_cmpl_cback,
@@ -72,7 +75,8 @@ static tGATT_CBACK bta_gattc_cl_cback = {bta_gattc_conn_cback,
                                         NULL,
                                         bta_gattc_enc_cmpl_cback,
                                         bta_gattc_cong_cback,
                                         bta_gattc_phy_update_cback};
                                         bta_gattc_phy_update_cback,
                                         bta_gattc_conn_update_cback};

/* opcode(tGATTC_OPTYPE) order has to be comply with internal event order */
static uint16_t bta_gattc_opcode_to_int_evt[] = {
@@ -1723,3 +1727,22 @@ static void bta_gattc_phy_update_cback(tGATT_IF gatt_if, uint16_t conn_id,
  cb_data.phy_update.status = status;
  (*p_clreg->p_cback)(BTA_GATTC_PHY_UPDATE_EVT, &cb_data);
}

static void bta_gattc_conn_update_cback(tGATT_IF gatt_if, uint16_t conn_id,
                                        uint16_t interval, uint16_t latency,
                                        uint16_t timeout, uint8_t status) {
  tBTA_GATTC_RCB* p_clreg = bta_gattc_cl_get_regcb(gatt_if);

  if (!p_clreg || !p_clreg->p_cback) {
    APPL_TRACE_ERROR("%s: client_if=%d not found", __func__, gatt_if);
    return;
  }

  tBTA_GATTC cb_data;
  cb_data.conn_update.conn_id = conn_id;
  cb_data.conn_update.interval = interval;
  cb_data.conn_update.latency = latency;
  cb_data.conn_update.timeout = timeout;
  cb_data.conn_update.status = status;
  (*p_clreg->p_cback)(BTA_GATTC_CONN_UPDATE_EVT, &cb_data);
}
+24 −1
Original line number Diff line number Diff line
@@ -52,6 +52,9 @@ static void bta_gatts_cong_cback(uint16_t conn_id, bool congested);
static void bta_gatts_phy_update_cback(tGATT_IF gatt_if, uint16_t conn_id,
                                       uint8_t tx_phy, uint8_t rx_phy,
                                       uint8_t status);
static void bta_gatts_conn_update_cback(tGATT_IF gatt_if, uint16_t conn_id,
                                        uint16_t interval, uint16_t latency,
                                        uint16_t timeout, uint8_t status);

static tGATT_CBACK bta_gatts_cback = {bta_gatts_conn_cback,
                                      NULL,
@@ -60,7 +63,8 @@ static tGATT_CBACK bta_gatts_cback = {bta_gatts_conn_cback,
                                      bta_gatts_send_request_cback,
                                      NULL,
                                      bta_gatts_cong_cback,
                                      bta_gatts_phy_update_cback};
                                      bta_gatts_phy_update_cback,
                                      bta_gatts_conn_update_cback};

tGATT_APPL_INFO bta_gatts_nv_cback = {bta_gatts_nv_save_cback,
                                      bta_gatts_nv_srv_chg_cback};
@@ -631,6 +635,25 @@ static void bta_gatts_phy_update_cback(tGATT_IF gatt_if, uint16_t conn_id,
  (*p_reg->p_cback)(BTA_GATTS_PHY_UPDATE_EVT, &cb_data);
}

static void bta_gatts_conn_update_cback(tGATT_IF gatt_if, uint16_t conn_id,
                                        uint16_t interval, uint16_t latency,
                                        uint16_t timeout, uint8_t status) {
  tBTA_GATTS_RCB* p_reg = bta_gatts_find_app_rcb_by_app_if(gatt_if);
  if (!p_reg || !p_reg->p_cback) {
    APPL_TRACE_ERROR("%s: server_if=%d not found", __func__, gatt_if);
    return;
  }

  tBTA_GATTS cb_data;
  cb_data.conn_update.conn_id = conn_id;
  cb_data.conn_update.server_if = gatt_if;
  cb_data.conn_update.interval = interval;
  cb_data.conn_update.latency = latency;
  cb_data.conn_update.timeout = timeout;
  cb_data.conn_update.status = status;
  (*p_reg->p_cback)(BTA_GATTS_CONN_UPDATE_EVT, &cb_data);
}

/*******************************************************************************
 *
 * Function         bta_gatts_cong_cback
+23 −0
Original line number Diff line number Diff line
@@ -120,6 +120,7 @@ typedef uint8_t tBTA_GATT_STATUS;
#define BTA_GATTC_CFG_MTU_EVT 18     /* configure MTU complete event */
#define BTA_GATTC_CONGEST_EVT 24     /* Congestion event */
#define BTA_GATTC_PHY_UPDATE_EVT 25  /* PHY change event */
#define BTA_GATTC_CONN_UPDATE_EVT 26 /* Connection parameters update event */

typedef uint8_t tBTA_GATTC_EVT;

@@ -313,6 +314,15 @@ typedef struct {
  tBTA_GATT_STATUS status;
} tBTA_GATTC_PHY_UPDATE;

typedef struct {
  tBTA_GATTC_IF server_if;
  uint16_t conn_id;
  uint16_t interval;
  uint16_t latency;
  uint16_t timeout;
  tBTA_GATT_STATUS status;
} tBTA_GATTC_CONN_UPDATE;

typedef union {
  tBTA_GATT_STATUS status;

@@ -330,6 +340,7 @@ typedef union {
  tBTA_GATTC_CFG_MTU cfg_mtu; /* configure MTU operation */
  tBTA_GATTC_CONGEST congest;
  tBTA_GATTC_PHY_UPDATE phy_update;
  tBTA_GATTC_CONN_UPDATE conn_update;
} tBTA_GATTC;

/* GATTC enable callback function */
@@ -360,6 +371,7 @@ typedef void(tBTA_GATTC_CBACK)(tBTA_GATTC_EVT event, tBTA_GATTC* p_data);
#define BTA_GATTS_CLOSE_EVT 18
#define BTA_GATTS_CONGEST_EVT 20
#define BTA_GATTS_PHY_UPDATE_EVT 21
#define BTA_GATTS_CONN_UPDATE_EVT 22

typedef uint8_t tBTA_GATTS_EVT;
typedef tGATT_IF tBTA_GATTS_IF;
@@ -506,6 +518,15 @@ typedef struct {
  tBTA_GATT_STATUS status;
} tBTA_GATTS_PHY_UPDATE;

typedef struct {
  tBTA_GATTS_IF server_if;
  uint16_t conn_id;
  uint16_t interval;
  uint16_t latency;
  uint16_t timeout;
  tBTA_GATT_STATUS status;
} tBTA_GATTS_CONN_UPDATE;

/* GATTS callback data */
typedef union {
  tBTA_GATTS_REG_OPER reg_oper;
@@ -517,6 +538,8 @@ typedef union {
  tBTA_GATTS_CONGEST congest; /* BTA_GATTS_CONGEST_EVT callback data */
  tBTA_GATTS_CONF confirm;    /* BTA_GATTS_CONF_EVT callback data */
  tBTA_GATTS_PHY_UPDATE phy_update; /* BTA_GATTS_PHY_UPDATE_EVT callback data */
  tBTA_GATTS_CONN_UPDATE
      conn_update; /* BTA_GATTS_CONN_UPDATE_EVT callback data */
} tBTA_GATTS;

/* GATTS enable callback function */
+7 −0
Original line number Diff line number Diff line
@@ -186,6 +186,13 @@ void btif_gattc_upstreams_evt(uint16_t event, char* p_param) {
                p_data->phy_update.rx_phy, p_data->phy_update.status);
      break;

    case BTA_GATTC_CONN_UPDATE_EVT:
      HAL_CBACK(bt_gatt_callbacks, client->conn_updated_cb,
                p_data->conn_update.conn_id, p_data->conn_update.interval,
                p_data->conn_update.latency, p_data->conn_update.timeout,
                p_data->conn_update.status);
      break;

    default:
      LOG_ERROR(LOG_TAG, "%s: Unhandled event (%d)!", __func__, event);
      break;
+7 −0
Original line number Diff line number Diff line
@@ -254,6 +254,13 @@ static void btapp_gatts_handle_cback(uint16_t event, char* p_param) {
                p_data->phy_update.rx_phy, p_data->phy_update.status);
      break;

    case BTA_GATTS_CONN_UPDATE_EVT:
      HAL_CBACK(bt_gatt_callbacks, server->conn_updated_cb,
                p_data->conn_update.conn_id, p_data->conn_update.interval,
                p_data->conn_update.latency, p_data->conn_update.timeout,
                p_data->conn_update.status);
      break;

    default:
      LOG_ERROR(LOG_TAG, "%s: Unhandled event (%d)!", __func__, event);
      break;
Loading