1 /*
2  * Copyright (c) 2023 Wuerth Elektronik eiSos GmbH & Co. KG
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /**
8  * @file
9  * @brief Header file for the WSEN-PDUS-25131308XXX01 sensor driver.
10  *
11  * #### INFORMATIVE ####
12  * The PDUS sensor has no registers to request.
13  * It will automatically send up to 4 bytes as reply to any read request to it's PDUS_ADDRESS_I2C.
14  * This sensor does not support write requests.
15  * This sensor only has a I2C communication interface alongside the analog interface.
16  */
17 
18 #ifndef _WSEN_PDUS_25131308XXX01_H
19 #define _WSEN_PDUS_25131308XXX01_H
20 
21 /*         Includes         */
22 
23 #include <stdint.h>
24 
25 #include "../WeSensorsSDK.h"
26 
27 /*         Available PDUS I2C slave addresses         */
28 
29 #define PDUS_ADDRESS_I2C    (uint8_t) 0x78
30 
31 /*         Misc. defines         */
32 #define P_MIN_VAL_PDUS      (uint16_t) 3277     /**< Minimum raw value for pressure, calibrated range */
33 #define P_MAX_VAL_PDUS 	    (uint16_t) 29491	/**< Maximum raw value for pressure, calibrated range */
34 #define T_MIN_VAL_PDUS      (uint16_t) 8192     /**< Minimum raw value for temperature in degrees Celsius = 0°C, calibrated range */
35 #define T_MAX_VAL_PDUS      (uint16_t) 24576    /**< Maximum raw value for temperature in degrees Celsius = 70°C, calibrated range */
36 
37 
38 /*         Functional type definitions         */
39 
40 /**
41  * @brief PDUS sensor model
42  * Please refer to the PDUS user manual's chapter "Look-up-Table" for detailed paramters.
43  */
44 typedef enum
45 {
46   PDUS_pdus0 = 0,           /**< order code 2513130810001, range = -0.1 to +0.1 kPa */
47   PDUS_pdus1 = 1,           /**< order code 2513130810101 (5V VCC) + 2513130810102 (3.3V VCC), range = -1 to +1 kPa */
48   PDUS_pdus2 = 2,           /**< order code 2513130810201, range = -10 to +10 kPa */
49   PDUS_pdus3 = 3,           /**< order code 2513130810301, range =  0 to 100 kPa */
50   PDUS_pdus4 = 4,           /**< order code 2513130810401 (5V VCC) + 2513130810401(3.3V VCC), range = -100 to +1000 kPa */
51   PDUS_pdus5 = 5,           /**< order code 2513130815401, range = 0 to +1500 kPa */
52   PDUS_invalid = 0xFFFF,    /**<  */
53 } PDUS_SensorType_t;
54 
55 #ifdef __cplusplus
56 extern "C"
57 {
58 #endif
59 
60 /*         Function definitions         */
61 
62 int8_t PDUS_getDefaultInterface(WE_sensorInterface_t* sensorInterface);
63 
64 int8_t PDUS_getRawPressure(WE_sensorInterface_t* sensorInterface, uint16_t *pressure);
65 int8_t PDUS_getRawPressureAndTemperature(WE_sensorInterface_t* sensorInterface, uint16_t *pressure, uint16_t *temperature);
66 
67 #ifdef WE_USE_FLOAT
68 int8_t PDUS_getPressure_float(WE_sensorInterface_t* sensorInterface, PDUS_SensorType_t type, float *presskPa);
69 int8_t PDUS_getPressureAndTemperature_float(WE_sensorInterface_t* sensorInterface, PDUS_SensorType_t type, float *presskPa, float *tempDegC);
70 
71 int8_t PDUS_convertPressureToFloat(PDUS_SensorType_t type, uint16_t rawPressure, float *presskPa);
72 #endif // WE_USE_FLOAT
73 
74 #ifdef __cplusplus
75 }
76 #endif
77 
78 #endif /* _WSEN_PDUS_H */
79