ManualControl

Dependencies:   TPixy-Interface

Fork of MbedOS_Robot by ECE4333 - 2018 - Ahmed & Brandon

WatchdogThread.cpp

Committer:
asobhy
Date:
2018-04-10
Branch:
ManualControl
Revision:
29:83c103d12078
Parent:
9:fe56b888985c

File content as of revision 29:83c103d12078:

/******************************************************************************/
// ECE4333
// LAB Partner 1:   Ahmed Sobhy - ID: 3594449
// LAB Partner 2:   Brandon Kingman - ID: 3470444
// Project:         Autonomous Robot Design
// Instructor:      Prof. Chris Diduch
/******************************************************************************/
// filename: WatchdogThread.cpp
// file content description: 
//      * Function to create the Watchdog Thead
//      * Watchdog thread
//      * Watchdog ISR 
//      * Variables related to the functionality of the thread
/******************************************************************************/

#include "mbed.h"

osThreadId WatchdogId;
osTimerId oneShot;


// Function prototypes
void WatchdogISR(void const *n);
void WatchdogThread(void const *argument);

// Declare WatchdogThread as a thread/process
osTimerDef(Wdtimer, WatchdogISR); 

/******************************************************************************/
//  osPriorityIdle          = -3,          ///< priority: idle (lowest)
//  osPriorityLow           = -2,          ///< priority: low
//  osPriorityBelowNormal   = -1,          ///< priority: below normal
//  osPriorityNormal        =  0,          ///< priority: normal (default)
//  osPriorityAboveNormal   = +1,          ///< priority: above normal
//  osPriorityHigh          = +2,          ///< priority: high
//  osPriorityRealtime      = +3,          ///< priority: realtime (highest)
/******************************************************************************/

// Declare WatchdogThread as a thread/process
osThreadDef(WatchdogThread, osPriorityRealtime, 1024); 

DigitalOut led1(LED1);


bool WatchdogThreadInit()
{
    bool retval;
    
    WatchdogId = osThreadCreate(osThread(WatchdogThread), NULL);
    
    if(WatchdogId)
    {
        // Start the watch dog timer and enable the watch dog interrupt
        oneShot = osTimerCreate(osTimer(Wdtimer), osTimerOnce, (void *)0);
        retval = true;
    }
    else
    {
        retval = false;
    }
    
    return retval;
    
}


/*******************************************************************************
*                       ******** Watchdog Reset ********
*******************************************************************************/
void WatchdogReset(void)
{
    led1=0; // Turn LED off.
    // Start or restart the watchdog timer interrupt and set to  2000ms.
    osTimerStart(oneShot, 2000); 
}

        
/*******************************************************************************
*                       ******** Watchdog Thread ********
*******************************************************************************/
static void WatchdogThread(void const *argument)
{
    while (true) 
    {
        // Go to sleep until a signal, SignalWatchdog, is received
        osSignalWait(0x01, osWaitForever); 
        led1 = 1;
    }

}


/*******************************************************************************
*                  ******** Watchdog Interrupt Handler ********
*******************************************************************************/
void WatchdogISR(void const *n)
{
    // Send signal to thread with ID, WatchdogId, i.e., WatchdogThread
    osSignalSet(WatchdogId,0x01); 
}