diff --git a/.gitignore b/.gitignore index ff430019..6ad2604e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ # Configuration +.clangd .clang-format .editorconfig diff --git a/flip_tdi/.catalog/changelog.md b/flip_tdi/.catalog/changelog.md index b6c1b566..168f03d9 100644 --- a/flip_tdi/.catalog/changelog.md +++ b/flip_tdi/.catalog/changelog.md @@ -1,2 +1,6 @@ +## 1.1 + - Fixed crash when connecting to a USB charger instead of a PC + - Fixed crash when connecting to a PC with a companion app running + ## 1.0 - Initial release diff --git a/flip_tdi/application.fam b/flip_tdi/application.fam index 6ef58abe..8de90d84 100644 --- a/flip_tdi/application.fam +++ b/flip_tdi/application.fam @@ -9,7 +9,7 @@ App( ], stack_size=2 * 1024, fap_description="Flipper FTDI232H emulator.", - fap_version="1.0", + fap_version="1.1", fap_icon="flip_tdi_icon_10px.png", fap_category="USB", fap_icon_assets="images", diff --git a/flip_tdi/flip_tdi_app.c b/flip_tdi/flip_tdi_app.c index f98604cd..a2e790b5 100644 --- a/flip_tdi/flip_tdi_app.c +++ b/flip_tdi/flip_tdi_app.c @@ -60,9 +60,10 @@ FlipTDIApp* flip_tdi_app_alloc() { flip_tdi_view_main_get_view(app->flip_tdi_view_main_instance)); // FTDI emulation Start - flip_tdi_start(app); + app->ftdi_usb = ftdi_usb_start(); - scene_manager_next_scene(app->scene_manager, FlipTDISceneMain); + scene_manager_next_scene( + app->scene_manager, app->ftdi_usb ? FlipTDISceneMain : FlipTDISceneCloseRpc); return app; } @@ -71,13 +72,13 @@ void flip_tdi_app_free(FlipTDIApp* app) { furi_assert(app); // FTDI emulation Stop - flip_tdi_stop(app); + if(app->ftdi_usb) ftdi_usb_stop(app->ftdi_usb); // Submenu view_dispatcher_remove_view(app->view_dispatcher, FlipTDIViewSubmenu); submenu_free(app->submenu); - // Widget + // Widget view_dispatcher_remove_view(app->view_dispatcher, FlipTDIViewWidget); widget_free(app->widget); @@ -108,4 +109,4 @@ int32_t flip_tdi_app(void* p) { flip_tdi_app_free(flip_tdi_app); return 0; -} \ No newline at end of file +} diff --git a/flip_tdi/flip_tdi_app_i.c b/flip_tdi/flip_tdi_app_i.c deleted file mode 100644 index 4a37fa26..00000000 --- a/flip_tdi/flip_tdi_app_i.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "flip_tdi_app_i.h" - -#include - -#define TAG "FlipTDI" - -void flip_tdi_start(FlipTDIApp* app) { - furi_assert(app); - - app->ftdi_usb = ftdi_usb_start(); -} - -void flip_tdi_stop(FlipTDIApp* app) { - furi_assert(app); - - ftdi_usb_stop(app->ftdi_usb); -} diff --git a/flip_tdi/helpers/ftdi_usb.c b/flip_tdi/helpers/ftdi_usb.c index fdb5a4cf..701d7449 100644 --- a/flip_tdi/helpers/ftdi_usb.c +++ b/flip_tdi/helpers/ftdi_usb.c @@ -180,12 +180,6 @@ static void ftdi_usb_deinit(usbd_device* dev) { ftdi_usb->thread = NULL; ftdi_free(ftdi_usb->ftdi); - - free(ftdi_usb->usb.str_prod_descr); - ftdi_usb->usb.str_prod_descr = NULL; - free(ftdi_usb->usb.str_serial_descr); - ftdi_usb->usb.str_serial_descr = NULL; - free(ftdi_usb); } static void ftdi_usb_send(usbd_device* dev, uint8_t* buf, uint16_t len) { @@ -495,7 +489,7 @@ FtdiUsb* ftdi_usb_start(void) { ftdi_usb->usb.cfg_descr = (void*)&usb_ftdi_cfg_descr; if(!furi_hal_usb_set_config(&ftdi_usb->usb, ftdi_usb)) { - FURI_LOG_E(TAG, "USB locked, cannot start Mass Storage"); + FURI_LOG_E(TAG, "USB locked, cannot start FlipTDI"); free(ftdi_usb->usb.str_prod_descr); free(ftdi_usb->usb.str_serial_descr); free(ftdi_usb); @@ -506,4 +500,5 @@ FtdiUsb* ftdi_usb_start(void) { void ftdi_usb_stop(FtdiUsb* ftdi_usb) { furi_hal_usb_set_config(ftdi_usb->usb_prev, NULL); + free(ftdi_usb); } diff --git a/flip_tdi/images/ActiveConnection_50x64.png b/flip_tdi/images/ActiveConnection_50x64.png new file mode 100644 index 00000000..c5ebb835 Binary files /dev/null and b/flip_tdi/images/ActiveConnection_50x64.png differ diff --git a/flip_tdi/scenes/flip_tdi_scene_close_rpc.c b/flip_tdi/scenes/flip_tdi_scene_close_rpc.c new file mode 100644 index 00000000..fa6c9110 --- /dev/null +++ b/flip_tdi/scenes/flip_tdi_scene_close_rpc.c @@ -0,0 +1,35 @@ +#include "../flip_tdi_app_i.h" + +void flip_tdi_scene_close_rpc_on_enter(void* context) { + FlipTDIApp* app = context; + + widget_add_icon_element(app->widget, 78, 0, &I_ActiveConnection_50x64); + widget_add_string_multiline_element( + app->widget, 3, 2, AlignLeft, AlignTop, FontPrimary, "Connection\nIs Active!"); + widget_add_string_multiline_element( + app->widget, + 3, + 30, + AlignLeft, + AlignTop, + FontSecondary, + "Disconnect from\nPC or phone to\nuse this function."); + + view_dispatcher_switch_to_view(app->view_dispatcher, FlipTDIViewWidget); +} + +bool flip_tdi_scene_close_rpc_on_event(void* context, SceneManagerEvent event) { + FlipTDIApp* app = context; + + if(event.type == SceneManagerEventTypeBack) { + view_dispatcher_stop(app->view_dispatcher); + return true; + } + + return false; +} + +void flip_tdi_scene_close_rpc_on_exit(void* context) { + FlipTDIApp* app = context; + widget_reset(app->widget); +} diff --git a/flip_tdi/scenes/flip_tdi_scene_config.h b/flip_tdi/scenes/flip_tdi_scene_config.h index 188c3732..5b34da57 100644 --- a/flip_tdi/scenes/flip_tdi_scene_config.h +++ b/flip_tdi/scenes/flip_tdi_scene_config.h @@ -4,3 +4,4 @@ ADD_SCENE(flip_tdi, wiring_uart, WiringUart) ADD_SCENE(flip_tdi, wiring_spi, WiringSpi) ADD_SCENE(flip_tdi, wiring_gpio, WiringGpio) ADD_SCENE(flip_tdi, about, About) +ADD_SCENE(flip_tdi, close_rpc, CloseRpc) diff --git a/mass_storage/.catalog/CHANGELOG.md b/mass_storage/.catalog/CHANGELOG.md index a70c145b..ee5f7865 100644 --- a/mass_storage/.catalog/CHANGELOG.md +++ b/mass_storage/.catalog/CHANGELOG.md @@ -1,3 +1,6 @@ +## v.1.5 +Fixed crash when connected to a USB charger instead of a PC + ## v.1.4 Removed call to legacy SDK API diff --git a/mass_storage/application.fam b/mass_storage/application.fam index c65f2735..445675d7 100644 --- a/mass_storage/application.fam +++ b/mass_storage/application.fam @@ -9,7 +9,7 @@ App( ], stack_size=2 * 1024, fap_description="Implements a mass storage device over USB for disk images", - fap_version="1.4", + fap_version="1.5", fap_icon="assets/mass_storage_10px.png", fap_icon_assets="assets", fap_category="USB", diff --git a/mass_storage/helpers/mass_storage_usb.c b/mass_storage/helpers/mass_storage_usb.c index f493203a..f9237305 100644 --- a/mass_storage/helpers/mass_storage_usb.c +++ b/mass_storage/helpers/mass_storage_usb.c @@ -297,12 +297,6 @@ static void usb_deinit(usbd_device* dev) { furi_thread_join(mass->thread); furi_thread_free(mass->thread); mass->thread = NULL; - - free(mass->usb.str_prod_descr); - mass->usb.str_prod_descr = NULL; - free(mass->usb.str_serial_descr); - mass->usb.str_serial_descr = NULL; - free(mass); } static void usb_wakeup(usbd_device* dev) { @@ -478,4 +472,10 @@ MassStorageUsb* mass_storage_usb_start(const char* filename, SCSIDeviceFunc fn) void mass_storage_usb_stop(MassStorageUsb* mass) { furi_hal_usb_set_config(mass->usb_prev, NULL); + + free(mass->usb.str_prod_descr); + mass->usb.str_prod_descr = NULL; + free(mass->usb.str_serial_descr); + mass->usb.str_serial_descr = NULL; + free(mass); }