/** * @file hal_system.h * @copyright Nehemis SARL reserves all rights even in the event of industrial * property rights. We reserve all rights of disposal such as * copying and passing on to third parties. * * * @brief Header file for HAL layer for the SYSTEM module. * */ #ifndef INCLUDED_HAL_SYSTEM_H #define INCLUDED_HAL_SYSTEM_H /****************************************************************************** * Include Header Files ******************************************************************************/ #include "nms_types.h" /****************************************************************************** * Macros Constant Declarations ******************************************************************************/ #define SERIAL_ID_BUFFER_SIZE 12 /****************************************************************************** * Types Declarations ******************************************************************************/ typedef enum { HAL_SYSTEM_RESET_CAUSE_OPTION_BYTE_LOADER, HAL_SYSTEM_RESET_CAUSE_EXTERNAL_PIN_RESET, HAL_SYSTEM_RESET_CAUSE_BROWNOUT_RESET, HAL_SYSTEM_RESET_CAUSE_SOFTWARE_RESET, HAL_SYSTEM_RESET_CAUSE_WATCH_DOG_TIMER, HAL_SYSTEM_RESET_CAUSE_WINDOW_WATCH_DOG, HAL_SYSTEM_RESET_CAUSE_LOW_POWER, HAL_SYSTEM_RESET_CAUSE_ALL_CAUSES } HalSystemResetCauseEn; /**< Enumeration used to analyze the reset cause location. */ /****************************************************************************** * Global Variables Declarations ******************************************************************************/ /****************************************************************************** * Extern Functions Declarations ******************************************************************************/ /** * @brief Initializes the system HAL. * * @note CAUTION: This function must be called immediately after * SystemClock_Config() in the main function to ensure correct * operation and prevent potential software issues. * * @return Error code: 0 if successful, nonzero otherwise. */ uint32 HalSystemInit(void); /** * @brief Retrieves the system runtime in microseconds. * * @param resultUs_pu64 Pointer to store the system runtime in microseconds. * * @note The tick resolution depends on the system tick frequency. * * @return Error code: 0 if successful, nonzero otherwise. */ uint32 HalSystemGetRunTimeUs(uint64 *resultUs_pu64); /** * @brief Retrieves the system runtime in milliseconds. * * @param resultMs_pu64 Pointer to store the system runtime in milliseconds. * * @note The tick resolution depends on the system tick frequency. * * @return Error code: 0 if successful, nonzero otherwise. */ uint32 HalSystemGetRunTimeMs(uint64 *resultMs_pu64); /** * @brief Disables all system interrupts. */ void HalSystemDisableInterrupts(void); /** * @brief Enables all system interrupts. */ void HalSystemEnableInterrupts(void); /** * @brief Retrieves the cause of the last system reset from the MCU registers. * * @param resetCauseSelector_en Enum specifying the reset cause type. * causes_pu32 Pointer to store the corresponding bitmask value. * * @return Error code: 0 if successful, nonzero otherwise. */ uint32 HalSystemGetResetCause(HalSystemResetCauseEn resetCauseSelector_en, uint32 *causes_pu32); /** * @brief Retrieves the system's unique serial ID. * * @param serialIdBuffer_pu8 Pointer to the buffer where the serial ID will be stored. */ void HalSystemGetSerialId(uint8 *serialIdBuffer_pu8); /** * @brief Performs a software reset of the system. */ void HalSystemReset(void); #endif /* INCLUDED_HAL_SYSTEM_H */