fixed the subghz part of the tanks game
64
applications/external/tanksgame/helpers/radio_device_loader.c
vendored
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
#include "radio_device_loader.h"
|
||||||
|
|
||||||
|
#include <applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h>
|
||||||
|
#include <lib/subghz/devices/cc1101_int/cc1101_int_interconnect.h>
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
15
applications/external/tanksgame/helpers/radio_device_loader.h
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <lib/subghz/devices/devices.h>
|
||||||
|
|
||||||
|
/** 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);
|
||||||
|
Before Width: | Height: | Size: 633 B After Width: | Height: | Size: 633 B |
|
Before Width: | Height: | Size: 649 B After Width: | Height: | Size: 649 B |
|
Before Width: | Height: | Size: 157 B After Width: | Height: | Size: 157 B |
|
Before Width: | Height: | Size: 159 B After Width: | Height: | Size: 159 B |
|
Before Width: | Height: | Size: 159 B After Width: | Height: | Size: 159 B |
|
Before Width: | Height: | Size: 160 B After Width: | Height: | Size: 160 B |
|
Before Width: | Height: | Size: 104 B After Width: | Height: | Size: 104 B |
|
Before Width: | Height: | Size: 106 B After Width: | Height: | Size: 106 B |
|
Before Width: | Height: | Size: 108 B After Width: | Height: | Size: 108 B |
|
Before Width: | Height: | Size: 102 B After Width: | Height: | Size: 102 B |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 159 B After Width: | Height: | Size: 159 B |
|
Before Width: | Height: | Size: 155 B After Width: | Height: | Size: 155 B |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 157 B After Width: | Height: | Size: 157 B |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
@@ -11,6 +11,7 @@
|
|||||||
#include <lib/subghz/protocols/princeton.h>
|
#include <lib/subghz/protocols/princeton.h>
|
||||||
#include <lib/subghz/subghz_tx_rx_worker.h>
|
#include <lib/subghz/subghz_tx_rx_worker.h>
|
||||||
#include <tanks_icons.h>
|
#include <tanks_icons.h>
|
||||||
|
#include "helpers/radio_device_loader.h"
|
||||||
|
|
||||||
#include "constants.h"
|
#include "constants.h"
|
||||||
|
|
||||||
@@ -1215,7 +1216,15 @@ int32_t tanks_game_app(void* p) {
|
|||||||
size_t message_max_len = 180;
|
size_t message_max_len = 180;
|
||||||
uint8_t incomingMessage[180] = {0};
|
uint8_t incomingMessage[180] = {0};
|
||||||
SubGhzTxRxWorker* subghz_txrx = subghz_tx_rx_worker_alloc();
|
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();
|
furi_hal_power_suppress_charge_enter();
|
||||||
|
|
||||||
for(bool processing = true; processing;) {
|
for(bool processing = true; processing;) {
|
||||||
@@ -1438,6 +1447,8 @@ int32_t tanks_game_app(void* p) {
|
|||||||
subghz_tx_rx_worker_free(subghz_txrx);
|
subghz_tx_rx_worker_free(subghz_txrx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
subghz_devices_deinit();
|
||||||
|
|
||||||
furi_timer_free(timer);
|
furi_timer_free(timer);
|
||||||
view_port_enabled_set(view_port, false);
|
view_port_enabled_set(view_port, false);
|
||||||
gui_remove_view_port(gui, view_port);
|
gui_remove_view_port(gui, view_port);
|
||||||