Cathy Nguyen 3 лет назад
Родитель
Сommit
1fab4dd0f0
1 измененных файлов с 298 добавлено и 182 удалено
  1. 298 182
      tama_p1.c

+ 298 - 182
tama_p1.c

@@ -10,8 +10,16 @@
 
 
 TamaApp* g_ctx;
 TamaApp* g_ctx;
 FuriMutex* g_state_mutex;
 FuriMutex* g_state_mutex;
-bool portrait_mode;
-// bool in_menu;
+bool portrait_mode = false;
+bool in_menu = false;
+
+int menu_cursor = 0;
+
+const int menu_items = 2;
+// char* menu_strings[2][2] = {
+//     {"Portrait", "Landscape"},
+//     {"Mute", "Mute2"},
+// };
 
 
 static const Icon* icons_list[] = {
 static const Icon* icons_list[] = {
     &I_icon_0,
     &I_icon_0,
@@ -23,85 +31,159 @@ static const Icon* icons_list[] = {
     &I_icon_6,
     &I_icon_6,
     &I_icon_7,
     &I_icon_7,
 };
 };
-static void draw_landscape(Canvas* const canvas, void* cb_ctx) {
-    furi_assert(cb_ctx);
 
 
-    FuriMutex* const mutex = cb_ctx;
-    if(furi_mutex_acquire(mutex, 25) != FuriStatusOk) return;
-
-    if(g_ctx->rom == NULL) {
-        canvas_set_font(canvas, FontPrimary);
-        canvas_draw_str(canvas, 30, 30, "No ROM");
-    } else if(g_ctx->halted) {
-        canvas_set_font(canvas, FontPrimary);
-        canvas_draw_str(canvas, 30, 30, "Halted");
-    } else {
-        // FURI_LOG_D(TAG, "Drawing frame");
-        // Calculate positioning
-        uint16_t canv_width = canvas_width(canvas);
-        uint16_t canv_height = canvas_height(canvas);
-        uint16_t lcd_matrix_scaled_width = 32 * TAMA_SCREEN_SCALE_FACTOR;
-        uint16_t lcd_matrix_scaled_height = 16 * TAMA_SCREEN_SCALE_FACTOR;
-        // uint16_t lcd_matrix_top = 0;
-        uint16_t lcd_matrix_top = (canv_height - lcd_matrix_scaled_height) / 2;
-        uint16_t lcd_matrix_left = (canv_width - lcd_matrix_scaled_width) / 2;
-
-        uint16_t lcd_icon_upper_top = lcd_matrix_top - TAMA_LCD_ICON_SIZE - TAMA_LCD_ICON_MARGIN;
-        uint16_t lcd_icon_upper_left = lcd_matrix_left;
-        uint16_t lcd_icon_lower_top =
-            lcd_matrix_top + lcd_matrix_scaled_height + TAMA_LCD_ICON_MARGIN;
-        uint16_t lcd_icon_lower_left = lcd_matrix_left;
-        uint16_t lcd_icon_spacing_horiz =
-            (lcd_matrix_scaled_width - (4 * TAMA_LCD_ICON_SIZE)) / 3 + TAMA_LCD_ICON_SIZE;
-
-        uint16_t y = lcd_matrix_top;
-        for(uint8_t row = 0; row < 16; ++row) {
-            uint16_t x = lcd_matrix_left;
-            uint32_t row_pixels = g_ctx->framebuffer[row];
-            for(uint8_t col = 0; col < 32; ++col) {
-                if(row_pixels & 1) {
-                    canvas_draw_box(
-                        canvas, x, y, TAMA_SCREEN_SCALE_FACTOR, TAMA_SCREEN_SCALE_FACTOR);
-                }
-                x += TAMA_SCREEN_SCALE_FACTOR;
-                row_pixels >>= 1;
+// static void draw_landscape(Canvas* const canvas, void* cb_ctx)
+static void draw_landscape(Canvas* const canvas) {
+    // FURI_LOG_D(TAG, "Drawing frame");
+    // Calculate positioning
+    uint16_t canv_width = canvas_width(canvas);
+    uint16_t canv_height = canvas_height(canvas);
+    uint16_t lcd_matrix_scaled_width = 32 * TAMA_SCREEN_SCALE_FACTOR;
+    uint16_t lcd_matrix_scaled_height = 16 * TAMA_SCREEN_SCALE_FACTOR;
+    // uint16_t lcd_matrix_top = 0;
+    uint16_t lcd_matrix_top = (canv_height - lcd_matrix_scaled_height) / 2;
+    uint16_t lcd_matrix_left = (canv_width - lcd_matrix_scaled_width) / 2;
+
+    uint16_t lcd_icon_upper_top = lcd_matrix_top - TAMA_LCD_ICON_SIZE - TAMA_LCD_ICON_MARGIN;
+    uint16_t lcd_icon_upper_left = lcd_matrix_left;
+    uint16_t lcd_icon_lower_top = lcd_matrix_top + lcd_matrix_scaled_height + TAMA_LCD_ICON_MARGIN;
+    uint16_t lcd_icon_lower_left = lcd_matrix_left;
+    uint16_t lcd_icon_spacing_horiz =
+        (lcd_matrix_scaled_width - (4 * TAMA_LCD_ICON_SIZE)) / 3 + TAMA_LCD_ICON_SIZE;
+
+    uint16_t y = lcd_matrix_top;
+    for(uint8_t row = 0; row < 16; ++row) {
+        uint16_t x = lcd_matrix_left;
+        uint32_t row_pixels = g_ctx->framebuffer[row];
+        for(uint8_t col = 0; col < 32; ++col) {
+            if(row_pixels & 1) {
+                canvas_draw_box(canvas, x, y, TAMA_SCREEN_SCALE_FACTOR, TAMA_SCREEN_SCALE_FACTOR);
             }
             }
-            y += TAMA_SCREEN_SCALE_FACTOR;
+            x += TAMA_SCREEN_SCALE_FACTOR;
+            row_pixels >>= 1;
         }
         }
+        y += TAMA_SCREEN_SCALE_FACTOR;
+    }
 
 
-        // Start drawing icons
-        uint8_t lcd_icons = g_ctx->icons;
+    // Start drawing icons
+    uint8_t lcd_icons = g_ctx->icons;
 
 
-        // Draw top icons
-        y = lcd_icon_upper_top;
-        // y = 64 - TAMA_LCD_ICON_SIZE;
-        uint16_t x_ic = lcd_icon_upper_left;
-        for(uint8_t i = 0; i < 4; ++i) {
-            if(lcd_icons & 1) {
-                canvas_draw_icon(canvas, x_ic, y, icons_list[i]);
-            }
-            // x_ic += TAMA_LCD_ICON_SIZE + 4;
-            x_ic += lcd_icon_spacing_horiz;
-            lcd_icons >>= 1;
+    // Draw top icons
+    y = lcd_icon_upper_top;
+    // y = 64 - TAMA_LCD_ICON_SIZE;
+    uint16_t x_ic = lcd_icon_upper_left;
+    for(uint8_t i = 0; i < 4; ++i) {
+        if(lcd_icons & 1) {
+            canvas_draw_icon(canvas, x_ic, y, icons_list[i]);
         }
         }
+        // x_ic += TAMA_LCD_ICON_SIZE + 4;
+        x_ic += lcd_icon_spacing_horiz;
+        lcd_icons >>= 1;
+    }
 
 
-        // Draw bottom icons
-        y = lcd_icon_lower_top;
-        x_ic = lcd_icon_lower_left;
-        for(uint8_t i = 4; i < 8; ++i) {
-            // canvas_draw_frame(canvas, x_ic, y, TAMA_LCD_ICON_SIZE, TAMA_LCD_ICON_SIZE);
-            if(lcd_icons & 1) {
-                canvas_draw_icon(canvas, x_ic, y, icons_list[i]);
+    // Draw bottom icons
+    y = lcd_icon_lower_top;
+    x_ic = lcd_icon_lower_left;
+    for(uint8_t i = 4; i < 8; ++i) {
+        // canvas_draw_frame(canvas, x_ic, y, TAMA_LCD_ICON_SIZE, TAMA_LCD_ICON_SIZE);
+        if(lcd_icons & 1) {
+            canvas_draw_icon(canvas, x_ic, y, icons_list[i]);
+        }
+        x_ic += lcd_icon_spacing_horiz;
+        lcd_icons >>= 1;
+    }
+}
+
+// static void draw_portrait(Canvas* const canvas, void* cb_ctx)
+static void draw_portrait(Canvas* const canvas) {
+    // FURI_LOG_D(TAG, "Drawing frame");
+    // Calculate positioning
+    // uint16_t canv_width = canvas_width(canvas);
+    uint16_t canv_height = canvas_height(canvas);
+    uint16_t lcd_matrix_scaled_width = 32 * TAMA_SCREEN_SCALE_FACTOR;
+    uint16_t lcd_matrix_scaled_height = 16 * TAMA_SCREEN_SCALE_FACTOR;
+    // uint16_t lcd_matrix_top = 0;
+    uint16_t lcd_matrix_top = (canv_height - lcd_matrix_scaled_height) / 2;
+    // uint16_t lcd_matrix_left = (canv_width - lcd_matrix_scaled_width) / 2;
+    uint16_t lcd_matrix_left = 64 - TAMA_LCD_ICON_SIZE;
+    uint16_t lcd_icon_upper_left = lcd_matrix_left;
+    uint16_t lcd_icon_lower_left = lcd_matrix_left;
+    uint16_t lcd_icon_spacing_horiz =
+        (lcd_matrix_scaled_width - (4 * TAMA_LCD_ICON_SIZE)) / 3 + TAMA_LCD_ICON_SIZE;
+
+    uint16_t y = lcd_matrix_top; // 64
+    for(uint8_t row = 0; row < 16; ++row) {
+        uint16_t x = 128; // lcd_matrix_left
+        uint32_t row_pixels = g_ctx->framebuffer[row];
+        for(uint8_t col = 0; col < 32; ++col) {
+            if(row_pixels & 1) {
+                canvas_draw_box(
+                    canvas, y + 32, x - 66, TAMA_SCREEN_SCALE_FACTOR, TAMA_SCREEN_SCALE_FACTOR);
             }
             }
-            x_ic += lcd_icon_spacing_horiz;
-            lcd_icons >>= 1;
+            x -= TAMA_SCREEN_SCALE_FACTOR;
+            row_pixels >>= 1;
         }
         }
+        y += TAMA_SCREEN_SCALE_FACTOR;
     }
     }
 
 
-    furi_mutex_release(mutex);
+    // Start drawing icons
+    uint8_t lcd_icons = g_ctx->icons;
+
+    // Draw top icons
+    // y = lcd_icon_upper_top;
+    y = 30;
+    // y = 64 - TAMA_LCD_ICON_SIZE;
+    uint16_t x_ic = lcd_icon_upper_left;
+    // uint16_t x_ic = 64 - TAMA_LCD_ICON_SIZE;
+    for(uint8_t i = 0; i < 4; ++i) {
+        if(lcd_icons & 1) {
+            canvas_draw_icon(canvas, y, x_ic, icons_list[i]);
+        }
+        x_ic -= lcd_icon_spacing_horiz; // TAMA_LCD_ICON_SIZE + 4;
+        lcd_icons >>= 1;
+    }
+
+    // Draw bottom icons
+    y = 84; // lcd_icon_lower_top
+    x_ic = lcd_icon_lower_left; // 64 - TAMA_LCD_ICON_SIZE
+    for(uint8_t i = 4; i < 8; ++i) {
+        // canvas_draw_frame(canvas, x_ic, y, TAMA_LCD_ICON_SIZE, TAMA_LCD_ICON_SIZE);
+        if(lcd_icons & 1) {
+            canvas_draw_icon(canvas, y, x_ic, icons_list[i]);
+        }
+        x_ic -= lcd_icon_spacing_horiz;
+        lcd_icons >>= 1;
+    }
+}
+
+// static void draw_menu_portrait(Canvas* const canvas, void* cb_ctx) {}
+
+// static void draw_menu_landscape(Canvas* const canvas, void* cb_ctx)
+static void draw_menu_landscape(Canvas* const canvas) {
+    canvas_draw_frame(canvas, 0, 0, 128, 64);
+    canvas_draw_str_aligned(canvas, 64, 6, AlignCenter, AlignCenter, "Menu");
+    canvas_draw_line(canvas, 0, 10, 128, 10);
+    switch(menu_cursor) {
+    case 0:
+        canvas_draw_circle(canvas, 5, 20, 2);
+        break;
+    case 1:
+        canvas_draw_circle(canvas, 5, 35, 2);
+        break;
+    default:
+        canvas_draw_circle(canvas, 5, 50, 2);
+        break;
+    }
+    if(portrait_mode) {
+        canvas_draw_str(canvas, 10, 25, "Portrait");
+    } else {
+        canvas_draw_str(canvas, 10, 25, "Landscape");
+    }
+    canvas_draw_str(canvas, 10, 40, "Mute");
+    canvas_draw_str(canvas, 10, 55, "Close menu");
 }
 }
 
 
-static void draw_portrait(Canvas* const canvas, void* cb_ctx) {
+static void tama_p1_draw_callback(Canvas* const canvas, void* cb_ctx) {
     furi_assert(cb_ctx);
     furi_assert(cb_ctx);
 
 
     FuriMutex* const mutex = cb_ctx;
     FuriMutex* const mutex = cb_ctx;
@@ -114,77 +196,22 @@ static void draw_portrait(Canvas* const canvas, void* cb_ctx) {
         canvas_set_font(canvas, FontPrimary);
         canvas_set_font(canvas, FontPrimary);
         canvas_draw_str(canvas, 30, 30, "Halted");
         canvas_draw_str(canvas, 30, 30, "Halted");
     } else {
     } else {
-        // FURI_LOG_D(TAG, "Drawing frame");
-        // Calculate positioning
-        // uint16_t canv_width = canvas_width(canvas);
-        uint16_t canv_height = canvas_height(canvas);
-        uint16_t lcd_matrix_scaled_width = 32 * TAMA_SCREEN_SCALE_FACTOR;
-        uint16_t lcd_matrix_scaled_height = 16 * TAMA_SCREEN_SCALE_FACTOR;
-        // uint16_t lcd_matrix_top = 0;
-        uint16_t lcd_matrix_top = (canv_height - lcd_matrix_scaled_height) / 2;
-        // uint16_t lcd_matrix_left = (canv_width - lcd_matrix_scaled_width) / 2;
-        uint16_t lcd_matrix_left = 64 - TAMA_LCD_ICON_SIZE;
-        uint16_t lcd_icon_upper_left = lcd_matrix_left;
-        uint16_t lcd_icon_lower_left = lcd_matrix_left;
-        uint16_t lcd_icon_spacing_horiz =
-            (lcd_matrix_scaled_width - (4 * TAMA_LCD_ICON_SIZE)) / 3 + TAMA_LCD_ICON_SIZE;
-
-        uint16_t y = lcd_matrix_top; // 64
-        for(uint8_t row = 0; row < 16; ++row) {
-            uint16_t x = 128; // lcd_matrix_left
-            uint32_t row_pixels = g_ctx->framebuffer[row];
-            for(uint8_t col = 0; col < 32; ++col) {
-                if(row_pixels & 1) {
-                    canvas_draw_box(
-                        canvas, y + 32, x - 66, TAMA_SCREEN_SCALE_FACTOR, TAMA_SCREEN_SCALE_FACTOR);
-                }
-                x -= TAMA_SCREEN_SCALE_FACTOR;
-                row_pixels >>= 1;
-            }
-            y += TAMA_SCREEN_SCALE_FACTOR;
-        }
-
-        // Start drawing icons
-        uint8_t lcd_icons = g_ctx->icons;
-
-        // Draw top icons
-        // y = lcd_icon_upper_top;
-        y = 30;
-        // y = 64 - TAMA_LCD_ICON_SIZE;
-        uint16_t x_ic = lcd_icon_upper_left;
-        // uint16_t x_ic = 64 - TAMA_LCD_ICON_SIZE;
-        for(uint8_t i = 0; i < 4; ++i) {
-            if(lcd_icons & 1) {
-                canvas_draw_icon(canvas, y, x_ic, icons_list[i]);
-            }
-            x_ic -= lcd_icon_spacing_horiz; // TAMA_LCD_ICON_SIZE + 4;
-            lcd_icons >>= 1;
-        }
-
-        // Draw bottom icons
-        y = 84; // lcd_icon_lower_top
-        x_ic = lcd_icon_lower_left; // 64 - TAMA_LCD_ICON_SIZE
-        for(uint8_t i = 4; i < 8; ++i) {
-            // canvas_draw_frame(canvas, x_ic, y, TAMA_LCD_ICON_SIZE, TAMA_LCD_ICON_SIZE);
-            if(lcd_icons & 1) {
-                canvas_draw_icon(canvas, y, x_ic, icons_list[i]);
+        if(in_menu) {
+            if(portrait_mode) {
+                // draw_menu_portrait(canvas);
+                draw_menu_landscape(canvas);
+            } else {
+                draw_menu_landscape(canvas);
             }
             }
-            x_ic -= lcd_icon_spacing_horiz;
-            lcd_icons >>= 1;
+        } else if(portrait_mode) {
+            draw_portrait(canvas);
+        } else {
+            draw_landscape(canvas);
         }
         }
     }
     }
-
     furi_mutex_release(mutex);
     furi_mutex_release(mutex);
 }
 }
 
 
