diff --git a/applications/system/findmy/findmy.c b/applications/system/findmy/findmy.c index f9dc292ca..921818103 100644 --- a/applications/system/findmy/findmy.c +++ b/applications/system/findmy/findmy.c @@ -90,14 +90,13 @@ void findmy_change_broadcast_interval(FindMy* app, uint8_t value) { return; } app->state.broadcast_interval = value; + findmy_state_sync_config(&app->state); findmy_state_save(&app->state); findmy_main_update_interval(app->findmy_main, app->state.broadcast_interval); if(furi_hal_bt_extra_beacon_is_active()) { // Always check if beacon is active before changing config furi_check(furi_hal_bt_extra_beacon_stop()); } - app->state.config.min_adv_interval_ms = app->state.broadcast_interval * 1000; - app->state.config.max_adv_interval_ms = app->state.config.min_adv_interval_ms + 150; furi_check(furi_hal_bt_extra_beacon_set_config(&app->state.config)); if(app->state.beacon_active) { furi_check(furi_hal_bt_extra_beacon_start()); @@ -109,11 +108,11 @@ void findmy_change_transmit_power(FindMy* app, uint8_t value) { return; } app->state.transmit_power = value; + findmy_state_sync_config(&app->state); findmy_state_save(&app->state); if(furi_hal_bt_extra_beacon_is_active()) { furi_check(furi_hal_bt_extra_beacon_stop()); } - app->state.config.adv_power_level = GapAdvPowerLevel_0dBm + app->state.transmit_power; furi_check(furi_hal_bt_extra_beacon_set_config(&app->state.config)); if(app->state.beacon_active) { furi_check(furi_hal_bt_extra_beacon_start()); diff --git a/applications/system/findmy/findmy_state.c b/applications/system/findmy/findmy_state.c index a8d15d75e..69c90389e 100644 --- a/applications/system/findmy/findmy_state.c +++ b/applications/system/findmy/findmy_state.c @@ -67,12 +67,11 @@ bool findmy_state_load(FindMyState* out_state) { } // Sync values to config - state.config.min_adv_interval_ms = state.broadcast_interval * 1000; // Converting s to ms - state.config.max_adv_interval_ms = (state.broadcast_interval * 1000) + 150; + findmy_state_sync_config(&state); + + // Set constants state.config.adv_channel_map = GapAdvChannelMapAll; - state.config.adv_power_level = GapAdvPowerLevel_0dBm + state.transmit_power; state.config.address_type = GapAddressTypePublic; - memcpy(state.config.address, state.mac, sizeof(state.config.address)); // Copy to caller state before popping stack memcpy(out_state, &state, sizeof(state)); @@ -96,6 +95,13 @@ void findmy_state_apply(FindMyState* state) { } } +void findmy_state_sync_config(FindMyState* state) { + state.config.min_adv_interval_ms = state.broadcast_interval * 1000; // Converting s to ms + state.config.max_adv_interval_ms = (state.broadcast_interval * 1000) + 150; + state.config.adv_power_level = GapAdvPowerLevel_0dBm + state.transmit_power; + memcpy(state.config.address, state.mac, sizeof(state.config.address)); +} + void findmy_state_save(FindMyState* state) { Storage* storage = furi_record_open(RECORD_STORAGE); storage_simply_mkdir(storage, FINDMY_STATE_DIR); diff --git a/applications/system/findmy/scenes/findmy_scene_config_mac.c b/applications/system/findmy/scenes/findmy_scene_config_mac.c index 2dc67f79d..1b72d1927 100644 --- a/applications/system/findmy/scenes/findmy_scene_config_mac.c +++ b/applications/system/findmy/scenes/findmy_scene_config_mac.c @@ -40,8 +40,8 @@ bool findmy_scene_config_mac_on_event(void* context, SceneManagerEvent event) { case ByteInputResultOk: furi_hal_bt_reverse_mac_addr(app->mac_buf); memcpy(&app->state.mac, app->mac_buf, sizeof(app->state.mac)); + findmy_state_sync_config(&app->state); findmy_state_save(&app->state); - memcpy(&app->state.config.address, app->mac_buf, sizeof(app->state.config.address)); if(furi_hal_bt_extra_beacon_is_active()) { furi_check(furi_hal_bt_extra_beacon_stop()); }