diff --git a/applications/external/.tanksgame/application.fam b/applications/external/tanksgame/application.fam similarity index 100% rename from applications/external/.tanksgame/application.fam rename to applications/external/tanksgame/application.fam diff --git a/applications/external/.tanksgame/constants.h b/applications/external/tanksgame/constants.h similarity index 100% rename from applications/external/.tanksgame/constants.h rename to applications/external/tanksgame/constants.h diff --git a/applications/external/tanksgame/helpers/radio_device_loader.c b/applications/external/tanksgame/helpers/radio_device_loader.c new file mode 100644 index 000000000..d2cffde58 --- /dev/null +++ b/applications/external/tanksgame/helpers/radio_device_loader.c @@ -0,0 +1,64 @@ +#include "radio_device_loader.h" + +#include +#include + +static void radio_device_loader_power_on() { + uint8_t attempts = 0; + while(!furi_hal_power_is_otg_enabled() && attempts++ < 5) { + furi_hal_power_enable_otg(); + //CC1101 power-up time + furi_delay_ms(10); + } +} + +static void radio_device_loader_power_off() { + if(furi_hal_power_is_otg_enabled()) furi_hal_power_disable_otg(); +} + +bool radio_device_loader_is_connect_external(const char* name) { + bool is_connect = false; + bool is_otg_enabled = furi_hal_power_is_otg_enabled(); + + if(!is_otg_enabled) { + radio_device_loader_power_on(); + } + + const SubGhzDevice* device = subghz_devices_get_by_name(name); + if(device) { + is_connect = subghz_devices_is_connect(device); + } + + if(!is_otg_enabled) { + radio_device_loader_power_off(); + } + return is_connect; +} + +const SubGhzDevice* radio_device_loader_set( + const SubGhzDevice* current_radio_device, + SubGhzRadioDeviceType radio_device_type) { + const SubGhzDevice* radio_device; + + if(radio_device_type == SubGhzRadioDeviceTypeExternalCC1101 && + radio_device_loader_is_connect_external(SUBGHZ_DEVICE_CC1101_EXT_NAME)) { + radio_device_loader_power_on(); + radio_device = subghz_devices_get_by_name(SUBGHZ_DEVICE_CC1101_EXT_NAME); + subghz_devices_begin(radio_device); + } else if(current_radio_device == NULL) { + radio_device = subghz_devices_get_by_name(SUBGHZ_DEVICE_CC1101_INT_NAME); + } else { + radio_device_loader_end(current_radio_device); + radio_device = subghz_devices_get_by_name(SUBGHZ_DEVICE_CC1101_INT_NAME); + } + + return radio_device; +} + +void radio_device_loader_end(const SubGhzDevice* radio_device) { + furi_assert(radio_device); + radio_device_loader_power_off(); + if(radio_device != subghz_devices_get_by_name(SUBGHZ_DEVICE_CC1101_INT_NAME)) { + subghz_devices_end(radio_device); + } +} \ No newline at end of file diff --git a/applications/external/tanksgame/helpers/radio_device_loader.h b/applications/external/tanksgame/helpers/radio_device_loader.h new file mode 100644 index 000000000..bee4e2c36 --- /dev/null +++ b/applications/external/tanksgame/helpers/radio_device_loader.h @@ -0,0 +1,15 @@ +#pragma once + +#include + +/** SubGhzRadioDeviceType */ +typedef enum { + SubGhzRadioDeviceTypeInternal, + SubGhzRadioDeviceTypeExternalCC1101, +} SubGhzRadioDeviceType; + +const SubGhzDevice* radio_device_loader_set( + const SubGhzDevice* current_radio_device, + SubGhzRadioDeviceType radio_device_type); + +void radio_device_loader_end(const SubGhzDevice* radio_device); \ No newline at end of file diff --git a/applications/external/.tanksgame/images/HappyFlipper_128x64.png b/applications/external/tanksgame/images/HappyFlipper_128x64.png similarity index 100% rename from applications/external/.tanksgame/images/HappyFlipper_128x64.png rename to applications/external/tanksgame/images/HappyFlipper_128x64.png diff --git a/applications/external/.tanksgame/images/TanksSplashScreen_128x64.png b/applications/external/tanksgame/images/TanksSplashScreen_128x64.png similarity index 100% rename from applications/external/.tanksgame/images/TanksSplashScreen_128x64.png rename to applications/external/tanksgame/images/TanksSplashScreen_128x64.png diff --git a/applications/external/.tanksgame/images/enemy_down.png b/applications/external/tanksgame/images/enemy_down.png similarity index 100% rename from applications/external/.tanksgame/images/enemy_down.png rename to applications/external/tanksgame/images/enemy_down.png diff --git a/applications/external/.tanksgame/images/enemy_left.png b/applications/external/tanksgame/images/enemy_left.png similarity index 100% rename from applications/external/.tanksgame/images/enemy_left.png rename to applications/external/tanksgame/images/enemy_left.png diff --git a/applications/external/.tanksgame/images/enemy_right.png b/applications/external/tanksgame/images/enemy_right.png similarity index 100% rename from applications/external/.tanksgame/images/enemy_right.png rename to applications/external/tanksgame/images/enemy_right.png diff --git a/applications/external/.tanksgame/images/enemy_up.png b/applications/external/tanksgame/images/enemy_up.png similarity index 100% rename from applications/external/.tanksgame/images/enemy_up.png rename to applications/external/tanksgame/images/enemy_up.png diff --git a/applications/external/.tanksgame/images/projectile_down.png b/applications/external/tanksgame/images/projectile_down.png similarity index 100% rename from applications/external/.tanksgame/images/projectile_down.png rename to applications/external/tanksgame/images/projectile_down.png diff --git a/applications/external/.tanksgame/images/projectile_left.png b/applications/external/tanksgame/images/projectile_left.png similarity index 100% rename from applications/external/.tanksgame/images/projectile_left.png rename to applications/external/tanksgame/images/projectile_left.png diff --git a/applications/external/.tanksgame/images/projectile_right.png b/applications/external/tanksgame/images/projectile_right.png similarity index 100% rename from applications/external/.tanksgame/images/projectile_right.png rename to applications/external/tanksgame/images/projectile_right.png diff --git a/applications/external/.tanksgame/images/projectile_up.png b/applications/external/tanksgame/images/projectile_up.png similarity index 100% rename from applications/external/.tanksgame/images/projectile_up.png rename to applications/external/tanksgame/images/projectile_up.png diff --git a/applications/external/.tanksgame/images/tank_base.png b/applications/external/tanksgame/images/tank_base.png similarity index 100% rename from applications/external/.tanksgame/images/tank_base.png rename to applications/external/tanksgame/images/tank_base.png diff --git a/applications/external/.tanksgame/images/tank_down.png b/applications/external/tanksgame/images/tank_down.png similarity index 100% rename from applications/external/.tanksgame/images/tank_down.png rename to applications/external/tanksgame/images/tank_down.png diff --git a/applications/external/.tanksgame/images/tank_explosion.png b/applications/external/tanksgame/images/tank_explosion.png similarity index 100% rename from applications/external/.tanksgame/images/tank_explosion.png rename to applications/external/tanksgame/images/tank_explosion.png diff --git a/applications/external/.tanksgame/images/tank_hedgehog.png b/applications/external/tanksgame/images/tank_hedgehog.png similarity index 100% rename from applications/external/.tanksgame/images/tank_hedgehog.png rename to applications/external/tanksgame/images/tank_hedgehog.png diff --git a/applications/external/.tanksgame/images/tank_left.png b/applications/external/tanksgame/images/tank_left.png similarity index 100% rename from applications/external/.tanksgame/images/tank_left.png rename to applications/external/tanksgame/images/tank_left.png diff --git a/applications/external/.tanksgame/images/tank_right.png b/applications/external/tanksgame/images/tank_right.png similarity index 100% rename from applications/external/.tanksgame/images/tank_right.png rename to applications/external/tanksgame/images/tank_right.png diff --git a/applications/external/.tanksgame/images/tank_stone.png b/applications/external/tanksgame/images/tank_stone.png similarity index 100% rename from applications/external/.tanksgame/images/tank_stone.png rename to applications/external/tanksgame/images/tank_stone.png diff --git a/applications/external/.tanksgame/images/tank_up.png b/applications/external/tanksgame/images/tank_up.png similarity index 100% rename from applications/external/.tanksgame/images/tank_up.png rename to applications/external/tanksgame/images/tank_up.png diff --git a/applications/external/.tanksgame/images/tank_wall.png b/applications/external/tanksgame/images/tank_wall.png similarity index 100% rename from applications/external/.tanksgame/images/tank_wall.png rename to applications/external/tanksgame/images/tank_wall.png diff --git a/applications/external/.tanksgame/tanksIcon.png b/applications/external/tanksgame/tanksIcon.png similarity index 100% rename from applications/external/.tanksgame/tanksIcon.png rename to applications/external/tanksgame/tanksIcon.png diff --git a/applications/external/.tanksgame/tanks_game.c b/applications/external/tanksgame/tanks_game.c similarity index 99% rename from applications/external/.tanksgame/tanks_game.c rename to applications/external/tanksgame/tanks_game.c index 52ce6b36e..95fc56ca7 100644 --- a/applications/external/.tanksgame/tanks_game.c +++ b/applications/external/tanksgame/tanks_game.c @@ -11,6 +11,7 @@ #include #include #include +#include "helpers/radio_device_loader.h" #include "constants.h" @@ -1215,7 +1216,15 @@ int32_t tanks_game_app(void* p) { size_t message_max_len = 180; uint8_t incomingMessage[180] = {0}; SubGhzTxRxWorker* subghz_txrx = subghz_tx_rx_worker_alloc(); - subghz_tx_rx_worker_start(subghz_txrx, frequency); + + subghz_devices_init(); + const SubGhzDevice* subghz_device = + radio_device_loader_set(NULL, SubGhzRadioDeviceTypeExternalCC1101); + + subghz_devices_reset(subghz_device); + subghz_devices_load_preset(subghz_device, FuriHalSubGhzPresetOok650Async, NULL); + + subghz_tx_rx_worker_start(subghz_txrx, subghz_device, frequency); furi_hal_power_suppress_charge_enter(); for(bool processing = true; processing;) { @@ -1438,6 +1447,8 @@ int32_t tanks_game_app(void* p) { subghz_tx_rx_worker_free(subghz_txrx); } + subghz_devices_deinit(); + furi_timer_free(timer); view_port_enabled_set(view_port, false); gui_remove_view_port(gui, view_port);