Sanjay Govind 10 месяцев назад
Родитель
Сommit
d2777bc30d
1 измененных файлов с 14 добавлено и 0 удалено
  1. 14 0
      virtual_portal.c

+ 14 - 0
virtual_portal.c

@@ -36,6 +36,9 @@ static void wav_player_dma_isr(void* ctx) {
     // half of transfer
     if (LL_DMA_IsActiveFlag_HT1(DMA1)) {
         LL_DMA_ClearFlag_HT1(DMA1);
+        if (!virtual_portal->playing_audio) {
+            return;
+        }
         // fill first half of buffer
         for (int i = 0; i < SAMPLES_COUNT / 2; i++) {
             if (!virtual_portal->count) {
@@ -53,6 +56,10 @@ static void wav_player_dma_isr(void* ctx) {
     // transfer complete
     if (LL_DMA_IsActiveFlag_TC1(DMA1)) {
         LL_DMA_ClearFlag_TC1(DMA1);
+
+        if (!virtual_portal->playing_audio) {
+            return;
+        }
         // fill second half of buffer
         for (int i = SAMPLES_COUNT / 2; i < SAMPLES_COUNT; i++) {
             if (!virtual_portal->count) {
@@ -406,6 +413,7 @@ int virtual_portal_m(VirtualPortal* virtual_portal, uint8_t* message, uint8_t* r
     virtual_portal->speaker = (message[1] != 0);
     virtual_portal->count = 0;
     virtual_portal->head = virtual_portal->tail = virtual_portal->audio_buffer;
+    virtual_portal->playing_audio = false;
     if (virtual_portal->speaker) {
         wav_player_speaker_start();
     } else {
@@ -578,6 +586,9 @@ void virtual_portal_process_audio(
         if (++virtual_portal->head == virtual_portal->end) {
             virtual_portal->head = virtual_portal->current_audio_buffer;
         }
+        if (virtual_portal->count > SAMPLES_COUNT) {
+            virtual_portal->playing_audio = true;
+        }
     }
 }
 
@@ -636,6 +647,9 @@ void virtual_portal_process_audio_360(
         if (++virtual_portal->head == virtual_portal->end) {
             virtual_portal->head = virtual_portal->current_audio_buffer;
         }
+        if (virtual_portal->count > SAMPLES_COUNT) {
+            virtual_portal->playing_audio = true;
+        }
     }
 }