diff --git a/flight/OpenPilot/Makefile.posix b/flight/OpenPilot/Makefile.posix index e74b6d3a8..adbfae5b8 100644 --- a/flight/OpenPilot/Makefile.posix +++ b/flight/OpenPilot/Makefile.posix @@ -165,6 +165,11 @@ SRC += $(OPUAVOBJ)/ratedesired.c SRC += $(OPUAVOBJ)/pipxtrememodemsettings.c SRC += $(OPUAVOBJ)/pipxtrememodemstatus.c SRC += $(OPUAVOBJ)/batterysettings.c +SRC += $(OPUAVOBJ)/flightplancontrol.c +SRC += $(OPUAVOBJ)/flightplanstatus.c +SRC += $(OPUAVOBJ)/flightplansettings.c +SRC += $(OPUAVOBJ)/taskinfo.c +SRC += $(OPUAVOBJ)/watchdogstatus.c endif ## PIOS Hardware (posix) diff --git a/flight/OpenPilot/Makefile.win32 b/flight/OpenPilot/Makefile.win32 index 575e12e09..c494691ac 100644 --- a/flight/OpenPilot/Makefile.win32 +++ b/flight/OpenPilot/Makefile.win32 @@ -113,6 +113,7 @@ SRC += ${OPMODULEDIR}/System/systemmod.c SRC += $(OPSYSTEM)/openpilot.c SRC += $(OPSYSTEM)/pios_board_posix.c SRC += $(OPSYSTEM)/alarms.c +SRC += $(OPSYSTEM)/taskmonitor.c SRC += $(OPUAVTALK)/uavtalk.c SRC += $(OPUAVOBJ)/uavobjectmanager.c SRC += $(OPUAVOBJ)/uavobjectsinit.c @@ -164,6 +165,11 @@ SRC += $(OPUAVOBJ)/ratedesired.c SRC += $(OPUAVOBJ)/pipxtrememodemsettings.c SRC += $(OPUAVOBJ)/pipxtrememodemstatus.c SRC += $(OPUAVOBJ)/batterysettings.c +SRC += $(OPUAVOBJ)/flightplancontrol.c +SRC += $(OPUAVOBJ)/flightplanstatus.c +SRC += $(OPUAVOBJ)/flightplansettings.c +SRC += $(OPUAVOBJ)/taskinfo.c +SRC += $(OPUAVOBJ)/watchdogstatus.c endif ## PIOS Hardware (win32) @@ -174,6 +180,7 @@ SRC += $(PIOSWIN32)/pios_sdcard.c SRC += $(PIOSWIN32)/pios_udp.c SRC += $(PIOSWIN32)/pios_com.c SRC += $(PIOSWIN32)/pios_servo.c +SRC += $(PIOSWIN32)/pios_wdg.c # ## RTOS SRC += $(RTOSSRCDIR)/list.c diff --git a/flight/OpenPilot/Modules/Actuator/actuator.c b/flight/OpenPilot/Modules/Actuator/actuator.c index f8c30a796..8940a4dd4 100644 --- a/flight/OpenPilot/Modules/Actuator/actuator.c +++ b/flight/OpenPilot/Modules/Actuator/actuator.c @@ -410,6 +410,11 @@ static void setFailsafe() ActuatorCommandSet(&command); } +#if defined(ARCH_POSIX) || defined(ARCH_WIN32) +static bool set_channel(uint8_t mixer_channel, uint16_t value) { + return true; +} +#else static bool set_channel(uint8_t mixer_channel, uint16_t value) { ActuatorSettingsData settings; @@ -443,6 +448,7 @@ static bool set_channel(uint8_t mixer_channel, uint16_t value) { return false; } +#endif /** diff --git a/flight/OpenPilot/Modules/System/systemmod.c b/flight/OpenPilot/Modules/System/systemmod.c index a8fbbd4b4..48d1a8723 100644 --- a/flight/OpenPilot/Modules/System/systemmod.c +++ b/flight/OpenPilot/Modules/System/systemmod.c @@ -216,7 +216,7 @@ static void objectUpdatedCb(UAVObjEvent * ev) * Called periodically to update the I2C statistics */ #if defined(ARCH_POSIX) || defined(ARCH_WIN32) -static void updateI2Cstats() {} +static void updateI2Cstats() {} //Posix and win32 don't have I2C #else static void updateI2Cstats() { @@ -237,6 +237,9 @@ static void updateI2Cstats() } #endif +#if defined(ARCH_POSIX) || defined(ARCH_WIN32) +static void updateWDGstats() {} //Posix and win32 don't have a watchdog +#else static void updateWDGstats() { WatchdogStatusData watchdogStatus; @@ -244,6 +247,7 @@ static void updateWDGstats() watchdogStatus.ActiveFlags = PIOS_WDG_GetActiveFlags(); WatchdogStatusSet(&watchdogStatus); } +#endif /** * Called periodically to update the system stats diff --git a/flight/OpenPilot/System/pios_board_posix.c b/flight/OpenPilot/System/pios_board_posix.c index b06b10d03..87d8e7402 100644 --- a/flight/OpenPilot/System/pios_board_posix.c +++ b/flight/OpenPilot/System/pios_board_posix.c @@ -47,6 +47,9 @@ void PIOS_Board_Init(void) { /* Initialize the alarms library */ AlarmsInitialize(); + /* Initialize the task monitor library */ + TaskMonitorInitialize(); + /* Initialize the PiOS library */ PIOS_COM_Init(); diff --git a/flight/OpenPilot/System/taskmonitor.c b/flight/OpenPilot/System/taskmonitor.c index 0a015d787..e13b20515 100644 --- a/flight/OpenPilot/System/taskmonitor.c +++ b/flight/OpenPilot/System/taskmonitor.c @@ -83,7 +83,11 @@ void TaskMonitorUpdateAll(void) if (handles[n] != 0) { data.Running[n] = TASKINFO_RUNNING_TRUE; +#if defined(ARCH_POSIX) || defined(ARCH_WIN32) + data.StackRemaining[n] = 10000; +#else data.StackRemaining[n] = uxTaskGetStackHighWaterMark(handles[n]) * 4; +#endif } else { diff --git a/flight/PiOS.posix/inc/pios_wdg.h b/flight/PiOS.posix/inc/pios_wdg.h new file mode 100644 index 000000000..47662624f --- /dev/null +++ b/flight/PiOS.posix/inc/pios_wdg.h @@ -0,0 +1,41 @@ +/** + ****************************************************************************** + * @addtogroup PIOS PIOS Core hardware abstraction layer + * @{ + * @addtogroup PIOS_WDG Watchdog Functions + * @{ + * + * @file pios_wdg.h + * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. + * Parts by Thorsten Klose (tk@midibox.org) + * @brief SPI functions header. + * @see The GNU Public License (GPL) Version 3 + * + *****************************************************************************/ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef PIOS_WDG +#define PIOS_WDG + +void PIOS_WDG_Init(); +bool PIOS_WDG_RegisterFlag(uint16_t flag_requested); +bool PIOS_WDG_UpdateFlag(uint16_t flag); +uint16_t PIOS_WDG_GetBootupFlags(); +uint16_t PIOS_WDG_GetActiveFlags(); +void PIOS_WDG_Clear(void); + +#endif diff --git a/flight/PiOS.posix/pios.h b/flight/PiOS.posix/pios.h index cfbd09ce0..b014b938b 100644 --- a/flight/PiOS.posix/pios.h +++ b/flight/PiOS.posix/pios.h @@ -58,7 +58,8 @@ #include #include #include -#include +#include +#include #define NELEMENTS(x) (sizeof(x) / sizeof(*(x))) diff --git a/flight/PiOS.posix/posix/pios_wdg.c b/flight/PiOS.posix/posix/pios_wdg.c new file mode 100644 index 000000000..93568247f --- /dev/null +++ b/flight/PiOS.posix/posix/pios_wdg.c @@ -0,0 +1,123 @@ +/** + ****************************************************************************** + * @addtogroup PIOS PIOS Core hardware abstraction layer + * @{ + * @addtogroup PIOS_WDG Watchdog Functions + * @brief PIOS Comamnds to initialize and clear watchdog timer + * @{ + * + * @file pios_spi.c + * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. + * Parts by Thorsten Klose (tk@midibox.org) (tk@midibox.org) + * @brief Hardware Abstraction Layer for SPI ports of STM32 + * @see The GNU Public License (GPL) Version 3 + * @notes + * + * The PIOS Watchdog provides a HAL to initialize a watchdog + * + *****************************************************************************/ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "pios.h" + +/** + * @brief Initialize the watchdog timer for a specified timeout + * + * It is important to note that this function returns the achieved timeout + * for this hardware. For hardware indendence this should be checked when + * scheduling updates. Other hardware dependent details may need to be + * considered such as a window time which sets a minimum update time, + * and this function should return a recommended delay for clearing. + * + * For the STM32 nominal clock rate is 32 khz, but for the maximum clock rate of + * 60 khz and a prescalar of 4 yields a clock rate of 15 khz. The delay that is + * set in the watchdog assumes the nominal clock rate, but the delay for FreeRTOS + * to use is 75% of the minimal delay. + * + * @param[in] delayMs The delay period in ms + * @returns Maximum recommended delay between updates + */ +void PIOS_WDG_Init() +{ +} + +/** + * @brief Register a module against the watchdog + * + * There are two ways to use PIOS WDG: this is for when + * multiple modules must be monitored. In this case they + * must first register against the watchdog system and + * only when all of the modules have been updated with the + * watchdog be cleared. Each module must have its own + * bit in the 16 bit + * + * @param[in] flag the bit this module wants to use + * @returns True if that bit is unregistered + */ +bool PIOS_WDG_RegisterFlag(uint16_t flag_requested) +{ + return true; +} + +/** + * @brief Function called by modules to indicate they are still running + * + * This function will set this flag in the active flags register (which is + * a backup regsiter) and if all the registered flags are set will clear + * the watchdog and set only this flag in the backup register + * + * @param[in] flag the flag to set + * @return true if the watchdog cleared, false if flags are pending + */ +bool PIOS_WDG_UpdateFlag(uint16_t flag) +{ + return true; +} + +/** + * @brief Returns the flags that were set at bootup + * + * This is used for diagnostics, if only one flag not set this + * was likely the module that wasn't running before reset + * + * @return The active flags register from bootup + */ +uint16_t PIOS_WDG_GetBootupFlags() +{ + return (uint16_t) 0xffff; +} + +/** + * @brief Returns the currently active flags + * + * For external monitoring + * + * @return The active flags register + */ +uint16_t PIOS_WDG_GetActiveFlags() +{ + return (uint16_t) 0xffff; +} + +/** + * @brief Clear the watchdog timer + * + * This function must be called at the appropriate delay to prevent a reset event occuring + */ +void PIOS_WDG_Clear(void) +{ +} \ No newline at end of file diff --git a/flight/PiOS.win32/inc/pios_wdg.h b/flight/PiOS.win32/inc/pios_wdg.h new file mode 100644 index 000000000..26bab0c8b --- /dev/null +++ b/flight/PiOS.win32/inc/pios_wdg.h @@ -0,0 +1,53 @@ +/** + ****************************************************************************** + * @addtogroup PIOS PIOS Core hardware abstraction layer + * @{ + * @addtogroup PIOS_WDG Watchdog Functions + * @{ + * + * @file pios_wdg.h + * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. + * Parts by Thorsten Klose (tk@midibox.org) + * @brief SPI functions header. + * @see The GNU Public License (GPL) Version 3 + * + *****************************************************************************/ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef PIOS_WDG +#define PIOS_WDG + +#include + +//------------------------ +// WATCHDOG_SETTINGS +//------------------------ +#define PIOS_WATCHDOG_TIMEOUT 250 +#define PIOS_WDG_REGISTER BKP_DR4 +#define PIOS_WDG_ACTUATOR 0x0001 +#define PIOS_WDG_STABILIZATION 0x0002 +#define PIOS_WDG_AHRS 0x0004 +#define PIOS_WDG_MANUAL 0x0008 + +void PIOS_WDG_Init(); +bool PIOS_WDG_RegisterFlag(uint16_t flag_requested); +bool PIOS_WDG_UpdateFlag(uint16_t flag); +uint16_t PIOS_WDG_GetBootupFlags(); +uint16_t PIOS_WDG_GetActiveFlags(); +void PIOS_WDG_Clear(void); + +#endif diff --git a/flight/PiOS.win32/pios.h b/flight/PiOS.win32/pios.h index aad8ffcff..855c9ea8b 100644 --- a/flight/PiOS.win32/pios.h +++ b/flight/PiOS.win32/pios.h @@ -59,6 +59,7 @@ #include #include #include +#include #define NELEMENTS(x) (sizeof(x) / sizeof(*(x))) diff --git a/flight/PiOS.win32/win32/pios_wdg.c b/flight/PiOS.win32/win32/pios_wdg.c new file mode 100644 index 000000000..93568247f --- /dev/null +++ b/flight/PiOS.win32/win32/pios_wdg.c @@ -0,0 +1,123 @@ +/** + ****************************************************************************** + * @addtogroup PIOS PIOS Core hardware abstraction layer + * @{ + * @addtogroup PIOS_WDG Watchdog Functions + * @brief PIOS Comamnds to initialize and clear watchdog timer + * @{ + * + * @file pios_spi.c + * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. + * Parts by Thorsten Klose (tk@midibox.org) (tk@midibox.org) + * @brief Hardware Abstraction Layer for SPI ports of STM32 + * @see The GNU Public License (GPL) Version 3 + * @notes + * + * The PIOS Watchdog provides a HAL to initialize a watchdog + * + *****************************************************************************/ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "pios.h" + +/** + * @brief Initialize the watchdog timer for a specified timeout + * + * It is important to note that this function returns the achieved timeout + * for this hardware. For hardware indendence this should be checked when + * scheduling updates. Other hardware dependent details may need to be + * considered such as a window time which sets a minimum update time, + * and this function should return a recommended delay for clearing. + * + * For the STM32 nominal clock rate is 32 khz, but for the maximum clock rate of + * 60 khz and a prescalar of 4 yields a clock rate of 15 khz. The delay that is + * set in the watchdog assumes the nominal clock rate, but the delay for FreeRTOS + * to use is 75% of the minimal delay. + * + * @param[in] delayMs The delay period in ms + * @returns Maximum recommended delay between updates + */ +void PIOS_WDG_Init() +{ +} + +/** + * @brief Register a module against the watchdog + * + * There are two ways to use PIOS WDG: this is for when + * multiple modules must be monitored. In this case they + * must first register against the watchdog system and + * only when all of the modules have been updated with the + * watchdog be cleared. Each module must have its own + * bit in the 16 bit + * + * @param[in] flag the bit this module wants to use + * @returns True if that bit is unregistered + */ +bool PIOS_WDG_RegisterFlag(uint16_t flag_requested) +{ + return true; +} + +/** + * @brief Function called by modules to indicate they are still running + * + * This function will set this flag in the active flags register (which is + * a backup regsiter) and if all the registered flags are set will clear + * the watchdog and set only this flag in the backup register + * + * @param[in] flag the flag to set + * @return true if the watchdog cleared, false if flags are pending + */ +bool PIOS_WDG_UpdateFlag(uint16_t flag) +{ + return true; +} + +/** + * @brief Returns the flags that were set at bootup + * + * This is used for diagnostics, if only one flag not set this + * was likely the module that wasn't running before reset + * + * @return The active flags register from bootup + */ +uint16_t PIOS_WDG_GetBootupFlags() +{ + return (uint16_t) 0xffff; +} + +/** + * @brief Returns the currently active flags + * + * For external monitoring + * + * @return The active flags register + */ +uint16_t PIOS_WDG_GetActiveFlags() +{ + return (uint16_t) 0xffff; +} + +/** + * @brief Clear the watchdog timer + * + * This function must be called at the appropriate delay to prevent a reset event occuring + */ +void PIOS_WDG_Clear(void) +{ +} \ No newline at end of file