Просмотр исходного кода

Added new UI to define stations/pagers range

David Lee 2 лет назад
Родитель
Сommit
a627f9a5e3

+ 3 - 2
README.md

@@ -11,8 +11,9 @@ This app triggers restaurant pagers in a brute force manner, useful to test if d
 - Retekess TD174
 - Retekess TD174
 
 
 ### Features
 ### Features
-- Select range of stations (needs improving for full range)
-- Select range of pagers (needs improving for full range)
+- Send a Range of Signals
+- Select range of stations
+- Select range of pagers
 
 
 ## How to install on Flipper Zero
 ## How to install on Flipper Zero
 - If you do not have one, download a firmware onto your PC via git<br>
 - If you do not have one, download a firmware onto your PC via git<br>

+ 1 - 1
application.fam

@@ -7,7 +7,7 @@ App(
     fap_icon="icons/meal_pager_10px.png",
     fap_icon="icons/meal_pager_10px.png",
     fap_icon_assets="icons",
     fap_icon_assets="icons",
     fap_category="Sub-Ghz",
     fap_category="Sub-Ghz",
-    fap_version="1.0",
+    fap_version="1.1",
     fap_libs=["assets"],
     fap_libs=["assets"],
     fap_author="leedave",
     fap_author="leedave",
     fap_weburl="https://github.com/leedave/flipper-zero-meal-pager",
     fap_weburl="https://github.com/leedave/flipper-zero-meal-pager",

+ 11 - 1
docs/changelog.md

@@ -1,5 +1,15 @@
 ## v1.1
 ## v1.1
-- New UI to Set Stations
+- Created a new UI Input View as FW does not supply one for numbers
+- New UI to Set First Station
+- New UI to Set Last Station
+- New UI to Set First Page
+- New UI to Set Last Pager
+- Removed Vibro/Sound settings as not used
+
+Known issues
+- After setting last station, the settings view is weird. Some kindo of memory bug. But data remains correct. 
+- Extensive use can cause crashes, must be some memory leak left
+
 
 
 ## v1.0
 ## v1.0
 - Added support for TD174
 - Added support for TD174

+ 27 - 126
helpers/gui/int_input.c

@@ -20,12 +20,11 @@ typedef struct {
     char* text_buffer;
     char* text_buffer;
     size_t text_buffer_size;
     size_t text_buffer_size;
     bool clear_default_text;
     bool clear_default_text;
-    
+
     IntInputCallback callback;
     IntInputCallback callback;
-    //IntChangedCallback changed_callback;
     void* callback_context;
     void* callback_context;
 
 
-    int8_t selected_row; 
+    int8_t selected_row;
     uint8_t selected_column;
     uint8_t selected_column;
 } IntInputModel;
 } IntInputModel;
 
 
@@ -34,7 +33,6 @@ static const uint8_t keyboard_origin_y = 31;
 static const uint8_t keyboard_row_count = 2;
 static const uint8_t keyboard_row_count = 2;
 static const uint8_t enter_symbol = '\r';
 static const uint8_t enter_symbol = '\r';
 static const uint8_t backspace_symbol = '\b';
 static const uint8_t backspace_symbol = '\b';
