@@ -118,17 +118,24 @@ void SerialBLEInterface::onWrite(BLECharacteristic* pCharacteristic, esp_ble_gat
118118
119119 if (len > MAX_FRAME_SIZE ) {
120120 BLE_DEBUG_PRINTLN (" ERROR: onWrite(), frame too big, len=%d" , len);
121- } else if (recv_queue_len >= FRAME_QUEUE_SIZE ) {
122- BLE_DEBUG_PRINTLN (" ERROR: onWrite(), recv_queue is full!" );
123121 } else {
124- recv_queue[recv_queue_len].len = len;
125- memcpy (recv_queue[recv_queue_len].buf , rxValue, len);
126- recv_queue_len++;
122+ Frame frame = {};
123+ frame.len = len;
124+ memcpy (frame.buf , rxValue, len);
125+
126+ if (xQueueSend (recv_queue, &frame, 0 ) != pdTRUE) {
127+ BLE_DEBUG_PRINTLN (" ERROR: onWrite(), recv_queue is full!" );
128+ }
127129 }
128130}
129131
130132// ---------- public methods
131133
134+ void SerialBLEInterface::clearBuffers () {
135+ xQueueReset (recv_queue);
136+ send_queue_len = 0 ;
137+ }
138+
132139void SerialBLEInterface::enable () {
133140 if (_isEnabled) return ;
134141
@@ -202,17 +209,11 @@ size_t SerialBLEInterface::checkRecvFrame(uint8_t dest[]) {
202209 }
203210 }
204211
205- if (recv_queue_len > 0 ) { // check recv queue
206- size_t len = recv_queue[0 ].len ; // take from top of queue
207- memcpy (dest, recv_queue[0 ].buf , len);
208-
209- BLE_DEBUG_PRINTLN (" readBytes: sz=%d, hdr=%d" , len, (uint32_t ) dest[0 ]);
210-
211- recv_queue_len--;
212- for (int i = 0 ; i < recv_queue_len; i++) { // delete top item from queue
213- recv_queue[i] = recv_queue[i + 1 ];
214- }
215- return len;
212+ Frame frame = {};
213+ if (xQueueReceive (recv_queue, &frame, 0 ) == pdTRUE) {
214+ memcpy (dest, frame.buf , frame.len );
215+ BLE_DEBUG_PRINTLN (" readBytes: sz=%d, hdr=%d" , (uint32_t ) frame.len , (uint32_t ) dest[0 ]);
216+ return frame.len ;
216217 }
217218
218219 if (pServer->getConnectedCount () == 0 ) deviceConnected = false ;
0 commit comments