UNLEASHED:: TX Power setting to SubGhz App

* Works in Read, and Read RAW.
* You can now adjust the TX power for testing devices without desyncing them from inside
* Lets you do RTL testing etc on very low power.

CODE REFACTORED, subghz_txrx_set_tx_power added.
This commit is contained in:
Leeroy
2026-02-04 17:11:03 +11:00
parent 30d48c112b
commit a515f435fc
11 changed files with 167 additions and 23 deletions

View File

@@ -101,12 +101,39 @@ void subghz_txrx_set_preset(
size_t preset_data_size) {
furi_assert(instance);
furi_string_set(instance->preset->name, preset_name);
SubGhzRadioPreset* preset = instance->preset;
preset->frequency = frequency;
preset->data = preset_data;
preset->data_size = preset_data_size;
}
uint8_t*
subghz_txrx_set_tx_power(uint8_t* preset_data, size_t preset_data_size, uint32_t tx_power) {
#define TX_POWER_OFFSET 7
#define TX_PRESET_POWER_COUNT 11
const uint32_t tx_power_value[TX_PRESET_POWER_COUNT] = {
0,
0xC0,
0xC5,
0xCD,
0x86,
0x50,
0x37,
0x26,
0x1D,
0x17,
0x03,
};
//Set the TX Power Here in the CC1101 register...
if(tx_power)
preset_data[preset_data_size - TX_POWER_OFFSET] = (uint8_t)tx_power_value[tx_power];
//Pass back the preset_so we can call one liners.
return preset_data;
}
const char* subghz_txrx_get_preset_name(SubGhzTxRx* instance, const char* preset) {
UNUSED(instance);
const char* preset_name = "";
@@ -677,20 +704,27 @@ void subghz_txrx_set_default_preset(SubGhzTxRx* instance, uint32_t frequency) {
subghz_txrx_set_preset(instance, default_modulation, frequency, NULL, 0);
}
const char*
subghz_txrx_set_preset_internal(SubGhzTxRx* instance, uint32_t frequency, uint8_t index) {
const char* subghz_txrx_set_preset_internal(
SubGhzTxRx* instance,
uint32_t frequency,
uint8_t index,
uint32_t tx_power) {
furi_assert(instance);
//Grab the prset name.
SubGhzSetting* setting = subghz_txrx_get_setting(instance);
const char* preset_name = subghz_setting_get_preset_name(setting, index);
subghz_setting_set_default_frequency(setting, frequency);
subghz_txrx_set_preset(
instance,
preset_name,
frequency,
subghz_setting_get_preset_data(setting, index),
subghz_setting_get_preset_data_size(setting, index));
//Get the preset data now so we can set TX power.
uint8_t* preset_data = subghz_setting_get_preset_data(setting, index);
size_t preset_data_size = subghz_setting_get_preset_data_size(setting, index);
//Edit TX power, if necessary.
subghz_txrx_set_tx_power(preset_data, preset_data_size, tx_power);
//Set the Updated Preset.
subghz_txrx_set_preset(instance, preset_name, frequency, preset_data, preset_data_size);
return preset_name;
}

View File

@@ -57,6 +57,16 @@ void subghz_txrx_set_preset(
uint8_t* preset_data,
size_t preset_data_size);
/**
* Set TX Power
*
* @param preset_data Data of preset
* @param preset_data_size Size of preset data
* @param tx_power Menu Index of TX Power Setting. (Saves iterating in Config enter)
*/
uint8_t*
subghz_txrx_set_tx_power(uint8_t* preset_data, size_t preset_data_size, uint32_t tx_power);
/**
* Get name of preset
*
@@ -360,7 +370,11 @@ void subghz_txrx_set_default_preset(SubGhzTxRx* instance, uint32_t frequency);
* @param instance - instance Pointer to a SubGhzTxRx
* @param frequency - frequency of new preset
* @param index - index of preset taken from SubGhzSetting
* @param tx_power - index of TX Power menu index option to use.
* @return const char* - name of preset
*/
const char*
subghz_txrx_set_preset_internal(SubGhzTxRx* instance, uint32_t frequency, uint8_t index);
const char* subghz_txrx_set_preset_internal(
SubGhzTxRx* instance,
uint32_t frequency,
uint8_t index,
uint32_t tx_power);