LibDriver STTS22H
Loading...
Searching...
No Matches
driver_stts22h_interrupt_test.c
Go to the documentation of this file.
1
36
38
39static stts22h_handle_t gs_handle;
40static volatile uint8_t gs_flag;
41
47static void a_receive_callback(uint8_t type)
48{
49 switch (type)
50 {
52 {
53 int16_t raw;
54 float celsius_deg = 0.0f;
55
56 stts22h_interface_debug_print("stts22h: irq under low limit.\n");
57 (void)stts22h_continuous_read(&gs_handle, &raw, &celsius_deg);
58 stts22h_interface_debug_print("stts22h: temperature is %0.2fC.\n", celsius_deg);
59 gs_flag = 1;
60
61 break;
62 }
64 {
65 int16_t raw;
66 float celsius_deg = 0.0f;
67
68 stts22h_interface_debug_print("stts22h: irq over high limit.\n");
69 (void)stts22h_continuous_read(&gs_handle, &raw, &celsius_deg);
70 stts22h_interface_debug_print("stts22h: temperature is %0.2fC.\n", celsius_deg);
71 gs_flag = 1;
72
73 break;
74 }
75 default :
76 {
77 stts22h_interface_debug_print("stts22h: unknown code.\n");
78
79 break;
80 }
81 }
82}
83
92{
93 if (stts22h_irq_handler(&gs_handle) != 0)
94 {
95 return 1;
96 }
97
98 return 0;
99}
100
111uint8_t stts22h_interrupt_test(stts22h_address_t addr_pin, float low_celsius_deg, float high_celsius_deg)
112{
113 uint8_t res;
114 uint8_t reg;
115 stts22h_info_t info;
116
117 /* link interface function */
125 DRIVER_STTS22H_LINK_RECEIVE_CALLBACK(&gs_handle, a_receive_callback);
126
127 /* get stts22h info */
128 res = stts22h_info(&info);
129 if (res != 0)
130 {
131 stts22h_interface_debug_print("stts22h: get info failed.\n");
132
133 return 1;
134 }
135 else
136 {
137 /* print chip information */
138 stts22h_interface_debug_print("stts22h: chip is %s.\n", info.chip_name);
139 stts22h_interface_debug_print("stts22h: manufacturer is %s.\n", info.manufacturer_name);
140 stts22h_interface_debug_print("stts22h: interface is %s.\n", info.interface);
141 stts22h_interface_debug_print("stts22h: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
142 stts22h_interface_debug_print("stts22h: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
143 stts22h_interface_debug_print("stts22h: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
144 stts22h_interface_debug_print("stts22h: max current is %0.2fmA.\n", info.max_current_ma);
145 stts22h_interface_debug_print("stts22h: max temperature is %0.1fC.\n", info.temperature_max);
146 stts22h_interface_debug_print("stts22h: min temperature is %0.1fC.\n", info.temperature_min);
147 }
148
149 /* set addr pin */
150 res = stts22h_set_addr_pin(&gs_handle, addr_pin);
151 if (res != 0)
152 {
153 stts22h_interface_debug_print("stts22h: set addr pin failed.\n");
154
155 return 1;
156 }
157
158 /* stts22h init */
159 res = stts22h_init(&gs_handle);
160 if (res != 0)
161 {
162 stts22h_interface_debug_print("stts22h: init failed.\n");
163
164 return 1;
165 }
166
167 /* enable smbus timeout */
169 if (res != 0)
170 {
171 stts22h_interface_debug_print("stts22h: set disable smbus timeout failed.\n");
172 (void)stts22h_deinit(&gs_handle);
173
174 return 1;
175 }
176
177 /* disable block data update */
179 if (res != 0)
180 {
181 stts22h_interface_debug_print("stts22h: set block data update failed.\n");
182 (void)stts22h_deinit(&gs_handle);
183
184 return 1;
185 }
186
187 /* enable iic address auto increment */
189 if (res != 0)
190 {
191 stts22h_interface_debug_print("stts22h: set iic address auto increment failed.\n");
192 (void)stts22h_deinit(&gs_handle);
193
194 return 1;
195 }
196
197 /* set output data rate 1hz */
199 if (res != 0)
200 {
201 stts22h_interface_debug_print("stts22h: set output data rate failed.\n");
202 (void)stts22h_deinit(&gs_handle);
203
204 return 1;
205 }
206
207 /* temperature convert to register */
208 res = stts22h_temperature_convert_to_register(&gs_handle, low_celsius_deg, &reg);
209 if (res != 0)
210 {
211 stts22h_interface_debug_print("stts22h: temperature convert to register failed.\n");
212 (void)stts22h_deinit(&gs_handle);
213
214 return 1;
215 }
216
217 /* set temperature low limit */
218 res = stts22h_set_temperature_low_limit(&gs_handle, reg);
219 if (res != 0)
220 {
221 stts22h_interface_debug_print("stts22h: set temperature low limit failed.\n");
222 (void)stts22h_deinit(&gs_handle);
223
224 return 1;
225 }
226
227 /* temperature convert to register */
228 res = stts22h_temperature_convert_to_register(&gs_handle, high_celsius_deg, &reg);
229 if (res != 0)
230 {
231 stts22h_interface_debug_print("stts22h: temperature convert to register failed.\n");
232 (void)stts22h_deinit(&gs_handle);
233
234 return 1;
235 }
236
237 /* set temperature high limit */
238 res = stts22h_set_temperature_high_limit(&gs_handle, reg);
239 if (res != 0)
240 {
241 stts22h_interface_debug_print("stts22h: set temperature high limit failed.\n");
242 (void)stts22h_deinit(&gs_handle);
243
244 return 1;
245 }
246
247 /* wait for interrupt */
248 gs_flag = 0;
249 while (gs_flag == 0)
250 {
251 }
252 stts22h_interface_debug_print("stts22h: find interrupt.\n");
253
254 /* finish interrupt test */
255 stts22h_interface_debug_print("stts22h: finish interrupt test.\n");
256 (void)stts22h_deinit(&gs_handle);
257
258 return 0;
259}
driver stts22h interrupt test header file
uint8_t stts22h_init(stts22h_handle_t *handle)
initialize the chip
uint8_t stts22h_set_temperature_low_limit(stts22h_handle_t *handle, uint8_t raw)
set temperature low limit
uint8_t stts22h_set_iic_address_auto_increment(stts22h_handle_t *handle, stts22h_bool_t enable)
enable or disable iic address auto increment
uint8_t stts22h_set_temperature_high_limit(stts22h_handle_t *handle, uint8_t raw)
set temperature high limit
struct stts22h_handle_s stts22h_handle_t
stts22h handle structure definition
uint8_t stts22h_set_addr_pin(stts22h_handle_t *handle, stts22h_address_t addr_pin)
set the iic address pin
uint8_t stts22h_set_output_data_rate(stts22h_handle_t *handle, stts22h_output_data_rate_t rate)
set output data rate
uint8_t stts22h_deinit(stts22h_handle_t *handle)
close the chip
uint8_t stts22h_info(stts22h_info_t *info)
get chip's information
uint8_t stts22h_set_block_data_update(stts22h_handle_t *handle, stts22h_bool_t enable)
enable or disable block data update
uint8_t stts22h_irq_handler(stts22h_handle_t *handle)
irq handler
uint8_t stts22h_set_disable_smbus_timeout(stts22h_handle_t *handle, stts22h_bool_t enable)
enable or disable disable smbus timeout
uint8_t stts22h_continuous_read(stts22h_handle_t *handle, int16_t *raw, float *celsius_deg)
read data from the chip continuously
uint8_t stts22h_temperature_convert_to_register(stts22h_handle_t *handle, float celsius_deg, uint8_t *reg)
convert the temperature to the register raw data
stts22h_address_t
stts22h address enumeration definition
struct stts22h_info_s stts22h_info_t
stts22h information structure definition
@ STTS22H_STATUS_OVER_HIGH_LIMIT
@ STTS22H_STATUS_UNDER_LOW_LIMIT
@ STTS22H_BOOL_TRUE
@ STTS22H_BOOL_FALSE
@ STTS22H_OUTPUT_DATA_RATE_1HZ
uint8_t stts22h_interface_iic_deinit(void)
interface iic bus deinit
void stts22h_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t stts22h_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
void stts22h_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t stts22h_interface_iic_init(void)
interface iic bus init
uint8_t stts22h_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
uint8_t stts22h_interrupt_test(stts22h_address_t addr_pin, float low_celsius_deg, float high_celsius_deg)
interrupt test
uint8_t stts22h_interrupt_test_irq_handler(void)
interrupt test irq
uint32_t driver_version
char manufacturer_name[32]