diff --git a/applications/drivers/subghz/application.fam b/applications/drivers/subghz/application.fam index a293b99d3..aaf0e1bd9 100644 --- a/applications/drivers/subghz/application.fam +++ b/applications/drivers/subghz/application.fam @@ -1,6 +1,7 @@ App( appid="radio_device_cc1101_ext", apptype=FlipperAppType.PLUGIN, + targets=["f7"], entry_point="subghz_device_cc1101_ext_ep", requires=["subghz"], fap_libs=["hwdrivers"], diff --git a/applications/main/subghz/helpers/subghz_txrx.c b/applications/main/subghz/helpers/subghz_txrx.c index 35c4c565a..c678965c1 100644 --- a/applications/main/subghz/helpers/subghz_txrx.c +++ b/applications/main/subghz/helpers/subghz_txrx.c @@ -570,7 +570,7 @@ void subghz_txrx_set_raw_file_encoder_worker_callback_end( context); } -bool subghz_txrx_radio_device_is_connect_external(SubGhzTxRx* instance, const char* name) { +bool subghz_txrx_radio_device_is_external_connected(SubGhzTxRx* instance, const char* name) { furi_assert(instance); bool is_connect = false; @@ -580,7 +580,10 @@ bool subghz_txrx_radio_device_is_connect_external(SubGhzTxRx* instance, const ch subghz_txrx_radio_device_power_on(instance); } - is_connect = subghz_devices_is_connect(subghz_devices_get_by_name(name)); + const SubGhzDevice* device = subghz_devices_get_by_name(name); + if(device) { + is_connect = subghz_devices_is_connect(device); + } if(!is_otg_enabled) { subghz_txrx_radio_device_power_off(instance); @@ -593,7 +596,7 @@ SubGhzRadioDeviceType furi_assert(instance); if(radio_device_type == SubGhzRadioDeviceTypeExternalCC1101 && - subghz_txrx_radio_device_is_connect_external(instance, SUBGHZ_DEVICE_CC1101_EXT_NAME)) { + subghz_txrx_radio_device_is_external_connected(instance, SUBGHZ_DEVICE_CC1101_EXT_NAME)) { subghz_txrx_radio_device_power_on(instance); instance->radio_device = subghz_devices_get_by_name(SUBGHZ_DEVICE_CC1101_EXT_NAME); subghz_devices_begin(instance->radio_device); @@ -601,7 +604,9 @@ SubGhzRadioDeviceType } else { subghz_txrx_radio_device_power_off(instance); if(instance->radio_device_type != SubGhzRadioDeviceTypeInternal) { - subghz_devices_end(instance->radio_device); + if(instance->radio_device) { + subghz_devices_end(instance->radio_device); + } } instance->radio_device = subghz_devices_get_by_name(SUBGHZ_DEVICE_CC1101_INT_NAME); instance->radio_device_type = SubGhzRadioDeviceTypeInternal; diff --git a/applications/main/subghz/helpers/subghz_txrx.h b/applications/main/subghz/helpers/subghz_txrx.h index fc09ab8ea..76c7c8ead 100644 --- a/applications/main/subghz/helpers/subghz_txrx.h +++ b/applications/main/subghz/helpers/subghz_txrx.h @@ -297,7 +297,7 @@ void subghz_txrx_set_raw_file_encoder_worker_callback_end( * @param name Name of external radio device * @return bool True if is connected to the external radio device */ -bool subghz_txrx_radio_device_is_connect_external(SubGhzTxRx* instance, const char* name); +bool subghz_txrx_radio_device_is_external_connected(SubGhzTxRx* instance, const char* name); /* Set the selected radio device to use * diff --git a/applications/main/subghz/scenes/subghz_scene_radio_setting.c b/applications/main/subghz/scenes/subghz_scene_radio_setting.c index 9f2a6ab58..ee438727b 100644 --- a/applications/main/subghz/scenes/subghz_scene_radio_setting.c +++ b/applications/main/subghz/scenes/subghz_scene_radio_setting.c @@ -21,7 +21,8 @@ static void subghz_scene_radio_setting_set_device(VariableItem* item) { SubGhz* subghz = variable_item_get_context(item); uint8_t index = variable_item_get_current_value_index(item); - if(!subghz_txrx_radio_device_is_connect_external(subghz->txrx, SUBGHZ_DEVICE_CC1101_EXT_NAME) && + if(!subghz_txrx_radio_device_is_external_connected( + subghz->txrx, SUBGHZ_DEVICE_CC1101_EXT_NAME) && radio_device_value[index] == SubGhzRadioDeviceTypeExternalCC1101) { //ToDo correct if there is more than 1 module index = 0; @@ -35,14 +36,18 @@ void subghz_scene_radio_setting_on_enter(void* context) { VariableItem* item; uint8_t value_index; + uint8_t value_count_device = RADIO_DEVICE_COUNT; + if(subghz_txrx_radio_device_get(subghz->txrx) == SubGhzRadioDeviceTypeInternal && + !subghz_txrx_radio_device_is_external_connected(subghz->txrx, SUBGHZ_DEVICE_CC1101_EXT_NAME)) + value_count_device = 1; // Only 1 item if external disconnected item = variable_item_list_add( subghz->variable_item_list, "Module", - RADIO_DEVICE_COUNT, + value_count_device, subghz_scene_radio_setting_set_device, subghz); value_index = value_index_uint32( - subghz_txrx_radio_device_get(subghz->txrx), radio_device_value, RADIO_DEVICE_COUNT); + subghz_txrx_radio_device_get(subghz->txrx), radio_device_value, value_count_device); variable_item_set_current_value_index(item, value_index); variable_item_set_current_value_text(item, radio_device_text[value_index]); diff --git a/lib/subghz/devices/devices.c b/lib/subghz/devices/devices.c index 69946d0f1..a90bf73a3 100644 --- a/lib/subghz/devices/devices.c +++ b/lib/subghz/devices/devices.c @@ -28,40 +28,46 @@ const char* subghz_devices_get_name(const SubGhzDevice* device) { bool subghz_devices_begin(const SubGhzDevice* device) { bool ret = false; - if(device && device->interconnect->begin) { + furi_assert(device); + if(device->interconnect->begin) { ret = device->interconnect->begin(); } return ret; } void subghz_devices_end(const SubGhzDevice* device) { - if(device && device->interconnect->end) { + furi_assert(device); + if(device->interconnect->end) { device->interconnect->end(); } } bool subghz_devices_is_connect(const SubGhzDevice* device) { bool ret = false; - if(device && device->interconnect->is_connect) { + furi_assert(device); + if(device->interconnect->is_connect) { ret = device->interconnect->is_connect(); } return ret; } void subghz_devices_reset(const SubGhzDevice* device) { - if(device && device->interconnect->reset) { + furi_assert(device); + if(device->interconnect->reset) { device->interconnect->reset(); } } void subghz_devices_sleep(const SubGhzDevice* device) { - if(device && device->interconnect->sleep) { + furi_assert(device); + if(device->interconnect->sleep) { device->interconnect->sleep(); } } void subghz_devices_idle(const SubGhzDevice* device) { - if(device && device->interconnect->idle) { + furi_assert(device); + if(device->interconnect->idle) { device->interconnect->idle(); } } @@ -70,14 +76,16 @@ void subghz_devices_load_preset( const SubGhzDevice* device, FuriHalSubGhzPreset preset, uint8_t* preset_data) { - if(device && device->interconnect->load_preset) { + furi_assert(device); + if(device->interconnect->load_preset) { device->interconnect->load_preset(preset, preset_data); } } uint32_t subghz_devices_set_frequency(const SubGhzDevice* device, uint32_t frequency) { uint32_t ret = 0; - if(device && device->interconnect->set_frequency) { + furi_assert(device); + if(device->interconnect->set_frequency) { ret = device->interconnect->set_frequency(frequency); } return ret; @@ -85,21 +93,24 @@ uint32_t subghz_devices_set_frequency(const SubGhzDevice* device, uint32_t frequ bool subghz_devices_is_frequency_valid(const SubGhzDevice* device, uint32_t frequency) { bool ret = false; - if(device && device->interconnect->is_frequency_valid) { + furi_assert(device); + if(device->interconnect->is_frequency_valid) { ret = device->interconnect->is_frequency_valid(frequency); } return ret; } void subghz_devices_set_async_mirror_pin(const SubGhzDevice* device, const GpioPin* gpio) { - if(device && device->interconnect->set_async_mirror_pin) { + furi_assert(device); + if(device->interconnect->set_async_mirror_pin) { device->interconnect->set_async_mirror_pin(gpio); } } const GpioPin* subghz_devices_get_data_gpio(const SubGhzDevice* device) { const GpioPin* ret = NULL; - if(device && device->interconnect->get_data_gpio) { + furi_assert(device); + if(device->interconnect->get_data_gpio) { ret = device->interconnect->get_data_gpio(); } return ret; @@ -107,21 +118,24 @@ const GpioPin* subghz_devices_get_data_gpio(const SubGhzDevice* device) { bool subghz_devices_set_tx(const SubGhzDevice* device) { bool ret = 0; - if(device && device->interconnect->set_tx) { + furi_assert(device); + if(device->interconnect->set_tx) { ret = device->interconnect->set_tx(); } return ret; } void subghz_devices_flush_tx(const SubGhzDevice* device) { - if(device && device->interconnect->flush_tx) { + furi_assert(device); + if(device->interconnect->flush_tx) { device->interconnect->flush_tx(); } } bool subghz_devices_start_async_tx(const SubGhzDevice* device, void* callback, void* context) { bool ret = false; - if(device && device->interconnect->start_async_tx) { + furi_assert(device); + if(device->interconnect->start_async_tx) { ret = device->interconnect->start_async_tx(callback, context); } return ret; @@ -129,45 +143,52 @@ bool subghz_devices_start_async_tx(const SubGhzDevice* device, void* callback, v bool subghz_devices_is_async_complete_tx(const SubGhzDevice* device) { bool ret = false; - if(device && device->interconnect->is_async_complete_tx) { + furi_assert(device); + if(device->interconnect->is_async_complete_tx) { ret = device->interconnect->is_async_complete_tx(); } return ret; } void subghz_devices_stop_async_tx(const SubGhzDevice* device) { - if(device && device->interconnect->stop_async_tx) { + furi_assert(device); + if(device->interconnect->stop_async_tx) { device->interconnect->stop_async_tx(); } } void subghz_devices_set_rx(const SubGhzDevice* device) { - if(device && device->interconnect->set_rx) { + furi_assert(device); + if(device->interconnect->set_rx) { device->interconnect->set_rx(); } } void subghz_devices_flush_rx(const SubGhzDevice* device) { - if(device && device->interconnect->flush_rx) { + furi_assert(device); + if(device->interconnect->flush_rx) { device->interconnect->flush_rx(); } } void subghz_devices_start_async_rx(const SubGhzDevice* device, void* callback, void* context) { - if(device && device->interconnect->start_async_rx) { + furi_assert(device); + if(device->interconnect->start_async_rx) { device->interconnect->start_async_rx(callback, context); } } void subghz_devices_stop_async_rx(const SubGhzDevice* device) { - if(device && device->interconnect->stop_async_rx) { + furi_assert(device); + if(device->interconnect->stop_async_rx) { device->interconnect->stop_async_rx(); } } float subghz_devices_get_rssi(const SubGhzDevice* device) { float ret = 0; - if(device && device->interconnect->get_rssi) { + furi_assert(device); + if(device->interconnect->get_rssi) { ret = device->interconnect->get_rssi(); } return ret; @@ -175,7 +196,8 @@ float subghz_devices_get_rssi(const SubGhzDevice* device) { uint8_t subghz_devices_get_lqi(const SubGhzDevice* device) { uint8_t ret = 0; - if(device && device->interconnect->get_lqi) { + furi_assert(device); + if(device->interconnect->get_lqi) { ret = device->interconnect->get_lqi(); } return ret; @@ -183,7 +205,8 @@ uint8_t subghz_devices_get_lqi(const SubGhzDevice* device) { bool subghz_devices_rx_pipe_not_empty(const SubGhzDevice* device) { bool ret = false; - if(device && device->interconnect->rx_pipe_not_empty) { + furi_assert(device); + if(device->interconnect->rx_pipe_not_empty) { ret = device->interconnect->rx_pipe_not_empty(); } return ret; @@ -191,20 +214,24 @@ bool subghz_devices_rx_pipe_not_empty(const SubGhzDevice* device) { bool subghz_devices_is_rx_data_crc_valid(const SubGhzDevice* device) { bool ret = false; - if(device && device->interconnect->is_rx_data_crc_valid) { + furi_assert(device); + if(device->interconnect->is_rx_data_crc_valid) { ret = device->interconnect->is_rx_data_crc_valid(); } return ret; } void subghz_devices_read_packet(const SubGhzDevice* device, uint8_t* data, uint8_t* size) { - if(device && device->interconnect->read_packet) { + furi_assert(device); + furi_assert(device); + if(device->interconnect->read_packet) { device->interconnect->read_packet(data, size); } } void subghz_devices_write_packet(const SubGhzDevice* device, const uint8_t* data, uint8_t size) { - if(device && device->interconnect->write_packet) { + furi_assert(device); + if(device->interconnect->write_packet) { device->interconnect->write_packet(data, size); } }