소스 검색

fix speaker issues due to api change, fix switch statement, add icon in external folder

Felix Pankratz 3 년 전
부모
커밋
3003355eb7
4개의 변경된 파일19개의 추가작업 그리고 3개의 파일을 삭제
  1. 1 0
      application.fam
  2. 1 0
      gui_extensions.c
  3. BIN
      icons/ButtonUp_7x4.png
  4. 17 3
      metronome.c

+ 1 - 0
application.fam

@@ -8,6 +8,7 @@ App(
         "gui",
     ],
     fap_icon="metronome_icon.png",
+    fap_icon_assets="icons",
     fap_category="Music",
     stack_size=2 * 1024,
     order=20,

+ 1 - 0
gui_extensions.c

@@ -1,5 +1,6 @@
 #include <gui/canvas.h>
 #include <gui/icon_i.h>
+#include "metronome_icons.h"
 
 //lib can only do bottom left/right
 void elements_button_top_left(Canvas* canvas, const char* str) {

BIN
icons/ButtonUp_7x4.png


+ 17 - 3
metronome.c

@@ -135,7 +135,9 @@ static void timer_callback(void* ctx) {
     notification_message(metronome_state->notifications, &sequence_set_only_red_255);
     switch(metronome_state->output_mode) {
       case Loud:
-        furi_hal_speaker_start(440.0f, 1.0f);
+        if (furi_hal_speaker_acquire(1000)) {
+          furi_hal_speaker_start(440.0f, 1.0f);
+        }
         break;
       case Vibro:
         notification_message(metronome_state->notifications, &sequence_set_vibro_on);
@@ -148,7 +150,9 @@ static void timer_callback(void* ctx) {
     notification_message(metronome_state->notifications, &sequence_set_only_green_255);
     switch(metronome_state->output_mode) {
       case Loud:
-        furi_hal_speaker_start(220.0f, 1.0f);
+        if (furi_hal_speaker_acquire(1000)) {
+          furi_hal_speaker_start(220.0f, 1.0f);
+        }
         break;
       case Vibro:
         notification_message(metronome_state->notifications, &sequence_set_vibro_on);
@@ -162,7 +166,10 @@ static void timer_callback(void* ctx) {
   switch(metronome_state->output_mode) {
     case Loud:
       furi_delay_ms(BEEP_DELAY_MS);
-      furi_hal_speaker_stop();
+      if (furi_hal_speaker_is_mine()) {
+        furi_hal_speaker_stop();
+        furi_hal_speaker_release();
+      }
       break;
     case Vibro:
       if (metronome_state->current_beat == 1) {
@@ -269,6 +276,7 @@ int32_t metronome_app() {
   metronome_state->timer = furi_timer_alloc(timer_callback, FuriTimerTypePeriodic, &state_mutex);
 
   // Open GUI and register view_port
+  //
   Gui* gui = furi_record_open("gui");
   gui_add_view_port(gui, view_port, GuiLayerFullscreen);
 
@@ -306,6 +314,8 @@ int32_t metronome_app() {
             case InputKeyBack:
                 processing = false;
                 break;
+            case InputKeyMAX:
+                break;
           }
         } else if (event.input.type == InputTypeLong) {
           // hold events
@@ -326,6 +336,8 @@ int32_t metronome_app() {
             case InputKeyBack:
               processing = false;
               break;
+            case InputKeyMAX:
+              break;
           }
         } else if (event.input.type == InputTypeRepeat) {
           // repeat events
@@ -345,6 +357,8 @@ int32_t metronome_app() {
             case InputKeyBack:
               processing = false;
               break;
+            case InputKeyMAX:
+              break;
           }
         }
       }