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

update SDK version, solves issue #9

Oliver Fabel 9 месяцев назад
Родитель
Сommit
744cc606da
3 измененных файлов с 33 добавлено и 14 удалено
  1. 2 2
      upython.h
  2. 9 6
      upython_cli.c
  3. 22 6
      upython_repl.c

+ 2 - 2
upython.h

@@ -28,8 +28,8 @@ bool upython_select_python_file(FuriString* file_path);
 void upython_cli_register(void* args);
 void upython_cli_register(void* args);
 void upython_cli_unregister(void* args);
 void upython_cli_unregister(void* args);
 
 
-void upython_cli(Cli* cli, FuriString* args, void* ctx);
+void upython_cli(PipeSide* pipe, FuriString* args, void* ctx);
 
 
-void upython_repl_execute(Cli* cli);
+void upython_repl_execute();
 
 
 void upython_file_execute(FuriString* file);
 void upython_file_execute(FuriString* file);

+ 9 - 6
upython_cli.c

@@ -1,5 +1,6 @@
 #include <furi.h>
 #include <furi.h>
 #include <storage/storage.h>
 #include <storage/storage.h>
+#include <toolbox/pipe.h>
 
 
 #include "upython.h"
 #include "upython.h"
 
 
@@ -11,9 +12,11 @@ static void write_to_stdout_buffer(const char* data, size_t size, void* context)
     furi_stream_buffer_send(stdout_buffer, data, size, 0);
     furi_stream_buffer_send(stdout_buffer, data, size, 0);
 }
 }
 
 
-void upython_cli(Cli* cli, FuriString* args, void* ctx) {
+void upython_cli(PipeSide* pipe, FuriString* args, void* ctx) {
     UNUSED(ctx);
     UNUSED(ctx);
 
 
+    pipe_install_as_stdio(pipe);
+
     if(action != ActionNone) {
     if(action != ActionNone) {
         printf("%s is busy!\n", TAG);
         printf("%s is busy!\n", TAG);
 
 
@@ -23,7 +26,7 @@ void upython_cli(Cli* cli, FuriString* args, void* ctx) {
     if(furi_string_empty(args)) {
     if(furi_string_empty(args)) {
         action = ActionRepl;
         action = ActionRepl;
 
 
-        upython_repl_execute(cli);
+        upython_repl_execute();
 
 
         action = ActionNone;
         action = ActionNone;
     } else {
     } else {
@@ -62,9 +65,9 @@ void upython_cli_register(void* args) {
         action = ActionNone;
         action = ActionNone;
     }
     }
 
 
-    Cli* cli = furi_record_open(RECORD_CLI);
+    CliRegistry* cli = furi_record_open(RECORD_CLI);
 
 
-    cli_add_command(cli, CLI, CliCommandFlagParallelSafe, upython_cli, NULL);
+    cli_registry_add_command(cli, CLI, CliCommandFlagParallelSafe, upython_cli, NULL);
 
 
     furi_record_close(RECORD_CLI);
     furi_record_close(RECORD_CLI);
 }
 }
@@ -76,9 +79,9 @@ void upython_cli_unregister(void* args) {
         return;
         return;
     }
     }
 
 
-    Cli* cli = furi_record_open(RECORD_CLI);
+    CliRegistry* cli = furi_record_open(RECORD_CLI);
 
 
-    cli_delete_command(cli, CLI);
+    cli_registry_delete_command(cli, CLI);
 
 
     furi_record_close(RECORD_CLI);
     furi_record_close(RECORD_CLI);
 }
 }

+ 22 - 6
upython_repl.c

@@ -13,6 +13,21 @@
 #define AUTOCOMPLETE_MANY_MATCHES (size_t)(-1)
 #define AUTOCOMPLETE_MANY_MATCHES (size_t)(-1)
 #define HISTORY_SIZE              16
 #define HISTORY_SIZE              16
 
 
+typedef enum {
+    CliSymbolAsciiSOH = 0x01,
+    CliSymbolAsciiETX = 0x03,
+    CliSymbolAsciiEOT = 0x04,
+    CliSymbolAsciiBell = 0x07,
+    CliSymbolAsciiBackspace = 0x08,
+    CliSymbolAsciiTab = 0x09,
+    CliSymbolAsciiLF = 0x0A,
+    CliSymbolAsciiCR = 0x0D,
+    CliSymbolAsciiEsc = 0x1B,
+    CliSymbolAsciiUS = 0x1F,
+    CliSymbolAsciiSpace = 0x20,
+    CliSymbolAsciiDel = 0x7F,
+} CliSymbols;
+
 typedef struct {
 typedef struct {
     FuriString** stack;
     FuriString** stack;
     size_t pointer;
     size_t pointer;
@@ -245,7 +260,7 @@ inline static bool continue_with_input(mp_flipper_repl_context_t* context) {
     return true;
     return true;
 }
 }
 
 
-void upython_repl_execute(Cli* cli) {
+void upython_repl_execute() {
     size_t stack;
     size_t stack;
 
 
     const size_t heap_size = memmgr_get_free_heap() * 0.1;
     const size_t heap_size = memmgr_get_free_heap() * 0.1;
@@ -284,7 +299,7 @@ void upython_repl_execute(Cli* cli) {
 
 
             // scan character loop
             // scan character loop
             do {
             do {
-                character = cli_getc(cli);
+                character = getc(stdin);
 
 
                 // Ctrl + C
                 // Ctrl + C
                 if(character == CliSymbolAsciiETX) {
                 if(character == CliSymbolAsciiETX) {
@@ -316,15 +331,15 @@ void upython_repl_execute(Cli* cli) {
                     furi_string_cat(context->code, context->line);
                     furi_string_cat(context->code, context->line);
                     furi_string_trim(context->code);
                     furi_string_trim(context->code);
 
 
-                    cli_nl(cli);
+                    printf("\r\n");
 
 
                     break;
                     break;
                 }
                 }
 
 
                 // handle arrow keys
                 // handle arrow keys
                 if(character >= 0x18 && character <= 0x1B) {
                 if(character >= 0x18 && character <= 0x1B) {
-                    character = cli_getc(cli);
-                    character = cli_getc(cli);
+                    character = getc(stdin);
+                    character = getc(stdin);
 
 
                     handle_arrow_keys(character, context);
                     handle_arrow_keys(character, context);
 
 
@@ -348,7 +363,8 @@ void upython_repl_execute(Cli* cli) {
                 // append at end
                 // append at end
                 if(context->cursor == furi_string_size(context->line)) {
                 if(context->cursor == furi_string_size(context->line)) {
                     buffer[0] = character;
                     buffer[0] = character;
-                    cli_write(cli, (const uint8_t*)buffer, 1);
+                    putc(buffer[0], stdout);
+                    fflush(stdout);
 
 
                     furi_string_push_back(context->line, character);
                     furi_string_push_back(context->line, character);