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

+ 12 - 14
virtual_portal.c

@@ -2,8 +2,9 @@
 
 #include <furi_hal.h>
 #include <stm32wbxx_ll_dma.h>
-#include "string.h"
+
 #include "audio/wav_player_hal.h"
+#include "string.h"
 
 #define TAG "VirtualPortal"
 
@@ -210,14 +211,12 @@ VirtualPortal* virtual_portal_alloc(NotificationApp* notifications) {
 
     furi_timer_start(virtual_portal->led_timer, 10);
 
-
     if (furi_hal_speaker_acquire(1000)) {
         wav_player_speaker_init(8000);
         wav_player_dma_init((uint32_t)virtual_portal->audio_buffer, SAMPLES_COUNT);
 
         furi_hal_interrupt_set_isr(FuriHalInterruptIdDma1Ch1, wav_player_dma_isr, virtual_portal);
 
-        wav_player_speaker_start();
         wav_player_dma_start();
     }
 
@@ -353,8 +352,8 @@ int virtual_portal_reset(VirtualPortal* virtual_portal, uint8_t* message, uint8_
 
     uint8_t index = 0;
     response[index++] = 'R';
-    response[index++] = 0x02; // Trap Team Xbox One
-    response[index++] = 0x27; // Trap Team Xbox One
+    response[index++] = 0x02;  // Trap Team Xbox One
+    response[index++] = 0x27;  // Trap Team Xbox One
 
     // response[index++] = 0x02; // Swap Force 3DS
     // response[index++] = 0x02; // Swap Force 3DS
@@ -405,12 +404,13 @@ int virtual_portal_m(VirtualPortal* virtual_portal, uint8_t* message, uint8_t* r
     // Activate speaker for any non-zero value in the range 01-FF
     virtual_portal->speaker = (message[1] != 0);
     if (virtual_portal->speaker) {
+        if (!virtual_portal->playing_audio) {
+            wav_player_speaker_start();
+        }
         virtual_portal->count = 0;
         virtual_portal->head = virtual_portal->tail = virtual_portal->current_audio_buffer;
-        virtual_portal->playing_audio = false;
-        // wav_player_dma_stop();
-        // wav_player_dma_start();
-    } 
+        virtual_portal->playing_audio = true;
+    }
     /*
     char display[33] = {0};
     for(size_t i = 0; i < BLOCK_SIZE; i++) {
@@ -539,7 +539,6 @@ int virtual_portal_write(VirtualPortal* virtual_portal, uint8_t* message, uint8_
 
     mf_classic_free(data);
 
-
     nfc_device_save(nfc_device, furi_string_get_cstr(pof_token->load_path));
 
     response[0] = 'W';
@@ -588,7 +587,6 @@ void virtual_portal_process_audio_360(
     uint8_t* message,
     uint8_t len) {
     for (size_t i = 0; i < len; i++) {
-        
         int16_t int_16 = (int16_t)g721_decoder(message[i], &virtual_portal->state);
 
         float data = ((float)int_16 / 256.0);
@@ -660,14 +658,14 @@ int virtual_portal_process_message(
             return virtual_portal_m(virtual_portal, message, response);
         case 'Q':  // Query
             if (!virtual_portal->active) {
-                return 0; // No response if portal is not active
+                return 0;  // No response if portal is not active
             }
             return virtual_portal_query(virtual_portal, message, response);
         case 'R':
             return virtual_portal_reset(virtual_portal, message, response);
         case 'S':  // Status
             if (!virtual_portal->active) {
-                return 0; // No response if portal is not active
+                return 0;  // No response if portal is not active
             }
             return virtual_portal_status(virtual_portal, response);
         case 'V':
@@ -675,7 +673,7 @@ int virtual_portal_process_message(
             return 0;
         case 'W':  // Write
             if (!virtual_portal->active) {
-                return 0; // No response if portal is not active
+                return 0;  // No response if portal is not active
             }
             return virtual_portal_write(virtual_portal, message, response);
         case 'Z':