LibDriver HDC302X
Loading...
Searching...
No Matches
driver_hdc302x.h
Go to the documentation of this file.
1
36
37#ifndef DRIVER_HDC302X_H
38#define DRIVER_HDC302X_H
39
40#include <stdio.h>
41#include <stdint.h>
42#include <string.h>
43
44#ifdef __cplusplus
45extern "C"{
46#endif
47
53
58
62typedef enum
63{
64 HDC302X_ADDRESS_00 = (0x44 << 1),
65 HDC302X_ADDRESS_01 = (0x46 << 1),
66 HDC302X_ADDRESS_10 = (0x45 << 1),
67 HDC302X_ADDRESS_11 = (0x47 << 1),
69
80
92
110
114typedef struct hdc302x_handle_s
115{
116 uint8_t (*iic_init)(void);
117 uint8_t (*iic_deinit)(void);
118 uint8_t (*iic_read_address16)(uint8_t addr, uint16_t reg, uint8_t *buf, uint16_t len);
119 uint8_t (*iic_write_address16)(uint8_t addr, uint16_t reg, uint8_t *buf, uint16_t len);
120 void (*receive_callback)(uint16_t type);
121 void (*delay_ms)(uint32_t ms);
122 void (*debug_print)(const char *const fmt, ...);
123 uint8_t iic_addr;
124 uint8_t inited;
126 uint8_t auto_mode;
127 uint8_t mode;
129
145
149
156
163#define DRIVER_HDC302X_LINK_INIT(HANDLE, STRUCTURE) memset(HANDLE, 0, sizeof(STRUCTURE))
164
171#define DRIVER_HDC302X_LINK_IIC_INIT(HANDLE, FUC) (HANDLE)->iic_init = FUC
172
179#define DRIVER_HDC302X_LINK_IIC_DEINIT(HANDLE, FUC) (HANDLE)->iic_deinit = FUC
180
187#define DRIVER_HDC302X_LINK_IIC_READ_ADDRESS16(HANDLE, FUC) (HANDLE)->iic_read_address16 = FUC
188
195#define DRIVER_HDC302X_LINK_IIC_WRITE_ADDRESS16(HANDLE, FUC) (HANDLE)->iic_write_address16 = FUC
196
203#define DRIVER_HDC302X_LINK_DELAY_MS(HANDLE, FUC) (HANDLE)->delay_ms = FUC
204
211#define DRIVER_HDC302X_LINK_DEBUG_PRINT(HANDLE, FUC) (HANDLE)->debug_print = FUC
212
219#define DRIVER_HDC302X_LINK_RECEIVE_CALLBACK(HANDLE, FUC) (HANDLE)->receive_callback = FUC
220
224
231
240uint8_t hdc302x_info(hdc302x_info_t *info);
241
253
265
278
291uint8_t hdc302x_init(hdc302x_handle_t *handle);
292
304uint8_t hdc302x_deinit(hdc302x_handle_t *handle);
305
317
329
341
353
364uint8_t hdc302x_soft_reset(hdc302x_handle_t *handle);
365
383uint8_t hdc302x_single_read(hdc302x_handle_t *handle, uint16_t *temperature_raw, float *temperature_s,
384 uint16_t *humidity_raw, float *humidity_s);
385
399
411
428uint8_t hdc302x_continuous_read(hdc302x_handle_t *handle, uint16_t *temperature_raw, float *temperature_s,
429 uint16_t *humidity_raw, float *humidity_s);
430
445uint8_t hdc302x_continuous_read_humidity(hdc302x_handle_t *handle, uint16_t *humidity_raw, float *humidity_s);
446
461uint8_t hdc302x_read_temperature_min(hdc302x_handle_t *handle, uint16_t *temperature_raw, float *temperature_s);
462
477uint8_t hdc302x_read_temperature_max(hdc302x_handle_t *handle, uint16_t *temperature_raw, float *temperature_s);
478
493uint8_t hdc302x_read_humidity_min(hdc302x_handle_t *handle, uint16_t *humidity_raw, float *humidity_s);
494
509uint8_t hdc302x_read_humidity_max(hdc302x_handle_t *handle, uint16_t *humidity_raw, float *humidity_s);
510
522uint8_t hdc302x_write_set_low_alert(hdc302x_handle_t *handle, uint16_t threshold);
523
535uint8_t hdc302x_write_clear_low_alert(hdc302x_handle_t *handle, uint16_t threshold);
536
548uint8_t hdc302x_write_set_high_alert(hdc302x_handle_t *handle, uint16_t threshold);
549
561uint8_t hdc302x_write_clear_high_alert(hdc302x_handle_t *handle, uint16_t threshold);
562
575uint8_t hdc302x_read_set_low_alert(hdc302x_handle_t *handle, uint16_t *threshold);
576
589uint8_t hdc302x_read_set_high_alert(hdc302x_handle_t *handle, uint16_t *threshold);
590
603uint8_t hdc302x_read_clear_low_alert(hdc302x_handle_t *handle, uint16_t *threshold);
604
617uint8_t hdc302x_read_clear_high_alert(hdc302x_handle_t *handle, uint16_t *threshold);
618
630
642
673uint8_t hdc302x_set_heater_power(hdc302x_handle_t *handle, uint16_t power);
674
687uint8_t hdc302x_get_heater_power(hdc302x_handle_t *handle, uint16_t *power);
688
701uint8_t hdc302x_get_nist_id(hdc302x_handle_t *handle, uint8_t id[6]);
702
715uint8_t hdc302x_get_status(hdc302x_handle_t *handle, uint16_t *status);
716
728
740
753
766uint8_t hdc302x_nvm_read_temperature_humidity_offset(hdc302x_handle_t *handle, uint16_t *offset);
767
779uint8_t hdc302x_nvm_program_config(hdc302x_handle_t *handle, uint16_t config);
780
793uint8_t hdc302x_nvm_read_config(hdc302x_handle_t *handle, uint16_t *config);
794
807uint8_t hdc302x_alert_threshold_convert_to_register(hdc302x_handle_t *handle, float temperature_deg,
808 float humidity_percentage, uint16_t *reg);
809
823 float *temperature_deg, float *humidity_percentage);
824
839uint8_t hdc302x_offset_convert_to_register(hdc302x_handle_t *handle, uint8_t temperature_symbol, float temperature_deg,
840 uint8_t humidity_symbol, float humidity_percentage, uint16_t *reg);
841
856uint8_t hdc302x_offset_convert_to_data(hdc302x_handle_t *handle, uint16_t reg,
857 uint8_t *temperature_symbol, float *temperature_deg,
858 uint8_t *humidity_symbol, float *humidity_percentage);
859
863
870
884uint8_t hdc302x_set_reg(hdc302x_handle_t *handle, uint16_t command, uint8_t *buf, uint16_t len);
885
899uint8_t hdc302x_get_reg(hdc302x_handle_t *handle, uint16_t command, uint8_t *buf, uint16_t len);
900
904
908
909#ifdef __cplusplus
910}
911#endif
912
913#endif
uint8_t hdc302x_alert_threshold_convert_to_data(hdc302x_handle_t *handle, uint16_t reg, float *temperature_deg, float *humidity_percentage)
convert the alert threshold to the real data
uint8_t hdc302x_get_addr(hdc302x_handle_t *handle, hdc302x_address_t *addr)
get the iic address
uint8_t hdc302x_continuous_read(hdc302x_handle_t *handle, uint16_t *temperature_raw, float *temperature_s, uint16_t *humidity_raw, float *humidity_s)
continuous read
uint8_t hdc302x_read_clear_high_alert(hdc302x_handle_t *handle, uint16_t *threshold)
read clear high alert
uint8_t hdc302x_read_set_low_alert(hdc302x_handle_t *handle, uint16_t *threshold)
read set low alert
hdc302x_status_t
hdc302x status enumeration definition
uint8_t hdc302x_nvm_program_temperature_humidity_offset(hdc302x_handle_t *handle, uint16_t offset)
nvm program temperature humidity offset
uint8_t hdc302x_disable_heater(hdc302x_handle_t *handle)
disable heater
uint8_t hdc302x_set_heater_power(hdc302x_handle_t *handle, uint16_t power)
set heater power
uint8_t hdc302x_continuous_read_humidity(hdc302x_handle_t *handle, uint16_t *humidity_raw, float *humidity_s)
continuous read humidity
uint8_t hdc302x_nvm_read_temperature_humidity_offset(hdc302x_handle_t *handle, uint16_t *offset)
nvm read temperature humidity offset
uint8_t hdc302x_offset_convert_to_data(hdc302x_handle_t *handle, uint16_t reg, uint8_t *temperature_symbol, float *temperature_deg, uint8_t *humidity_symbol, float *humidity_percentage)
convert the offset to the real data
struct hdc302x_info_s hdc302x_info_t
hdc302x information structure definition
uint8_t hdc302x_enable_heater(hdc302x_handle_t *handle)
enable heater
uint8_t hdc302x_set_addr(hdc302x_handle_t *handle, hdc302x_address_t addr)
set the iic address
uint8_t hdc302x_deinit(hdc302x_handle_t *handle)
close the chip
hdc302x_address_t
hdc302x address enumeration definition
uint8_t hdc302x_irq_handler(hdc302x_handle_t *handle)
irq handler
uint8_t hdc302x_offset_convert_to_register(hdc302x_handle_t *handle, uint8_t temperature_symbol, float temperature_deg, uint8_t humidity_symbol, float humidity_percentage, uint16_t *reg)
convert the offset to the register raw data
uint8_t hdc302x_single_read(hdc302x_handle_t *handle, uint16_t *temperature_raw, float *temperature_s, uint16_t *humidity_raw, float *humidity_s)
single read
uint8_t hdc302x_set_low_power_mode(hdc302x_handle_t *handle, hdc302x_low_power_mode_t mode)
set low power mode
uint8_t hdc302x_get_nist_id(hdc302x_handle_t *handle, uint8_t id[6])
get nist id
uint8_t hdc302x_read_temperature_min(hdc302x_handle_t *handle, uint16_t *temperature_raw, float *temperature_s)
read temperature min
hdc302x_auto_mode_t
hdc302x auto mode enumeration definition
uint8_t hdc302x_set_auto_mode(hdc302x_handle_t *handle, hdc302x_auto_mode_t mode)
set auto mode
uint8_t hdc302x_alert_threshold_convert_to_register(hdc302x_handle_t *handle, float temperature_deg, float humidity_percentage, uint16_t *reg)
convert the alert threshold to the register raw data
uint8_t hdc302x_get_low_power_mode(hdc302x_handle_t *handle, hdc302x_low_power_mode_t *mode)
get low power mode
uint8_t hdc302x_read_humidity_min(hdc302x_handle_t *handle, uint16_t *humidity_raw, float *humidity_s)
read humidity min
uint8_t hdc302x_read_set_high_alert(hdc302x_handle_t *handle, uint16_t *threshold)
read set high alert
uint8_t hdc302x_nvm_read_config(hdc302x_handle_t *handle, uint16_t *config)
nvm read config
uint8_t hdc302x_init(hdc302x_handle_t *handle)
initialize the chip
uint8_t hdc302x_write_clear_low_alert(hdc302x_handle_t *handle, uint16_t threshold)
write clear low alert
uint8_t hdc302x_get_auto_mode(hdc302x_handle_t *handle, hdc302x_auto_mode_t *mode)
get auto mode
hdc302x_low_power_mode_t
hdc302x low power mode enumeration definition
uint8_t hdc302x_clear_status(hdc302x_handle_t *handle)
clear status
uint8_t hdc302x_write_set_low_alert(hdc302x_handle_t *handle, uint16_t threshold)
write set low alert
uint8_t hdc302x_read_temperature_max(hdc302x_handle_t *handle, uint16_t *temperature_raw, float *temperature_s)
read temperature max
uint8_t hdc302x_stop_continuous_read(hdc302x_handle_t *handle)
stop continuous read
struct hdc302x_handle_s hdc302x_handle_t
hdc302x handle structure definition
uint8_t hdc302x_read_clear_low_alert(hdc302x_handle_t *handle, uint16_t *threshold)
read clear low alert
uint8_t hdc302x_soft_reset(hdc302x_handle_t *handle)
soft reset
uint8_t hdc302x_nvm_program_alert_threshold(hdc302x_handle_t *handle)
nvm program alert threshold
uint8_t hdc302x_get_status(hdc302x_handle_t *handle, uint16_t *status)
get status
uint8_t hdc302x_read_humidity_max(hdc302x_handle_t *handle, uint16_t *humidity_raw, float *humidity_s)
read humidity max
uint8_t hdc302x_get_heater_power(hdc302x_handle_t *handle, uint16_t *power)
get heater power
uint8_t hdc302x_info(hdc302x_info_t *info)
get chip's information
uint8_t hdc302x_start_continuous_read(hdc302x_handle_t *handle)
start continuous read
uint8_t hdc302x_write_clear_high_alert(hdc302x_handle_t *handle, uint16_t threshold)
write clear high alert
uint8_t hdc302x_nvm_program_config(hdc302x_handle_t *handle, uint16_t config)
nvm program config
uint8_t hdc302x_write_set_high_alert(hdc302x_handle_t *handle, uint16_t threshold)
write set high alert
@ HDC302X_STATUS_OVERALL_ALERT
@ HDC302X_STATUS_T_HIGH_TRACKING_ALERT
@ HDC302X_STATUS_RH_LOW_TRACKING_ALERT
@ HDC302X_STATUS_T_LOW_TRACKING_ALERT
@ HDC302X_STATUS_HEATER
@ HDC302X_STATUS_CHECKSUM_VERY
@ HDC302X_STATUS_RH_HIGH_TRACKING_ALERT
@ HDC302X_STATUS_DEVICE_RESET_DETECTED
@ HDC302X_STATUS_T_TRACKING_ALERT
@ HDC302X_STATUS_RH_TRACKING_ALERT
@ HDC302X_ADDRESS_00
@ HDC302X_ADDRESS_01
@ HDC302X_ADDRESS_11
@ HDC302X_ADDRESS_10
@ HDC302X_AUTO_MODE_2_HZ
@ HDC302X_AUTO_MODE_10_HZ
@ HDC302X_AUTO_MODE_0P5_HZ
@ HDC302X_AUTO_MODE_1_HZ
@ HDC302X_AUTO_MODE_4_HZ
@ HDC302X_LOW_POWER_MODE_3
@ HDC302X_LOW_POWER_MODE_2
@ HDC302X_LOW_POWER_MODE_0
@ HDC302X_LOW_POWER_MODE_1
uint8_t hdc302x_get_reg(hdc302x_handle_t *handle, uint16_t command, uint8_t *buf, uint16_t len)
get the chip register
uint8_t hdc302x_set_reg(hdc302x_handle_t *handle, uint16_t command, uint8_t *buf, uint16_t len)
set the chip register
hdc302x handle structure definition
void(* delay_ms)(uint32_t ms)
uint8_t(* iic_read_address16)(uint8_t addr, uint16_t reg, uint8_t *buf, uint16_t len)
void(* debug_print)(const char *const fmt,...)
void(* receive_callback)(uint16_t type)
uint8_t(* iic_init)(void)
uint8_t(* iic_write_address16)(uint8_t addr, uint16_t reg, uint8_t *buf, uint16_t len)
uint8_t(* iic_deinit)(void)
hdc302x information structure definition
uint32_t driver_version
char manufacturer_name[32]