From f15440e209507284d374fb7fc55bd4afe3911a88 Mon Sep 17 00:00:00 2001 From: Konstantin Sharlaimov Date: Mon, 29 Aug 2016 12:22:39 +0300 Subject: [PATCH] Add extra delays when cold-booting the UAV (#517) * Add extra 500ms delay on cold-boot * Remove stray debug[] vars; add extra 2 second pre-init delay to GPS * Enforce extra delay in GPS init only when cold-booting * Disable MAG EXTI on all targets (unused) * Made extra boot delay only present when compiling with GPS or MAG --- src/main/io/gps.c | 11 ++++++++--- src/main/main.c | 16 ++++++++++++++++ src/main/target/NAZE/target.h | 5 ++--- src/main/target/REVO/target.h | 7 +++---- src/main/target/RMDO/target.h | 5 ++--- src/main/target/SPRACINGF3/target.h | 3 --- src/main/target/SPRACINGF3EVO/target.h | 4 ++-- 7 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/main/io/gps.c b/src/main/io/gps.c index 91697fc65..512c30a35 100755 --- a/src/main/io/gps.c +++ b/src/main/io/gps.c @@ -59,6 +59,7 @@ #define GPS_BAUD_CHANGE_DELAY (200) #define GPS_INIT_DELAY (500) #define GPS_BUS_INIT_DELAY (500) +#define GPS_BOOT_DELAY (2000) typedef enum { GPS_TYPE_NA, // Not available @@ -148,9 +149,6 @@ static void gpsHandleProtocol(void) // Update statistics gpsStats.lastMessageDt = gpsState.lastMessageMs - gpsState.lastLastMessageMs; } - - debug[0] = gpsSol.fixType; - debug[1] = STATE(GPS_FIX); } static void gpsResetSolution(void) @@ -280,6 +278,13 @@ uint16_t gpsConstrainHDOP(uint32_t hdop) void gpsThread(void) { + /* Extra delay for at least 2 seconds after booting to give GPS time to initialise */ + if (isMPUSoftReset() && (millis() < GPS_BOOT_DELAY)) { + sensorsClear(SENSOR_GPS); + DISABLE_STATE(GPS_FIX); + return; + } + #ifdef USE_FAKE_GPS gpsFakeGPSUpdate(); #else diff --git a/src/main/main.c b/src/main/main.c index a0e3767fd..c37fa65ca 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -391,6 +391,22 @@ void init(void) adcInit(&adc_params); #endif + /* Extra 500ms delay prior to initialising hardware if board is cold-booting */ +#if defined(GPS) || defined(MAG) + if (!isMPUSoftReset()) { + LED1_ON; + LED0_OFF; + + for (int i = 0; i < 5; i++) { + LED1_TOGGLE; + LED0_TOGGLE; + delay(100); + } + + LED0_OFF; + LED1_OFF; + } +#endif initBoardAlignment(&masterConfig.boardAlignment); diff --git a/src/main/target/NAZE/target.h b/src/main/target/NAZE/target.h index dff3382dd..fcec63e58 100644 --- a/src/main/target/NAZE/target.h +++ b/src/main/target/NAZE/target.h @@ -37,11 +37,10 @@ #define USE_EXTI #define MAG_INT_EXTI PC14 -#define EXTI_CALLBACK_HANDLER_COUNT 3 // MPU data ready, MAG data ready, BMP085 EOC -//#define DEBUG_MPU_DATA_READY_INTERRUPT #define USE_MPU_DATA_READY_SIGNAL +//#define USE_MAG_DATA_READY_SIGNAL +//#define DEBUG_MPU_DATA_READY_INTERRUPT //#define DEBUG_MAG_DATA_READY_INTERRUPT -#define USE_MAG_DATA_READY_SIGNAL // SPI2 // PB15 28 SPI2_MOSI diff --git a/src/main/target/REVO/target.h b/src/main/target/REVO/target.h index 2c9ca5276..dce3f11f9 100644 --- a/src/main/target/REVO/target.h +++ b/src/main/target/REVO/target.h @@ -38,7 +38,6 @@ #define USE_EXTI #define MPU_INT_EXTI PC4 #define USE_MPU_DATA_READY_SIGNAL -#define EXTI_CALLBACK_HANDLER_COUNT 2 // MPU data ready (mag disabled) #define MPU6000_CS_PIN PA4 #define MPU6000_SPI_INSTANCE SPI1 @@ -55,9 +54,9 @@ #define USE_MAG_HMC5883 #define MAG_HMC5883_ALIGN CW90_DEG -#define USE_MAG_DATA_READY_SIGNAL -#define ENSURE_MAG_DATA_READY_IS_HIGH -#define MAG_INT_EXTI PB7 +//#define USE_MAG_DATA_READY_SIGNAL +//#define ENSURE_MAG_DATA_READY_IS_HIGH +//#define MAG_INT_EXTI PB7 //#define USE_MAG_NAZA //#define MAG_NAZA_ALIGN CW180_DEG_FLIP diff --git a/src/main/target/RMDO/target.h b/src/main/target/RMDO/target.h index dfe6b30f1..aebcb0ce6 100644 --- a/src/main/target/RMDO/target.h +++ b/src/main/target/RMDO/target.h @@ -25,11 +25,10 @@ #define BEEPER_INVERTED #define USE_EXTI -#define EXTI_CALLBACK_HANDLER_COUNT 2 // MPU data ready and MAG data ready #define USE_MPU_DATA_READY_SIGNAL #define ENSURE_MPU_DATA_READY_IS_LOW -#define USE_MAG_DATA_READY_SIGNAL -#define ENSURE_MAG_DATA_READY_IS_HIGH +//#define USE_MAG_DATA_READY_SIGNAL +//#define ENSURE_MAG_DATA_READY_IS_HIGH #define GYRO #define USE_GYRO_MPU6050 diff --git a/src/main/target/SPRACINGF3/target.h b/src/main/target/SPRACINGF3/target.h index 42687bb56..e921f87c5 100644 --- a/src/main/target/SPRACINGF3/target.h +++ b/src/main/target/SPRACINGF3/target.h @@ -49,9 +49,6 @@ #define USE_MAG_HMC5883 #define MAG_HMC5883_ALIGN CW270_DEG -#define USE_MAG_DATA_READY_SIGNAL -#define ENSURE_MAG_DATA_READY_IS_HIGH - #define USE_FLASHFS #define USE_FLASH_M25P16 diff --git a/src/main/target/SPRACINGF3EVO/target.h b/src/main/target/SPRACINGF3EVO/target.h index b314178d0..7ee7a3d09 100755 --- a/src/main/target/SPRACINGF3EVO/target.h +++ b/src/main/target/SPRACINGF3EVO/target.h @@ -31,8 +31,8 @@ #define USE_MPU_DATA_READY_SIGNAL #define ENSURE_MPU_DATA_READY_IS_LOW -#define USE_MAG_DATA_READY_SIGNAL -#define ENSURE_MAG_DATA_READY_IS_HIGH +//#define USE_MAG_DATA_READY_SIGNAL +//#define ENSURE_MAG_DATA_READY_IS_HIGH #define GYRO -- 2.11.4.GIT