LibDriver STCC4
Loading...
Searching...
No Matches
driver_stcc4_register_test.c
Go to the documentation of this file.
1
36
38#include <stdlib.h>
39
40static stcc4_handle_t gs_handle;
41
51{
52 uint8_t res;
53 uint16_t reg;
54 uint16_t result;
55 uint16_t correct_co2;
56 uint32_t product_id;
57 float f;
58 float f_check;
59 uint8_t unique_serial_number[8];
60 stcc4_address_t address_check;
61 stcc4_info_t info;
62
63 /* link functions */
71
72 /* stcc4 info */
73 res = stcc4_info(&info);
74 if (res != 0)
75 {
76 stcc4_interface_debug_print("stcc4: get info failed.\n");
77
78 return 1;
79 }
80 else
81 {
82 /* print chip information */
83 stcc4_interface_debug_print("stcc4: chip is %s.\n", info.chip_name);
84 stcc4_interface_debug_print("stcc4: manufacturer is %s.\n", info.manufacturer_name);
85 stcc4_interface_debug_print("stcc4: interface is %s.\n", info.interface);
86 stcc4_interface_debug_print("stcc4: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
87 stcc4_interface_debug_print("stcc4: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
88 stcc4_interface_debug_print("stcc4: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
89 stcc4_interface_debug_print("stcc4: max current is %0.2fmA.\n", info.max_current_ma);
90 stcc4_interface_debug_print("stcc4: max temperature is %0.1fC.\n", info.temperature_max);
91 stcc4_interface_debug_print("stcc4: min temperature is %0.1fC.\n", info.temperature_min);
92 }
93
94 /* start register test */
95 stcc4_interface_debug_print("stcc4: start register test.\n");
96
97 /* stcc4_set_address_pin/stcc4_get_address_pin test */
98 stcc4_interface_debug_print("stcc4: stcc4_set_address_pin/stcc4_get_address_pin test.\n");
99
100 /* set address pin 0 */
101 res = stcc4_set_address_pin(&gs_handle, STCC4_ADDRESS_0);
102 if (res != 0)
103 {
104 stcc4_interface_debug_print("stcc4: set address pin failed.\n");
105
106 return 1;
107 }
108 stcc4_interface_debug_print("stcc4: set address pin 0.\n");
109 res = stcc4_get_address_pin(&gs_handle, &address_check);
110 if (res != 0)
111 {
112 stcc4_interface_debug_print("stcc4: get address pin failed.\n");
113
114 return 1;
115 }
116 stcc4_interface_debug_print("stcc4: check address pin %s.\n", (address_check == STCC4_ADDRESS_0) ? "ok" : "error");
117
118 /* set address pin 1 */
119 res = stcc4_set_address_pin(&gs_handle, STCC4_ADDRESS_1);
120 if (res != 0)
121 {
122 stcc4_interface_debug_print("stcc4: set address pin failed.\n");
123
124 return 1;
125 }
126 stcc4_interface_debug_print("stcc4: set address pin 1.\n");
127 res = stcc4_get_address_pin(&gs_handle, &address_check);
128 if (res != 0)
129 {
130 stcc4_interface_debug_print("stcc4: get address pin failed.\n");
131
132 return 1;
133 }
134 stcc4_interface_debug_print("stcc4: check address pin %s.\n", (address_check == STCC4_ADDRESS_1) ? "ok" : "error");
135
136 /* set address pin */
137 res = stcc4_set_address_pin(&gs_handle, address);
138 if (res != 0)
139 {
140 stcc4_interface_debug_print("stcc4: set address pin failed.\n");
141
142 return 1;
143 }
144
145 /* init */
146 res = stcc4_init(&gs_handle);
147 if (res != 0)
148 {
149 stcc4_interface_debug_print("stcc4: init failed.\n");
150
151 return 1;
152 }
153
154 /* stcc4_get_product_id test */
155 stcc4_interface_debug_print("stcc4: stcc4_get_product_id test.\n");
156
157 /* get product id */
158 res = stcc4_get_product_id(&gs_handle, &product_id, unique_serial_number);
159 if (res != 0)
160 {
161 stcc4_interface_debug_print("stcc4: get product id failed.\n");
162 (void)stcc4_deinit(&gs_handle);
163
164 return 1;
165 }
166
167 /* output */
168 stcc4_interface_debug_print("stcc4: product id is 0x%08X.\n", product_id);
169 stcc4_interface_debug_print("stcc4: serial number is 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X.\n",
170 unique_serial_number[0], unique_serial_number[1], unique_serial_number[2], unique_serial_number[3],
171 unique_serial_number[4], unique_serial_number[5], unique_serial_number[6], unique_serial_number[7]);
172
173 /* stcc4_set_rht_compensation test */
174 stcc4_interface_debug_print("stcc4: stcc4_set_rht_compensation test.\n");
175
176 reg = rand() % 0xFFFFU;
177 res = stcc4_set_rht_compensation(&gs_handle, reg, reg);
178 if (res != 0)
179 {
180 stcc4_interface_debug_print("stcc4: set rht compensation failed.\n");
181 (void)stcc4_deinit(&gs_handle);
182
183 return 1;
184 }
185 stcc4_interface_debug_print("stcc4: check rht compensation %s.\n", (res == 0) ? "ok" : "error");
186
187 /* stcc4_set_pressure_compensation test */
188 stcc4_interface_debug_print("stcc4: stcc4_set_pressure_compensation test.\n");
189
190 reg = rand() % 0xFFFFU;
191 res = stcc4_set_pressure_compensation(&gs_handle, reg);
192 if (res != 0)
193 {
194 stcc4_interface_debug_print("stcc4: set pressure compensation failed.\n");
195 (void)stcc4_deinit(&gs_handle);
196
197 return 1;
198 }
199 stcc4_interface_debug_print("stcc4: check pressure compensation %s.\n", (res == 0) ? "ok" : "error");
200
201 /* stcc4_perform_conditioning test */
202 stcc4_interface_debug_print("stcc4: stcc4_perform_conditioning test.\n");
203
204 /* perform conditioning */
205 res = stcc4_perform_conditioning(&gs_handle);
206 if (res != 0)
207 {
208 stcc4_interface_debug_print("stcc4: perform conditioning failed.\n");
209 (void)stcc4_deinit(&gs_handle);
210
211 return 1;
212 }
213 stcc4_interface_debug_print("stcc4: check perform conditioning %s.\n", (res == 0) ? "ok" : "error");
214
215 /* stcc4_perform_self_test test */
216 stcc4_interface_debug_print("stcc4: stcc4_perform_self_test test.\n");
217
218 /* perform self test */
219 res = stcc4_perform_self_test(&gs_handle, &result);
220 if (res != 0)
221 {
222 stcc4_interface_debug_print("stcc4: perform self test failed.\n");
223 (void)stcc4_deinit(&gs_handle);
224
225 return 1;
226 }
227
228 /* output */
229 stcc4_interface_debug_print("stcc4: self test result is 0x%04X.\n", result);
230 stcc4_interface_debug_print("stcc4: check perform self test %s.\n", (res == 0) ? "ok" : "error");
231
232 /* stcc4_perform_forced_recalibration test */
233 stcc4_interface_debug_print("stcc4: stcc4_perform_forced_recalibration test.\n");
234
235 /* perform forced recalibration */
236 reg = rand() % 0xFU;
237 res = stcc4_perform_forced_recalibration(&gs_handle, reg, &correct_co2);
238 if (res != 0)
239 {
240 stcc4_interface_debug_print("stcc4: perform forced recalibration failed.\n");
241 (void)stcc4_deinit(&gs_handle);
242
243 return 1;
244 }
245
246 /* output */
247 stcc4_interface_debug_print("stcc4: correct co2 is 0x%04X.\n", correct_co2);
248 stcc4_interface_debug_print("stcc4: check perform forced recalibration %s.\n", (res == 0) ? "ok" : "error");
249
250 /* stcc4_perform_factory_reset test */
251 stcc4_interface_debug_print("stcc4: stcc4_perform_factory_reset test.\n");
252
253 /* perform factory reset */
254 res = stcc4_perform_factory_reset(&gs_handle);
255 if (res != 0)
256 {
257 stcc4_interface_debug_print("stcc4: perform factory reset failed.\n");
258 (void)stcc4_deinit(&gs_handle);
259
260 return 1;
261 }
262 stcc4_interface_debug_print("stcc4: check perform factory reset %s.\n", (res == 0) ? "ok" : "error");
263
264 /* stcc4_enable_testing_mode test */
265 stcc4_interface_debug_print("stcc4: stcc4_enable_testing_mode test.\n");
266
267 /* enable testing mode */
268 res = stcc4_enable_testing_mode(&gs_handle);
269 if (res != 0)
270 {
271 stcc4_interface_debug_print("stcc4: enable testing mode failed.\n");
272 (void)stcc4_deinit(&gs_handle);
273
274 return 1;
275 }
276 stcc4_interface_debug_print("stcc4: check enable testing mode %s.\n", (res == 0) ? "ok" : "error");
277
278 /* stcc4_disable_testing_mode test */
279 stcc4_interface_debug_print("stcc4: stcc4_disable_testing_mode test.\n");
280
281 /* disable testing mode */
282 res = stcc4_disable_testing_mode(&gs_handle);
283 if (res != 0)
284 {
285 stcc4_interface_debug_print("stcc4: disable testing mode failed.\n");
286 (void)stcc4_deinit(&gs_handle);
287
288 return 1;
289 }
290 stcc4_interface_debug_print("stcc4: check disable testing mode %s.\n", (res == 0) ? "ok" : "error");
291
292 /* stcc4_frc_co2_convert_to_register/stcc4_frc_co2_convert_to_data test */
293 stcc4_interface_debug_print("stcc4: stcc4_frc_co2_convert_to_register/stcc4_frc_co2_convert_to_data test.\n");
294
295 f = (float)(rand() % 1000) / 10.0f;
296 res = stcc4_frc_co2_convert_to_register(&gs_handle, f, &reg);
297 if (res != 0)
298 {
299 stcc4_interface_debug_print("stcc4: frc co2 convert to register failed.\n");
300 (void)stcc4_deinit(&gs_handle);
301
302 return 1;
303 }
304 stcc4_interface_debug_print("stcc4: set frc co2 %.02fppm.\n", f);
305 res = stcc4_frc_co2_convert_to_data(&gs_handle, reg, &f_check);
306 if (res != 0)
307 {
308 stcc4_interface_debug_print("stcc4: frc co2 convert to data failed.\n");
309 (void)stcc4_deinit(&gs_handle);
310
311 return 1;
312 }
313 stcc4_interface_debug_print("stcc4: check frc co2 %.02fppm.\n", f_check);
314
315 /* stcc4_humidity_convert_to_register/stcc4_humidity_convert_to_data test */
316 stcc4_interface_debug_print("stcc4: stcc4_humidity_convert_to_register/stcc4_humidity_convert_to_data test.\n");
317
318 f = (float)(rand() % 1000) / 10.0f;
319 res = stcc4_humidity_convert_to_register(&gs_handle, f, &reg);
320 if (res != 0)
321 {
322 stcc4_interface_debug_print("stcc4: humidity convert to register failed.\n");
323 (void)stcc4_deinit(&gs_handle);
324
325 return 1;
326 }
327 stcc4_interface_debug_print("stcc4: set humidity %.02f%%.\n", f);
328 res = stcc4_humidity_convert_to_data(&gs_handle, reg, &f_check);
329 if (res != 0)
330 {
331 stcc4_interface_debug_print("stcc4: humidity convert to data failed.\n");
332 (void)stcc4_deinit(&gs_handle);
333
334 return 1;
335 }
336 stcc4_interface_debug_print("stcc4: check humidity %.02f%%.\n", f_check);
337
338 /* stcc4_temperature_convert_to_register/stcc4_temperature_convert_to_data test */
339 stcc4_interface_debug_print("stcc4: stcc4_temperature_convert_to_register/stcc4_temperature_convert_to_data test.\n");
340
341 f = (float)(rand() % 1000) / 10.0f;
342 res = stcc4_temperature_convert_to_register(&gs_handle, f, &reg);
343 if (res != 0)
344 {
345 stcc4_interface_debug_print("stcc4: temperature convert to register failed.\n");
346 (void)stcc4_deinit(&gs_handle);
347
348 return 1;
349 }
350 stcc4_interface_debug_print("stcc4: set temperature %.02fC.\n", f);
351 res = stcc4_temperature_convert_to_data(&gs_handle, reg, &f_check);
352 if (res != 0)
353 {
354 stcc4_interface_debug_print("stcc4: temperature convert to data failed.\n");
355 (void)stcc4_deinit(&gs_handle);
356
357 return 1;
358 }
359 stcc4_interface_debug_print("stcc4: check temperature %.02fC.\n", f_check);
360
361 /* stcc4_pressure_convert_to_register/stcc4_pressure_convert_to_data test */
362 stcc4_interface_debug_print("stcc4: stcc4_pressure_convert_to_register/stcc4_pressure_convert_to_data test.\n");
363
364 f = (float)(rand() % 10000);
365 res = stcc4_pressure_convert_to_register(&gs_handle, f, &reg);
366 if (res != 0)
367 {
368 stcc4_interface_debug_print("stcc4: pressure convert to register failed.\n");
369 (void)stcc4_deinit(&gs_handle);
370
371 return 1;
372 }
373 stcc4_interface_debug_print("stcc4: set pressure %.02fpa.\n", f);
374 res = stcc4_pressure_convert_to_data(&gs_handle, reg, &f_check);
375 if (res != 0)
376 {
377 stcc4_interface_debug_print("stcc4: pressure convert to data failed.\n");
378 (void)stcc4_deinit(&gs_handle);
379
380 return 1;
381 }
382 stcc4_interface_debug_print("stcc4: check pressure %.02fpa.\n", f_check);
383
384 /* stcc4_enter_sleep_mode test */
385 stcc4_interface_debug_print("stcc4: stcc4_enter_sleep_mode test.\n");
386
387 /* enter sleep mode */
388 res = stcc4_enter_sleep_mode(&gs_handle);
389 if (res != 0)
390 {
391 stcc4_interface_debug_print("stcc4: enter sleep mode failed.\n");
392 (void)stcc4_deinit(&gs_handle);
393
394 return 1;
395 }
396 stcc4_interface_debug_print("stcc4: check enter sleep mode %s.\n", (res == 0) ? "ok" : "error");
397
398 /* stcc4_exit_sleep_mode test */
399 stcc4_interface_debug_print("stcc4: stcc4_exit_sleep_mode test.\n");
400
401 /* exit sleep mode */
402 res = stcc4_exit_sleep_mode(&gs_handle);
403 if (res != 0)
404 {
405 stcc4_interface_debug_print("stcc4: exit sleep mode failed.\n");
406 (void)stcc4_deinit(&gs_handle);
407
408 return 1;
409 }
410 stcc4_interface_debug_print("stcc4: check exit sleep mode %s.\n", (res == 0) ? "ok" : "error");
411
412 /* stcc4_perform_soft_reset test */
413 stcc4_interface_debug_print("stcc4: stcc4_perform_soft_reset test.\n");
414
415 /* perform soft reset */
416 res = stcc4_perform_soft_reset(&gs_handle);
417 if (res != 0)
418 {
419 stcc4_interface_debug_print("stcc4: perform soft reset failed.\n");
420 (void)stcc4_deinit(&gs_handle);
421
422 return 1;
423 }
424 stcc4_interface_debug_print("stcc4: check perform soft reset %s.\n", (res == 0) ? "ok" : "error");
425
426 /* finish register test */
427 stcc4_interface_debug_print("stcc4: finish register test.\n");
428 (void)stcc4_deinit(&gs_handle);
429
430 return 0;
431}
driver stcc4 register test header file
uint8_t stcc4_humidity_convert_to_register(stcc4_handle_t *handle, float percentage, uint16_t *reg)
convert the humidity to the register raw data
uint8_t stcc4_perform_self_test(stcc4_handle_t *handle, uint16_t *result)
perform self test
uint8_t stcc4_frc_co2_convert_to_register(stcc4_handle_t *handle, float ppm, uint16_t *reg)
convert the frc co2 to the register raw data
uint8_t stcc4_pressure_convert_to_data(stcc4_handle_t *handle, uint16_t reg, float *pa)
convert the register raw data to pressure
uint8_t stcc4_set_rht_compensation(stcc4_handle_t *handle, uint16_t temperature_raw, uint16_t humidity_raw)
set rht compensation
uint8_t stcc4_exit_sleep_mode(stcc4_handle_t *handle)
exit sleep mode
uint8_t stcc4_deinit(stcc4_handle_t *handle)
close the chip
uint8_t stcc4_temperature_convert_to_register(stcc4_handle_t *handle, float deg, uint16_t *reg)
convert the temperature to the register raw data
uint8_t stcc4_perform_conditioning(stcc4_handle_t *handle)
perform conditioning
uint8_t stcc4_pressure_convert_to_register(stcc4_handle_t *handle, float pa, uint16_t *reg)
convert the pressure to the register raw data
uint8_t stcc4_frc_co2_convert_to_data(stcc4_handle_t *handle, uint16_t reg, float *ppm)
convert the register raw data to frc co2 ppm
uint8_t stcc4_set_pressure_compensation(stcc4_handle_t *handle, uint16_t pressure_raw)
set pressure compensation
uint8_t stcc4_enable_testing_mode(stcc4_handle_t *handle)
enable testing mode
uint8_t stcc4_info(stcc4_info_t *info)
get chip information
uint8_t stcc4_perform_factory_reset(stcc4_handle_t *handle)
perform factory reset
struct stcc4_handle_s stcc4_handle_t
stcc4 handle structure definition
stcc4_address_t
stcc4 address enumeration definition
uint8_t stcc4_enter_sleep_mode(stcc4_handle_t *handle)
enter sleep mode
uint8_t stcc4_perform_soft_reset(stcc4_handle_t *handle)
perform soft reset
uint8_t stcc4_init(stcc4_handle_t *handle)
initialize the chip
uint8_t stcc4_temperature_convert_to_data(stcc4_handle_t *handle, uint16_t reg, float *deg)
convert the register raw data to temperature
uint8_t stcc4_get_address_pin(stcc4_handle_t *handle, stcc4_address_t *address)
get address pin
uint8_t stcc4_set_address_pin(stcc4_handle_t *handle, stcc4_address_t address)
set address pin
uint8_t stcc4_humidity_convert_to_data(stcc4_handle_t *handle, uint16_t reg, float *percentage)
convert the register raw data to humidity
uint8_t stcc4_get_product_id(stcc4_handle_t *handle, uint32_t *product_id, uint8_t unique_serial_number[8])
get product id
uint8_t stcc4_disable_testing_mode(stcc4_handle_t *handle)
disable testing mode
uint8_t stcc4_perform_forced_recalibration(stcc4_handle_t *handle, uint16_t target_co2, uint16_t *correct_co2)
perform forced recalibration
struct stcc4_info_s stcc4_info_t
stcc4 information structure definition
@ STCC4_ADDRESS_1
@ STCC4_ADDRESS_0
uint8_t stcc4_interface_iic_write_cmd(uint8_t addr, uint8_t *buf, uint16_t len)
interface iic bus write command
void stcc4_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t stcc4_interface_iic_init(void)
interface iic bus init
uint8_t stcc4_interface_iic_deinit(void)
interface iic bus deinit
uint8_t stcc4_interface_iic_read_cmd(uint8_t addr, uint8_t *buf, uint16_t len)
interface iic bus read command
void stcc4_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t stcc4_register_test(stcc4_address_t address)
register test
float temperature_max
float supply_voltage_max_v
uint32_t driver_version
float temperature_min
float max_current_ma
char manufacturer_name[32]
float supply_voltage_min_v
char interface[8]
char chip_name[32]