diff --git a/src/drivers/telemetry/iridiumsbd/IridiumSBD.cpp b/src/drivers/telemetry/iridiumsbd/IridiumSBD.cpp index a488e764ed..41c1bc4e1d 100644 --- a/src/drivers/telemetry/iridiumsbd/IridiumSBD.cpp +++ b/src/drivers/telemetry/iridiumsbd/IridiumSBD.cpp @@ -332,7 +332,7 @@ void IridiumSBD::standby_loop(void) } // write the MO buffer when the message stacking time expires - if ((tx_buf_write_idx > 0) && ((hrt_absolute_time() - last_write_time) > (uint64_t)param_stacking_time_ms * 1000)) { + if (tx_buf_write_pending && ((hrt_absolute_time() - last_write_time) > (uint64_t)param_stacking_time_ms * 1000)) { write_tx_buf(); } @@ -614,6 +614,7 @@ ssize_t IridiumSBD::write(struct file *filp, const char *buffer, size_t buflen) tx_buf_write_idx += buflen; last_write_time = hrt_absolute_time(); + tx_buf_write_pending = true; pthread_mutex_unlock(&tx_buf_mutex); @@ -695,6 +696,8 @@ void IridiumSBD::write_tx_buf() VERBOSE_INFO("WRITE SBD: DATA WRITTEN TO MODEM"); + tx_buf_write_pending = false; + pthread_mutex_unlock(&tx_buf_mutex); tx_session_pending = true; diff --git a/src/drivers/telemetry/iridiumsbd/IridiumSBD.h b/src/drivers/telemetry/iridiumsbd/IridiumSBD.h index 574ed4e79a..92f8afa40d 100644 --- a/src/drivers/telemetry/iridiumsbd/IridiumSBD.h +++ b/src/drivers/telemetry/iridiumsbd/IridiumSBD.h @@ -289,6 +289,7 @@ private: uint8_t tx_buf[SATCOM_TX_BUF_LEN] = {0}; int tx_buf_write_idx = 0; + bool tx_buf_write_pending = false; bool ring_pending = false; bool rx_session_pending = false; bool rx_read_pending = false;