blob: 61b41fd8a753fc9c5a90d65124569a159a85ede0 [file] [log] [blame]
//*****************************************************************************
//
//! @file am_util_stopwatch.h
//!
//! @brief Provides functionality to measure elapsed time.
//
//*****************************************************************************
//*****************************************************************************
//
// Copyright (c) 2017, Ambiq Micro
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// This is part of revision v1.2.10-2-gea660ad-hotfix2 of the AmbiqSuite Development Package.
//
//*****************************************************************************
#ifndef AM_UTIL_STOPWATCH_H
#define AM_UTIL_STOPWATCH_H
#ifdef __cplusplus
extern "C"
{
#endif
#include "hal/am_hal_rtc.h"
//*****************************************************************************
//
// A data structure for holding the formatted time.
//
//*****************************************************************************
typedef struct am_util_stopwatch_elapsed_t
{
uint32_t ui32MS;
uint32_t ui32Second;
uint32_t ui32Minute;
uint32_t ui32Hour;
uint32_t ui32Day;
uint32_t ui32Month;
uint32_t ui32Year;
} am_util_stopwatch_elapsed_t;
//*****************************************************************************
//
// A data structure for tracking the stopwatch state.
//
//*****************************************************************************
typedef struct am_util_stopwatch_t
{
uint64_t ui64ElapsedTime; // Total elapsed time in ms.
uint64_t ui64PausedTime; // Total paused time in ms.
bool bStarted; // Stopwatch started state.
bool bPaused; // Stopwatch paused state.
am_hal_rtc_time_t sStartTime; // Start time to determine elapsed time.
am_hal_rtc_time_t sPauseTime; // Pause time to determine elapsed time.
} am_util_stopwatch_t;
//*****************************************************************************
//
//! @name Resolution for Elapsed Time
//! @brief Defines to pass to am_util_stopwatch_elapsed_get()
//!
//! These macros should be used to specify what resolution to return the
//! elapsed time in.
//! @{
//
//*****************************************************************************
#define AM_UTIL_STOPWATCH_MS 0x0
#define AM_UTIL_STOPWATCH_SECOND 0x1
#define AM_UTIL_STOPWATCH_MINUTE 0x2
#define AM_UTIL_STOPWATCH_HOUR 0x4
#define AM_UTIL_STOPWATCH_DAY 0x8
#define AM_UTIL_STOPWATCH_MONTH 0x10
#define AM_UTIL_STOPWATCH_YEAR 0x20
//! @}
//*****************************************************************************
//
// External function definitions
//
//*****************************************************************************
extern void am_util_stopwatch_init(am_util_stopwatch_t *pStopwatch);
extern void am_util_stopwatch_start(am_util_stopwatch_t *pStopwatch);
extern void am_util_stopwatch_stop(am_util_stopwatch_t *pStopwatch);
extern void am_util_stopwatch_restart(am_util_stopwatch_t *pStopwatch);
extern void am_util_stopwatch_clear(am_util_stopwatch_t *pStopwatch);
extern uint64_t am_util_stopwatch_elapsed_get(am_util_stopwatch_t *pStopwatch,
uint32_t ui32Resolution);
extern void am_util_stopwatch_elapsed_get_formatted(am_util_stopwatch_t *pStopwatch,
am_util_stopwatch_elapsed_t *pTime);
#ifdef __cplusplus
}
#endif
#endif // AM_UTIL_STOPWATCH_H