| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- #include "main_menu.h"
- #include "../fuzzer_i.h"
- #include <input/input.h>
- #include "../lib/worker/protocol.h"
- #define PROTOCOL_NAME_Y 12
- // #define PROTOCOL_CAROUSEL
- struct FuzzerViewMain {
- View* view;
- FuzzerViewMainCallback callback;
- void* context;
- };
- typedef struct {
- uint8_t proto_index;
- uint8_t menu_index;
- uint8_t proto_max;
- uint8_t menu_max;
- } FuzzerViewMainModel;
- void fuzzer_view_main_update_data(FuzzerViewMain* view, FuzzerState state) {
- furi_assert(view);
- with_view_model(
- view->view,
- FuzzerViewMainModel * model,
- {
- model->proto_index = state.proto_index;
- model->menu_index = state.menu_index;
- },
- true);
- }
- void fuzzer_view_main_get_state(FuzzerViewMain* view, FuzzerState* state) {
- furi_assert(view);
- with_view_model(
- view->view,
- FuzzerViewMainModel * model,
- {
- state->proto_index = model->proto_index;
- state->menu_index = model->menu_index;
- },
- true);
- }
- void fuzzer_view_main_set_callback(
- FuzzerViewMain* view,
- FuzzerViewMainCallback callback,
- void* context) {
- furi_assert(view);
- view->callback = callback;
- view->context = context;
- }
- void fuzzer_view_main_draw(Canvas* canvas, FuzzerViewMainModel* model) {
- canvas_clear(canvas);
- canvas_set_color(canvas, ColorBlack);
- if(model->menu_index > 0) {
- canvas_set_font(canvas, FontSecondary);
- canvas_draw_str_aligned(
- canvas,
- 64,
- 24,
- AlignCenter,
- AlignTop,
- fuzzer_proto_get_menu_label(model->menu_index - 1));
- }
- canvas_set_font(canvas, FontPrimary);
- canvas_draw_str_aligned(
- canvas, 64, 36, AlignCenter, AlignTop, fuzzer_proto_get_menu_label(model->menu_index));
- if(model->menu_index < (model->menu_max - 1)) {
- canvas_set_font(canvas, FontSecondary);
- canvas_draw_str_aligned(
- canvas,
- 64,
- 48,
- AlignCenter,
- AlignTop,
- fuzzer_proto_get_menu_label(model->menu_index + 1));
- }
- canvas_set_font(canvas, FontPrimary);
- canvas_draw_str_aligned(canvas, 27, PROTOCOL_NAME_Y, AlignCenter, AlignBottom, "<");
- canvas_draw_str_aligned(
- canvas,
- 64,
- PROTOCOL_NAME_Y,
- AlignCenter,
- AlignBottom,
- fuzzer_proto_get_name(model->proto_index));
- canvas_draw_str_aligned(canvas, 101, PROTOCOL_NAME_Y, AlignCenter, AlignBottom, ">");
- #ifdef PROTOCOL_CAROUSEL
- canvas_set_font(canvas, FontSecondary);
- canvas_draw_str_aligned(
- canvas,
- 20,
- PROTOCOL_NAME_Y,
- AlignRight,
- AlignBottom,
- (model->proto_index > 0) ? fuzzer_proto_get_name(model->proto_index - 1) :
- fuzzer_proto_get_name((model->proto_max - 1)));
- canvas_draw_str_aligned(
- canvas,
- 108,
- PROTOCOL_NAME_Y,
- AlignLeft,
- AlignBottom,
- (model->proto_index < (model->proto_max - 1)) ?
- fuzzer_proto_get_name(model->proto_index + 1) :
- fuzzer_proto_get_name(0));
- #endif
- }
- bool fuzzer_view_main_input(InputEvent* event, void* context) {
- furi_assert(context);
- FuzzerViewMain* view = context;
- if(event->key == InputKeyBack &&
- (event->type == InputTypeLong || event->type == InputTypeShort)) {
- view->callback(FuzzerCustomEventViewMainBack, view->context);
- return true;
- } else if(event->key == InputKeyOk && event->type == InputTypeShort) {
- view->callback(FuzzerCustomEventViewMainOk, view->context);
- return true;
- } else if(event->key == InputKeyDown && event->type == InputTypeShort) {
- with_view_model(
- view->view,
- FuzzerViewMainModel * model,
- {
- if(model->menu_index < (model->menu_max - 1)) {
- model->menu_index++;
- }
- },
- true);
- return true;
- } else if(event->key == InputKeyUp && event->type == InputTypeShort) {
- with_view_model(
- view->view,
- FuzzerViewMainModel * model,
- {
- if(model->menu_index != 0) {
- model->menu_index--;
- }
- },
- true);
- return true;
- } else if(event->key == InputKeyLeft && event->type == InputTypeShort) {
- with_view_model(
- view->view,
- FuzzerViewMainModel * model,
- {
- if(model->proto_index != 0) {
- model->proto_index--;
- } else {
- model->proto_index = (model->proto_max - 1);
- }
- },
- true);
- return true;
- } else if(event->key == InputKeyRight && event->type == InputTypeShort) {
- with_view_model(
- view->view,
- FuzzerViewMainModel * model,
- {
- if(model->proto_index == (model->proto_max - 1)) {
- model->proto_index = 0;
- } else {
- model->proto_index++;
- }
- },
- true);
- return true;
- }
- return true;
- }
- void fuzzer_view_main_enter(void* context) {
- furi_assert(context);
- }
- void fuzzer_view_main_exit(void* context) {
- furi_assert(context);
- }
- FuzzerViewMain* fuzzer_view_main_alloc() {
- FuzzerViewMain* view = malloc(sizeof(FuzzerViewMain));
- // View allocation and configuration
- view->view = view_alloc();
- view_allocate_model(view->view, ViewModelTypeLocking, sizeof(FuzzerViewMainModel));
- view_set_context(view->view, view);
- view_set_draw_callback(view->view, (ViewDrawCallback)fuzzer_view_main_draw);
- view_set_input_callback(view->view, fuzzer_view_main_input);
- view_set_enter_callback(view->view, fuzzer_view_main_enter);
- view_set_exit_callback(view->view, fuzzer_view_main_exit);
- with_view_model(
- view->view,
- FuzzerViewMainModel * model,
- {
- model->proto_index = 0;
- model->proto_max = fuzzer_proto_get_count_of_protocols();
- model->menu_index = 0;
- model->menu_max = fuzzer_proto_get_count_of_menu_items();
- },
- true);
- return view;
- }
- void fuzzer_view_main_free(FuzzerViewMain* view) {
- furi_assert(view);
- // with_view_model(
- // view->view,
- // FuzzerViewMainModel * model,
- // {
- // },
- // true);
- view_free(view->view);
- free(view);
- }
- View* fuzzer_view_main_get_view(FuzzerViewMain* view) {
- furi_assert(view);
- return view->view;
- }
|