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

Squashed 'caesarcipher/' changes from e79cb8ae0..4266b230f

4266b230f fix catalog versions
89c71bced categories part 1
4c772b00c more manifestos, xbox controller and videopoker ufbt fixes
89a41c594 API 31 / unzip sources
REVERT: e79cb8ae0 cleanup
REVERT: 70e16ee08 duh
REVERT: fbda1dc18 extension
REVERT: 10fa92828 add icon
REVERT: 99d8e4a79 LICENSE
REVERT: a1aad2904 README
REVERT: 8134f073b working state
REVERT: e9028581a output string in uppercase
REVERT: 0affc29a8 write text to textbox
REVERT: 7c7ba85f8 keyboard input

git-subtree-dir: caesarcipher
git-subtree-split: 4266b230f4fff1af918f82f54b0b1b23cabec95b
Willy-JL 2 лет назад
Родитель
Сommit
afb78f4a49
2 измененных файлов с 109 добавлено и 99 удалено
  1. 6 2
      application.fam
  2. 103 97
      caesar_cipher.c

+ 6 - 2
application.fam

@@ -1,7 +1,7 @@
 App(
     appid="caesar_cipher",
     name="Caesar Cipher",
-    apptype=FlipperAppType.PLUGIN,
+    apptype=FlipperAppType.EXTERNAL,
     entry_point="caesar_cipher_app",
     cdefines=["APP_CAESAR_CIPHER"],
     requires=[
@@ -9,6 +9,10 @@ App(
     ],
     stack_size=2 * 1024,
     fap_icon="caesar_cipher_icon.png",
-    fap_category="Misc",
+    fap_category="Tools",
     order=20,
+    fap_author="@panki27",
+    fap_weburl="https://github.com/panki27/caesar-cipher",
+    fap_version="1.1",
+    fap_description="Encrypt and decrypt text using Caesar Cipher",
 )

+ 103 - 97
caesar_cipher.c

@@ -21,126 +21,132 @@ typedef struct {
 } PluginEvent;
 
 typedef struct {
-  ViewDispatcher* view_dispatcher;
-  TextInput* text_input;
-  TextBox* text_box;
-  char input[TEXT_BUFFER_SIZE];
-  char output[(TEXT_BUFFER_SIZE*26) + (26)]; // linebreaks
+    FuriMutex* mutex;
+    ViewDispatcher* view_dispatcher;
+    TextInput* text_input;
+    TextBox* text_box;
+    char input[TEXT_BUFFER_SIZE];
+    char output[(TEXT_BUFFER_SIZE * 26) + (26)]; // linebreaks
 } CaesarState;
 
 static void string_to_uppercase(char* input) {
-  int i;
-  for (i=0; input[i] != '\0'; i++) {
-    if (input[i] >= 'a' && input[i] <= 'z') {
-      input[i] = input[i] - 32;
-    } else {
-      input[i] = input[i];
+    int i;
+    for(i = 0; input[i] != '\0'; i++) {
+        if(input[i] >= 'a' && input[i] <= 'z') {
+            input[i] = input[i] - 32;
+        } else {
+            input[i] = input[i];
+        }
     }
-  }
 }
 
 static void build_output(char* input, char* output) {
-  int out = 0;
-  for ( int rot = 1; rot < 26; rot++) {
-    int in;
-    for(in = 0; input[in] != '\0'; in++){
-      if (input[in] >= 'A' && input[in] <= 'Z') {
-        output[out] = 65 + ( ((input[in] - 65) + rot ) % 26);
-      } else {
-        output[out] = input[in];
-      }
-      out++;
+    int out = 0;
+    for(int rot = 1; rot < 26; rot++) {
+        int in;
+        for(in = 0; input[in] != '\0'; in++) {
+            if(input[in] >= 'A' && input[in] <= 'Z') {
+                output[out] = 65 + (((input[in] - 65) + rot) % 26);
+            } else {
+                output[out] = input[in];
+            }
+            out++;
+        }
+        output[out] = '\n';
+        out++;
     }
-    output[out]= '\n';
-    out++;
-  }
-  output[out]='\0';
+    output[out] = '\0';
 }
 
 static void text_input_callback(void* ctx) {
-  CaesarState* caesar_state = acquire_mutex((ValueMutex*)ctx, 25);
-  FURI_LOG_D("caesar_cipher", "Input text: %s", caesar_state->input);
-  // this is where we build the output.
-  string_to_uppercase(caesar_state->input);
-  FURI_LOG_D("caesar_cipher", "Upper text: %s", caesar_state->input);
-  build_output(caesar_state->input, caesar_state->output);
-  text_box_set_text(caesar_state->text_box, caesar_state->output);
-  view_dispatcher_switch_to_view(caesar_state->view_dispatcher, 1);
-
-  release_mutex((ValueMutex*)ctx, caesar_state);
+    furi_assert(ctx);
+    CaesarState* caesar_state = ctx;
+    furi_mutex_acquire(caesar_state->mutex, FuriWaitForever);
+
+    FURI_LOG_D("caesar_cipher", "Input text: %s", caesar_state->input);
+    // this is where we build the output.
+    string_to_uppercase(caesar_state->input);
+    FURI_LOG_D("caesar_cipher", "Upper text: %s", caesar_state->input);
+    build_output(caesar_state->input, caesar_state->output);
+    text_box_set_text(caesar_state->text_box, caesar_state->output);
+    view_dispatcher_switch_to_view(caesar_state->view_dispatcher, 1);
+
+    furi_mutex_release(caesar_state->mutex);
 }
 
-
 static bool back_event_callback(void* ctx) {
-  const CaesarState* caesar_state = acquire_mutex((ValueMutex*)ctx, 25);
-  view_dispatcher_stop(caesar_state->view_dispatcher);
-  release_mutex((ValueMutex*)ctx, caesar_state);
-  return true;
+    const CaesarState* caesar_state = ctx;
+    furi_mutex_acquire(caesar_state->mutex, FuriWaitForever);
+    view_dispatcher_stop(caesar_state->view_dispatcher);
+    furi_mutex_release(caesar_state->mutex);
+    return true;
 }
 
 static void caesar_cipher_state_init(CaesarState* const caesar_state) {
-  caesar_state->view_dispatcher = view_dispatcher_alloc();
-  caesar_state->text_input = text_input_alloc();
-  caesar_state->text_box = text_box_alloc();
-  text_box_set_font(caesar_state->text_box, TextBoxFontText);
+    caesar_state->view_dispatcher = view_dispatcher_alloc();
+    caesar_state->text_input = text_input_alloc();
+    caesar_state->text_box = text_box_alloc();
+    text_box_set_font(caesar_state->text_box, TextBoxFontText);
 }
 
 static void caesar_cipher_state_free(CaesarState* const caesar_state) {
-  text_input_free(caesar_state->text_input);
-  text_box_free(caesar_state->text_box);
-  view_dispatcher_remove_view(caesar_state->view_dispatcher, 0);
-  view_dispatcher_remove_view(caesar_state->view_dispatcher, 1);
-  view_dispatcher_free(caesar_state->view_dispatcher);
-  free(caesar_state);
+    text_input_free(caesar_state->text_input);
+    text_box_free(caesar_state->text_box);
+    view_dispatcher_remove_view(caesar_state->view_dispatcher, 0);
+    view_dispatcher_remove_view(caesar_state->view_dispatcher, 1);
+    view_dispatcher_free(caesar_state->view_dispatcher);
+    free(caesar_state);
 }
 
 int32_t caesar_cipher_app() {
+    CaesarState* caesar_state = malloc(sizeof(CaesarState));
 
-  CaesarState* caesar_state = malloc(sizeof(CaesarState));
-  
-  FURI_LOG_D("caesar_cipher", "Running caesar_cipher_state_init");
-  caesar_cipher_state_init(caesar_state);
+    FURI_LOG_D("caesar_cipher", "Running caesar_cipher_state_init");
+    caesar_cipher_state_init(caesar_state);
 
-  ValueMutex state_mutex;
-  if(!init_mutex(&state_mutex, caesar_state, sizeof(CaesarState))) {
-    FURI_LOG_E("caesar_cipher", "cannot create mutex\r\n");
-    free(caesar_state);
-    return 255;
-  }
-
-  FURI_LOG_D("caesar_cipher", "Assigning text input callback");
-  text_input_set_result_callback(
-    caesar_state->text_input,
-    text_input_callback,
-    &state_mutex,
-    caesar_state->input,
-    TEXT_BUFFER_SIZE,
-    //clear default text
-    true
-  );
-  text_input_set_header_text(caesar_state->text_input, "Input");
-
-  // Open GUI and register view_port
-  Gui* gui = furi_record_open("gui");
-  //gui_add_view_port(gui, view_port, GuiLayerFullscreen);
-  
-  FURI_LOG_D("caesar_cipher", "Enabling view dispatcher queue");
-  view_dispatcher_enable_queue(caesar_state->view_dispatcher);
-
-  FURI_LOG_D("caesar_cipher", "Adding text input view to dispatcher");
-  view_dispatcher_add_view(caesar_state->view_dispatcher, 0, text_input_get_view(caesar_state->text_input)); 
-  view_dispatcher_add_view(caesar_state->view_dispatcher, 1, text_box_get_view(caesar_state->text_box)); 
-  FURI_LOG_D("caesar_cipher", "Attaching view dispatcher to GUI");
-  view_dispatcher_attach_to_gui(caesar_state->view_dispatcher, gui, ViewDispatcherTypeFullscreen);
-  FURI_LOG_D("ceasar_cipher", "starting view dispatcher");
-  view_dispatcher_set_navigation_event_callback(caesar_state->view_dispatcher, back_event_callback);
-  view_dispatcher_set_event_callback_context(caesar_state->view_dispatcher, &state_mutex);
-  view_dispatcher_switch_to_view(caesar_state->view_dispatcher, 0);
-  view_dispatcher_run(caesar_state->view_dispatcher);
-
-  furi_record_close("gui");
-  delete_mutex(&state_mutex);
-  caesar_cipher_state_free(caesar_state);
-
-  return 0;
+    caesar_state->mutex = furi_mutex_alloc(FuriMutexTypeNormal);
+    if(!caesar_state->mutex) {
+        FURI_LOG_E("caesar_cipher", "cannot create mutex\r\n");
+        free(caesar_state);
+        return 255;
+    }
+
+    FURI_LOG_D("caesar_cipher", "Assigning text input callback");
+    text_input_set_result_callback(
+        caesar_state->text_input,
+        text_input_callback,
+        caesar_state,
+        caesar_state->input,
+        TEXT_BUFFER_SIZE,
+        //clear default text
+        true);
+    text_input_set_header_text(caesar_state->text_input, "Input");
+
+    // Open GUI and register view_port
+    Gui* gui = furi_record_open("gui");
+    //gui_add_view_port(gui, view_port, GuiLayerFullscreen);
+
+    FURI_LOG_D("caesar_cipher", "Enabling view dispatcher queue");
+    view_dispatcher_enable_queue(caesar_state->view_dispatcher);
+
+    FURI_LOG_D("caesar_cipher", "Adding text input view to dispatcher");
+    view_dispatcher_add_view(
+        caesar_state->view_dispatcher, 0, text_input_get_view(caesar_state->text_input));
+    view_dispatcher_add_view(
+        caesar_state->view_dispatcher, 1, text_box_get_view(caesar_state->text_box));
+    FURI_LOG_D("caesar_cipher", "Attaching view dispatcher to GUI");
+    view_dispatcher_attach_to_gui(
+        caesar_state->view_dispatcher, gui, ViewDispatcherTypeFullscreen);
+    FURI_LOG_D("ceasar_cipher", "starting view dispatcher");
+    view_dispatcher_set_navigation_event_callback(
+        caesar_state->view_dispatcher, back_event_callback);
+    view_dispatcher_set_event_callback_context(caesar_state->view_dispatcher, caesar_state);
+    view_dispatcher_switch_to_view(caesar_state->view_dispatcher, 0);
+    view_dispatcher_run(caesar_state->view_dispatcher);
+
+    furi_record_close("gui");
+    furi_mutex_free(caesar_state->mutex);
+    caesar_cipher_state_free(caesar_state);
+
+    return 0;
 }