Esteban Fuentealba 2 лет назад
Родитель
Сommit
829df9f1f6

+ 3 - 0
gb_cartridge_app.c

@@ -79,6 +79,9 @@ GBCartridge* gb_cartridge_app_app_alloc() {
 
     //End Scene Additions
 
+    //  Enable 5v
+    furi_hal_power_enable_otg();
+    furi_delay_ms(1); 
     return app;
 }
 

+ 4 - 0
gb_cartridge_app.h

@@ -86,6 +86,10 @@ typedef struct {
     FuriThread* thread;
     bool is_writing_rom;
     bool is_writing_ram;
+
+    int rom_banks;
+    int ram_banks;
+
 } GBCartridge;
 
 

+ 26 - 2
views/gb_cartridge_scene_1.c

@@ -22,6 +22,8 @@ typedef struct  {
     char* cart_RAMSize;
     char* cart_gb_type;
     bool cart_gb_sgb;
+    int ramBanks;
+    int romBanks;
     uint8_t cart_logo[48*8];
 
 } GameBoyCartridgeModel;
@@ -101,6 +103,25 @@ void gameboy_information_handle_rx_data_cb(uint8_t* buf, size_t len, void* conte
                 } else {
                     model->cart_gb_sgb = false;
                 }
+
+                //  Rom Banks
+                cJSON* romBanks = cJSON_GetObjectItemCaseSensitive(json, "romBanks");
+                if(cJSON_IsNumber(romBanks)) {
+                    model->romBanks = romBanks->valueint;
+                } else {
+                    model->romBanks = 0;
+                }
+
+                //  Ram Banks
+                cJSON* ramBanks = cJSON_GetObjectItemCaseSensitive(json, "ramBanks");
+                if(cJSON_IsNumber(ramBanks)) {
+                    model->ramBanks = ramBanks->valueint;
+                } else {
+                    model->ramBanks = 0;
+                }
+
+
+
                 cJSON* gb_logo =  cJSON_GetObjectItemCaseSensitive(json, "logo");
                 if (cJSON_IsArray(gb_logo)) {
                     // Leer los elementos del arreglo "logo"
@@ -126,6 +147,9 @@ void gameboy_information_handle_rx_data_cb(uint8_t* buf, size_t len, void* conte
 
                 instance->cart_dump_ram_filename = (char*)furi_string_get_cstr(path);
                 instance->cart_dump_ram_extension = "sav";
+
+                instance->rom_banks = model->romBanks;
+                instance->ram_banks = model->ramBanks;
                 
             }
         },true);
@@ -311,7 +335,7 @@ bool gb_cartridge_scene_1_input(InputEvent* event, void* context) {
                         }
                         // Register callbacks to receive data
                         uart_set_handle_rx_data_cb(((GBCartridge*)instance->app)->uart, gameboy_information_handle_rx_data_cb); // setup callback for general log rx thread
-                        const char gbcartridge_command[] = "gbcartridge\n";
+                        const char gbcartridge_command[] = "gbcartridge -i\n";
                         uart_tx((uint8_t*)gbcartridge_command, strlen(gbcartridge_command));
                     },
                     true);
@@ -356,7 +380,7 @@ void gb_cartridge_scene_1_enter(void* context) {
     
     // Register callbacks to receive data
     uart_set_handle_rx_data_cb(((GBCartridge*)instance->app)->uart, gameboy_information_handle_rx_data_cb); // setup callback for general log rx thread
-    const char gbcartridge_command[] = "gbcartridge\n";
+    const char gbcartridge_command[] = "gbcartridge -i\n";
     uart_tx((uint8_t*)gbcartridge_command, strlen(gbcartridge_command));
 }
 

+ 22 - 16
views/gb_cartridge_scene_2.c

@@ -66,9 +66,9 @@ void gb_cartridge_scene_2_set_callback(
 }
 
 void gameboy_rom_backup_handle_rx_data_cb(uint8_t* buf, size_t len, void* context) {
-    furi_assert(context);
+    // furi_assert(context);
     UNUSED(len);
-    UNUSED(buf);
+    // UNUSED(buf);
     GBCartridge* instance = context;
 
     with_view_model(
@@ -111,9 +111,13 @@ void gameboy_rom_backup_handle_rx_data_cb(uint8_t* buf, size_t len, void* contex
             }
             if (strcmp(model->event_type, "success") == 0) {
                 model->progress = 100;
-                if(instance->cart_rom && storage_file_is_open(instance->cart_rom)) {
-                    storage_file_close(instance->cart_rom);
-                }
+                // cJSON* total = cJSON_GetObjectItemCaseSensitive(json, "total");
+                // if(cJSON_IsNumber(total)) {
+                //     model->transfered = total->valueint;
+                // }
+                // if(instance->cart_rom && storage_file_is_open(instance->cart_rom)) {
+                //     storage_file_close(instance->cart_rom);
+                // }
                 notification_success(instance->notification);
             }
         },
@@ -217,8 +221,14 @@ bool gb_cartridge_scene_2_input(InputEvent* event, void* context) {
                         GBCartridge* app = (GBCartridge*)instance->context;
                         UNUSED(app);
                         // // Unregister rx callback
-                        // uart_set_handle_rx_data_cb(app->uart, NULL);
-                        // uart_set_handle_rx_data_cb(app->lp_uart, NULL);
+                        uart_set_handle_rx_data_cb(app->uart, NULL);
+                        uart_set_handle_rx_data_cb(app->lp_uart, NULL);
+                        //  Close file
+                        app->is_writing_rom = false;
+                        if(app->cart_rom && storage_file_is_open(app->cart_rom)) {
+                            storage_file_close(app->cart_rom);
+                        }
+                        notification_message(app->notification, &sequence_display_backlight_enforce_auto);
                         instance->callback(GBCartridgeCustomEventScene2Back, instance->context);
                     },
                     true);
