mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
ble_mesh: Skip publish if update fails [Zephyr]
Allow models to skip a periodic publish interval by returning an error from the publish update callback. Previously, an error return from publish update would cancel periodic publishing. This can't be recovered from, and as such, no valid model implementation could return an error from this callback, and there was no way to skip a periodic publish.
This commit is contained in:
parent
aad8908d9c
commit
6c868a070b
@ -427,6 +427,14 @@ static int publish_retransmit(struct bt_mesh_model *mod)
|
||||
return err;
|
||||
}
|
||||
|
||||
static void publish_retransmit_end(int err, struct bt_mesh_model_pub *pub)
|
||||
{
|
||||
/* Cancel all retransmits for this publish attempt */
|
||||
pub->count = 0U;
|
||||
/* Make sure the publish timer gets reset */
|
||||
publish_sent(err, pub->mod);
|
||||
}
|
||||
|
||||
static void mod_publish(struct k_work *work)
|
||||
{
|
||||
struct bt_mesh_model_pub *pub = CONTAINER_OF(work,
|
||||
@ -468,7 +476,10 @@ static void mod_publish(struct k_work *work)
|
||||
*/
|
||||
err = pub->update(pub->mod);
|
||||
if (err) {
|
||||
BT_ERR("%s, Failed to update publication message", __func__);
|
||||
/* Cancel this publish attempt. */
|
||||
BT_ERR("Update failed, skipping publish (err %d)", err);
|
||||
pub->period_start = k_uptime_get_32();
|
||||
publish_retransmit_end(err, pub);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1079,10 +1090,7 @@ int bt_mesh_model_publish(struct bt_mesh_model *model)
|
||||
|
||||
err = model_send(model, &tx, true, sdu, &pub_sent_cb, model);
|
||||
if (err) {
|
||||
/* Don't try retransmissions for this publish attempt */
|
||||
pub->count = 0U;
|
||||
/* Make sure the publish timer gets reset */
|
||||
publish_sent(err, model);
|
||||
publish_retransmit_end(err, pub);
|
||||
}
|
||||
|
||||
bt_mesh_free_buf(sdu);
|
||||
|
@ -367,6 +367,9 @@ struct bt_mesh_model_pub {
|
||||
* @ref bt_mesh_model_pub.msg with a valid publication
|
||||
* message.
|
||||
*
|
||||
* If the callback returns non-zero, the publication is skipped
|
||||
* and will resume on the next periodic publishing interval.
|
||||
*
|
||||
* @param mod The Model the Publication Context belogs to.
|
||||
*
|
||||
* @return Zero on success or (negative) error code otherwise.
|
||||
|
Loading…
x
Reference in New Issue
Block a user