kopia lustrzana https://github.com/mikaelnousiainen/RS41ng
Coldstart on GPS_init if looped 10 times unsuccess
rodzic
4bcf503593
commit
024ed2a3db
|
@ -56,7 +56,7 @@
|
||||||
#define RADIO_POST_TRANSMIT_DELAY_MS 1000
|
#define RADIO_POST_TRANSMIT_DELAY_MS 1000
|
||||||
|
|
||||||
// Threshold for time-synchronized modes regarding how far from scheduled transmission time the transmission is still allowed
|
// 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)
|
// 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.
|
// 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
|
#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)
|
// 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.
|
// Enable power-saving features of the GPS chip to save power.
|
||||||
|
|
|
@ -505,7 +505,7 @@ bool ubxg6010_enable_power_save_mode()
|
||||||
ubxg6010_send_packet(&packet);
|
ubxg6010_send_packet(&packet);
|
||||||
success = ubxg6010_wait_for_ack();
|
success = ubxg6010_wait_for_ack();
|
||||||
if (!success) {
|
if (!success) {
|
||||||
log_error("GPS: Entering power-saving mode failed\n")
|
log_error("GPS: Entering power-saving mode failed\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
|
|
33
src/main.c
33
src/main.c
|
@ -97,6 +97,8 @@ void set_red_led(bool enabled)
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
bool success;
|
bool success;
|
||||||
|
uint8_t gps_init_fail_counter = 0;
|
||||||
|
|
||||||
system_initialized = false;
|
system_initialized = false;
|
||||||
|
|
||||||
// Set up interrupt handlers
|
// Set up interrupt handlers
|
||||||
|
@ -106,14 +108,9 @@ int main(void)
|
||||||
|
|
||||||
log_info("System init\n");
|
log_info("System init\n");
|
||||||
system_init();
|
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);
|
set_green_led(false);
|
||||||
//WOHA set_red_led(true);
|
set_red_led(true);
|
||||||
|
|
||||||
if (gps_nmea_output_enabled) {
|
if (gps_nmea_output_enabled) {
|
||||||
log_info("External USART init\n");
|
log_info("External USART init\n");
|
||||||
|
@ -129,12 +126,28 @@ int main(void)
|
||||||
log_info("SPI init\n");
|
log_info("SPI init\n");
|
||||||
spi_init();
|
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:
|
gps_init:
|
||||||
log_info("GPS init\n");
|
log_info("GPS init\n");
|
||||||
success = ubxg6010_init();
|
success = ubxg6010_init();
|
||||||
if (!success) {
|
if (!success) {
|
||||||
log_error("GPS initialization failed, retrying...\n");
|
log_error("GPS initialization failed, retrying...\n");
|
||||||
delay_ms(1000);
|
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;
|
goto gps_init;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,11 +194,9 @@ int main(void)
|
||||||
|
|
||||||
log_info("System initialized!\n");
|
log_info("System initialized!\n");
|
||||||
|
|
||||||
set_green_led(false);
|
|
||||||
|
|
||||||
if (leds_enabled) {
|
if (leds_enabled) {
|
||||||
//WOHA set_green_led(true);
|
set_green_led(true);
|
||||||
//WOHA set_red_led(false);
|
set_red_led(false);
|
||||||
} else {
|
} else {
|
||||||
set_green_led(false);
|
set_green_led(false);
|
||||||
set_red_led(false);
|
set_red_led(false);
|
||||||
|
|
13
src/radio.c
13
src/radio.c
|
@ -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;
|
static volatile uint32_t start_tick = 0, end_tick = 0;
|
||||||
|
|
||||||
|
bool led_state_radio = true;
|
||||||
|
|
||||||
telemetry_data current_telemetry_data;
|
telemetry_data current_telemetry_data;
|
||||||
|
|
||||||
radio_module_state radio_shared_state = {
|
radio_module_state radio_shared_state = {
|
||||||
|
@ -422,6 +424,8 @@ static bool radio_start_transmit(radio_transmit_entry *entry)
|
||||||
log_info("\n ");
|
log_info("\n ");
|
||||||
log_bytes(radio_current_payload_length, (char *) radio_current_payload);
|
log_bytes(radio_current_payload_length, (char *) radio_current_payload);
|
||||||
log_info("\n");
|
log_info("\n");
|
||||||
|
log_info("Battery: %d mV\n", current_telemetry_data.battery_voltage_millivolts);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// USART interrupts may interfere with transmission timing
|
// 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) {
|
if (!enable_gps_during_transmit) {
|
||||||
ubxg6010_reset_parser();
|
ubxg6010_reset_parser();
|
||||||
}
|
}
|
||||||
|
// to be sure:
|
||||||
|
success = false;
|
||||||
|
|
||||||
switch (entry->radio_type) {
|
switch (entry->radio_type) {
|
||||||
case RADIO_TYPE_SI4032:
|
case RADIO_TYPE_SI4032:
|
||||||
|
@ -700,6 +706,7 @@ void radio_handle_timer_tick()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Called by Interrupt TIM2_IRQ
|
||||||
void radio_handle_data_timer_tick()
|
void radio_handle_data_timer_tick()
|
||||||
{
|
{
|
||||||
radio_handle_data_timer_si4032();
|
radio_handle_data_timer_si4032();
|
||||||
|
@ -731,12 +738,17 @@ bool radio_handle_time_sync()
|
||||||
|
|
||||||
if (time_millis == radio_previous_time_sync_scheduled) {
|
if (time_millis == radio_previous_time_sync_scheduled) {
|
||||||
// The GPS chip has not provided an updated time yet for some reason
|
// The GPS chip has not provided an updated time yet for some reason
|
||||||
|
// WOHA
|
||||||
|
// log_info("@ time_millis same as last\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t time_sync_offset_millis = radio_current_transmit_entry->time_sync_seconds_offset * 1000;
|
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) {
|
if (time_millis < time_sync_offset_millis) {
|
||||||
|
// WOHA
|
||||||
|
// log_info("@ Time millis: %lu lower %lu\n", time_millis, time_sync_offset_millis);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -779,7 +791,6 @@ void radio_handle_main_loop()
|
||||||
delay_ms(100);
|
delay_ms(100);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
radio_reset_transmit_delay_counter();
|
radio_reset_transmit_delay_counter();
|
||||||
radio_start_transmit_entry = radio_current_transmit_entry;
|
radio_start_transmit_entry = radio_current_transmit_entry;
|
||||||
} else if (!radio_shared_state.radio_transmission_active && radio_post_transmit_delay_counter == 0) {
|
} else if (!radio_shared_state.radio_transmission_active && radio_post_transmit_delay_counter == 0) {
|
||||||
|
|
Ładowanie…
Reference in New Issue