ipc_service: icmsg: Trigger data read after magic

After magic is read during bound procedure, trigger an
initial data read. This is to ensure data is not missed
when piggybacked on magic's exchange interrupt.

Signed-off-by: Pawel Dunaj <pawel.dunaj@nordicsemi.no>
This commit is contained in:
Pawel Dunaj 2022-09-13 09:18:43 +02:00 committed by Fabio Baltieri
commit 3676aeff78

View file

@ -65,14 +65,6 @@ static void mbox_callback_process(struct k_work *item)
if (dev_data->cfg->cb.received) {
dev_data->cfg->cb.received(cb_buffer, len, dev_data->cfg->priv);
}
/* Reading with NULL buffer to know if there are data in the
* buffer to be read.
*/
len = spsc_pbuf_read(dev_data->rx_ib, NULL, 0);
if (len > 0) {
(void)k_work_submit(&dev_data->mbox_work);
}
} else {
__ASSERT_NO_MSG(state == ICMSG_STATE_BUSY);
if (len != sizeof(magic) || memcmp(magic, cb_buffer, len)) {
@ -86,6 +78,19 @@ static void mbox_callback_process(struct k_work *item)
atomic_set(&dev_data->state, ICMSG_STATE_READY);
}
/* Reading with NULL buffer to know if there are data in the
* buffer to be read.
*/
len = spsc_pbuf_read(dev_data->rx_ib, NULL, 0);
if (len > 0) {
if (k_work_submit(&dev_data->mbox_work) < 0) {
/* The mbox processing work is never canceled.
* The negative error code should never be seen.
*/
__ASSERT_NO_MSG(false);
}
}
}
static void mbox_callback(const struct device *instance, uint32_t channel,