diff --git a/radio/src/targets/nv14/CMakeLists.txt b/radio/src/targets/nv14/CMakeLists.txt index d7b12236b..461c9e63f 100644 --- a/radio/src/targets/nv14/CMakeLists.txt +++ b/radio/src/targets/nv14/CMakeLists.txt @@ -68,7 +68,7 @@ set(FIRMWARE_TARGET_SRC set(BITMAPS_TARGET nv14_bitmaps) set(FONTS_TARGET x12_fonts) set(LCD_DRIVER lcd_driver.cpp) -set(LUA_EXPORT lua_export_x10) +set(LUA_EXPORT lua_export_nv14) set(TOUCH_DRIVER touch_driver.cpp) set(HARDWARE_TOUCH YES) @@ -77,6 +77,8 @@ set(RADIO_DEPENDENCIES ${RADIO_DEPENDENCIES} ${BITMAPS_TARGET} truetype_fonts) set(HARDWARE_TOUCH ON) set(SOFTWARE_KEYBOARD ON) +set(FIRMWARE_DEPENDENCIES datacopy) + add_definitions(-DSTM32F429_439xx -DSDRAM -DCOLORLCD -DLIBOPENUI -DHARDWARE_TOUCH -DSOFTWARE_KEYBOARD) add_definitions(-DEEPROM_VARIANT=0 -DAUDIO -DVOICE -DRTCLOCK) add_definitions(-DGPS_USART_BAUDRATE=${INTERNAL_GPS_BAUDRATE}) @@ -212,4 +214,3 @@ if(PYTHONINTERP_FOUND) ) endif() -set(LUA_EXPORT lua_export_nv14) diff --git a/radio/src/targets/nv14/board.h b/radio/src/targets/nv14/board.h index f27b02a9a..fc02cfcee 100644 --- a/radio/src/targets/nv14/board.h +++ b/radio/src/targets/nv14/board.h @@ -21,10 +21,10 @@ #ifndef _BOARD_H_ #define _BOARD_H_ -#include "../definitions.h" -#include "../opentx_constants.h" -#include "hal.h" +#include "definitions.h" +#include "opentx_constants.h" #include "board_common.h" +#include "hal.h" #if !defined(LUA_EXPORT_GENERATION) #include "stm32f4xx_sdio.h" @@ -265,10 +265,10 @@ uint32_t readTrims(); extern uint32_t powerupReason; extern uint32_t boardState; -#define SHUTDOWN_REQUEST 0xDEADBEEF +/*#define SHUTDOWN_REQUEST 0xDEADBEEF #define NO_SHUTDOWN_REQUEST ~SHUTDOWN_REQUEST #define DIRTY_SHUTDOWN 0xCAFEDEAD -#define NORMAL_POWER_OFF ~DIRTY_SHUTDOWN +#define NORMAL_POWER_OFF ~DIRTY_SHUTDOWN*/ #define WDG_DURATION 500 /*ms*/ void watchdogInit(unsigned int duration); @@ -361,6 +361,35 @@ uint16_t getBatteryVoltage(); // returns current battery voltage in 10mV steps #define BATTERY_MIN 35 // 3.5V #define BATTERY_MAX 42 // 4.2V +#if defined(__cplusplus) +enum PowerReason { + SHUTDOWN_REQUEST = 0xDEADBEEF, + SOFTRESET_REQUEST = 0xCAFEDEAD, +}; + +constexpr uint32_t POWER_REASON_SIGNATURE = 0x0178746F; + +inline bool UNEXPECTED_SHUTDOWN() +{ +#if defined(SIMU) || defined(NO_UNEXPECTED_SHUTDOWN) + return false; +#else + if (WAS_RESET_BY_WATCHDOG()) + return true; + else if (WAS_RESET_BY_SOFTWARE()) + return RTC->BKP0R != SOFTRESET_REQUEST; + else + return RTC->BKP1R == POWER_REASON_SIGNATURE && RTC->BKP0R != SHUTDOWN_REQUEST; +#endif +} + +inline void SET_POWER_REASON(uint32_t value) +{ + RTC->BKP0R = value; + RTC->BKP1R = POWER_REASON_SIGNATURE; +} +#endif + #if defined(__cplusplus) && !defined(SIMU) extern "C" { #endif @@ -384,11 +413,11 @@ bool pwrPressed(); #define pwrForcePressed() false #endif uint32_t pwrPressedDuration();; -#if defined(SIMU) || defined(NO_UNEXPECTED_SHUTDOWN) +/*#if defined(SIMU) || defined(NO_UNEXPECTED_SHUTDOWN) #define UNEXPECTED_SHUTDOWN() (false) #else #define UNEXPECTED_SHUTDOWN() (powerupReason == DIRTY_SHUTDOWN) -#endif +#endif*/ #define AUX_SERIAL_POWER_ON() #define AUX_SERIAL_POWER_OFF() diff --git a/radio/src/targets/nv14/pwr_driver.cpp b/radio/src/targets/nv14/pwr_driver.cpp index 65f653b39..f042fb120 100644 --- a/radio/src/targets/nv14/pwr_driver.cpp +++ b/radio/src/targets/nv14/pwr_driver.cpp @@ -89,10 +89,10 @@ bool pwrPressed() void pwrResetHandler() { if (boardState != BOARD_POWER_OFF) { - powerupReason = boardState != BOARD_REBOOT && WAS_RESET_BY_WATCHDOG_OR_SOFTWARE() ? DIRTY_SHUTDOWN : ~DIRTY_SHUTDOWN; + powerupReason = boardState != BOARD_REBOOT && WAS_RESET_BY_WATCHDOG_OR_SOFTWARE() ? SOFTRESET_REQUEST : SHUTDOWN_REQUEST; RCC->CSR |= RCC_CSR_RMVF; //clear all flags } else { - powerupReason = ~DIRTY_SHUTDOWN; + powerupReason = SHUTDOWN_REQUEST; } }