[FL-3040] Audio support for SubGhz (#2131)
* Furi_hal_speaker: multiple resource usage * Furi_hal_speaker: fix multiple resource usage * Furi_hal_speaker: fix music_player_worker * Furi_hal_speaker: fix mutex release queue handling * SubGhz: add furi_hal_subghz_set_debug_pin * SubGhz: add sound SubGhz Read, SubGhz Read RAW * furi_hal_speaker: add __attribute__((warn_unused_result)) for furi_hal_speaker_acquire() * Furi_hal_speaker: fix review comments * SubGhz: cleanup naming and locking timings * SubGhz,FuriHal: fix speaker deinit logic and subghz speaker release sequence * FuriHal: crash on speaker acquire/release from IRQ * Furi, FuriHal: FURI_WARN_UNUSED and documentation update * Bump api symbols version: fix broken speaker Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
This commit is contained in:
		@@ -5,6 +5,7 @@ enum SubGhzSettingIndex {
 | 
			
		||||
    SubGhzSettingIndexFrequency,
 | 
			
		||||
    SubGhzSettingIndexHopping,
 | 
			
		||||
    SubGhzSettingIndexModulation,
 | 
			
		||||
    SubGhzSettingIndexSound,
 | 
			
		||||
    SubGhzSettingIndexLock,
 | 
			
		||||
    SubGhzSettingIndexRAWThesholdRSSI,
 | 
			
		||||
};
 | 
			
		||||
@@ -48,6 +49,16 @@ const uint32_t hopping_value[HOPPING_COUNT] = {
 | 
			
		||||
    SubGhzHopperStateRunnig,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#define SPEAKER_COUNT 2
 | 
			
		||||
const char* const speaker_text[SPEAKER_COUNT] = {
 | 
			
		||||
    "OFF",
 | 
			
		||||
    "ON",
 | 
			
		||||
};
 | 
			
		||||
const uint32_t speaker_value[SPEAKER_COUNT] = {
 | 
			
		||||
    SubGhzSpeakerStateShutdown,
 | 
			
		||||
    SubGhzSpeakerStateEnable,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
uint8_t subghz_scene_receiver_config_next_frequency(const uint32_t value, void* context) {
 | 
			
		||||
    furi_assert(context);
 | 
			
		||||
    SubGhz* subghz = context;
 | 
			
		||||
@@ -167,6 +178,14 @@ static void subghz_scene_receiver_config_set_hopping_running(VariableItem* item)
 | 
			
		||||
    subghz->txrx->hopper_state = hopping_value[index];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void subghz_scene_receiver_config_set_speaker(VariableItem* item) {
 | 
			
		||||
    SubGhz* subghz = variable_item_get_context(item);
 | 
			
		||||
    uint8_t index = variable_item_get_current_value_index(item);
 | 
			
		||||
 | 
			
		||||
    variable_item_set_current_value_text(item, speaker_text[index]);
 | 
			
		||||
    subghz->txrx->speaker_state = speaker_value[index];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void subghz_scene_receiver_config_set_raw_threshold_rssi(VariableItem* item) {
 | 
			
		||||
    SubGhz* subghz = variable_item_get_context(item);
 | 
			
		||||
    uint8_t index = variable_item_get_current_value_index(item);
 | 
			
		||||
@@ -235,6 +254,16 @@ void subghz_scene_receiver_config_on_enter(void* context) {
 | 
			
		||||
    variable_item_set_current_value_text(
 | 
			
		||||
        item, subghz_setting_get_preset_name(subghz->setting, value_index));
 | 
			
		||||
 | 
			
		||||
    item = variable_item_list_add(
 | 
			
		||||
        subghz->variable_item_list,
 | 
			
		||||
        "Sound:",
 | 
			
		||||
        SPEAKER_COUNT,
 | 
			
		||||
        subghz_scene_receiver_config_set_speaker,
 | 
			
		||||
        subghz);
 | 
			
		||||
    value_index = value_index_uint32(subghz->txrx->speaker_state, speaker_value, SPEAKER_COUNT);
 | 
			
		||||
    variable_item_set_current_value_index(item, value_index);
 | 
			
		||||
    variable_item_set_current_value_text(item, speaker_text[value_index]);
 | 
			
		||||
 | 
			
		||||
    if(scene_manager_get_scene_state(subghz->scene_manager, SubGhzSceneReadRAW) !=
 | 
			
		||||
       SubGhzCustomEventManagerSet) {
 | 
			
		||||
        variable_item_list_add(subghz->variable_item_list, "Lock Keyboard", 1, NULL, NULL);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user