LibDriver SCD30
Loading...
Searching...
No Matches
driver_scd30_register_test.c
Go to the documentation of this file.
1
36
38#include <stdlib.h>
39
40static scd30_handle_t gs_handle;
41
51{
52 uint8_t res;
53 uint16_t second;
54 uint16_t second_check;
55 uint16_t co2_ppm;
56 uint16_t co2_ppm_check;
57 uint16_t status;
58 uint16_t deg;
59 uint16_t deg_check;
60 uint16_t reg;
61 uint16_t m;
62 uint16_t m_check;
63 uint16_t version;
64 float f;
65 float f_check;
66 scd30_info_t info;
67 scd30_bool_t enable;
68 scd30_interface_t interface_check;
69
70 /* link functions */
83
84 /* get information */
85 res = scd30_info(&info);
86 if (res != 0)
87 {
88 scd30_interface_debug_print("scd30: get info failed.\n");
89
90 return 1;
91 }
92 else
93 {
94 /* print chip info */
95 scd30_interface_debug_print("scd30: chip is %s.\n", info.chip_name);
96 scd30_interface_debug_print("scd30: manufacturer is %s.\n", info.manufacturer_name);
97 scd30_interface_debug_print("scd30: interface is %s.\n", info.interface);
98 scd30_interface_debug_print("scd30: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
99 scd30_interface_debug_print("scd30: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
100 scd30_interface_debug_print("scd30: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
101 scd30_interface_debug_print("scd30: max current is %0.2fmA.\n", info.max_current_ma);
102 scd30_interface_debug_print("scd30: max temperature is %0.1fC.\n", info.temperature_max);
103 scd30_interface_debug_print("scd30: min temperature is %0.1fC.\n", info.temperature_min);
104 }
105
106 /* start register test */
107 scd30_interface_debug_print("scd30: start register test.\n");
108
109 /* scd30_set_interface/scd30_get_interface test */
110 scd30_interface_debug_print("scd30: scd30_set_interface/scd30_get_interface test.\n");
111
112 /* set iic interface */
113 res = scd30_set_interface(&gs_handle, SCD30_INTERFACE_IIC);
114 if (res != 0)
115 {
116 scd30_interface_debug_print("scd30: set interface failed.\n");
117
118 return 1;
119 }
120 scd30_interface_debug_print("scd30: set interface iic.\n");
121 res = scd30_get_interface(&gs_handle, &interface_check);
122 if (res != 0)
123 {
124 scd30_interface_debug_print("gps30: set interface failed.\n");
125
126 return 1;
127 }
128 scd30_interface_debug_print("scd30: check interface %s.\n", interface_check == SCD30_INTERFACE_IIC ? "ok" : "error");
129
130 /* set uart interface */
131 res = scd30_set_interface(&gs_handle, SCD30_INTERFACE_UART);
132 if (res != 0)
133 {
134 scd30_interface_debug_print("scd30: set interface failed.\n");
135
136 return 1;
137 }
138 scd30_interface_debug_print("scd30: set interface uart.\n");
139 res = scd30_get_interface(&gs_handle, &interface_check);
140 if (res != 0)
141 {
142 scd30_interface_debug_print("gps30: set interface failed.\n");
143
144 return 1;
145 }
146 scd30_interface_debug_print("scd30: check interface %s.\n", interface_check == SCD30_INTERFACE_UART ? "ok" : "error");
147
148 /* set the interface */
149 res = scd30_set_interface(&gs_handle, interface);
150 if (res != 0)
151 {
152 scd30_interface_debug_print("scd30: set interface failed.\n");
153
154 return 1;
155 }
156
157 /* init the chip */
158 res = scd30_init(&gs_handle);
159 if (res != 0)
160 {
161 scd30_interface_debug_print("scd30: init failed.\n");
162
163 return 1;
164 }
165
166 /* scd30_set_measurement_interval/scd30_get_measurement_interval test */
167 scd30_interface_debug_print("scd30: scd30_set_measurement_interval/scd30_get_measurement_interval test.\n");
168
169 second = rand() % 1000 + 2;
170 res = scd30_set_measurement_interval(&gs_handle, second);
171 if (res != 0)
172 {
173 scd30_interface_debug_print("scd30: set measurement interval failed.\n");
174 (void)scd30_deinit(&gs_handle);
175
176 return 1;
177 }
178 scd30_interface_debug_print("scd30: set measurement interval %d seconds.\n", second);
179 res = scd30_get_measurement_interval(&gs_handle, &second_check);
180 if (res != 0)
181 {
182 scd30_interface_debug_print("scd30: get measurement interval failed.\n");
183 (void)scd30_deinit(&gs_handle);
184
185 return 1;
186 }
187 scd30_interface_debug_print("scd30: check measurement interval %s.\n", second == second_check ? "ok" : "error");
188
189 /* scd30_get_data_ready_status test */
190 scd30_interface_debug_print("scd30: scd30_get_data_ready_status test.\n");
191
192 /* get data ready status */
193 res = scd30_get_data_ready_status(&gs_handle, &status);
194 if (res != 0)
195 {
196 scd30_interface_debug_print("scd30: get data ready status failed.\n");
197 (void)scd30_deinit(&gs_handle);
198
199 return 1;
200 }
201 scd30_interface_debug_print("scd30: get data ready status 0x%04X.\n", status);
202
203 /* scd30_set_automatic_self_calibration/scd30_get_automatic_self_calibration test */
204 scd30_interface_debug_print("scd30: scd30_set_automatic_self_calibration/scd30_get_automatic_self_calibration test.\n");
205
206 /* disable automatic self calibration */
208 if (res != 0)
209 {
210 scd30_interface_debug_print("scd30: set automatic self calibration failed.\n");
211 (void)scd30_deinit(&gs_handle);
212
213 return 1;
214 }
215 scd30_interface_debug_print("scd30: disable automatic self calibration.\n");
216 res = scd30_get_automatic_self_calibration(&gs_handle, &enable);
217 if (res != 0)
218 {
219 scd30_interface_debug_print("scd30: get automatic self calibration failed.\n");
220 (void)scd30_deinit(&gs_handle);
221
222 return 1;
223 }
224 scd30_interface_debug_print("scd30: check automatic self calibration %s.\n", enable == SCD30_BOOL_FALSE ? "ok" : "error");
225
226 /* enable automatic self calibration */
228 if (res != 0)
229 {
230 scd30_interface_debug_print("scd30: set automatic self calibration failed.\n");
231 (void)scd30_deinit(&gs_handle);
232
233 return 1;
234 }
235 scd30_interface_debug_print("scd30: enable automatic self calibration.\n");
236 res = scd30_get_automatic_self_calibration(&gs_handle, &enable);
237 if (res != 0)
238 {
239 scd30_interface_debug_print("scd30: get automatic self calibration failed.\n");
240 (void)scd30_deinit(&gs_handle);
241
242 return 1;
243 }
244 scd30_interface_debug_print("scd30: check automatic self calibration %s.\n", enable == SCD30_BOOL_TRUE ? "ok" : "error");
245
246 /* scd30_set_forced_recalibration/scd30_get_forced_recalibration test */
247 scd30_interface_debug_print("scd30: scd30_set_forced_recalibration/scd30_get_forced_recalibration test.\n");
248
249 co2_ppm = rand() % 10 + 400;
250 res = scd30_set_forced_recalibration(&gs_handle, co2_ppm);
251 if (res != 0)
252 {
253 scd30_interface_debug_print("scd30: set forced recalibration failed.\n");
254 (void)scd30_deinit(&gs_handle);
255
256 return 1;
257 }
258 scd30_interface_debug_print("scd30: set forced recalibration %d ppm.\n", co2_ppm);
259 res = scd30_get_forced_recalibration(&gs_handle, &co2_ppm_check);
260 if (res != 0)
261 {
262 scd30_interface_debug_print("scd30: get forced recalibration failed.\n");
263 (void)scd30_deinit(&gs_handle);
264
265 return 1;
266 }
267 scd30_interface_debug_print("scd30: check forced recalibration %s.\n", co2_ppm == co2_ppm_check ? "ok" : "error");
268
269 /* scd30_set_temperature_offset/scd30_get_temperature_offset test */
270 scd30_interface_debug_print("scd30: scd30_set_temperature_offset/scd30_get_temperature_offset test.\n");
271
272 deg = rand() % 10;
273 res = scd30_set_temperature_offset(&gs_handle, deg);
274 if (res != 0)
275 {
276 scd30_interface_debug_print("scd30: set temperature offset failed.\n");
277 (void)scd30_deinit(&gs_handle);
278
279 return 1;
280 }
281 scd30_interface_debug_print("scd30: set temperature offset %d.\n", deg);
282 res = scd30_get_temperature_offset(&gs_handle, &deg_check);
283 if (res != 0)
284 {
285 scd30_interface_debug_print("scd30: get temperature offset failed.\n");
286 (void)scd30_deinit(&gs_handle);
287
288 return 1;
289 }
290 scd30_interface_debug_print("scd30: check temperature offset %s.\n", deg == deg_check ? "ok" : "error");
291
292 /* scd30_temperature_offset_convert_to_register/scd30_temperature_offset_convert_to_data test */
293 scd30_interface_debug_print("scd30: scd30_temperature_offset_convert_to_register/scd30_temperature_offset_convert_to_data test.\n");
294
295 f = (float)(rand() % 100) / 100.0f;
296 res = scd30_temperature_offset_convert_to_register(&gs_handle, f, &reg);
297 if (res != 0)
298 {
299 scd30_interface_debug_print("scd30: temperature offset convert to register failed.\n");
300 (void)scd30_deinit(&gs_handle);
301
302 return 1;
303 }
304 scd30_interface_debug_print("scd30: set temperature offset %0.2f.\n", f);
305 res = scd30_temperature_offset_convert_to_data(&gs_handle, reg, &f_check);
306 if (res != 0)
307 {
308 scd30_interface_debug_print("scd30: temperature offset convert to data failed.\n");
309 (void)scd30_deinit(&gs_handle);
310
311 return 1;
312 }
313 scd30_interface_debug_print("scd30: temperature offset before is %0.2f.\n", f);
314 scd30_interface_debug_print("scd30: temperature offset register is 0x%02X.\n", reg);
315 scd30_interface_debug_print("scd30: temperature offset convert is %0.2f.\n", f_check);
316
317 /* scd30_set_altitude_compensation/scd30_get_altitude_compensation test */
318 scd30_interface_debug_print("scd30: scd30_set_altitude_compensation/scd30_get_altitude_compensation test.\n");
319
320 m = rand() % 10;
321 res = scd30_set_altitude_compensation(&gs_handle, m);
322 if (res != 0)
323 {
324 scd30_interface_debug_print("scd30: set altitude compensation failed.\n");
325 (void)scd30_deinit(&gs_handle);
326
327 return 1;
328 }
329 scd30_interface_debug_print("scd30: set altitude compensation %dm.\n", m);
330 res = scd30_get_altitude_compensation(&gs_handle, &m_check);
331 if (res != 0)
332 {
333 scd30_interface_debug_print("scd30: get altitude compensation failed.\n");
334 (void)scd30_deinit(&gs_handle);
335
336 return 1;
337 }
338 scd30_interface_debug_print("scd30: check altitude compensation %s.\n", m == m_check ? "ok" : "error");
339
340 /* scd30_get_firmware_version test */
341 scd30_interface_debug_print("scd30: scd30_get_firmware_version test.\n");
342
343 /* get firmware version */
344 res = scd30_get_firmware_version(&gs_handle, &version);
345 if (res != 0)
346 {
347 scd30_interface_debug_print("scd30: get firmware version failed.\n");
348 (void)scd30_deinit(&gs_handle);
349
350 return 1;
351 }
352 scd30_interface_debug_print("scd30: get firmware version 0x%04X.\n", version);
353
354 /* scd30_soft_reset test */
355 scd30_interface_debug_print("scd30: scd30_soft_reset test.\n");
357 res = scd30_soft_reset(&gs_handle);
358 if (res != 0)
359 {
360 scd30_interface_debug_print("scd30: soft rest failed.\n");
361 (void)scd30_deinit(&gs_handle);
362
363 return 1;
364 }
365 scd30_interface_debug_print("scd30: check soft reset %s.\n", res == 0 ? "ok" : "error");
366
367 /* finish register test */
368 scd30_interface_debug_print("scd30: finish register test.\n");
369 (void)scd30_deinit(&gs_handle);
370
371 return 0;
372}
driver scd30 register test header file
uint8_t scd30_init(scd30_handle_t *handle)
initialize the chip
struct scd30_info_s scd30_info_t
scd30 information structure definition
uint8_t scd30_deinit(scd30_handle_t *handle)
close the chip
uint8_t scd30_temperature_offset_convert_to_data(scd30_handle_t *handle, uint16_t reg, float *deg)
convert the register raw data to the temperature offset
uint8_t scd30_set_altitude_compensation(scd30_handle_t *handle, uint16_t m)
set altitude compensation
uint8_t scd30_soft_reset(scd30_handle_t *handle)
soft reset
uint8_t scd30_get_forced_recalibration(scd30_handle_t *handle, uint16_t *co2_ppm)
get forced recalibration
uint8_t scd30_get_data_ready_status(scd30_handle_t *handle, uint16_t *status)
get data ready status
uint8_t scd30_get_temperature_offset(scd30_handle_t *handle, uint16_t *deg)
get temperature offset
uint8_t scd30_temperature_offset_convert_to_register(scd30_handle_t *handle, float deg, uint16_t *reg)
convert the temperature offset to the register raw data
scd30_interface_t
scd30 interface enumeration definition
uint8_t scd30_get_firmware_version(scd30_handle_t *handle, uint16_t *version)
get firmware version
uint8_t scd30_get_automatic_self_calibration(scd30_handle_t *handle, scd30_bool_t *enable)
get automatic self calibration
uint8_t scd30_set_interface(scd30_handle_t *handle, scd30_interface_t interface)
set the chip interface
uint8_t scd30_set_automatic_self_calibration(scd30_handle_t *handle, scd30_bool_t enable)
set automatic self calibration
uint8_t scd30_info(scd30_info_t *info)
get chip information
uint8_t scd30_set_temperature_offset(scd30_handle_t *handle, uint16_t deg)
set temperature offset
uint8_t scd30_get_interface(scd30_handle_t *handle, scd30_interface_t *interface)
get the chip interface
struct scd30_handle_s scd30_handle_t
scd30 handle structure definition
uint8_t scd30_set_forced_recalibration(scd30_handle_t *handle, uint16_t co2_ppm)
set forced recalibration
uint8_t scd30_set_measurement_interval(scd30_handle_t *handle, uint16_t second)
set the measurement interval
uint8_t scd30_get_measurement_interval(scd30_handle_t *handle, uint16_t *second)
get the measurement interval
uint8_t scd30_get_altitude_compensation(scd30_handle_t *handle, uint16_t *m)
get altitude compensation
scd30_bool_t
scd30 bool enumeration definition
@ SCD30_INTERFACE_UART
@ SCD30_INTERFACE_IIC
@ SCD30_BOOL_FALSE
@ SCD30_BOOL_TRUE
uint8_t scd30_interface_uart_init(void)
interface uart init
uint8_t scd30_interface_iic_write_cmd(uint8_t addr, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t scd30_interface_uart_write(uint8_t *buf, uint16_t len)
interface uart write
uint8_t scd30_interface_iic_read_cmd(uint8_t addr, uint8_t *buf, uint16_t len)
interface iic bus read
void scd30_interface_debug_print(const char *const fmt,...)
interface print format data
uint16_t scd30_interface_uart_read(uint8_t *buf, uint16_t len)
interface uart read
uint8_t scd30_interface_iic_init(void)
interface iic bus init
void scd30_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t scd30_interface_uart_flush(void)
interface uart flush
uint8_t scd30_interface_iic_deinit(void)
interface iic bus deinit
uint8_t scd30_interface_uart_deinit(void)
interface uart deinit
uint8_t scd30_register_test(scd30_interface_t interface)
register test
float temperature_max
float supply_voltage_max_v
uint32_t driver_version
char interface[16]
float temperature_min
float max_current_ma
char manufacturer_name[32]
float supply_voltage_min_v
char chip_name[32]