diff --git a/firmware/application/apps/ui_recon.cpp b/firmware/application/apps/ui_recon.cpp index d263ca2b4..0764435b0 100644 --- a/firmware/application/apps/ui_recon.cpp +++ b/firmware/application/apps/ui_recon.cpp @@ -103,7 +103,6 @@ namespace ui { void ReconThread::change_recon_direction() { _fwd = !_fwd; - //chThdSleepMilliseconds(300); //Give some pause after reversing recon direction } bool ReconThread::get_recon_direction() { @@ -429,22 +428,23 @@ namespace ui { restart_recon = false ; } } // if( _freq_lock == 0 || _stepper != 0 || _index_stepper != 0 ) - // needed to stabilize consecutive match without skipping + + // this while loop is needed to stabilize consecutive match without skipping // the little the rest, the more reactive and more CPU hog - // the bigger the rest, less CPU and more delay when switching + // the bigger the rest, less CPU and more delay when switching. I choose 5 msecs. while( _freq_lock != -1 && _freq_lock < (int32_t)_lock_nb_match && !chThdShouldTerminate() ) { - chThdSleepMilliseconds( 10 ); - if( remaining_sleep >= 10 ) - remaining_sleep -= 10 ; + chThdSleepMilliseconds( 5 ); + if( remaining_sleep >= 5 ) + remaining_sleep -= 5 ; else - remaining_sleep = 0 ; + remaining_sleep = 0 ; // leave some process time } if( _freq_lock == -1 ) _freq_lock = 0 ; } // if( _recon || _stepper != 0 || _index_stepper != 0 ) } // if( !freq_delete ) - if( remaining_sleep > 0 ) + if( remaining_sleep ) chThdSleepMilliseconds( remaining_sleep ); //Needed to (eventually) stabilize the receiver into new freq } //while( !chThdShouldTerminate() && frequency_list_.size() > 0 ) }//if (frequency_list_.size() > 0 ) @@ -645,7 +645,7 @@ namespace ui { ReconView::~ReconView() { - ReconSetupSaveStrings( "RECON/RECON.CFG" , input_file , output_file , recon_lock_duration , recon_lock_nb_match , squelch , recon_match_mode , wait , recon_lock_duration , field_volume.value() ); + ReconSetupSaveStrings( "RECON/RECON.CFG" , input_file , output_file , recon_lock_duration , recon_lock_nb_match , squelch , recon_match_mode , wait , lock_wait , field_volume.value() ); // save app settings settings.save("recon", &app_settings); @@ -758,8 +758,6 @@ namespace ui { field_volume.set_value( volume ); if( sd_card_mounted ) { - //Loading input and output file from settings - ReconSetupLoadStrings( "RECON/RECON.CFG" , input_file , output_file , recon_lock_duration , recon_lock_nb_match , squelch , recon_match_mode , wait , recon_lock_duration , volume ); // load auto common app settings auto rc = settings.load("recon", &app_settings); if(rc == SETTINGS_OK) { @@ -1392,8 +1390,6 @@ namespace ui { recon_thread->stop(); //STOP SCANNER THREAD frequency_list.clear(); - ReconSetupSaveStrings( "RECON/RECON.CFG" , input_file , output_file , recon_lock_duration , recon_lock_nb_match , squelch , recon_match_mode , wait , recon_lock_duration , field_volume.value() ); - auto open_view = nav.push(input_file,output_file,recon_lock_duration,recon_lock_nb_match,recon_match_mode); open_view -> on_changed = [this](std::vector result) { input_file = result[0]; @@ -1402,7 +1398,7 @@ namespace ui { recon_lock_nb_match = strtol( result[3].c_str() , nullptr , 10 ); recon_match_mode = strtol( result[4].c_str() , nullptr , 10 ); - ReconSetupSaveStrings( "RECON/RECON.CFG" , input_file , output_file , recon_lock_duration , recon_lock_nb_match , squelch , recon_match_mode , wait , recon_lock_duration , field_volume.value() ); + ReconSetupSaveStrings( "RECON/RECON.CFG" , input_file , output_file , recon_lock_duration , recon_lock_nb_match , squelch , recon_match_mode , wait , lock_wait , field_volume.value() ); autosave = persistent_memory::recon_autosave_freqs(); autostart = persistent_memory::recon_autostart_recon(); @@ -1445,10 +1441,6 @@ namespace ui { } } } - lock_wait = ( 4 * ( recon_lock_duration * recon_lock_nb_match ) ) / 100 ; - lock_wait = lock_wait * 100 ; // poor man's rounding - if( lock_wait < 400 ) - lock_wait = 400 ; field_lock_wait.set_value( lock_wait ); show_max(); if( userpause != true ) @@ -1529,13 +1521,12 @@ namespace ui { button_scanner_mode.set_style( &style_blue ); button_scanner_mode.set_text( "RECON" ); file_name.set( "=>" ); - field_squelch.set_value( squelch ); + //Loading input and output file from settings + ReconSetupLoadStrings( "RECON/RECON.CFG" , input_file , output_file , recon_lock_duration , recon_lock_nb_match , squelch , recon_match_mode , wait , lock_wait , volume ); + + field_squelch.set_value( squelch ); field_wait.set_value(wait); - lock_wait = ( 4 * ( recon_lock_duration * recon_lock_nb_match ) ); - lock_wait = lock_wait / 100 ; lock_wait = lock_wait * 100 ; // poor man's rounding - if( lock_wait < 400 ) - lock_wait = 400 ; field_lock_wait.set_value(lock_wait); field_volume.set_value((receiver_model.headphone_volume() - audio::headphone::volume_range().max).decibel() + 99); @@ -1818,17 +1809,17 @@ namespace ui { } void ReconView::user_pause() { - timer = 0 ; // Will trigger a recon_resume() on_statistics_update, also advancing to next freq. - //button_pause.set_text(""); //PAUSED, show resume + timer = 0 ; // Will trigger a recon_resume() on_statistics_update, also advancing to next freq. + button_pause.set_text(""); //PAUSED, show resume userpause=true; continuous_lock=false; recon_pause(); } void ReconView::user_resume() { - timer = 0 ; // Will trigger a recon_resume() on_statistics_update, also advancing to next freq. - //button_pause.set_text(""); //Show button for pause - userpause=false; // Resume recon + timer = 0 ; // Will trigger a recon_resume() on_statistics_update, also advancing to next freq. + button_pause.set_text(""); //Show button for pause + userpause=false; // Resume recon continuous_lock=false; recon_resume(); } diff --git a/firmware/application/apps/ui_recon.hpp b/firmware/application/apps/ui_recon.hpp index 56600d297..8d11a6f71 100644 --- a/firmware/application/apps/ui_recon.hpp +++ b/firmware/application/apps/ui_recon.hpp @@ -188,8 +188,8 @@ namespace ui { int32_t squelch { 0 }; int32_t db { 0 }; int32_t timer { 0 }; - int32_t wait { 5000 }; // in msec. if > 0 wait duration after a lock, if < 0 duration is set to 'wait' unless there is no more activity - uint32_t lock_wait { 500 }; // in msec. Represent the maximum amount of time we will wait for a lock to complete before switching to next + int32_t wait { 1000 }; // in msec. if > 0 wait duration after a lock, if < 0 duration is set to 'wait' unless there is no more activity + uint32_t lock_wait { 1000 }; // in msec. Represent the maximum amount of time we will wait for a lock to complete before switching to next int32_t def_step { 0 }; freqman_db frequency_list = { }; uint32_t current_index { 0 }; @@ -206,7 +206,7 @@ namespace ui { bool load_hamradios = { true }; bool update_ranges = { true }; bool fwd = { true }; - uint32_t recon_lock_nb_match = { 10 }; + uint32_t recon_lock_nb_match = { 3 }; uint32_t recon_lock_duration = { 50 }; uint32_t recon_match_mode = { 0 }; bool scanner_mode { false }; diff --git a/firmware/application/apps/ui_recon_settings.cpp b/firmware/application/apps/ui_recon_settings.cpp index fbfbf796e..5025fce0e 100644 --- a/firmware/application/apps/ui_recon_settings.cpp +++ b/firmware/application/apps/ui_recon_settings.cpp @@ -84,7 +84,21 @@ namespace ui { file_position -= (file_data + 256 - line_start); } } + } + if( it < nb_params ) + { + /* bad number of params, signal defaults */ + input_file = "RECON" ; + output_file = "RECON_RESULTS" ; + recon_lock_duration = 50 ; + recon_lock_nb_match = 3 ; + recon_squelch_level = -14 ; + recon_match_mode = 0 ; + wait = 1000 ; + lock_wait = 1000 ; + volume = 40 ; + return false ; } if( it > 0 ) @@ -105,7 +119,7 @@ namespace ui { if( it > 3 ) recon_lock_nb_match = strtoll( params[ 3 ].c_str() , nullptr , 10 ); else - recon_lock_nb_match = 10 ; + recon_lock_nb_match = 3 ; if( it > 4 ) recon_squelch_level = strtoll( params[ 4 ].c_str() , nullptr , 10 ); @@ -120,7 +134,7 @@ namespace ui { if( it > 6 ) wait = strtoll( params[ 6 ].c_str() , nullptr , 10 ); else - wait = 5000 ; + wait = 1000 ; if( it > 7 ) lock_wait = strtoll( params[ 7 ].c_str() , nullptr , 10 ); @@ -132,11 +146,6 @@ namespace ui { else volume = 40 ; - if( it < nb_params ) - { - /* bad number of params, signal defaults */ - return false ; - } return true ; }