1 /**
2   **********************************************************************************************************************
3   * @file    stm32n6xx_hal_dts.h
4   * @author  MCD Application Team
5   * @brief   Header file of DTS HAL module.
6   **********************************************************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2023 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   **********************************************************************************************************************
17   */
18 
19 /* Define to prevent recursive inclusion -----------------------------------------------------------------------------*/
20 #ifndef STM32N6xx_HAL_DTS_H
21 #define STM32N6xx_HAL_DTS_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ----------------------------------------------------------------------------------------------------------*/
28 #include "stm32n6xx_hal_def.h"
29 
30 /** @addtogroup STM32N6xx_HAL_Driver
31   * @{
32   */
33 
34 /** @addtogroup DTS
35   * @{
36   */
37 
38 /* Exported types ----------------------------------------------------------------------------------------------------*/
39 
40 /** @defgroup DTS_Exported_Types  DTS Exported Types
41   * @{
42   */
43 /**
44   * @brief  HAL DTS states definition
45   */
46 typedef enum
47 {
48   HAL_DTS_STATE_RESET        = 0x00U, /*!< DTS not initialized */
49   HAL_DTS_STATE_READY        = 0x01U, /*!< DTS initialized and ready for use */
50   HAL_DTS_STATE_RUNNING_0    = 0x02U, /*!< DTS temperature measure in progress on sensor 0 */
51   HAL_DTS_STATE_RUNNING_1    = 0x03U, /*!< DTS temperature measure in progress on sensor 1 */
52   HAL_DTS_STATE_RUNNING_BOTH = 0x04U  /*!< DTS temperature measure in progress on both sensors */
53 } HAL_DTS_StateTypeDef;
54 
55 /**
56   * @brief  DTS sensors definition
57   */
58 typedef enum
59 {
60   DTS_SENSOR_0 = 0x00U, /*!< DTS sensor 0 */
61   DTS_SENSOR_1 = 0x01U, /*!< DTS sensor 1 */
62 } HAL_DTS_Sensor;
63 
64 /**
65   * @brief  DTS handle structure definition
66   */
67 #if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
68 typedef struct __DTS_HandleTypeDef
69 #else /* USE_HAL_DTS_REGISTER_CALLBACKS */
70 typedef struct
71 #endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
72 {
73   DTS_TypeDef               *Instance;        /*!< DTS instance */
74   __IO HAL_DTS_StateTypeDef  State;           /*!< DTS state */
75   __IO uint32_t              ErrorCode;       /*!< DTS error code */
76   uint32_t                   SensorMode[2U];  /*!< DTS sensor modes */
77 #if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
78   void (*MspInitCallback)(struct __DTS_HandleTypeDef *hdts);     /*!< DTS MSP init callback */
79   void (*MspDeInitCallback)(struct __DTS_HandleTypeDef *hdts);   /*!< DTS MSP de-init callback */
80   void (*TemperatureCallback)(struct __DTS_HandleTypeDef *hdts,
81                               HAL_DTS_Sensor Sensor);            /*!< DTS temperature callback */
82   void (*AlarmACallback)(struct __DTS_HandleTypeDef *hdts,
83                          HAL_DTS_Sensor Sensor);                 /*!< DTS alarm A callback */
84   void (*AlarmBCallback)(struct __DTS_HandleTypeDef *hdts,
85                          HAL_DTS_Sensor Sensor);                 /*!< DTS alarm B callback */
86   void (*ErrorCallback)(struct __DTS_HandleTypeDef *hdts,
87                         HAL_DTS_Sensor Sensor);                  /*!< DTS error callback */
88 #endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
89 } DTS_HandleTypeDef;
90 
91 #if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
92 /**
93   * @brief  DTS callback ID enumeration definition
94   */
95 typedef enum
96 {
97   HAL_DTS_MSPINIT_CB_ID   = 0x00U, /*!< DTS MSP init callback ID */
98   HAL_DTS_MSPDEINIT_CB_ID = 0x01U  /*!< DTS MSP de-init callback ID */
99 } HAL_DTS_CallbackIDTypeDef;
100 
101 /**
102   * @brief  DTS sensor callback ID enumeration definition
103   */
104 typedef enum
105 {
106   HAL_DTS_SENSOR_TEMPERATURE_CB_ID = 0x00U, /*!< DTS sensor temperature callback ID */
107   HAL_DTS_SENSOR_ALARMA_CB_ID      = 0x01U, /*!< DTS sensor alarm A callback ID */
108   HAL_DTS_SENSOR_ALARMB_CB_ID      = 0x02U, /*!< DTS sensor alarm B callback ID */
109   HAL_DTS_SENSOR_ERROR_CB_ID       = 0x03U, /*!< DTS sensor error callback ID */
110 } HAL_DTS_SensorCallbackIDTypeDef;
111 
112 /**
113   * @brief  DTS callback pointers definition
114   */
115 typedef void (*pDTS_CallbackTypeDef)(DTS_HandleTypeDef *hdts);
116 typedef void (*pDTS_SensorCallbackTypeDef)(DTS_HandleTypeDef *hdts, HAL_DTS_Sensor Sensor);
117 #endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
118 
119 /**
120   * @brief  DTS sensor configuration structure definition
121   */
122 typedef struct
123 {
124   uint32_t Mode;       /*!< Sensor mode.
125                             This parameter can be a value of @ref DTS_SensorMode */
126   uint32_t Resolution; /*!< Sensor resolution.
127                             This parameter can be a value of @ref DTS_SensorResolution */
128   uint32_t Trigger;    /*!< Sensor trigger.
129                             This parameter can be a value of @ref DTS_SensorTrigger.
130                             @note This parameter is used only if Mode is set to DTS_SENSOR_MODE_TRIGGER */
131 } DTS_SensorConfigTypeDef;
132 
133 /**
134   * @brief  DTS alarm configuration structure definition
135   */
136 typedef struct
137 {
138   FunctionalState Enable;     /*!< Alarm enable/disable */
139   float_t         Threshold;  /*!< Alarm threshold in celsius degree.
140                                    This parameter must be a number between Min_Data = -40 and Max_Data = 125 */
141   float_t         Hysteresis; /*!< Alarm hysteresis in celsius degree.
142                                    This parameter must be a number between Min_Data = -40 and Max_Data = 125 */
143 } DTS_AlarmConfigTypeDef;
144 /**
145   * @}
146   */
147 
148 /* Exported constants ------------------------------------------------------------------------------------------------*/
149 
150 /** @defgroup DTS_Exported_Constants  DTS Exported Constants
151   * @{
152   */
153 
154 /** @defgroup DTS_ErrorCode DTS error code
155   * @{
156   */
157 #define HAL_DTS_ERROR_NONE                 0x00000000U  /*!< No error */
158 #define HAL_DTS_ERROR_INVALID_PARAM        0x00000001U  /*!< Invalid parameter */
159 #define HAL_DTS_ERROR_INVALID_STATE        0x00000002U  /*!< Invalid state */
160 #define HAL_DTS_ERROR_INVALID_SENSOR_MODE  0x00000004U  /*!< Invalid sensor mode */
161 #define HAL_DTS_ERROR_INVALID_SAMPLE       0x00000008U  /*!< Invalid sample */
162 #define HAL_DTS_ERROR_FAULT                0x00000010U  /*!< Fault */
163 #if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
164 #define HAL_DTS_ERROR_INVALID_CALLBACK     0x00000020U  /*!< Invalid callback error */
165 #endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
166 /**
167   * @}
168   */
169 
170 /** @defgroup DTS_SensorMode DTS sensor mode
171   * @{
172   */
173 #define DTS_SENSOR_MODE_DISABLE     0x00000000U /*!< No acquisition */
174 #define DTS_SENSOR_MODE_SINGLE      0x00000106U /*!< Single acquisition */
175 #define DTS_SENSOR_MODE_CONTINUOUS  0x0000010AU /*!< Continuous acquisitions */
176 #define DTS_SENSOR_MODE_TRIGGER     0x00000102U /*!< Acquisition with trigger */
177 /**
178   * @}
179   */
180 
181 /** @defgroup DTS_SensorResolution DTS sensor resolution
182   * @{
183   */
184 #define DTS_SENSOR_RESOLUTION_12BITS  0x00000001U /*!< Sensor resolution of 12 bits */
185 #define DTS_SENSOR_RESOLUTION_10BITS  0x00000021U /*!< Sensor resolution of 10 bits */
186 #define DTS_SENSOR_RESOLUTION_8BITS   0x00000041U /*!< Sensor resolution of 8 bits */
187 /**
188   * @}
189   */
190 
191 /** @defgroup DTS_SensorTrigger DTS sensor trigger
192   * @{
193   */
194 #define DTS_SENSOR_TRIGGER_LPTIM4_OUT  0x00010000U /*!< LPTIM4 output signal */
195 #define DTS_SENSOR_TRIGGER_LPTIM2_CH1  0x00020000U /*!< LPTIM2 channel 1 signal */
196 #define DTS_SENSOR_TRIGGER_LPTIM3_CH1  0x00030000U /*!< LPTIM3 channel 1 signal */
197 #define DTS_SENSOR_TRIGGER_EXTI13      0x00040000U /*!< EXTI13 signal */
198 /**
199   * @}
200   */
201 
202 /**
203   * @}
204   */
205 
206 /* Exported macros ---------------------------------------------------------------------------------------------------*/
207 
208 /** @defgroup DTS_Exported_Macros  DTS Exported Macros
209   * @{
210   */
211 #if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
212 #define __HAL_DTS_RESET_HANDLE_STATE(__HANDLE__) do{                                             \
213                                                       (__HANDLE__)->State = HAL_DTS_STATE_RESET; \
214                                                       (__HANDLE__)->MspInitCallback = NULL;      \
215                                                       (__HANDLE__)->MspDeInitCallback = NULL;    \
216                                                     } while(0)
217 #else /* USE_HAL_DTS_REGISTER_CALLBACKS */
218 #define __HAL_DTS_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_DTS_STATE_RESET)
219 #endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
220 
221 #define IS_DTS_SENSOR_MODE(PARAM) (((PARAM) == DTS_SENSOR_MODE_DISABLE)    || \
222                                    ((PARAM) == DTS_SENSOR_MODE_SINGLE)     || \
223                                    ((PARAM) == DTS_SENSOR_MODE_CONTINUOUS) || \
224                                    ((PARAM) == DTS_SENSOR_MODE_TRIGGER))
225 
226 #define IS_DTS_SENSOR_RESOLUTION(PARAM) (((PARAM) == DTS_SENSOR_RESOLUTION_12BITS) || \
227                                          ((PARAM) == DTS_SENSOR_RESOLUTION_10BITS) || \
228                                          ((PARAM) == DTS_SENSOR_RESOLUTION_8BITS))
229 
230 #define IS_DTS_SENSOR_TRIGGER(PARAM) (((PARAM) == DTS_SENSOR_TRIGGER_LPTIM4_OUT) || \
231                                       ((PARAM) == DTS_SENSOR_TRIGGER_LPTIM2_CH1) || \
232                                       ((PARAM) == DTS_SENSOR_TRIGGER_LPTIM3_CH1) || \
233                                       ((PARAM) == DTS_SENSOR_TRIGGER_EXTI13))
234 
235 #define IS_DTS_ALARM_PARAM(PARAM) ((-40.0f <= (PARAM)) && ((PARAM) <= 125.0f))
236 /**
237   * @}
238   */
239 
240 /* Exported functions ------------------------------------------------------------------------------------------------*/
241 
242 /** @addtogroup DTS_Exported_Functions
243   * @{
244   */
245 
246 /* Initialization and de-initialization functions */
247 /** @addtogroup DTS_Exported_Functions_Group1
248   * @{
249   */
250 HAL_StatusTypeDef HAL_DTS_Init(DTS_HandleTypeDef *hdts);
251 HAL_StatusTypeDef HAL_DTS_DeInit(DTS_HandleTypeDef *hdts);
252 void              HAL_DTS_MspInit(DTS_HandleTypeDef *hdts);
253 void              HAL_DTS_MspDeInit(DTS_HandleTypeDef *hdts);
254 #if (USE_HAL_DTS_REGISTER_CALLBACKS == 1)
255 HAL_StatusTypeDef HAL_DTS_RegisterCallback(DTS_HandleTypeDef        *hdts,
256                                            HAL_DTS_CallbackIDTypeDef CallbackID,
257                                            pDTS_CallbackTypeDef      pCallback);
258 HAL_StatusTypeDef HAL_DTS_UnRegisterCallback(DTS_HandleTypeDef        *hdts,
259                                              HAL_DTS_CallbackIDTypeDef CallbackID);
260 HAL_StatusTypeDef HAL_DTS_RegisterSensorCallback(DTS_HandleTypeDef              *hdts,
261                                                  HAL_DTS_SensorCallbackIDTypeDef CallbackID,
262                                                  pDTS_SensorCallbackTypeDef      pCallback);
263 HAL_StatusTypeDef HAL_DTS_UnRegisterSensorCallback(DTS_HandleTypeDef              *hdts,
264                                                    HAL_DTS_SensorCallbackIDTypeDef CallbackID);
265 #endif /* USE_HAL_DTS_REGISTER_CALLBACKS */
266 /**
267   * @}
268   */
269 
270 /* Temperature measurement functions */
271 /** @addtogroup DTS_Exported_Functions_Group2
272   * @{
273   */
274 HAL_StatusTypeDef HAL_DTS_ConfigSensor(DTS_HandleTypeDef       *hdts,
275                                        HAL_DTS_Sensor           Sensor,
276                                        DTS_SensorConfigTypeDef *pSensorParams);
277 HAL_StatusTypeDef HAL_DTS_Start(DTS_HandleTypeDef *hdts,
278                                 HAL_DTS_Sensor     Sensor);
279 HAL_StatusTypeDef HAL_DTS_PollForTemperature(DTS_HandleTypeDef *hdts,
280                                              HAL_DTS_Sensor     Sensor,
281                                              uint32_t              Timeout);
282 HAL_StatusTypeDef HAL_DTS_GetTemperature(DTS_HandleTypeDef *hdts,
283                                          HAL_DTS_Sensor     Sensor,
284                                          float_t           *pTemperature);
285 HAL_StatusTypeDef HAL_DTS_Stop(DTS_HandleTypeDef *hdts,
286                                HAL_DTS_Sensor     Sensor);
287 HAL_StatusTypeDef HAL_DTS_Start_IT(DTS_HandleTypeDef *hdts,
288                                    HAL_DTS_Sensor     Sensor);
289 HAL_StatusTypeDef HAL_DTS_Stop_IT(DTS_HandleTypeDef *hdts,
290                                   HAL_DTS_Sensor     Sensor);
291 void              HAL_DTS_TemperatureCallback(DTS_HandleTypeDef *hdts,
292                                               HAL_DTS_Sensor     Sensor);
293 HAL_StatusTypeDef HAL_DTS_GetExtremeTemperatures(DTS_HandleTypeDef *hdts,
294                                                  HAL_DTS_Sensor     Sensor,
295                                                  float_t           *pMin,
296                                                  float_t           *pMax);
297 HAL_StatusTypeDef HAL_DTS_ConfigSampleCounter(DTS_HandleTypeDef *hdts,
298                                               FunctionalState    Enable,
299                                               FunctionalState    Clear,
300                                               FunctionalState    Hold);
301 HAL_StatusTypeDef HAL_DTS_GetSampleCounterValue(DTS_HandleTypeDef *hdts,
302                                                 uint32_t          *pNumber);
303 HAL_StatusTypeDef HAL_DTS_ConfigSampleDiscard(DTS_HandleTypeDef *hdts,
304                                               FunctionalState    Status);
305 /**
306   * @}
307   */
308 
309 /* Alarms functions */
310 /** @addtogroup DTS_Exported_Functions_Group3
311   * @{
312   */
313 HAL_StatusTypeDef HAL_DTS_ConfigAlarmA(DTS_HandleTypeDef            *hdts,
314                                        HAL_DTS_Sensor                Sensor,
315                                        const DTS_AlarmConfigTypeDef *pAlarmParams);
316 HAL_StatusTypeDef HAL_DTS_ConfigAlarmB(DTS_HandleTypeDef            *hdts,
317                                        HAL_DTS_Sensor                Sensor,
318                                        const DTS_AlarmConfigTypeDef *pAlarmParams);
319 void              HAL_DTS_AlarmACallback(DTS_HandleTypeDef *hdts,
320                                          HAL_DTS_Sensor     Sensor);
321 void              HAL_DTS_AlarmBCallback(DTS_HandleTypeDef *hdts,
322                                          HAL_DTS_Sensor     Sensor);
323 /**
324   * @}
325   */
326 
327 /* Generic functions */
328 /** @addtogroup DTS_Exported_Functions_Group4
329   * @{
330   */
331 void                 HAL_DTS_IRQHandler(DTS_HandleTypeDef *hdts);
332 void                 HAL_DTS_ErrorCallback(DTS_HandleTypeDef *hdts,
333                                            HAL_DTS_Sensor     Sensor);
334 HAL_DTS_StateTypeDef HAL_DTS_GetState(const DTS_HandleTypeDef *hdts);
335 uint32_t             HAL_DTS_GetError(const DTS_HandleTypeDef *hdts);
336 /**
337   * @}
338   */
339 
340 /**
341   * @}
342   */
343 
344 /**
345   * @}
346   */
347 
348 /**
349   * @}
350   */
351 
352 #ifdef __cplusplus
353 }
354 #endif
355 
356 #endif /* STM32N6xx_HAL_DTS_H */
357