Bugfix: ISP Programmer and SubGhz (#2574)
* AVR_ISP: fix NULL pointer dereference * SubGhz: double back with a blocked transmission in this region * SubGhz: fix speaker, when a transmission is blocked in this region * SubGhz: fix speaker * SubGhz: return region * AVR Flasher: cleanup code Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
This commit is contained in:
parent
7ac7b70884
commit
33e8bae78b
@ -152,7 +152,12 @@ bool avr_isp_auto_set_spi_speed_start_pmode(AvrIsp* instance) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(instance->spi) avr_isp_spi_sw_free(instance->spi);
|
|
||||||
|
if(instance->spi) {
|
||||||
|
avr_isp_spi_sw_free(instance->spi);
|
||||||
|
instance->spi = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -317,7 +317,12 @@ static bool avr_isp_prog_auto_set_spi_speed_start_pmode(AvrIspProg* instance) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(instance->spi) avr_isp_spi_sw_free(instance->spi);
|
|
||||||
|
if(instance->spi) {
|
||||||
|
avr_isp_spi_sw_free(instance->spi);
|
||||||
|
instance->spi = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,7 +230,11 @@ bool subghz_scene_read_raw_on_event(void* context, SceneManagerEvent event) {
|
|||||||
(subghz->txrx->txrx_state == SubGhzTxRxStateSleep)) {
|
(subghz->txrx->txrx_state == SubGhzTxRxStateSleep)) {
|
||||||
if(!subghz_tx_start(subghz, subghz->txrx->fff_data)) {
|
if(!subghz_tx_start(subghz, subghz->txrx->fff_data)) {
|
||||||
subghz->txrx->rx_key_state = SubGhzRxKeyStateBack;
|
subghz->txrx->rx_key_state = SubGhzRxKeyStateBack;
|
||||||
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowOnlyRx);
|
subghz_read_raw_set_status(
|
||||||
|
subghz->subghz_read_raw,
|
||||||
|
SubGhzReadRAWStatusIDLE,
|
||||||
|
"",
|
||||||
|
subghz->txrx->raw_threshold_rssi);
|
||||||
} else {
|
} else {
|
||||||
if(scene_manager_has_previous_scene(
|
if(scene_manager_has_previous_scene(
|
||||||
subghz->scene_manager, SubGhzSceneSaved) ||
|
subghz->scene_manager, SubGhzSceneSaved) ||
|
||||||
|
@ -70,9 +70,7 @@ bool subghz_scene_transmitter_on_event(void* context, SceneManagerEvent event) {
|
|||||||
}
|
}
|
||||||
if((subghz->txrx->txrx_state == SubGhzTxRxStateIDLE) ||
|
if((subghz->txrx->txrx_state == SubGhzTxRxStateIDLE) ||
|
||||||
(subghz->txrx->txrx_state == SubGhzTxRxStateSleep)) {
|
(subghz->txrx->txrx_state == SubGhzTxRxStateSleep)) {
|
||||||
if(!subghz_tx_start(subghz, subghz->txrx->fff_data)) {
|
if(subghz_tx_start(subghz, subghz->txrx->fff_data)) {
|
||||||
scene_manager_next_scene(subghz->scene_manager, SubGhzSceneShowOnlyRx);
|
|
||||||
} else {
|
|
||||||
subghz->state_notifications = SubGhzNotificationStateTx;
|
subghz->state_notifications = SubGhzNotificationStateTx;
|
||||||
subghz_scene_transmitter_update_data_show(subghz);
|
subghz_scene_transmitter_update_data_show(subghz);
|
||||||
DOLPHIN_DEED(DolphinDeedSubGhzSend);
|
DOLPHIN_DEED(DolphinDeedSubGhzSend);
|
||||||
|
@ -105,9 +105,11 @@ static bool subghz_tx(SubGhz* subghz, uint32_t frequency) {
|
|||||||
furi_hal_subghz_set_frequency_and_path(frequency);
|
furi_hal_subghz_set_frequency_and_path(frequency);
|
||||||
furi_hal_gpio_write(&gpio_cc1101_g0, false);
|
furi_hal_gpio_write(&gpio_cc1101_g0, false);
|
||||||
furi_hal_gpio_init(&gpio_cc1101_g0, GpioModeOutputPushPull, GpioPullNo, GpioSpeedLow);
|
furi_hal_gpio_init(&gpio_cc1101_g0, GpioModeOutputPushPull, GpioPullNo, GpioSpeedLow);
|
||||||
subghz_speaker_on(subghz);
|
|
||||||
bool ret = furi_hal_subghz_tx();
|
bool ret = furi_hal_subghz_tx();
|
||||||
|
if(ret) {
|
||||||
|
subghz_speaker_on(subghz);
|
||||||
subghz->txrx->txrx_state = SubGhzTxRxStateTx;
|
subghz->txrx->txrx_state = SubGhzTxRxStateTx;
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,6 +117,7 @@ void subghz_idle(SubGhz* subghz) {
|
|||||||
furi_assert(subghz);
|
furi_assert(subghz);
|
||||||
furi_assert(subghz->txrx->txrx_state != SubGhzTxRxStateSleep);
|
furi_assert(subghz->txrx->txrx_state != SubGhzTxRxStateSleep);
|
||||||
furi_hal_subghz_idle();
|
furi_hal_subghz_idle();
|
||||||
|
subghz_speaker_off(subghz);
|
||||||
subghz->txrx->txrx_state = SubGhzTxRxStateIDLE;
|
subghz->txrx->txrx_state = SubGhzTxRxStateIDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user