@@ -245,6 +245,24 @@ int MyMesh::getFromOfflineQueue(uint8_t frame[]) {
245245 return 0 ; // queue is empty
246246}
247247
248+ int MyMesh::peekOfflineQueue (uint8_t frame[]) {
249+ if (offline_queue_len > 0 ) {
250+ size_t len = offline_queue[0 ].len ;
251+ memcpy (frame, offline_queue[0 ].buf , len);
252+ return len;
253+ }
254+ return 0 ;
255+ }
256+
257+ void MyMesh::popOfflineQueue () {
258+ if (offline_queue_len > 0 ) {
259+ offline_queue_len--;
260+ for (int i = 0 ; i < offline_queue_len; i++) {
261+ offline_queue[i] = offline_queue[i + 1 ];
262+ }
263+ }
264+ }
265+
248266float MyMesh::getAirtimeBudgetFactor () const {
249267 return _prefs.airtime_factor ;
250268}
@@ -1228,11 +1246,13 @@ void MyMesh::handleCmdFrame(size_t len) {
12281246 }
12291247 } else if (cmd_frame[0 ] == CMD_SYNC_NEXT_MESSAGE) {
12301248 int out_len;
1231- if ((out_len = getFromOfflineQueue (out_frame)) > 0 ) {
1232- _serial->writeFrame (out_frame, out_len);
1249+ if ((out_len = peekOfflineQueue (out_frame)) > 0 ) {
1250+ if (_serial->writeFrame (out_frame, out_len) > 0 ) {
1251+ popOfflineQueue ();
12331252#ifdef DISPLAY_CLASS
1234- if (_ui) _ui->msgRead (offline_queue_len);
1253+ if (_ui) _ui->msgRead (offline_queue_len);
12351254#endif
1255+ }
12361256 } else {
12371257 out_frame[0 ] = RESP_CODE_NO_MORE_MESSAGES;
12381258 _serial->writeFrame (out_frame, 1 );
0 commit comments