-//static const uint8_t max_drawable_digits = 4;
 
 
 static const IntInputKey keyboard_keys_row_1[] = {
 static const IntInputKey keyboard_keys_row_1[] = {
     {'0', 0, 12},
     {'0', 0, 12},
@@ -106,101 +104,20 @@ static const IntInputKey* int_input_get_row(uint8_t row_index) {
  * @param      model   The model
  * @param      model   The model
  */
  */
 static void int_input_draw_input(Canvas* canvas, IntInputModel* model) {
 static void int_input_draw_input(Canvas* canvas, IntInputModel* model) {
-    //const uint8_t text_x = 8;
-    //const uint8_t text_y = 25;
-    //const uint8_t text_y2 = 40;
-    UNUSED(model);
-    
+    const uint8_t text_x = 8;
+    const uint8_t text_y = 25;
+
     elements_slightly_rounded_frame(canvas, 6, 14, 116, 15);
     elements_slightly_rounded_frame(canvas, 6, 14, 116, 15);
 
 
-    //canvas_draw_icon(canvas, 2, 19, &I_ButtonLeftSmall_3x5);
-    //canvas_draw_icon(canvas, 123, 19, &I_ButtonRightSmall_3x5);
-
-    /*for(uint8_t i = model->first_visible_byte;
-        i < model->first_visible_byte + MIN(model->bytes_count, max_drawable_bytes);
-        i++) {
-        uint8_t byte_position = i - model->first_visible_byte;
-
-        if(i == model->selected_byte) {
-            canvas_draw_frame(canvas, text_x + byte_position * 14, text_y - 9, 15, 11);
-            if(model->selected_row == -2) {
-                canvas_draw_icon(
-                    canvas, text_x + 6 + byte_position * 14, text_y - 14, &I_arrow_nano_up);
-                canvas_draw_icon(
-                    canvas, text_x + 6 + byte_position * 14, text_y + 5, &I_arrow_nano_down);
-            }
+    const char* text = model->text_buffer;
+    canvas_draw_str(canvas, text_x, text_y, text);
+}
 
 
-            if(model->selected_high_nibble) {
-                canvas_draw_glyph(
-                    canvas,
-                    text_x + 8 + byte_position * 14,
-                    text_y,
-                    int_input_get_nibble_text(model->bytes[i], false));
-                canvas_draw_box(canvas, text_x + 1 + byte_position * 14, text_y - 8, 7, 9);
-                canvas_invert_color(canvas);
-                canvas_draw_line(
-                    canvas,
-                    text_x + 14 + byte_position * 14,
-                    text_y - 6,
-                    text_x + 14 + byte_position * 14,
-                    text_y - 2);
-                canvas_draw_glyph(
-                    canvas,
-                    text_x + 2 + byte_position * 14,
-                    text_y,
-                    int_input_get_nibble_text(model->bytes[i], true));
-                canvas_invert_color(canvas);
-            } else {
-                canvas_draw_box(canvas, text_x + 7 + byte_position * 14, text_y - 8, 7, 9);
-                canvas_draw_glyph(
-                    canvas,
-                    text_x + 2 + byte_position * 14,
-                    text_y,
-                    int_input_get_nibble_text(model->bytes[i], true));
-                canvas_invert_color(canvas);
-                canvas_draw_line(
-                    canvas,
-                    text_x + byte_position * 14,
-                    text_y - 6,
-                    text_x + byte_position * 14,
-                    text_y - 2);
-                canvas_draw_glyph(
-                    canvas,
-                    text_x + 8 + byte_position * 14,
-                    text_y,
-                    int_input_get_nibble_text(model->bytes[i], false));
-                canvas_invert_color(canvas);
-            }
-        } else {
-            if(model->first_visible_byte > 0 && i == model->first_visible_byte) {
-                canvas_draw_icon(
-                    canvas,
-                    text_x + 2 + byte_position * 14,
-                    text_y - 7,
-                    &I_More_data_placeholder_5x7);
-            } else {
-                canvas_draw_glyph(
-                    canvas,
-                    text_x + 2 + byte_position * 14,
-                    text_y,
-                    int_input_get_nibble_text(model->bytes[i], true));
-            }
-            if(model->bytes_count - model->first_visible_byte > max_drawable_bytes &&
-               i == model->first_visible_byte + MIN(model->bytes_count, max_drawable_bytes) - 1) {
-                canvas_draw_icon(
-                    canvas,
-                    text_x + 8 + byte_position * 14,
-                    text_y - 7,
-                    &I_More_data_placeholder_5x7);
-            } else {
-                canvas_draw_glyph(
-                    canvas,
-                    text_x + 8 + byte_position * 14,
-                    text_y,
-                    int_input_get_nibble_text(model->bytes[i], false));
-            }
-        }
-    }*/
+static void int_input_backspace_cb(IntInputModel* model) {
+    uint8_t text_length = model->clear_default_text ? 1 : strlen(model->text_buffer);
+    if(text_length > 0) {
+        model->text_buffer[text_length - 1] = 0;
+    }
 }
 }
 
 
 /** Handle up button
 /** Handle up button
@@ -254,23 +171,18 @@ static void int_input_handle_right(IntInputModel* model) {
 static void int_input_handle_ok(IntInputModel* model) {
 static void int_input_handle_ok(IntInputModel* model) {
     char selected = int_input_get_row(model->selected_row)[model->selected_column].text;
     char selected = int_input_get_row(model->selected_row)[model->selected_column].text;
     size_t text_length = strlen(model->text_buffer);
     size_t text_length = strlen(model->text_buffer);
-UNUSED(text_length);
     if(selected == enter_symbol) {
     if(selected == enter_symbol) {
-    //    int_input_call_input_callback(model);
+        model->callback(model->callback_context);
     } else if(selected == backspace_symbol) {
     } else if(selected == backspace_symbol) {
-        //int_input_clear_selected_byte(model);
+        int_input_backspace_cb(model);
     } else {
     } else {
-        if (model->clear_default_text) {
+        if(model->clear_default_text) {
             text_length = 0;
             text_length = 0;
         }
         }
-        //if(text_length < (model->text_buffer_size - 1)) {
-            //model->text_buffer[text_length] = selected;
-            //model->text_buffer[text_length + 1] = 0;
-            FURI_LOG_D("INT_INPUT", model->text_buffer);
-            //FURI_LOG_D("INT_INPUT", "%u", text_length);
-            //FURI_LOG_D("INT_INPUT", "%u", model->text_buffer_size);
-            FURI_LOG_D("INT_INPUT", "%d", selected);
-        //}
+        if(text_length < (model->text_buffer_size - 1)) {
+            model->text_buffer[text_length] = selected;
+            model->text_buffer[text_length + 1] = 0;
+        }
     }
     }
     model->clear_default_text = false;
     model->clear_default_text = false;
 }
 }
@@ -284,16 +196,12 @@ static void int_input_view_draw_callback(Canvas* canvas, void* _model) {
     IntInputModel* model = _model;
     IntInputModel* model = _model;
     uint8_t text_length = model->text_buffer ? strlen(model->text_buffer) : 0;
     uint8_t text_length = model->text_buffer ? strlen(model->text_buffer) : 0;
     UNUSED(text_length);
     UNUSED(text_length);
-    //uint8_t needed_string_width = canvas_width(canvas) - 8;
-    //uint8_t start_pos = 4;
-
-    //const char* text = model->text_buffer;
 
 
     canvas_clear(canvas);
     canvas_clear(canvas);
     canvas_set_color(canvas, ColorBlack);
     canvas_set_color(canvas, ColorBlack);
-    
+
     int_input_draw_input(canvas, model);
     int_input_draw_input(canvas, model);
-    
+
     canvas_set_font(canvas, FontSecondary);
     canvas_set_font(canvas, FontSecondary);
     canvas_draw_str(canvas, 2, 9, model->header);
     canvas_draw_str(canvas, 2, 9, model->header);
     canvas_set_font(canvas, FontKeyboard);
     canvas_set_font(canvas, FontKeyboard);
@@ -343,9 +251,7 @@ static void int_input_view_draw_callback(Canvas* canvas, void* _model) {
                         11,
                         11,
                         13);
                         13);
                     canvas_set_color(canvas, ColorWhite);
                     canvas_set_color(canvas, ColorWhite);
-                } else if(
-                    model->selected_row == -1 && row == 0 &&
-                    model->selected_column == column) {
+                } else if(model->selected_row == -1 && row == 0 && model->selected_column == column) {
                     canvas_set_color(canvas, ColorBlack);
                     canvas_set_color(canvas, ColorBlack);
                     canvas_draw_frame(
                     canvas_draw_frame(
                         canvas,
                         canvas,
@@ -380,11 +286,12 @@ static bool int_input_view_input_callback(InputEvent* event, void* context) {
     furi_assert(int_input);
     furi_assert(int_input);
 
 
     bool consumed = false;
     bool consumed = false;
-    
+
     // Fetch the model
     // Fetch the model
     IntInputModel* model = view_get_model(int_input->view);
     IntInputModel* model = view_get_model(int_input->view);
 
 
-    if(event->type == InputTypeShort || event->type == InputTypeLong || event->type == InputTypeRepeat) {
+    if(event->type == InputTypeShort || event->type == InputTypeLong ||
+       event->type == InputTypeRepeat) {
         consumed = true;
         consumed = true;
         switch(event->key) {
         switch(event->key) {
         case InputKeyLeft:
         case InputKeyLeft:
@@ -433,7 +340,6 @@ void int_input_reset(IntInput* int_input) {
         true);
         true);
 }
 }
 
 
-
 IntInput* int_input_alloc() {
 IntInput* int_input_alloc() {
     IntInput* int_input = malloc(sizeof(IntInput));
     IntInput* int_input = malloc(sizeof(IntInput));
     int_input->view = view_alloc();
     int_input->view = view_alloc();
@@ -480,10 +386,5 @@ void int_input_set_result_callback(
 
 
 void int_input_set_header_text(IntInput* int_input, const char* text) {
 void int_input_set_header_text(IntInput* int_input, const char* text) {
     with_view_model(
     with_view_model(
-        int_input->view, 
-        IntInputModel * model, 
-        { 
-            model->header = text; 
-        }, 
-        true);
+        int_input->view, IntInputModel * model, { model->header = text; }, true);
 }
 }

+ 0 - 1
helpers/gui/int_input.h

@@ -54,7 +54,6 @@ View* int_input_get_view(IntInput* int_input);
 void int_input_set_result_callback(
 void int_input_set_result_callback(
     IntInput* int_input,
     IntInput* int_input,
     IntInputCallback input_callback,
     IntInputCallback input_callback,
-    //IntChangedCallback changed_callback,
     void* callback_context,
     void* callback_context,
     char* text_buffer,
     char* text_buffer,
     size_t text_buffer_size,
     size_t text_buffer_size,

+ 1 - 0
helpers/meal_pager_custom_event.h

@@ -24,6 +24,7 @@ typedef enum {
     Meal_PagerCustomEventViewTransmitterSendStop,
     Meal_PagerCustomEventViewTransmitterSendStop,
     Meal_PagerCustomEventViewTransmitterError,
     Meal_PagerCustomEventViewTransmitterError,
     Meal_PagerCustomerEventIntInput,
     Meal_PagerCustomerEventIntInput,
+    Meal_PagerCustomEventViewIntInputOk,
 } Meal_PagerCustomEvent;
 } Meal_PagerCustomEvent;
 
 
 enum Meal_PagerCustomEventType {
 enum Meal_PagerCustomEventType {

+ 8 - 4
helpers/meal_pager_led.c

@@ -2,14 +2,18 @@
 
 
 void meal_pager_blink_start_subghz(Meal_Pager* app) {
 void meal_pager_blink_start_subghz(Meal_Pager* app) {
     furi_assert(app);
     furi_assert(app);
-    notification_message(app->notification, &sequence_blink_stop);
-    notification_message(app->notification, &sequence_blink_start_magenta);
+    if(app->led == 1) {
+        notification_message(app->notification, &sequence_blink_stop);
+        notification_message(app->notification, &sequence_blink_start_magenta);
+    }
 }
 }
 
 
 void meal_pager_blink_start_compile(Meal_Pager* app) {
 void meal_pager_blink_start_compile(Meal_Pager* app) {
     furi_assert(app);
     furi_assert(app);
-    notification_message(app->notification, &sequence_blink_stop);
-    notification_message(app->notification, &sequence_blink_start_yellow);
+    if(app->led == 1) {
+        notification_message(app->notification, &sequence_blink_stop);
+        notification_message(app->notification, &sequence_blink_start_yellow);
+    }
 }
 }
 
 
 void meal_pager_blink_stop(Meal_Pager* app) {
 void meal_pager_blink_stop(Meal_Pager* app) {

+ 25 - 23
helpers/meal_pager_storage.c

@@ -15,7 +15,11 @@ static void meal_pager_close_config_file(FlipperFormat* file) {
     flipper_format_free(file);
     flipper_format_free(file);
 }
 }
 
 
-bool meal_pager_save_subghz_buffer_file_start(void* context, FlipperFormat* ff, Storage* storage, char* frequency) {
+bool meal_pager_save_subghz_buffer_file_start(
+    void* context,
+    FlipperFormat* ff,
+    Storage* storage,
+    char* frequency) {
     // SubGhz TXRX can only be loaded with files, makes sense as to save RAM
     // SubGhz TXRX can only be loaded with files, makes sense as to save RAM
     Meal_Pager* app = context;
     Meal_Pager* app = context;
     UNUSED(app);
     UNUSED(app);
@@ -53,12 +57,11 @@ bool meal_pager_save_subghz_buffer_file_start(void* context, FlipperFormat* ff,
         return success;
         return success;
     }
     }
 
 
-    success =
-        flipper_format_write_header_cstr(
-            ff, MEAL_PAGER_SUBGHZ_FILE_TYPE, MEAL_PAGER_SUBGHZ_FILE_VERSION) &&
-        flipper_format_write_string_cstr(ff, "Frequency", frequency) &&
-        flipper_format_write_string_cstr(ff, "Preset", MEAL_PAGER_SUBGHZ_FILE_PRESET) &&
-        flipper_format_write_string_cstr(ff, "Protocol", MEAL_PAGER_SUBGHZ_FILE_Protocol);
+    success = flipper_format_write_header_cstr(
+                  ff, MEAL_PAGER_SUBGHZ_FILE_TYPE, MEAL_PAGER_SUBGHZ_FILE_VERSION) &&
+              flipper_format_write_string_cstr(ff, "Frequency", frequency) &&
+              flipper_format_write_string_cstr(ff, "Preset", MEAL_PAGER_SUBGHZ_FILE_PRESET) &&
+              flipper_format_write_string_cstr(ff, "Protocol", MEAL_PAGER_SUBGHZ_FILE_Protocol);
     return success;
     return success;
 }
 }
 
 
@@ -199,22 +202,21 @@ void meal_pager_read_settings(void* context) {
     meal_pager_close_storage();
     meal_pager_close_storage();
 }
 }
 
 
-void meal_pager_set_max_values(void* context)
-{
+void meal_pager_set_max_values(void* context) {
     Meal_Pager* app = context;
     Meal_Pager* app = context;
-    switch (app->pager_type) {
-        case Meal_PagerPagerTypeT119:
-        case Meal_PagerPagerTypeTD165:
-            app->max_station = 8191;
-            app->max_pager = 999;
-            break;
-        case Meal_PagerPagerTypeTD174:
-            app->max_station = 8191;
-            app->max_pager = 10;
-            break;
-        case Meal_PagerPagerTypeTD157:
-            app->max_station = 1023;
-            app->max_pager = 999;
-            break;
+    switch(app->pager_type) {
+    case Meal_PagerPagerTypeT119:
+    case Meal_PagerPagerTypeTD165:
+        app->max_station = 8191;
+        app->max_pager = 999;
+        break;
+    case Meal_PagerPagerTypeTD174:
+        app->max_station = 8191;
+        app->max_pager = 10;
+        break;
+    case Meal_PagerPagerTypeTD157:
+        app->max_station = 1023;
+        app->max_pager = 999;
+        break;
     }
     }
 }
 }

+ 5 - 1
helpers/meal_pager_storage.h

@@ -29,7 +29,11 @@
 #define MEAL_PAGER_SUBGHZ_FILE_PRESET "FuriHalSubGhzPresetOok650Async"
 #define MEAL_PAGER_SUBGHZ_FILE_PRESET "FuriHalSubGhzPresetOok650Async"
 #define MEAL_PAGER_SUBGHZ_FILE_Protocol "RAW"
 #define MEAL_PAGER_SUBGHZ_FILE_Protocol "RAW"
 
 
-bool meal_pager_save_subghz_buffer_file_start(void* context, FlipperFormat* ff, Storage* storage, char* frequency);
+bool meal_pager_save_subghz_buffer_file_start(
+    void* context,
+    FlipperFormat* ff,
+    Storage* storage,
+    char* frequency);
 
 
 void meal_pager_save_subghz_buffer_stop(void* context, FlipperFormat* ff);
 void meal_pager_save_subghz_buffer_stop(void* context, FlipperFormat* ff);
 
 

+ 2 - 1
helpers/retekess/meal_pager_retekess_t119.c

@@ -107,7 +107,8 @@ bool meal_pager_retekess_t119_generate_all(void* context) {
 
 
     Storage* storage = furi_record_open(RECORD_STORAGE);
     Storage* storage = furi_record_open(RECORD_STORAGE);
     FlipperFormat* ff = flipper_format_file_alloc(storage);
     FlipperFormat* ff = flipper_format_file_alloc(storage);
-    bool success = meal_pager_save_subghz_buffer_file_start(app, ff, storage, MEAL_PAGER_SUBGHZ_FILE_FREQUENCY);
+    bool success = meal_pager_save_subghz_buffer_file_start(
+        app, ff, storage, MEAL_PAGER_SUBGHZ_FILE_FREQUENCY);
 
 
     if(!success) {
     if(!success) {
         FURI_LOG_D(TAG, "failed to save to buffer");
         FURI_LOG_D(TAG, "failed to save to buffer");

+ 2 - 1
helpers/retekess/meal_pager_retekess_td157.c

@@ -93,7 +93,8 @@ bool meal_pager_retekess_td157_generate_all(void* context) {
 
 
     Storage* storage = furi_record_open(RECORD_STORAGE);
     Storage* storage = furi_record_open(RECORD_STORAGE);
     FlipperFormat* ff = flipper_format_file_alloc(storage);
     FlipperFormat* ff = flipper_format_file_alloc(storage);
-    bool success = meal_pager_save_subghz_buffer_file_start(app, ff, storage, MEAL_PAGER_SUBGHZ_FILE_FREQUENCY);
+    bool success = meal_pager_save_subghz_buffer_file_start(
+        app, ff, storage, MEAL_PAGER_SUBGHZ_FILE_FREQUENCY);
 
 
     if(!success) {
     if(!success) {
         FURI_LOG_D(TAG, "failed to save to buffer");
         FURI_LOG_D(TAG, "failed to save to buffer");

+ 2 - 1
helpers/retekess/meal_pager_retekess_td165.c

@@ -95,7 +95,8 @@ bool meal_pager_retekess_td165_generate_all(void* context) {
 
 
     Storage* storage = furi_record_open(RECORD_STORAGE);
     Storage* storage = furi_record_open(RECORD_STORAGE);
     FlipperFormat* ff = flipper_format_file_alloc(storage);
     FlipperFormat* ff = flipper_format_file_alloc(storage);
-    bool success = meal_pager_save_subghz_buffer_file_start(app, ff, storage, MEAL_PAGER_SUBGHZ_FILE_FREQUENCY);
+    bool success = meal_pager_save_subghz_buffer_file_start(
+        app, ff, storage, MEAL_PAGER_SUBGHZ_FILE_FREQUENCY);
 
 
     if(!success) {
     if(!success) {
         FURI_LOG_D(TAG, "failed to save to buffer");
         FURI_LOG_D(TAG, "failed to save to buffer");

+ 2 - 1
helpers/retekess/meal_pager_retekess_td174.c

@@ -98,7 +98,8 @@ bool meal_pager_retekess_td174_generate_all(void* context) {
 
 
     Storage* storage = furi_record_open(RECORD_STORAGE);
     Storage* storage = furi_record_open(RECORD_STORAGE);
     FlipperFormat* ff = flipper_format_file_alloc(storage);
     FlipperFormat* ff = flipper_format_file_alloc(storage);
-    bool success = meal_pager_save_subghz_buffer_file_start(app, ff, storage, MEAL_PAGER_SUBGHZ_FILE_ALT_FREQUENCY);
+    bool success = meal_pager_save_subghz_buffer_file_start(
+        app, ff, storage, MEAL_PAGER_SUBGHZ_FILE_ALT_FREQUENCY);
 
 
     if(!success) {
     if(!success) {
         FURI_LOG_D(TAG, "failed to save to buffer");
         FURI_LOG_D(TAG, "failed to save to buffer");

+ 7 - 5
meal_pager.c

@@ -61,8 +61,7 @@ Meal_Pager* meal_pager_app_alloc() {
     app->max_station = 8191;
     app->max_station = 8191;
     app->max_pager = 999;
     app->max_pager = 999;
 
 
-    snprintf(app->text_buffer, 32, "%lu", app->first_station);
-    //app->text_buffer = text_buffer;
+    snprintf(app->text_store[0], 32, "%lu", app->first_station);
 
 
     // Used for File Browser
     // Used for File Browser
     app->dialogs = furi_record_open(RECORD_DIALOGS);
     app->dialogs = furi_record_open(RECORD_DIALOGS);
@@ -97,12 +96,15 @@ Meal_Pager* meal_pager_app_alloc() {
 
 
     app->int_input = int_input_alloc();
     app->int_input = int_input_alloc();
     view_dispatcher_add_view(
     view_dispatcher_add_view(
-        app->view_dispatcher, 
-        Meal_PagerViewIdIntInput, 
-        int_input_get_view(app->int_input));
+        app->view_dispatcher, Meal_PagerViewIdIntInput, int_input_get_view(app->int_input));
 
 
     //End Scene Additions
     //End Scene Additions
 
 
+    snprintf(app->text_store[0], 20, "%lu", app->first_station);
+    snprintf(app->text_store[1], 20, "%lu", app->last_station);
+    snprintf(app->text_store[2], 20, "%lu", app->first_pager);
+    snprintf(app->text_store[3], 20, "%lu", app->last_pager);
+
     return app;
     return app;
 }
 }
 
 

+ 1 - 0
meal_pager_i.h

@@ -64,6 +64,7 @@ typedef struct {
     char* text_buffer;
     char* text_buffer;
     uint32_t max_station;
     uint32_t max_station;
     uint32_t max_pager;
     uint32_t max_pager;
+    char text_store[6][129];
 } Meal_Pager;
 } Meal_Pager;
 
 
 typedef enum {
 typedef enum {

+ 4 - 1
scenes/meal_pager_scene_config.h

@@ -2,4 +2,7 @@ ADD_SCENE(meal_pager, startscreen, Startscreen)
 ADD_SCENE(meal_pager, menu, Menu)
 ADD_SCENE(meal_pager, menu, Menu)
 ADD_SCENE(meal_pager, transmit, Transmit)
 ADD_SCENE(meal_pager, transmit, Transmit)
 ADD_SCENE(meal_pager, settings, Settings)
 ADD_SCENE(meal_pager, settings, Settings)
-ADD_SCENE(meal_pager, set_station, SetStation)
+ADD_SCENE(meal_pager, set_first_station, SetFirstStation)
+ADD_SCENE(meal_pager, set_last_station, SetLastStation)
+ADD_SCENE(meal_pager, set_first_pager, SetFirstPager)
+ADD_SCENE(meal_pager, set_last_pager, SetLastPager)

+ 43 - 7
scenes/meal_pager_scene_menu.c

@@ -4,7 +4,10 @@
 
 
 enum SubmenuIndex {
 enum SubmenuIndex {
     SubmenuIndexTransmit = 10,
     SubmenuIndexTransmit = 10,
-    SubmenuIndexSetStation,
+    SubmenuIndexSetFirstStation,
+    SubmenuIndexSetLastStation,
+    SubmenuIndexSetFirstPager,
+    SubmenuIndexSetLastPager,
     SubmenuIndexScene3,
     SubmenuIndexScene3,
     SubmenuIndexScene4,
     SubmenuIndexScene4,
     SubmenuIndexScene5,
     SubmenuIndexScene5,
@@ -27,10 +30,28 @@ void meal_pager_scene_menu_on_enter(void* context) {
         app);
         app);
     submenu_add_item(
     submenu_add_item(
         app->submenu,
         app->submenu,
-        "Set Stations",
-        SubmenuIndexSetStation,
+        "Set First Station",
+        SubmenuIndexSetFirstStation,
         meal_pager_scene_menu_submenu_callback,
         meal_pager_scene_menu_submenu_callback,
-        app);    
+        app);
+    submenu_add_item(
+        app->submenu,
+        "Set Last Station",
+        SubmenuIndexSetLastStation,
+        meal_pager_scene_menu_submenu_callback,
+        app);
+    submenu_add_item(
+        app->submenu,
+        "Set First Pager",
+        SubmenuIndexSetFirstPager,
+        meal_pager_scene_menu_submenu_callback,
+        app);
+    submenu_add_item(
+        app->submenu,
+        "Set Last Pager",
+        SubmenuIndexSetLastPager,
+        meal_pager_scene_menu_submenu_callback,
+        app);
     submenu_add_item(
     submenu_add_item(
         app->submenu,
         app->submenu,
         "Settings",
         "Settings",
@@ -68,10 +89,25 @@ bool meal_pager_scene_menu_on_event(void* context, SceneManagerEvent event) {
             subghz_txrx_stop(app->subghz->txrx);
             subghz_txrx_stop(app->subghz->txrx);
             FURI_LOG_D(TAG, "Stop Event from Menu");
             FURI_LOG_D(TAG, "Stop Event from Menu");
             return true;
             return true;
-        } else if(event.event == SubmenuIndexSetStation) {
+        } else if(event.event == SubmenuIndexSetFirstStation) {
+            scene_manager_set_scene_state(
+                app->scene_manager, Meal_PagerSceneSetFirstStation, SubmenuIndexSetFirstStation);
+            scene_manager_next_scene(app->scene_manager, Meal_PagerSceneSetFirstStation);
+            return true;
+        } else if(event.event == SubmenuIndexSetLastStation) {
+            scene_manager_set_scene_state(
+                app->scene_manager, Meal_PagerSceneSetLastStation, SubmenuIndexSetLastStation);
+            scene_manager_next_scene(app->scene_manager, Meal_PagerSceneSetLastStation);
+            return true;
+        } else if(event.event == SubmenuIndexSetFirstPager) {
+            scene_manager_set_scene_state(
+                app->scene_manager, Meal_PagerSceneSetFirstPager, SubmenuIndexSetFirstPager);
+            scene_manager_next_scene(app->scene_manager, Meal_PagerSceneSetFirstPager);
+            return true;
+        } else if(event.event == SubmenuIndexSetLastPager) {
             scene_manager_set_scene_state(
             scene_manager_set_scene_state(
-                app->scene_manager, Meal_PagerSceneSetStation, SubmenuIndexSetStation);
-            scene_manager_next_scene(app->scene_manager, Meal_PagerSceneSetStation);
+                app->scene_manager, Meal_PagerSceneSetLastPager, SubmenuIndexSetLastPager);
+            scene_manager_next_scene(app->scene_manager, Meal_PagerSceneSetLastPager);
             return true;
             return true;
         }
         }
     } else if(event.type == SceneManagerEventTypeTick) {
     } else if(event.type == SceneManagerEventTypeTick) {

+ 63 - 0
scenes/meal_pager_scene_set_first_pager.c

@@ -0,0 +1,63 @@
+#include "../meal_pager_i.h"
+#include "../helpers/meal_pager_custom_event.h"
+#include "../helpers/meal_pager_led.h"
+#include <dolphin/dolphin.h>
+
+void meal_pager_set_first_pager_callback(void* context) {
+    furi_assert(context);
+    Meal_Pager* app = context;
+    view_dispatcher_send_custom_event(app->view_dispatcher, Meal_PagerCustomerEventIntInput);
+}
+
+void meal_pager_scene_set_first_pager_on_enter(void* context) {
+    furi_assert(context);
+    Meal_Pager* app = context;
+    IntInput* int_input = app->int_input;
+    size_t enter_name_length = 5;
+    meal_pager_set_max_values(app);
+    char* str = "Set First Pager (0 - 999)";
+    const char* constStr = str;
+    snprintf(str, 36, "Set First Pager (0 - %lu)", app->max_pager);
+
+    int_input_set_header_text(int_input, constStr);
+
+    int_input_set_result_callback(
+        int_input,
+        meal_pager_set_first_pager_callback,
+        context,
+        app->text_store[2],
+        enter_name_length,
+        false);
+
+    view_dispatcher_switch_to_view(app->view_dispatcher, Meal_PagerViewIdIntInput);
+}
+
+bool meal_pager_scene_set_first_pager_on_event(void* context, SceneManagerEvent event) {
+    Meal_Pager* app = context;
+    bool consumed = false;
+
+    if(event.type == SceneManagerEventTypeBack) {
+        scene_manager_previous_scene(app->scene_manager);
+        return true;
+    } else if(event.type == SceneManagerEventTypeCustom) {
+        app->first_pager = atoi(app->text_store[2]);
+        app->first_pager_char = app->text_store[2];
+        scene_manager_previous_scene(app->scene_manager);
+        return true;
+    } else if(event.type == SceneManagerEventTypeTick) {
+        if(app->state_notifications == SubGhzNotificationStateTx) {
+            app->state_notifications = SubGhzNotificationStateIDLE;
+            subghz_txrx_stop(app->subghz->txrx);
+            meal_pager_blink_stop(app);
+            meal_pager_transmit_model_set_sending(app->meal_pager_transmit, 0);
+        }
+        return true;
+    }
+
+    return consumed;
+}
+
+void meal_pager_scene_set_first_pager_on_exit(void* context) {
+    Meal_Pager* app = context;
+    UNUSED(app);
+}

+ 63 - 0
scenes/meal_pager_scene_set_first_station.c

@@ -0,0 +1,63 @@
+#include "../meal_pager_i.h"
+#include "../helpers/meal_pager_custom_event.h"
+#include "../helpers/meal_pager_led.h"
+#include <dolphin/dolphin.h>
+
+void meal_pager_set_first_station_callback(void* context) {
+    furi_assert(context);
+    Meal_Pager* app = context;
+    view_dispatcher_send_custom_event(app->view_dispatcher, Meal_PagerCustomerEventIntInput);
+}
+
+void meal_pager_scene_set_first_station_on_enter(void* context) {
+    furi_assert(context);
+    Meal_Pager* app = context;
+    IntInput* int_input = app->int_input;
+    size_t enter_name_length = 5;
+    meal_pager_set_max_values(app);
+    char* str = "Set First Station (0 - 9999)";
+    const char* constStr = str;
+    snprintf(str, 36, "Set First Station (0 - %lu)", app->max_station);
+
+    int_input_set_header_text(int_input, constStr);
+
+    int_input_set_result_callback(
+        int_input,
+        meal_pager_set_first_station_callback,
+        context,
+        app->text_store[0],
+        enter_name_length,
+        false);
+
+    view_dispatcher_switch_to_view(app->view_dispatcher, Meal_PagerViewIdIntInput);
+}
+
+bool meal_pager_scene_set_first_station_on_event(void* context, SceneManagerEvent event) {
+    Meal_Pager* app = context;
+    bool consumed = false;
+
+    if(event.type == SceneManagerEventTypeBack) {
+        scene_manager_previous_scene(app->scene_manager);
+        return true;
+    } else if(event.type == SceneManagerEventTypeCustom) {
+        app->first_station = atoi(app->text_store[0]);
+        app->first_station_char = app->text_store[0];
+        scene_manager_previous_scene(app->scene_manager);
+        return true;
+    } else if(event.type == SceneManagerEventTypeTick) {
+        if(app->state_notifications == SubGhzNotificationStateTx) {
+            app->state_notifications = SubGhzNotificationStateIDLE;
+            subghz_txrx_stop(app->subghz->txrx);
+            meal_pager_blink_stop(app);
+            meal_pager_transmit_model_set_sending(app->meal_pager_transmit, 0);
+        }
+        return true;
+    }
+
+    return consumed;
+}
+
+void meal_pager_scene_set_first_station_on_exit(void* context) {
+    Meal_Pager* app = context;
+    UNUSED(app);
+}

+ 63 - 0
scenes/meal_pager_scene_set_last_pager.c

@@ -0,0 +1,63 @@
+#include "../meal_pager_i.h"
+#include "../helpers/meal_pager_custom_event.h"
+#include "../helpers/meal_pager_led.h"
+#include <dolphin/dolphin.h>
+
+void meal_pager_set_last_pager_callback(void* context) {
+    furi_assert(context);
+    Meal_Pager* app = context;
+    view_dispatcher_send_custom_event(app->view_dispatcher, Meal_PagerCustomerEventIntInput);
+}
+
+void meal_pager_scene_set_last_pager_on_enter(void* context) {
+    furi_assert(context);
+    Meal_Pager* app = context;
+    IntInput* int_input = app->int_input;
+    size_t enter_name_length = 5;
+    meal_pager_set_max_values(app);
+    char* str = "Set Last Pager (0 - 999)";
+    const char* constStr = str;
+    snprintf(str, 36, "Set Last Pager (%lu - %lu)", app->first_pager, app->max_pager);
+
+    int_input_set_header_text(int_input, constStr);
+
+    int_input_set_result_callback(
+        int_input,
+        meal_pager_set_last_pager_callback,
+        context,
+        app->text_store[3],
+        enter_name_length,
+        false);
+
+    view_dispatcher_switch_to_view(app->view_dispatcher, Meal_PagerViewIdIntInput);
+}
+
+bool meal_pager_scene_set_last_pager_on_event(void* context, SceneManagerEvent event) {
+    Meal_Pager* app = context;
+    bool consumed = false;
+
+    if(event.type == SceneManagerEventTypeBack) {
+        scene_manager_previous_scene(app->scene_manager);
+        return true;
+    } else if(event.type == SceneManagerEventTypeCustom) {
+        app->last_pager = atoi(app->text_store[3]);
+        app->last_pager_char = app->text_store[3];
+        scene_manager_previous_scene(app->scene_manager);
+        return true;
+    } else if(event.type == SceneManagerEventTypeTick) {
+        if(app->state_notifications == SubGhzNotificationStateTx) {
+            app->state_notifications = SubGhzNotificationStateIDLE;
+            subghz_txrx_stop(app->subghz->txrx);
+            meal_pager_blink_stop(app);
+            meal_pager_transmit_model_set_sending(app->meal_pager_transmit, 0);
+        }
+        return true;
+    }
+
+    return consumed;
+}
+
+void meal_pager_scene_set_last_pager_on_exit(void* context) {
+    Meal_Pager* app = context;
+    UNUSED(app);
+}

+ 63 - 0
scenes/meal_pager_scene_set_last_station.c

@@ -0,0 +1,63 @@
+#include "../meal_pager_i.h"
+#include "../helpers/meal_pager_custom_event.h"
+#include "../helpers/meal_pager_led.h"
+#include <dolphin/dolphin.h>
+
+void meal_pager_set_last_station_callback(void* context) {
+    furi_assert(context);
+    Meal_Pager* app = context;
+    view_dispatcher_send_custom_event(app->view_dispatcher, Meal_PagerCustomerEventIntInput);
+}
+
+void meal_pager_scene_set_last_station_on_enter(void* context) {
+    furi_assert(context);
+    Meal_Pager* app = context;
+    IntInput* int_input = app->int_input;
+    size_t enter_name_length = 5;
+    meal_pager_set_max_values(app);
+    char* str = "Set Last Station (0 - 9999)";
+    const char* constStr = str;
+    snprintf(str, 36, "Set Last Station (%lu - %lu)", app->last_station, app->max_station);
+
+    int_input_set_header_text(int_input, constStr);
+
+    int_input_set_result_callback(
+        int_input,
+        meal_pager_set_last_station_callback,
+        context,
+        app->text_store[1],
+        enter_name_length,
+        false);
+
+    view_dispatcher_switch_to_view(app->view_dispatcher, Meal_PagerViewIdIntInput);
+}
+
+bool meal_pager_scene_set_last_station_on_event(void* context, SceneManagerEvent event) {
+    Meal_Pager* app = context;
+    bool consumed = false;
+
+    if(event.type == SceneManagerEventTypeBack) {
+        scene_manager_previous_scene(app->scene_manager);
+        return true;
+    } else if(event.type == SceneManagerEventTypeCustom) {
+        app->last_station = atoi(app->text_store[1]);
+        app->last_station_char = app->text_store[1];
+        scene_manager_previous_scene(app->scene_manager);
+        return true;
+    } else if(event.type == SceneManagerEventTypeTick) {
+        if(app->state_notifications == SubGhzNotificationStateTx) {
+            app->state_notifications = SubGhzNotificationStateIDLE;
+            subghz_txrx_stop(app->subghz->txrx);
+            meal_pager_blink_stop(app);
+            meal_pager_transmit_model_set_sending(app->meal_pager_transmit, 0);
+        }
+        return true;
+    }
+
+    return consumed;
+}
+
+void meal_pager_scene_set_last_station_on_exit(void* context) {
+    Meal_Pager* app = context;
+    UNUSED(app);
+}

+ 0 - 92
scenes/meal_pager_scene_set_station.c

@@ -1,92 +0,0 @@
-#include "../meal_pager_i.h"
-#include "../helpers/meal_pager_custom_event.h"
-#include "../helpers/meal_pager_storage.h"
-#include "../helpers/retekess/meal_pager_retekess_t119.h"
-#include "../helpers/retekess/meal_pager_retekess_td157.h"
-#include "../helpers/retekess/meal_pager_retekess_td165.h"
-#include "../helpers/retekess/meal_pager_retekess_td174.h"
-#include "../views/meal_pager_transmit.h"
-#include "../helpers/meal_pager_led.h"
-#include "../helpers/subghz/subghz.h"
-#include "../views/meal_pager_transmit.h"
-#include <dolphin/dolphin.h>
-
-void meal_pager_set_station_callback(void* context) {
-    furi_assert(context);
-    Meal_Pager* app = context;
-    view_dispatcher_send_custom_event(app->view_dispatcher, Meal_PagerCustomerEventIntInput);
-}
-
-/*static void meal_pager_int_input_callback(void* context) {
-    furi_assert(context);
-    Meal_Pager* app = context;
-    view_dispatcher_send_custom_event(app->view_dispatcher, Meal_PagerCustomerEventIntInput);
-}*/
-
-void meal_pager_scene_set_station_on_enter(void* context) {
-    furi_assert(context);
-    Meal_Pager* app = context;
-    IntInput* int_input = app->int_input;
-    size_t enter_name_length = 4;
-    meal_pager_set_max_values(app);
-    char *str = "Set first Station (0 - 9999)";
-    const char *constStr = str;
-    snprintf(str, 36, "Set first Station (0 - %lu)", app->max_station);
-    
-    int_input_set_header_text(int_input, constStr);
-    
-    int_input_set_result_callback(
-        int_input,
-        meal_pager_set_station_callback,
-        context,
-        app->text_buffer,
-        enter_name_length,
-        false);
-        
-    UNUSED(app);
-    UNUSED(enter_name_length);
-    view_dispatcher_switch_to_view(app->view_dispatcher, Meal_PagerViewIdIntInput);
-}
-
-
-bool meal_pager_scene_set_station_on_event(void* context, SceneManagerEvent event) {
-    Meal_Pager* app = context;
-    bool consumed = false;
-
-    if(event.type == SceneManagerEventTypeBack) {
-        scene_manager_previous_scene(app->scene_manager);
-        return true;
-    } else if(event.type == SceneManagerEventTypeCustom) {
-        switch(event.event) {
-        case Meal_PagerCustomEventTransmitLeft:
-        case Meal_PagerCustomEventTransmitRight:
-            break;
-        case Meal_PagerCustomEventTransmitUp:
-        case Meal_PagerCustomEventTransmitDown:
-            break;
-        case Meal_PagerCustomEventTransmitBack:
-            if(!scene_manager_search_and_switch_to_previous_scene(
-                   app->scene_manager, Meal_PagerSceneMenu)) {
-                scene_manager_stop(app->scene_manager);
-                view_dispatcher_stop(app->view_dispatcher);
-            }
-            consumed = true;
-            break;
-        }
-    } else if(event.type == SceneManagerEventTypeTick) {
-        if(app->state_notifications == SubGhzNotificationStateTx) {
-            app->state_notifications = SubGhzNotificationStateIDLE;
-            subghz_txrx_stop(app->subghz->txrx);
-            meal_pager_blink_stop(app);
-            meal_pager_transmit_model_set_sending(app->meal_pager_transmit, 0);
-        }
-        return true;
-    }
-
-    return consumed;
-}
-
-void meal_pager_scene_set_station_on_exit(void* context) {
-    Meal_Pager* app = context;
-    UNUSED(app);
-}

+ 15 - 33
scenes/meal_pager_scene_settings.c

@@ -66,21 +66,11 @@ static void meal_pager_scene_settings_set_pager_type(VariableItem* item) {
 }
 }
 
 
 static void meal_pager_scene_settings_set_first_station(VariableItem* item) {
 static void meal_pager_scene_settings_set_first_station(VariableItem* item) {
-    Meal_Pager* app = variable_item_get_context(item);
-    uint32_t index = variable_item_get_current_value_index(item);
-
-    snprintf(app->first_station_char, 20, "%lu", index);
-    variable_item_set_current_value_text(item, app->first_station_char);
-    app->first_station = index;
+    UNUSED(item);
 }
 }
 
 
 static void meal_pager_scene_settings_set_last_station(VariableItem* item) {
 static void meal_pager_scene_settings_set_last_station(VariableItem* item) {
-    Meal_Pager* app = variable_item_get_context(item);
-    uint32_t index = variable_item_get_current_value_index(item);
-
-    snprintf(app->last_station_char, 20, "%lu", index);
-    variable_item_set_current_value_text(item, app->last_station_char);
-    app->last_station = index;
+    UNUSED(item);
 }
 }
 
 
 static void meal_pager_scene_settings_set_first_pager(VariableItem* item) {
 static void meal_pager_scene_settings_set_first_pager(VariableItem* item) {
@@ -110,7 +100,7 @@ static void meal_pager_scene_settings_set_repeats(VariableItem* item) {
     app->repeats = index;
     app->repeats = index;
 }
 }
 
 
-static void meal_pager_scene_settings_set_haptic(VariableItem* item) {
+/*static void meal_pager_scene_settings_set_haptic(VariableItem* item) {
     Meal_Pager* app = variable_item_get_context(item);
     Meal_Pager* app = variable_item_get_context(item);
     uint8_t index = variable_item_get_current_value_index(item);
     uint8_t index = variable_item_get_current_value_index(item);
 
 
@@ -123,7 +113,7 @@ static void meal_pager_scene_settings_set_speaker(VariableItem* item) {
     uint8_t index = variable_item_get_current_value_index(item);
     uint8_t index = variable_item_get_current_value_index(item);
     variable_item_set_current_value_text(item, speaker_text[index]);
     variable_item_set_current_value_text(item, speaker_text[index]);
     app->speaker = speaker_value[index];
     app->speaker = speaker_value[index];
-}
+}*/
 
 
 static void meal_pager_scene_settings_set_led(VariableItem* item) {
 static void meal_pager_scene_settings_set_led(VariableItem* item) {
     Meal_Pager* app = variable_item_get_context(item);
     Meal_Pager* app = variable_item_get_context(item);
@@ -151,11 +141,7 @@ void meal_pager_scene_settings_on_enter(void* context) {
 
 
     // Pager Type
     // Pager Type
     item = variable_item_list_add(
     item = variable_item_list_add(
-        app->variable_item_list,
-        "Pager Type:",
-        4,
-        meal_pager_scene_settings_set_pager_type,
-        app);
+        app->variable_item_list, "Pager Type:", 4, meal_pager_scene_settings_set_pager_type, app);
     value_index = value_index_uint32(app->pager_type, pager_type_value, 4);
     value_index = value_index_uint32(app->pager_type, pager_type_value, 4);
     variable_item_set_current_value_index(item, value_index);
     variable_item_set_current_value_index(item, value_index);
     variable_item_set_current_value_text(item, pager_type_text[value_index]);
     variable_item_set_current_value_text(item, pager_type_text[value_index]);
@@ -164,10 +150,9 @@ void meal_pager_scene_settings_on_enter(void* context) {
     item = variable_item_list_add(
     item = variable_item_list_add(
         app->variable_item_list,
         app->variable_item_list,
         "First Station",
         "First Station",
-        255,
+        1,
         meal_pager_scene_settings_set_first_station,
         meal_pager_scene_settings_set_first_station,
         app);
         app);
-    variable_item_set_current_value_index(item, app->first_station);
     snprintf(app->first_pager_char, 20, "%lu", app->first_station);
     snprintf(app->first_pager_char, 20, "%lu", app->first_station);
     variable_item_set_current_value_text(item, app->first_station_char);
     variable_item_set_current_value_text(item, app->first_station_char);
 
 
@@ -175,24 +160,21 @@ void meal_pager_scene_settings_on_enter(void* context) {
     item = variable_item_list_add(
     item = variable_item_list_add(
         app->variable_item_list,
         app->variable_item_list,
         "Last Station",
         "Last Station",
-        255,
+        1,
         meal_pager_scene_settings_set_last_station,
         meal_pager_scene_settings_set_last_station,
         app);
         app);
-    variable_item_set_current_value_index(item, app->last_station);
     snprintf(app->last_station_char, 20, "%lu", app->last_station);
     snprintf(app->last_station_char, 20, "%lu", app->last_station);
     variable_item_set_current_value_text(item, app->last_station_char);
     variable_item_set_current_value_text(item, app->last_station_char);
 
 
     // First Pager
     // First Pager
     item = variable_item_list_add(
     item = variable_item_list_add(
-        app->variable_item_list, "First Pager", 99, meal_pager_scene_settings_set_first_pager, app);
-    variable_item_set_current_value_index(item, app->first_pager);
+        app->variable_item_list, "First Pager", 1, meal_pager_scene_settings_set_first_pager, app);
     snprintf(app->first_pager_char, 20, "%lu", app->first_pager);
     snprintf(app->first_pager_char, 20, "%lu", app->first_pager);
     variable_item_set_current_value_text(item, app->first_pager_char);
     variable_item_set_current_value_text(item, app->first_pager_char);
 
 
     // Last Pager
     // Last Pager
     item = variable_item_list_add(
     item = variable_item_list_add(
-        app->variable_item_list, "Last Pager", 99, meal_pager_scene_settings_set_last_pager, app);
-    variable_item_set_current_value_index(item, app->last_pager);
+        app->variable_item_list, "Last Pager", 1, meal_pager_scene_settings_set_last_pager, app);
     snprintf(app->last_pager_char, 20, "%lu", app->last_pager);
     snprintf(app->last_pager_char, 20, "%lu", app->last_pager);
     variable_item_set_current_value_text(item, app->last_pager_char);
     variable_item_set_current_value_text(item, app->last_pager_char);
 
 
@@ -203,19 +185,19 @@ void meal_pager_scene_settings_on_enter(void* context) {
     snprintf(app->repeats_char, 20, "%lu", app->repeats);
     snprintf(app->repeats_char, 20, "%lu", app->repeats);
     variable_item_set_current_value_text(item, app->repeats_char);
     variable_item_set_current_value_text(item, app->repeats_char);
 
 
-    // Vibro on/off
-    item = variable_item_list_add(
+    // Vibro on/off Disabled until used
+    /*item = variable_item_list_add(
         app->variable_item_list, "Vibro/Haptic:", 2, meal_pager_scene_settings_set_haptic, app);
         app->variable_item_list, "Vibro/Haptic:", 2, meal_pager_scene_settings_set_haptic, app);
     value_index = value_index_uint32(app->haptic, haptic_value, 2);
     value_index = value_index_uint32(app->haptic, haptic_value, 2);
     variable_item_set_current_value_index(item, value_index);
     variable_item_set_current_value_index(item, value_index);
-    variable_item_set_current_value_text(item, haptic_text[value_index]);
+    variable_item_set_current_value_text(item, haptic_text[value_index]);*/
 
 
-    // Sound on/off
-    item = variable_item_list_add(
+    // Sound on/off Disabled until used
+    /*item = variable_item_list_add(
         app->variable_item_list, "Sound:", 2, meal_pager_scene_settings_set_speaker, app);
         app->variable_item_list, "Sound:", 2, meal_pager_scene_settings_set_speaker, app);
     value_index = value_index_uint32(app->speaker, speaker_value, 2);
     value_index = value_index_uint32(app->speaker, speaker_value, 2);
     variable_item_set_current_value_index(item, value_index);
     variable_item_set_current_value_index(item, value_index);
-    variable_item_set_current_value_text(item, speaker_text[value_index]);
+    variable_item_set_current_value_text(item, speaker_text[value_index]);*/
 
 
     // LED Effects on/off
     // LED Effects on/off
     item = variable_item_list_add(
     item = variable_item_list_add(

+ 1 - 1
scenes/meal_pager_scene_transmit.c

@@ -93,7 +93,7 @@ bool meal_pager_scene_transmit_on_event(void* context, SceneManagerEvent event)
             break;
             break;
         }
         }
     } else if(event.type == SceneManagerEventTypeTick) {
     } else if(event.type == SceneManagerEventTypeTick) {
-        if(app->state_notifications == SubGhzNotificationStateTx) {
+        if(app->state_notifications == SubGhzNotificationStateTx && app->led == 1) {
             notification_message(app->notification, &sequence_blink_magenta_10);
             notification_message(app->notification, &sequence_blink_magenta_10);
         }
         }
         return true;
         return true;