Bluetooth: controller: refactored llcp_req/ack test to helper function
Moved test of llcp_req/ack to separate helper function in ull_conn.c Signed-off-by: Alexander Svensen <alsv@nordicsemi.no>
This commit is contained in:
parent
aeff0ee4ac
commit
8d86773d6b
4 changed files with 46 additions and 49 deletions
|
@ -168,6 +168,22 @@ struct ll_conn *ll_connected_get(u16_t handle)
|
|||
return conn;
|
||||
}
|
||||
|
||||
u8_t ull_conn_allowed_check(void *conn)
|
||||
{
|
||||
struct ll_conn * const conn_hdr = conn;
|
||||
if (conn_hdr->llcp_req != conn_hdr->llcp_ack) {
|
||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||
}
|
||||
|
||||
conn_hdr->llcp_req++;
|
||||
if (((conn_hdr->llcp_req - conn_hdr->llcp_ack) & 0x03) != 1) {
|
||||
conn_hdr->llcp_req--;
|
||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void *ll_tx_mem_acquire(void)
|
||||
{
|
||||
return mem_acquire(&mem_conn_tx.free);
|
||||
|
@ -206,6 +222,7 @@ u8_t ll_conn_update(u16_t handle, u8_t cmd, u8_t status, u16_t interval_min,
|
|||
u16_t interval_max, u16_t latency, u16_t timeout)
|
||||
{
|
||||
struct ll_conn *conn;
|
||||
u8_t ret;
|
||||
|
||||
conn = ll_connected_get(handle);
|
||||
if (!conn) {
|
||||
|
@ -230,14 +247,10 @@ u8_t ll_conn_update(u16_t handle, u8_t cmd, u8_t status, u16_t interval_min,
|
|||
}
|
||||
|
||||
if (!cmd) {
|
||||
if (conn->llcp_req != conn->llcp_ack) {
|
||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||
}
|
||||
|
||||
conn->llcp_req++;
|
||||
if (((conn->llcp_req - conn->llcp_ack) & 0x03) != 1) {
|
||||
conn->llcp_req--;
|
||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||
ret = ull_conn_allowed_check(conn);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
conn->llcp.conn_upd.win_size = 1;
|
||||
|
@ -331,16 +344,16 @@ u8_t ll_terminate_ind_send(u16_t handle, u8_t reason)
|
|||
u8_t ll_feature_req_send(u16_t handle)
|
||||
{
|
||||
struct ll_conn *conn;
|
||||
u8_t ret;
|
||||
|
||||
conn = ll_connected_get(handle);
|
||||
if (!conn || (conn->llcp_req != conn->llcp_ack)) {
|
||||
if (!conn) {
|
||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||
}
|
||||
|
||||
conn->llcp_req++;
|
||||
if (((conn->llcp_req - conn->llcp_ack) & 0x03) != 1) {
|
||||
conn->llcp_req--;
|
||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||
ret = ull_conn_allowed_check(conn);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
conn->llcp_type = LLCP_FEATURE_EXCHANGE;
|
||||
|
@ -352,16 +365,16 @@ u8_t ll_feature_req_send(u16_t handle)
|
|||
u8_t ll_version_ind_send(u16_t handle)
|
||||
{
|
||||
struct ll_conn *conn;
|
||||
u8_t ret;
|
||||
|
||||
conn = ll_connected_get(handle);
|
||||
if (!conn || (conn->llcp_req != conn->llcp_ack)) {
|
||||
if (!conn) {
|
||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||
}
|
||||
|
||||
conn->llcp_req++;
|
||||
if (((conn->llcp_req - conn->llcp_ack) & 0x03) != 1) {
|
||||
conn->llcp_req--;
|
||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||
ret = ull_conn_allowed_check(conn);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
conn->llcp_type = LLCP_VERSION_EXCHANGE;
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
/* Macro to convert time in us to connection interval units */
|
||||
#define RADIO_CONN_EVENTS(x, y) ((u16_t)(((x) + (y) - 1) / (y)))
|
||||
|
||||
u8_t ull_conn_allowed_check(void *conn);
|
||||
struct ll_conn *ll_conn_acquire(void);
|
||||
void ll_conn_release(struct ll_conn *conn);
|
||||
u16_t ll_conn_handle_get(struct ll_conn *conn);
|
||||
|
|
|
@ -278,6 +278,7 @@ u8_t ll_connect_disable(void **rx)
|
|||
u8_t ll_chm_update(u8_t *chm)
|
||||
{
|
||||
u16_t handle;
|
||||
u8_t ret;
|
||||
|
||||
ull_conn_chan_map_set(chm);
|
||||
|
||||
|
@ -290,14 +291,9 @@ u8_t ll_chm_update(u8_t *chm)
|
|||
continue;
|
||||
}
|
||||
|
||||
if (conn->llcp_req != conn->llcp_ack) {
|
||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||
}
|
||||
|
||||
conn->llcp_req++;
|
||||
if (((conn->llcp_req - conn->llcp_ack) & 0x03) != 1) {
|
||||
conn->llcp_req--;
|
||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||
ret = ull_conn_allowed_check(conn);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
memcpy(conn->llcp.chan_map.chm, chm,
|
||||
|
@ -317,20 +313,16 @@ u8_t ll_enc_req_send(u16_t handle, u8_t *rand, u8_t *ediv, u8_t *ltk)
|
|||
{
|
||||
struct ll_conn *conn;
|
||||
struct node_tx *tx;
|
||||
u8_t ret;
|
||||
|
||||
conn = ll_connected_get(handle);
|
||||
if (!conn) {
|
||||
return BT_HCI_ERR_UNKNOWN_CONN_ID;
|
||||
}
|
||||
|
||||
if (conn->llcp_req != conn->llcp_ack) {
|
||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||
}
|
||||
|
||||
conn->llcp_req++;
|
||||
if (((conn->llcp_req - conn->llcp_ack) & 0x03) != 1) {
|
||||
conn->llcp_req--;
|
||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||
ret = ull_conn_allowed_check(conn);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
tx = ll_tx_mem_acquire();
|
||||
|
|
|
@ -428,6 +428,7 @@ u8_t ll_start_enc_req_send(u16_t handle, u8_t error_code,
|
|||
u8_t const *const ltk)
|
||||
{
|
||||
struct ll_conn *conn;
|
||||
u8_t ret;
|
||||
|
||||
conn = ll_connected_get(handle);
|
||||
if (!conn) {
|
||||
|
@ -436,14 +437,9 @@ u8_t ll_start_enc_req_send(u16_t handle, u8_t error_code,
|
|||
|
||||
if (error_code) {
|
||||
if (conn->refresh == 0) {
|
||||
if (conn->llcp_req != conn->llcp_ack) {
|
||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||
}
|
||||
|
||||
conn->llcp_req++;
|
||||
if (((conn->llcp_req - conn->llcp_ack) & 0x03) != 1) {
|
||||
conn->llcp_req--;
|
||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||
ret = ull_conn_allowed_check(conn);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
conn->llcp.encryption.error_code = error_code;
|
||||
|
@ -465,14 +461,9 @@ u8_t ll_start_enc_req_send(u16_t handle, u8_t error_code,
|
|||
memcpy(&conn->llcp.encryption.ltk[0], ltk,
|
||||
sizeof(conn->llcp.encryption.ltk));
|
||||
|
||||
if (conn->llcp_req != conn->llcp_ack) {
|
||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||
}
|
||||
|
||||
conn->llcp_req++;
|
||||
if (((conn->llcp_req - conn->llcp_ack) & 0x03) != 1) {
|
||||
conn->llcp_req--;
|
||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||
ret = ull_conn_allowed_check(conn);
|
||||
if (ret) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
conn->llcp.encryption.error_code = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue