/**************************************************************************//**
 * @file     os_tick.h
 * @brief    CMSIS OS Tick header file
 * @version  V1.0.1
 * @date     24. November 2017
 ******************************************************************************/
/*
 * Copyright (c) 2017-2017 ARM Limited. All rights reserved.
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the License); you may
 * not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef OS_TICK_H
#define OS_TICK_H

#include <stdint.h>

/// IRQ Handler.
#ifndef IRQHANDLER_T
#define IRQHANDLER_T
typedef void (*IRQHandler_t) (void);
#endif

/// Setup OS Tick timer to generate periodic RTOS Kernel Ticks
/// \param[in]     freq         tick frequency in Hz
/// \param[in]     handler      tick IRQ handler
/// \return 0 on success, -1 on error.
int32_t  OS_Tick_Setup (uint32_t freq, IRQHandler_t handler);

/// Enable OS Tick timer interrupt
void     OS_Tick_Enable (void);

/// Disable OS Tick timer interrupt
void     OS_Tick_Disable (void);

/// Acknowledge execution of OS Tick timer interrupt
void     OS_Tick_AcknowledgeIRQ (void);

/// Get OS Tick timer IRQ number
/// \return OS Tick IRQ number
int32_t  OS_Tick_GetIRQn (void);

/// Get OS Tick timer clock frequency
/// \return OS Tick timer clock frequency in Hz
uint32_t OS_Tick_GetClock (void);

/// Get OS Tick timer interval reload value
/// \return OS Tick timer interval reload value
uint32_t OS_Tick_GetInterval (void);

/// Get OS Tick timer counter value
/// \return OS Tick timer counter value
uint32_t OS_Tick_GetCount (void);

/// Get OS Tick timer overflow status
/// \return OS Tick overflow status (1 - overflow, 0 - no overflow).
uint32_t OS_Tick_GetOverflow (void);

#endif  /* OS_TICK_H */
