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;
|
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)
|
void *ll_tx_mem_acquire(void)
|
||||||
{
|
{
|
||||||
return mem_acquire(&mem_conn_tx.free);
|
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)
|
u16_t interval_max, u16_t latency, u16_t timeout)
|
||||||
{
|
{
|
||||||
struct ll_conn *conn;
|
struct ll_conn *conn;
|
||||||
|
u8_t ret;
|
||||||
|
|
||||||
conn = ll_connected_get(handle);
|
conn = ll_connected_get(handle);
|
||||||
if (!conn) {
|
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 (!cmd) {
|
||||||
if (conn->llcp_req != conn->llcp_ack) {
|
|
||||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
|
||||||
}
|
|
||||||
|
|
||||||
conn->llcp_req++;
|
ret = ull_conn_allowed_check(conn);
|
||||||
if (((conn->llcp_req - conn->llcp_ack) & 0x03) != 1) {
|
if (ret) {
|
||||||
conn->llcp_req--;
|
return ret;
|
||||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
conn->llcp.conn_upd.win_size = 1;
|
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)
|
u8_t ll_feature_req_send(u16_t handle)
|
||||||
{
|
{
|
||||||
struct ll_conn *conn;
|
struct ll_conn *conn;
|
||||||
|
u8_t ret;
|
||||||
|
|
||||||
conn = ll_connected_get(handle);
|
conn = ll_connected_get(handle);
|
||||||
if (!conn || (conn->llcp_req != conn->llcp_ack)) {
|
if (!conn) {
|
||||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||||
}
|
}
|
||||||
|
|
||||||
conn->llcp_req++;
|
ret = ull_conn_allowed_check(conn);
|
||||||
if (((conn->llcp_req - conn->llcp_ack) & 0x03) != 1) {
|
if (ret) {
|
||||||
conn->llcp_req--;
|
return ret;
|
||||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
conn->llcp_type = LLCP_FEATURE_EXCHANGE;
|
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)
|
u8_t ll_version_ind_send(u16_t handle)
|
||||||
{
|
{
|
||||||
struct ll_conn *conn;
|
struct ll_conn *conn;
|
||||||
|
u8_t ret;
|
||||||
|
|
||||||
conn = ll_connected_get(handle);
|
conn = ll_connected_get(handle);
|
||||||
if (!conn || (conn->llcp_req != conn->llcp_ack)) {
|
if (!conn) {
|
||||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
return BT_HCI_ERR_CMD_DISALLOWED;
|
||||||
}
|
}
|
||||||
|
|
||||||
conn->llcp_req++;
|
ret = ull_conn_allowed_check(conn);
|
||||||
if (((conn->llcp_req - conn->llcp_ack) & 0x03) != 1) {
|
if (ret) {
|
||||||
conn->llcp_req--;
|
return ret;
|
||||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
conn->llcp_type = LLCP_VERSION_EXCHANGE;
|
conn->llcp_type = LLCP_VERSION_EXCHANGE;
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
/* Macro to convert time in us to connection interval units */
|
/* Macro to convert time in us to connection interval units */
|
||||||
#define RADIO_CONN_EVENTS(x, y) ((u16_t)(((x) + (y) - 1) / (y)))
|
#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);
|
struct ll_conn *ll_conn_acquire(void);
|
||||||
void ll_conn_release(struct ll_conn *conn);
|
void ll_conn_release(struct ll_conn *conn);
|
||||||
u16_t ll_conn_handle_get(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)
|
u8_t ll_chm_update(u8_t *chm)
|
||||||
{
|
{
|
||||||
u16_t handle;
|
u16_t handle;
|
||||||
|
u8_t ret;
|
||||||
|
|
||||||
ull_conn_chan_map_set(chm);
|
ull_conn_chan_map_set(chm);
|
||||||
|
|
||||||
|
@ -290,14 +291,9 @@ u8_t ll_chm_update(u8_t *chm)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (conn->llcp_req != conn->llcp_ack) {
|
ret = ull_conn_allowed_check(conn);
|
||||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
if (ret) {
|
||||||
}
|
return ret;
|
||||||
|
|
||||||
conn->llcp_req++;
|
|
||||||
if (((conn->llcp_req - conn->llcp_ack) & 0x03) != 1) {
|
|
||||||
conn->llcp_req--;
|
|
||||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(conn->llcp.chan_map.chm, chm,
|
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 ll_conn *conn;
|
||||||
struct node_tx *tx;
|
struct node_tx *tx;
|
||||||
|
u8_t ret;
|
||||||
|
|
||||||
conn = ll_connected_get(handle);
|
conn = ll_connected_get(handle);
|
||||||
if (!conn) {
|
if (!conn) {
|
||||||
return BT_HCI_ERR_UNKNOWN_CONN_ID;
|
return BT_HCI_ERR_UNKNOWN_CONN_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (conn->llcp_req != conn->llcp_ack) {
|
ret = ull_conn_allowed_check(conn);
|
||||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
if (ret) {
|
||||||
}
|
return ret;
|
||||||
|
|
||||||
conn->llcp_req++;
|
|
||||||
if (((conn->llcp_req - conn->llcp_ack) & 0x03) != 1) {
|
|
||||||
conn->llcp_req--;
|
|
||||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tx = ll_tx_mem_acquire();
|
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)
|
u8_t const *const ltk)
|
||||||
{
|
{
|
||||||
struct ll_conn *conn;
|
struct ll_conn *conn;
|
||||||
|
u8_t ret;
|
||||||
|
|
||||||
conn = ll_connected_get(handle);
|
conn = ll_connected_get(handle);
|
||||||
if (!conn) {
|
if (!conn) {
|
||||||
|
@ -436,14 +437,9 @@ u8_t ll_start_enc_req_send(u16_t handle, u8_t error_code,
|
||||||
|
|
||||||
if (error_code) {
|
if (error_code) {
|
||||||
if (conn->refresh == 0) {
|
if (conn->refresh == 0) {
|
||||||
if (conn->llcp_req != conn->llcp_ack) {
|
ret = ull_conn_allowed_check(conn);
|
||||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
if (ret) {
|
||||||
}
|
return ret;
|
||||||
|
|
||||||
conn->llcp_req++;
|
|
||||||
if (((conn->llcp_req - conn->llcp_ack) & 0x03) != 1) {
|
|
||||||
conn->llcp_req--;
|
|
||||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
conn->llcp.encryption.error_code = error_code;
|
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,
|
memcpy(&conn->llcp.encryption.ltk[0], ltk,
|
||||||
sizeof(conn->llcp.encryption.ltk));
|
sizeof(conn->llcp.encryption.ltk));
|
||||||
|
|
||||||
if (conn->llcp_req != conn->llcp_ack) {
|
ret = ull_conn_allowed_check(conn);
|
||||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
if (ret) {
|
||||||
}
|
return ret;
|
||||||
|
|
||||||
conn->llcp_req++;
|
|
||||||
if (((conn->llcp_req - conn->llcp_ack) & 0x03) != 1) {
|
|
||||||
conn->llcp_req--;
|
|
||||||
return BT_HCI_ERR_CMD_DISALLOWED;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
conn->llcp.encryption.error_code = 0;
|
conn->llcp.encryption.error_code = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue