int aciga_gatt_tls_connect(int conn_id, const gatt_tls_ctx_t *ctx) { int rc = -1; aciga_gatt_tls_channel_t *channel = NULL; if (!ctx || !ctx->send_cb || !ctx->recv_cb) { BT_ERR("invalid parameter"); goto exit; } for (int i = 0; i < CONFIG_MAX_CONNECTION_COUNT; i++) { if (!gatt_tls_channel[i].used) { channel = gatt_tls_channel + i; break;//搜寻可用的通道 } } if (!channel) { BT_ERR("can not find avaliable channel"); goto exit; } memcpy(&channel->ctx, ctx, sizeof(*ctx)); rc = lower_trans_open(conn_id, ctx->mtu, ctx->send_cb); if (rc) { goto exit; } channel->conn_id = conn_id; channel->used = true; channel->state = HANDSHAKE_STATE_INIT; exit: return rc; }
时间: 2024-04-25 12:28:03 浏览: 100
这是一个函数 `aciga_gatt_tls_connect` 的代码实现,该函数用于建立 GATT TLS 连接。函数的输入参数为 `conn_id` 和 `ctx`,其中 `conn_id` 表示连接 ID,`ctx` 是一个指向 GATT TLS 上下文的指针。函数的返回值是一个整数,表示函数执行的结果。
函数实现的过程如下:
1. 初始化变量 `rc` 和 `channel`,将变量 `rc` 的值设为 -1,将变量 `channel` 的值设为 NULL。
2. 检查输入参数 `ctx` 和 `ctx->send_cb` 和 `ctx->recv_cb` 是否为空,如果为空则打印错误信息并跳转到函数的结束位置(`exit` 标签)。
3. 遍历 GATT TLS 通道的数组 `gatt_tls_channel`,查找未被使用的通道,将其赋值给变量 `channel`。
4. 如果没有找到可用的通道,则打印错误信息并跳转到函数的结束位置(`exit` 标签)。
5. 将 GATT TLS 上下文 `ctx` 的值复制到通道变量 `channel->ctx` 中。
6. 调用 `lower_trans_open` 函数打开一个下层传输通道,传递参数 `conn_id`、`ctx->mtu` 和 `ctx->send_cb`,将函数的返回值赋值给变量 `rc`。
7. 如果 `lower_trans_open` 函数的返回值不为 0,则跳转到函数的结束位置(`exit` 标签)。
8. 将连接 ID `conn_id`、标记使用状态为 true、标记状态为初始化状态的值分别赋值给通道变量 `channel->conn_id`、`channel->used` 和 `channel->state`。
9. 返回变量 `rc`。
阅读全文