@@ -56,37 +56,37 @@ class L2CAPChannelCallbacks: public BLEL2CAPChannelCallbacks {
5656 if (startTime == 0 ) {
5757 startTime = esp_timer_get_time (); // start measuring once data flows
5858 }
59-
59+
6060 // Process complete frames from buffer
6161 while (buffer.size () >= 3 ) { // Minimum frame size: seqno(1) + len(2)
6262 // Parse frame header
6363 uint8_t seqno = buffer[0 ];
6464 uint16_t payloadLen = (buffer[1 ] << 8 ) | buffer[2 ]; // Big-endian
65-
65+
6666 size_t frameSize = 3 + payloadLen;
67-
67+
6868 // Check if we have complete frame
6969 if (buffer.size () < frameSize) {
7070 break ; // Wait for more data
7171 }
72-
72+
7373 // Validate and process frame
7474 totalFramesReceived++;
7575 totalPayloadBytes += payloadLen;
76-
76+
7777 // Check sequence number
7878 if (seqno != expectedSequenceNumber) {
7979 sequenceErrors++;
80- printf (" Frame %zu: Sequence error - got %d, expected %d (payload=%d bytes)\n " ,
80+ printf (" Frame %zu: Sequence error - got %d, expected %d (payload=%d bytes)\n " ,
8181 totalFramesReceived, seqno, expectedSequenceNumber, payloadLen);
8282 }
83-
83+
8484 // Update expected sequence number (wraps at 256)
8585 expectedSequenceNumber = (seqno + 1 ) & 0xFF ;
86-
86+
8787 // Remove processed frame from buffer
8888 buffer.erase (buffer.begin (), buffer.begin () + frameSize);
89-
89+
9090 // Print progress every 100 frames
9191 if (totalFramesReceived % 100 == 0 ) {
9292 double elapsedSeconds = (esp_timer_get_time () - startTime) / 1000000.0 ;
@@ -97,7 +97,7 @@ class L2CAPChannelCallbacks: public BLEL2CAPChannelCallbacks {
9797 }
9898 }
9999 }
100-
100+
101101 void onDisconnect (NimBLEL2CAPChannel* channel) {
102102 printf (" \n L2CAP disconnected\n " );
103103 double elapsedSeconds = startTime > 0 ? (esp_timer_get_time () - startTime) / 1000000.0 : 0.0 ;
@@ -141,10 +141,10 @@ void app_main(void) {
141141 auto l2capChannelCallbacks = new L2CAPChannelCallbacks ();
142142 auto channel = cocServer->createService (L2CAP_PSM , L2CAP_MTU , l2capChannelCallbacks);
143143 (void )channel; // prevent unused warning
144-
144+
145145 auto server = BLEDevice::createServer ();
146146 server->setCallbacks (new GATTCallbacks ());
147-
147+
148148 auto advertising = BLEDevice::getAdvertising ();
149149 NimBLEAdvertisementData scanData;
150150 scanData.setName (" l2cap" );
@@ -156,46 +156,46 @@ void app_main(void) {
156156 // Status reporting loop
157157 while (true ) {
158158 vTaskDelay (1000 / portTICK_PERIOD_MS);
159-
159+
160160 if (l2capChannelCallbacks->connected && l2capChannelCallbacks->totalBytesReceived > 0 ) {
161161 uint64_t currentTime = esp_timer_get_time ();
162162 double elapsedSeconds = (currentTime - l2capChannelCallbacks->startTime ) / 1000000.0 ;
163-
163+
164164 if (elapsedSeconds > 0 ) {
165165 double bytesPerSecond = l2capChannelCallbacks->totalBytesReceived / elapsedSeconds;
166166 double framesPerSecond = l2capChannelCallbacks->totalFramesReceived / elapsedSeconds;
167-
167+
168168 // Heap monitoring
169169 size_t currentHeap = esp_get_free_heap_size ();
170170 size_t minHeap = esp_get_minimum_free_heap_size ();
171-
171+
172172 // Track heap for leak detection
173173 if (initialHeap == 0 ) {
174174 initialHeap = currentHeap;
175175 lastHeap = currentHeap;
176176 }
177-
177+
178178 // Check for consistent heap decrease
179179 if (currentHeap < lastHeap) {
180180 heapDecreaseCount++;
181181 if (heapDecreaseCount >= HEAP_LEAK_THRESHOLD ) {
182182 printf (" \n ⚠️ WARNING: POSSIBLE MEMORY LEAK DETECTED! ⚠️\n " );
183183 printf (" Heap has decreased %zu times in a row\n " , heapDecreaseCount);
184- printf (" Initial heap: %zu, Current heap: %zu, Lost: %zu bytes\n " ,
184+ printf (" Initial heap: %zu, Current heap: %zu, Lost: %zu bytes\n " ,
185185 initialHeap, currentHeap, initialHeap - currentHeap);
186186 }
187187 } else if (currentHeap >= lastHeap) {
188188 heapDecreaseCount = 0 ; // Reset counter if heap stabilizes or increases
189189 }
190190 lastHeap = currentHeap;
191-
191+
192192 printf (" \n === STATUS UPDATE ===\n " );
193193 printf (" Frames received: %zu (%.1f fps)\n " , l2capChannelCallbacks->totalFramesReceived , framesPerSecond);
194194 printf (" Total bytes: %zu\n " , l2capChannelCallbacks->totalBytesReceived );
195195 printf (" Payload bytes: %zu\n " , l2capChannelCallbacks->totalPayloadBytes );
196196 printf (" Bandwidth: %.2f KB/s (%.2f Mbps)\n " , bytesPerSecond / 1024.0 , (bytesPerSecond * 8 ) / 1000000.0 );
197197 printf (" Sequence errors: %zu\n " , l2capChannelCallbacks->sequenceErrors );
198- printf (" Heap: %zu free (min: %zu), Used since start: %zu\n " ,
198+ printf (" Heap: %zu free (min: %zu), Used since start: %zu\n " ,
199199 currentHeap, minHeap, initialHeap > 0 ? initialHeap - currentHeap : 0 );
200200 printf (" ==================\n " );
201201 }
0 commit comments