-static void tama_p1_draw_callback(Canvas* const canvas, void* cb_ctx) {
-    if(portrait_mode) {
-        draw_portrait(canvas, cb_ctx);
-    } else {
-        draw_landscape(canvas, cb_ctx);
-    }
-}
-
 static void tama_p1_input_callback(InputEvent* input_event, FuriMessageQueue* event_queue) {
 static void tama_p1_input_callback(InputEvent* input_event, FuriMessageQueue* event_queue) {
     furi_assert(event_queue);
     furi_assert(event_queue);
 
 
@@ -534,8 +561,9 @@ int32_t tama_p1_app(void* p) {
         furi_timer_alloc(tama_p1_update_timer_callback, FuriTimerTypePeriodic, event_queue);
         furi_timer_alloc(tama_p1_update_timer_callback, FuriTimerTypePeriodic, event_queue);
     furi_timer_start(timer, furi_kernel_get_tick_frequency() / 30);
     furi_timer_start(timer, furi_kernel_get_tick_frequency() / 30);
 
 
-    portrait_mode = false;
-    in_menu = false;
+    // portrait_mode = false;
+    // in_menu = false;
+    // menu_cursor = 0;
 
 
     for(bool running = true; running;) {
     for(bool running = true; running;) {
         TamaEvent event;
         TamaEvent event;
@@ -555,63 +583,151 @@ int32_t tama_p1_app(void* p) {
                     event.input.key,
                     event.input.key,
                     event.input.type);
                     event.input.type);
                 InputType input_type = event.input.type;
                 InputType input_type = event.input.type;
-                if(input_type == InputTypePress || input_type == InputTypeRelease) {
-                    btn_state_t tama_btn_state = 0;
-                    if(input_type == InputTypePress)
-                        tama_btn_state = BTN_STATE_PRESSED;
-                    else if(input_type == InputTypeRelease)
-                        tama_btn_state = BTN_STATE_RELEASED;
-                    if(portrait_mode) {
-                        if(event.input.key == InputKeyDown) {
-                            tamalib_set_button(BTN_LEFT, tama_btn_state);
-                        } else if(event.input.key == InputKeyOk) {
-                            tamalib_set_button(BTN_MIDDLE, tama_btn_state);
-                        } else if(event.input.key == InputKeyRight) {
-                            tamalib_set_button(BTN_MIDDLE, tama_btn_state);
-                        } else if(event.input.key == InputKeyUp) {
-                            tamalib_set_button(BTN_RIGHT, tama_btn_state);
-                        } else if(event.input.key == InputKeyLeft) {
-                            // TODO: Menu
-                            portrait_mode = false;
-                            // mute tamagotchi
-                            // tamalib_set_button(BTN_LEFT, tama_btn_state);
-                            // tamalib_set_button(BTN_RIGHT, tama_btn_state);
-                        } else if(
-                            event.input.key == InputKeyBack &&
-                            event.input.type == InputTypeShort) {
-                            tama_p1_save_state();
+                btn_state_t tama_btn_state = 0;
+
+                if(input_type == InputTypePress)
+                    tama_btn_state = BTN_STATE_PRESSED;
+                else if(input_type == InputTypeRelease)
+                    tama_btn_state = BTN_STATE_RELEASED;
+
+                if(in_menu) {
+                    if(input_type == InputTypePress) {
+                        // if(portrait_mode)
+                        if(false) { // TODO: Add portrait menu
+                            switch(event.input.key) {
+                            case InputKeyLeft: // Up
+                                if(menu_cursor > 0) {
+                                    menu_cursor -= 1;
+                                } else {
+                                    menu_cursor = menu_items - 1;
+                                }
+                                break;
+                            case InputKeyRight: // Down
+                                if(menu_cursor < menu_items - 1) {
+                                    menu_cursor += 1;
+                                } else {
+                                    menu_cursor = 0;
+                                }
+                                break;
+                            case InputKeyDown: // Left
+                                break;
+                            case InputKeyUp: // Right
+                                break;
+                            case InputKeyOk:
+                                switch(menu_cursor) {
+                                case 0:
+                                    portrait_mode = false;
+                                    break;
+                                case 1:
+                                    // mute tamagotchi
+                                    tamalib_set_button(BTN_LEFT, tama_btn_state);
+                                    tamalib_set_button(BTN_RIGHT, tama_btn_state);
+                                    break;
+                                default:
+                                    in_menu = false;
+                                    break;
+                                }
+                                break;
+                            case InputKeyBack:
+                                // in_menu = false;
+                                break;
+                            default:
+                                break;
+                            }
+                        } else { // landscape
+                            switch(event.input.key) {
+                            case InputKeyUp:
+                                if(menu_cursor > 0) {
+                                    menu_cursor -= 1;
+                                } else {
+                                    menu_cursor = menu_items - 1;
+                                }
+                                break;
+                            case InputKeyDown:
+                                if(menu_cursor < menu_items) {
+                                    menu_cursor += 1;
+                                } else {
+                                    menu_cursor = 0;
+                                }
+                                break;
+                            case InputKeyLeft:
+                                break;
+                            case InputKeyRight:
+                                break;
+                            case InputKeyOk:
+                                switch(menu_cursor) {
+                                case 0:
+                                    // portrait_mode = true;
+                                    portrait_mode = !portrait_mode;
+                                    break;
+                                case 1:
+                                    // mute tamagotchi
+                                    tamalib_set_button(BTN_LEFT, tama_btn_state);
+                                    tamalib_set_button(BTN_RIGHT, tama_btn_state);
+                                    break;
+                                default:
+                                    in_menu = false;
+                                    break;
+                                }
+                                break;
+                            case InputKeyBack:
+                                // in_menu = false;
+                                break;
+                            default:
+                                break;
+                            }
                         }
                         }
-                    } else {
-                        if(event.input.key == InputKeyLeft) {
-                            tamalib_set_button(BTN_LEFT, tama_btn_state);
-                        } else if(event.input.key == InputKeyOk) {
-                            tamalib_set_button(BTN_MIDDLE, tama_btn_state);
-                        } else if(event.input.key == InputKeyDown) {
-                            tamalib_set_button(BTN_MIDDLE, tama_btn_state);
-                        } else if(event.input.key == InputKeyRight) {
-                            tamalib_set_button(BTN_RIGHT, tama_btn_state);
-                        } else if(event.input.key == InputKeyUp) {
-                            // TODO: Menu
-                            portrait_mode = true;
-                            // mute tamagotchi
-                            // tamalib_set_button(BTN_LEFT, tama_btn_state);
-                            // tamalib_set_button(BTN_RIGHT, tama_btn_state);
-                        } else if(
-                            event.input.key == InputKeyBack &&
-                            event.input.type == InputTypeShort) {
-                            tama_p1_save_state();
+                    }
+                } else { // out of menu
+                    if(input_type == InputTypePress || input_type == InputTypeRelease) {
+                        if(portrait_mode) {
+                            if(event.input.key == InputKeyDown) {
+                                tamalib_set_button(BTN_LEFT, tama_btn_state);
+                            } else if(event.input.key == InputKeyOk) {
+                                tamalib_set_button(BTN_MIDDLE, tama_btn_state);
+                            } else if(event.input.key == InputKeyRight) {
+                                tamalib_set_button(BTN_MIDDLE, tama_btn_state);
+                            } else if(event.input.key == InputKeyUp) {
+                                tamalib_set_button(BTN_RIGHT, tama_btn_state);
+                            } else if(event.input.key == InputKeyLeft) {
+                                in_menu = true;
+                                // portrait_mode = false;
+                            } else if(
+                                event.input.key == InputKeyBack &&
+                                event.input.type == InputTypeShort) {
+                                tama_p1_save_state();
+                            }
+                        } else {
+                            if(event.input.key == InputKeyLeft) {
+                                tamalib_set_button(BTN_LEFT, tama_btn_state);
+                            } else if(event.input.key == InputKeyOk) {
+                                tamalib_set_button(BTN_MIDDLE, tama_btn_state);
+                            } else if(event.input.key == InputKeyDown) {
+                                tamalib_set_button(BTN_MIDDLE, tama_btn_state);
+                            } else if(event.input.key == InputKeyRight) {
+                                tamalib_set_button(BTN_RIGHT, tama_btn_state);
+                            } else if(event.input.key == InputKeyUp) {
+                                in_menu = true;
+                                // portrait_mode = true;
+                                // mute tamagotchi
+                                // tamalib_set_button(BTN_LEFT, tama_btn_state);
+                                // tamalib_set_button(BTN_RIGHT, tama_btn_state);
+                            } else if(
+                                event.input.key == InputKeyBack &&
+                                event.input.type == InputTypeShort) {
+                                tama_p1_save_state();
+                            }
                         }
                         }
                     }
                     }
                 }
                 }
 
 
-                if(event.input.key == InputKeyBack && event.input.type == InputTypeLong) {
+                if(event.input.key == InputKeyBack && event.input.type == InputTypeLong &&
+                   !in_menu) {
                     furi_timer_stop(timer);
                     furi_timer_stop(timer);
                     running = false;
                     running = false;
-
                     tama_p1_save_state();
                     tama_p1_save_state();
                 }
                 }
             }
             }
-
             furi_mutex_release(g_state_mutex);
             furi_mutex_release(g_state_mutex);
         } else {
         } else {
             // Timeout
             // Timeout