|
@@ -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;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|