Coldstart on GPS_init if looped 10 times unsuccess

pull/65/head
Wolfgang Hallmann 2023-10-20 16:48:35 +02:00
rodzic 4bcf503593
commit 024ed2a3db
4 zmienionych plików z 38 dodań i 16 usunięć

Wyświetl plik

@ -56,7 +56,7 @@
#define RADIO_POST_TRANSMIT_DELAY_MS 1000
// Threshold for time-synchronized modes regarding how far from scheduled transmission time the transmission is still allowed
#define RADIO_TIME_SYNC_THRESHOLD_MS 2000
#define RADIO_TIME_SYNC_THRESHOLD_MS 4001
// Number of leap seconds to add to the raw GPS time reported by the GPS chip (see https://timetoolsltd.com/gps/what-is-gps-time/ for more info)
// This value is used by default, but if the received GPS data contains indication about leap seconds, that one is used instead.
@ -69,7 +69,7 @@
#define GPS_REBOOT_MISSING_GPS_FIX_ENABLE true
// If enabled above, define threschold how long a missing GPS-Fix before cold start (dont hold it to short)
#define GPS_REBOOT_MISSING_GPS_FIX_SECONDS 80
#define GPS_REBOOT_MISSING_GPS_FIX_SECONDS 201
// Enable power-saving features of the GPS chip to save power.

Wyświetl plik

@ -505,7 +505,7 @@ bool ubxg6010_enable_power_save_mode()
ubxg6010_send_packet(&packet);
success = ubxg6010_wait_for_ack();
if (!success) {
log_error("GPS: Entering power-saving mode failed\n")
log_error("GPS: Entering power-saving mode failed\n");
}
return success;

Wyświetl plik

@ -97,6 +97,8 @@ void set_red_led(bool enabled)
int main(void)
{
bool success;
uint8_t gps_init_fail_counter = 0;
system_initialized = false;
// Set up interrupt handlers
@ -106,14 +108,9 @@ int main(void)
log_info("System init\n");
system_init();
set_red_led(false);
set_green_led(false);
system_flicker_green_led(5);
// delay_ms(100);
system_flicker_red_led(5);
//WOHA set_green_led(false);
//WOHA set_red_led(true);
set_green_led(false);
set_red_led(true);
if (gps_nmea_output_enabled) {
log_info("External USART init\n");
@ -129,12 +126,28 @@ int main(void)
log_info("SPI init\n");
spi_init();
// look for Voltage
// maybe interessting to check if reset only helpfull after mV climbed up > 1500 mV by solar panel source
uint16_t batteryV = system_get_battery_voltage_millivolts();
float batteryVf = (float)batteryV / 5.0f;
uint8_t volts_scaled = (uint8_t)(255 * batteryVf);
// on debug with dongle the VCC is only 170 mV because board feed by dongle not on battery.
log_info("Startup Voltage: %d mV \n",volts_scaled);
gps_init:
log_info("GPS init\n");
success = ubxg6010_init();
if (!success) {
log_error("GPS initialization failed, retrying...\n");
delay_ms(1000);
system_flicker_red_led(2);
gps_init_fail_counter++;
if (gps_init_fail_counter >= 10) {
system_disable_irq();
system_flicker_red_led(5);
nvic_cold_start();
}
goto gps_init;
}
@ -181,11 +194,9 @@ int main(void)
log_info("System initialized!\n");
set_green_led(false);
if (leds_enabled) {
//WOHA set_green_led(true);
//WOHA set_red_led(false);
set_green_led(true);
set_red_led(false);
} else {
set_green_led(false);
set_red_led(false);

Wyświetl plik

@ -332,6 +332,8 @@ uint8_t radio_current_symbol_data[RADIO_SYMBOL_DATA_MAX_LENGTH];
static volatile uint32_t start_tick = 0, end_tick = 0;
bool led_state_radio = true;
telemetry_data current_telemetry_data;
radio_module_state radio_shared_state = {
@ -422,6 +424,8 @@ static bool radio_start_transmit(radio_transmit_entry *entry)
log_info("\n ");
log_bytes(radio_current_payload_length, (char *) radio_current_payload);
log_info("\n");
log_info("Battery: %d mV\n", current_telemetry_data.battery_voltage_millivolts);
#endif
// USART interrupts may interfere with transmission timing
@ -514,6 +518,8 @@ static bool radio_start_transmit(radio_transmit_entry *entry)
if (!enable_gps_during_transmit) {
ubxg6010_reset_parser();
}
// to be sure:
success = false;
switch (entry->radio_type) {
case RADIO_TYPE_SI4032:
@ -700,6 +706,7 @@ void radio_handle_timer_tick()
}
}
// Called by Interrupt TIM2_IRQ
void radio_handle_data_timer_tick()
{
radio_handle_data_timer_si4032();
@ -731,17 +738,22 @@ bool radio_handle_time_sync()
if (time_millis == radio_previous_time_sync_scheduled) {
// The GPS chip has not provided an updated time yet for some reason
// WOHA
// log_info("@ time_millis same as last\n");
return false;
}
uint32_t time_sync_offset_millis = radio_current_transmit_entry->time_sync_seconds_offset * 1000;
// Only at start of week, millis can be lower then offset :-)
if (time_millis < time_sync_offset_millis) {
// WOHA
// log_info("@ Time millis: %lu lower %lu\n", time_millis, time_sync_offset_millis);
return false;
}
uint32_t time_sync_millis = radio_current_transmit_entry->time_sync_seconds * 1000;
uint32_t time_with_offset_millis = time_millis - time_sync_offset_millis;
uint32_t time_sync_period_millis = time_with_offset_millis % time_sync_millis;
@ -779,7 +791,6 @@ void radio_handle_main_loop()
delay_ms(100);
return;
}
radio_reset_transmit_delay_counter();
radio_start_transmit_entry = radio_current_transmit_entry;
} else if (!radio_shared_state.radio_transmission_active && radio_post_transmit_delay_counter == 0) {