Bluetooth: Mesh: Fix issue where dfu_cli could get stuck
This fixes an issue where the DFU client could get stuck trying to transmit a message to servers if the DFU client was misconfigured, for instance missing application key or network key. Signed-off-by: Ludvig Jordet <ludvig.jordet@nordicsemi.no>
This commit is contained in:
parent
281ffe5b4f
commit
c613e23b4a
1 changed files with 22 additions and 5 deletions
|
@ -305,6 +305,23 @@ static void tx_end(int err, void *cb_data)
|
|||
blob_cli_broadcast_tx_complete(&cli->blob);
|
||||
}
|
||||
|
||||
static int tx(struct bt_mesh_model *mod, struct bt_mesh_msg_ctx *ctx, struct net_buf_simple *buf,
|
||||
const struct bt_mesh_send_cb *cb, struct bt_mesh_dfu_cli *cli)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = bt_mesh_model_send(mod, ctx, buf, cb, cli);
|
||||
if (err) {
|
||||
LOG_ERR("Send err: %d", err);
|
||||
if (cb) {
|
||||
cb->end(err, cli);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int info_get(struct bt_mesh_dfu_cli *cli, struct bt_mesh_msg_ctx *ctx,
|
||||
uint8_t idx, uint8_t max_count,
|
||||
const struct bt_mesh_send_cb *cb)
|
||||
|
@ -314,7 +331,7 @@ static int info_get(struct bt_mesh_dfu_cli *cli, struct bt_mesh_msg_ctx *ctx,
|
|||
net_buf_simple_add_u8(&buf, idx);
|
||||
net_buf_simple_add_u8(&buf, max_count);
|
||||
|
||||
return bt_mesh_model_send(cli->mod, ctx, &buf, cb, cli);
|
||||
return tx(cli->mod, ctx, &buf, cb, cli);
|
||||
}
|
||||
|
||||
static void send_info_get(struct bt_mesh_blob_cli *b, uint16_t dst)
|
||||
|
@ -352,7 +369,7 @@ static void send_update_start(struct bt_mesh_blob_cli *b, uint16_t dst)
|
|||
net_buf_simple_add_mem(&buf, cli->xfer.slot->metadata,
|
||||
cli->xfer.slot->metadata_len);
|
||||
|
||||
bt_mesh_model_send(cli->mod, &ctx, &buf, &send_cb, cli);
|
||||
(void)tx(cli->mod, &ctx, &buf, &send_cb, cli);
|
||||
}
|
||||
|
||||
static void send_update_get(struct bt_mesh_blob_cli *b, uint16_t dst)
|
||||
|
@ -363,7 +380,7 @@ static void send_update_get(struct bt_mesh_blob_cli *b, uint16_t dst)
|
|||
BT_MESH_MODEL_BUF_DEFINE(buf, BT_MESH_DFU_OP_UPDATE_GET, 0);
|
||||
bt_mesh_model_msg_init(&buf, BT_MESH_DFU_OP_UPDATE_GET);
|
||||
|
||||
bt_mesh_model_send(cli->mod, &ctx, &buf, &send_cb, cli);
|
||||
(void)tx(cli->mod, &ctx, &buf, &send_cb, cli);
|
||||
}
|
||||
|
||||
static void send_update_cancel(struct bt_mesh_blob_cli *b, uint16_t dst)
|
||||
|
@ -374,7 +391,7 @@ static void send_update_cancel(struct bt_mesh_blob_cli *b, uint16_t dst)
|
|||
BT_MESH_MODEL_BUF_DEFINE(buf, BT_MESH_DFU_OP_UPDATE_CANCEL, 0);
|
||||
bt_mesh_model_msg_init(&buf, BT_MESH_DFU_OP_UPDATE_CANCEL);
|
||||
|
||||
bt_mesh_model_send(cli->mod, &ctx, &buf, &send_cb, cli);
|
||||
(void)tx(cli->mod, &ctx, &buf, &send_cb, cli);
|
||||
}
|
||||
|
||||
static void send_update_apply(struct bt_mesh_blob_cli *b, uint16_t dst)
|
||||
|
@ -385,7 +402,7 @@ static void send_update_apply(struct bt_mesh_blob_cli *b, uint16_t dst)
|
|||
BT_MESH_MODEL_BUF_DEFINE(buf, BT_MESH_DFU_OP_UPDATE_APPLY, 0);
|
||||
bt_mesh_model_msg_init(&buf, BT_MESH_DFU_OP_UPDATE_APPLY);
|
||||
|
||||
bt_mesh_model_send(cli->mod, &ctx, &buf, &send_cb, cli);
|
||||
(void)tx(cli->mod, &ctx, &buf, &send_cb, cli);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue