Moved code for radio state update to a dedicated function

This commit is contained in:
Silvano Seva 2022-02-27 09:00:49 +01:00
parent 91c9408f32
commit 3f2df608c9
3 changed files with 62 additions and 57 deletions

View File

@ -32,10 +32,10 @@
*/ */
typedef struct typedef struct
{ {
uint8_t id; // ID of the satellite uint8_t id; // ID of the satellite
uint8_t elevation; // Elevation in degrees uint8_t elevation; // Elevation in degrees
uint16_t azimuth; // Azimuth in degrees uint16_t azimuth; // Azimuth in degrees
uint8_t snr; // Quality of the signal in range 0-99 uint8_t snr; // Quality of the signal in range 0-99
} }
sat_t; sat_t;
@ -44,19 +44,19 @@ sat_t;
*/ */
typedef struct typedef struct
{ {
curTime_t timestamp; // Timestamp of the latest GPS update curTime_t timestamp; // Timestamp of the latest GPS update
uint8_t fix_quality; // 0: no fix, 1: GPS, 2: GPS SPS, 3: GPS PPS uint8_t fix_quality; // 0: no fix, 1: GPS, 2: GPS SPS, 3: GPS PPS
uint8_t fix_type; // 0: no fix, 1: 2D, 2: 3D uint8_t fix_type; // 0: no fix, 1: 2D, 2: 3D
uint8_t satellites_tracked; // Number of tracked satellites uint8_t satellites_tracked; // Number of tracked satellites
uint8_t satellites_in_view; // Satellites in view uint8_t satellites_in_view; // Satellites in view
sat_t satellites[12]; // Details about satellites in view sat_t satellites[12]; // Details about satellites in view
uint32_t active_sats; // Bitmap representing which sats are part of the fix uint32_t active_sats; // Bitmap representing which sats are part of the fix
float latitude; // Latitude coordinates float latitude; // Latitude coordinates
float longitude; // Longitude coordinates float longitude; // Longitude coordinates
float altitude; // Antenna altitude above mean sea level (geoid) in m float altitude; // Antenna altitude above mean sea level (geoid) in m
float speed; // Ground speed in km/h float speed; // Ground speed in km/h
float tmg_mag; // Course over ground, degrees, magnetic float tmg_mag; // Course over ground, degrees, magnetic
float tmg_true; // Course over ground, degrees, true float tmg_true; // Course over ground, degrees, true
} }
gps_t; gps_t;
@ -77,14 +77,13 @@ m17_t;
*/ */
typedef struct typedef struct
{ {
bool radioStateUpdated; curTime_t time;
curTime_t time; uint16_t v_bat;
uint16_t v_bat; uint8_t charge;
uint8_t charge; float rssi;
float rssi;
uint8_t ui_screen; uint8_t ui_screen;
uint8_t tuner_mode; uint8_t tuner_mode;
//time_t rx_status_tv; //time_t rx_status_tv;
//bool rx_status; //bool rx_status;
@ -92,18 +91,18 @@ typedef struct
//time_t tx_status_tv; //time_t tx_status_tv;
//bool tx_status; //bool tx_status;
uint16_t channel_index; uint16_t channel_index;
channel_t channel; channel_t channel;
channel_t vfo_channel; channel_t vfo_channel;
bool zone_enabled; bool zone_enabled;
zone_t zone; zone_t zone;
uint8_t rtxStatus; uint8_t rtxStatus;
bool emergency; bool emergency;
settings_t settings; settings_t settings;
gps_t gps_data; gps_t gps_data;
bool gps_set_time; bool gps_set_time;
m17_t m17_data; m17_t m17_data;
} }
state_t; state_t;
@ -131,17 +130,21 @@ extern state_t state;
void state_init(); void state_init();
/** /**
* Write default values to OpenRTX settings and VFO Channel configuration * Write default values to OpenRTX settings and VFO Channel configuration.
* Writes out to flash and calls state_init again to reload it immediately * Writes out to flash and calls state_init again to reload it immediately.
*/ */
void defaultSettingsAndVfo(); void defaultSettingsAndVfo();
/** /**
* This function terminates the Radio state, * This function terminates the radio state saving persistent settings to flash.
* Saving persistent settings to flash.
*/ */
void state_terminate(); void state_terminate();
/**
* Update radio state fetching data from device drivers.
*/
void state_update();
/** /**
* The RTC and state.time are set to UTC time * The RTC and state.time are set to UTC time
* Use this function to get local time from UTC time based on timezone setting * Use this function to get local time from UTC time based on timezone setting

View File

@ -65,10 +65,9 @@ void state_init()
/* /*
* Initialise remaining fields * Initialise remaining fields
*/ */
state.radioStateUpdated = true; #ifdef HAS_RTC
#ifdef HAS_RTC
state.time = rtc_getTime(); state.time = rtc_getTime();
#endif #endif
state.v_bat = platform_getVbat(); state.v_bat = platform_getVbat();
state.charge = battery_getCharge(state.v_bat); state.charge = battery_getCharge(state.v_bat);
state.rssi = rtx_getRssi(); state.rssi = rtx_getRssi();
@ -95,6 +94,25 @@ void state_terminate()
nvm_writeSettingsAndVfo(&state.settings, &state.channel); nvm_writeSettingsAndVfo(&state.settings, &state.channel);
} }
void state_update()
{
/*
* Low-pass filtering with a time constant of 10s when updated at 1Hz
* Original computation: state.v_bat = 0.02*vbat + 0.98*state.v_bat
* Peak error is 18mV when input voltage is 49mV.
*/
uint16_t vbat = platform_getVbat();
state.v_bat -= (state.v_bat * 2) / 100;
state.v_bat += (vbat * 2) / 100;
state.charge = battery_getCharge(state.v_bat);
state.rssi = rtx_getRssi();
#ifdef HAS_RTC
state.time = rtc_getTime();
#endif
}
curTime_t state_getLocalTime(curTime_t utc_time) curTime_t state_getLocalTime(curTime_t utc_time)
{ {
curTime_t local_time = utc_time; curTime_t local_time = utc_time;

View File

@ -225,23 +225,7 @@ void *dev_task(void *arg)
{ {
// Lock mutex and update internal state // Lock mutex and update internal state
pthread_mutex_lock(&state_mutex); pthread_mutex_lock(&state_mutex);
state_update();
#ifdef HAS_RTC
state.time = rtc_getTime();
#endif
/*
* Low-pass filtering with a time constant of 10s when updated at 1Hz
* Original computation: state.v_bat = 0.02*vbat + 0.98*state.v_bat
* Peak error is 18mV when input voltage is 49mV.
*/
uint16_t vbat = platform_getVbat();
state.v_bat -= (state.v_bat * 2) / 100;
state.v_bat += (vbat * 2) / 100;
state.charge = battery_getCharge(state.v_bat);
state.rssi = rtx_getRssi();
pthread_mutex_unlock(&state_mutex); pthread_mutex_unlock(&state_mutex);
// Signal state update to UI thread // Signal state update to UI thread