@@ -264,14 +274,6 @@ void gb_cartridge_scene_2_exit(void* context) {
     // Automatically stop the scan when exiting view
     // uart_tx((uint8_t*)("stopscan\n"), strlen("stopscan\n"));
     // furi_delay_ms(50);
-
-    uart_set_handle_rx_data_cb(app->uart, NULL);
-    uart_set_handle_rx_data_cb(app->lp_uart, NULL);
-
-    app->is_writing_rom = false;
-    if(app->cart_rom && storage_file_is_open(app->cart_rom)) {
-        storage_file_close(app->cart_rom);
-    }
     gb_cartridge_stop_all_sound(app);
 }
 
@@ -279,6 +281,9 @@ void gb_cartridge_scene_2_enter(void* context) {
     furi_assert(context);
     GBCartridgeScene2* instance = context;
     GBCartridge* app = (GBCartridge*)instance->context;
+    //  backlight on
+    notification_message(app->notification, &sequence_display_backlight_enforce_on);
+
     UNUSED(app);
     // dolphin_deed(DolphinDeedPluginStart);
     with_view_model(
@@ -287,14 +292,15 @@ void gb_cartridge_scene_2_enter(void* context) {
         {
             model->cart_dump_rom_filename  = app->cart_dump_rom_filename;
             model->cart_dump_rom_extension = app->cart_dump_rom_extension;
+            model->total_rom =  app->rom_banks * 16 * 1024;
             // char *filename = strrchr(model->cart_dump_rom_filename_sequential, '/');
             // filename++;
             char *filename = sequential_file_resolve_path(app->storage, MALVEKE_APP_FOLDER, app->cart_dump_rom_filename, model->cart_dump_rom_extension);
             model->cart_dump_rom_filename_sequential =  filename;
-            app->is_writing_rom = true;
              // Register callbacks to receive data
             uart_set_handle_rx_data_cb(app->uart, gameboy_rom_backup_handle_rx_data_cb); // setup callback for general log rx thread
             uart_set_handle_rx_data_cb(app->lp_uart, dump_handle_rx_data_cb); // setup callback for general log rx thread
+            app->is_writing_rom = true;
         },
         false);
    

+ 1 - 1
views/gb_cartridge_scene_4.c

@@ -171,7 +171,7 @@ bool gb_cartridge_scene_4_input(InputEvent* event, void* context) {
                         GBCartridge* app = (GBCartridge*)instance->context;
                         // Unregister rx callback
                         uart_set_handle_rx_data_cb(app->uart, NULL);
-                        uart_set_handle_rx_data_cb(app->lp_uart, NULL);
+                        // uart_set_handle_rx_data_cb(app->lp_uart, NULL);
                         instance->callback(GBCartridgeCustomEventScene4Back, instance->context);
                     },
                     true);

+ 4 - 4
views/gb_cartridge_scene_5.c

@@ -78,14 +78,14 @@ static int32_t cartridge_writting_worker_thread(void* thread_context) {
 
     if (select_ram_file(app, file))
     {
-        const char gbcartridge_start_command[] = "gbcartridge -w -o -s\n";
+        const char gbcartridge_start_command[] = "gbcartridge -w -a -s\n";
         uart_tx((uint8_t *)gbcartridge_start_command, strlen(gbcartridge_start_command));
         furi_delay_ms(100);
         
         uint16_t ret = 0;
         do {
             ret = storage_file_read(file, buffer, sizeof(buffer) - 1);
-            lp_uart_tx((uint8_t *)buffer, sizeof(buffer));
+            // lp_uart_tx((uint8_t *)buffer, sizeof(buffer));
             // uart_tx((uint8_t *)buffer, sizeof(buffer))
 
             with_view_model(
@@ -99,7 +99,7 @@ static int32_t cartridge_writting_worker_thread(void* thread_context) {
             
         } while(ret > 0);
 
-        const char gbcartridge_end_command[] = "gbcartridge -w -o -e\n";
+        const char gbcartridge_end_command[] = "gbcartridge -w -a -e\n";
         uart_tx((uint8_t *)gbcartridge_end_command, strlen(gbcartridge_end_command));
         storage_file_free(file);
     }
@@ -228,7 +228,7 @@ bool gb_cartridge_scene_5_input(InputEvent *event, void *context)
                     GBCartridge *app = (GBCartridge *)instance->context;
                     // Unregister rx callback
                     uart_set_handle_rx_data_cb(app->uart, NULL);
-                    uart_set_handle_rx_data_cb(app->lp_uart, NULL);
+                    // uart_set_handle_rx_data_cb(app->lp_uart, NULL);
                     instance->callback(GBCartridgeCustomEventScene5Back, instance->context);
                 },
                 true);