/************************************************************************** * * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file Utilities.h * * @author (last) Quang Nguyen * @date (last) 22-Jul-2020 * * @author (original) Sean * @date (original) 17-Feb-2020 * ***************************************************************************/ #ifndef __UTILITIES_H__ #define __UTILITIES_H__ /** * @defgroup Utilities Utilities * @brief Utilities module contains various utility functions. * * @addtogroup Utilities * @{ */ // ********** public definitions ********** // ******* Time Windowed Count Definitions ********* #define MAX_TIME_WINDOWED_COUNT 5 ///< Maximum # of counts that a time windowed count can count to. /// Enumeration of time-windowed counts. typedef enum TimeWindowedCounts { TIME_WINDOWED_COUNT_BAD_MSG_CRC = 0, ///< Bad message CRC TIME_WINDOWED_COUNT_CAN_WARNING, ///< CAN warning TIME_WINDOWED_COUNT_CAN_PASSIVE, ///< CAN passive mode TIME_WINDOWED_COUNT_CAN_OFF, ///< CAN off TIME_WINDOWED_COUNT_CAN_PARITY, ///< CAN parity error TIME_WINDOWED_COUNT_FPGA_UART_FRAME_ERROR, ///< FPGA UART frame error TIME_WINDOWED_COUNT_FPGA_UART_OVERRUN, ///< FPGA UART overrun error #ifdef _HD_ #endif #ifdef _DG_ TIME_WINDOWED_COUNT_FPGA_CONDUCTIVITY_SENSOR_ERROR, ///< FPGA Conductivity sensor error TIME_WINDOWED_COUNT_FPGA_TEMPERATURE_SENSOR_ERROR, ///< FPGA Temperature sensor error #endif NUM_OF_TIME_WINDOWED_COUNTS ///< Number of pressure sensors. } TIME_WINDOWED_COUNT_T; // ******* Critical Data Definitions ********* /// Critical data types list. typedef enum Critical_Data_Types { CRITICAL_DATA_TYPE_U32 = 0, ///< Critical data is unsigned 32-bit integer type CRITICAL_DATA_TYPE_F32, ///< Critical data is 32-bit floating point type NUM_OF_CRITICAL_DATA_TYPES ///< Total number of critical data types. } CRITICAL_DATA_TYPES_T; /// Record structure for alarm data of any supported type. typedef union { U32 uInt; ///< critical data of unsigned integer type. F32 flt; ///< critical data of floating point type. } CRITICAL_DATAS_T; /// critical integer data structure. typedef struct { CRITICAL_DATA_TYPES_T typ; ///< Type of data CRITICAL_DATAS_T data; ///< Data value U32 comp; ///< One's compliment of value BOOL set; ///< Flag indicates data has been set } CRITICAL_DATA_T; // ********** public function prototypes ********** U16 crc16( const U08 *address, U32 len ); U08 crc8( const U08 *address, U32 len ); void initTimeWindowedCount( TIME_WINDOWED_COUNT_T cnt, U32 maxCnt, U32 winMs ); BOOL incTimeWindowedCount( TIME_WINDOWED_COUNT_T cnt ); CRITICAL_DATAS_T getCriticalData( CRITICAL_DATA_T *data ); void setCriticalData( CRITICAL_DATA_T *data, CRITICAL_DATAS_T value ); void resetCriticalData( CRITICAL_DATA_T *data ); /**@}*/ #endif