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

+ 27 - 27
virtual_portal.c

@@ -2,7 +2,6 @@
 
 
 #include <furi_hal.h>
 #include <furi_hal.h>
 #include <stm32wbxx_ll_dma.h>
 #include <stm32wbxx_ll_dma.h>
-#include "g72x.h"
 #include "string.h"
 #include "string.h"
 #include "wav_player_hal.h"
 #include "wav_player_hal.h"
 
 
@@ -216,13 +215,8 @@ VirtualPortal* virtual_portal_alloc(NotificationApp* notifications) {
 
 
     furi_timer_start(virtual_portal->led_timer, 10);
     furi_timer_start(virtual_portal->led_timer, 10);
 
 
-    return virtual_portal;
-}
 
 
-void virtual_portal_set_type(VirtualPortal* virtual_portal, PoFType type) {
-    virtual_portal->type = type;
     if (furi_hal_speaker_acquire(1000)) {
     if (furi_hal_speaker_acquire(1000)) {
-        // wav_player_speaker_init(virtual_portal->type == PoFHid ? 8000 : 4000);
         wav_player_speaker_init(8000);
         wav_player_speaker_init(8000);
         wav_player_dma_init((uint32_t)virtual_portal->audio_buffer, SAMPLES_COUNT);
         wav_player_dma_init((uint32_t)virtual_portal->audio_buffer, SAMPLES_COUNT);
 
 
@@ -231,6 +225,12 @@ void virtual_portal_set_type(VirtualPortal* virtual_portal, PoFType type) {
         wav_player_speaker_start();
         wav_player_speaker_start();
         wav_player_dma_start();
         wav_player_dma_start();
     }
     }
+
+    return virtual_portal;
+}
+
+void virtual_portal_set_type(VirtualPortal* virtual_portal, PoFType type) {
+    virtual_portal->type = type;
 }
 }
 
 
 void virtual_portal_cleanup(VirtualPortal* virtual_portal) {
 void virtual_portal_cleanup(VirtualPortal* virtual_portal) {
@@ -404,7 +404,7 @@ int virtual_portal_send_status(VirtualPortal* virtual_portal, uint8_t* response)
     }
     }
     return 0;
     return 0;
 }
 }
-struct g72x_state state;
+
 // 4d01ff0000d0077d6c2a77a400000000
 // 4d01ff0000d0077d6c2a77a400000000
 int virtual_portal_m(VirtualPortal* virtual_portal, uint8_t* message, uint8_t* response) {
 int virtual_portal_m(VirtualPortal* virtual_portal, uint8_t* message, uint8_t* response) {
     virtual_portal->speaker = (message[1] == 1);
     virtual_portal->speaker = (message[1] == 1);
@@ -422,7 +422,7 @@ int virtual_portal_m(VirtualPortal* virtual_portal, uint8_t* message, uint8_t* r
     response[index++] = message[1];
     response[index++] = message[1];
     response[index++] = 0x00;
     response[index++] = 0x00;
     response[index++] = 0x19;
     response[index++] = 0x19;
-    g72x_init_state(&state);
+    g72x_init_state(&virtual_portal->state);
     return index;
     return index;
 }
 }
 
 
@@ -580,7 +580,7 @@ void virtual_portal_process_audio_360(
     uint8_t len) {
     uint8_t len) {
     for (size_t i = 0; i < len; i++) {
     for (size_t i = 0; i < len; i++) {
         
         
-        int16_t int_16 = (int16_t)g721_decoder(message[i],AUDIO_ENCODING_LINEAR, &state);
+        int16_t int_16 = (int16_t)g721_decoder(message[i],AUDIO_ENCODING_LINEAR, &virtual_portal->state);
 
 
         float data = ((float)int_16 / 256.0);
         float data = ((float)int_16 / 256.0);
         data /= UINT8_MAX / 2;  // scale -1..1
         data /= UINT8_MAX / 2;  // scale -1..1
@@ -604,29 +604,29 @@ void virtual_portal_process_audio_360(
             virtual_portal->head = virtual_portal->current_audio_buffer;
             virtual_portal->head = virtual_portal->current_audio_buffer;
         }
         }
 
 
-        // int_16 = (int16_t)g721_decoder(message[i] << 4,AUDIO_ENCODING_LINEAR, &state);
+        int_16 = (int16_t)g721_decoder(message[i] >> 4,AUDIO_ENCODING_LINEAR, &virtual_portal->state);
 
 
-        // data = ((float)int_16 / 256.0);
-        // data /= UINT8_MAX / 2;  // scale -1..1
+        data = ((float)int_16 / 256.0);
+        data /= UINT8_MAX / 2;  // scale -1..1
 
 
-        // data *= virtual_portal->volume;  // volume
-        // data = tanhf(data);              // hyperbolic tangent limiter
+        data *= virtual_portal->volume;  // volume
+        data = tanhf(data);              // hyperbolic tangent limiter
 
 
-        // data *= UINT8_MAX / 2;  // scale -128..127
-        // data += UINT8_MAX / 2;  // to unsigned
+        data *= UINT8_MAX / 2;  // scale -128..127
+        data += UINT8_MAX / 2;  // to unsigned
 
 
-        // if (data < 0) {
-        //     data = 0;
-        // }
+        if (data < 0) {
+            data = 0;
+        }
 
 
-        // if (data > 255) {
-        //     data = 255;
-        // }
-        // *virtual_portal->head = data;
-        // virtual_portal->count++;
-        // if (++virtual_portal->head == virtual_portal->end) {
-        //     virtual_portal->head = virtual_portal->current_audio_buffer;
-        // }
+        if (data > 255) {
+            data = 255;
+        }
+        *virtual_portal->head = data;
+        virtual_portal->count++;
+        if (++virtual_portal->head == virtual_portal->end) {
+            virtual_portal->head = virtual_portal->current_audio_buffer;
+        }
     }
     }
 }
 }
 
 

+ 2 - 0
virtual_portal.h

@@ -4,6 +4,7 @@
 #include <notification/notification_messages.h>
 #include <notification/notification_messages.h>
 
 
 #include "pof_token.h"
 #include "pof_token.h"
+#include "g72x.h"
 
 
 #define SAMPLE_RATE 8000
 #define SAMPLE_RATE 8000
 #define POF_TOKEN_LIMIT 16
 #define POF_TOKEN_LIMIT 16
@@ -67,6 +68,7 @@ typedef struct {
     VirtualPortalLed trap;
     VirtualPortalLed trap;
     FuriTimer* led_timer;
     FuriTimer* led_timer;
     FuriThread* thread;
     FuriThread* thread;
+    struct g72x_state state;
 } VirtualPortal;
 } VirtualPortal;
 
 
 VirtualPortal* virtual_portal_alloc(NotificationApp* notifications);
 VirtualPortal* virtual_portal_alloc(NotificationApp* notifications);