LibDriver STS21
Loading...
Searching...
No Matches
driver_sts21.c
Go to the documentation of this file.
1
36
37#include "driver_sts21.h"
38
42#define CHIP_NAME "Sensirion STS21"
43#define MANUFACTURER_NAME "Sensirion"
44#define SUPPLY_VOLTAGE_MIN 2.1f
45#define SUPPLY_VOLTAGE_MAX 3.6f
46#define MAX_CURRENT 0.33f
47#define TEMPERATURE_MIN -40.0f
48#define TEMPERATURE_MAX 125.0f
49#define DRIVER_VERSION 1000
50
54#define STS21_COMMAND_TRIGGER_T_MEASUREMENT_HOLD_MASTER 0xE3
55#define STS21_COMMAND_TRIGGER_T_MEASUREMENT_NO_HOLD_MASTER 0xF3
56#define STS21_COMMAND_WRITE_REG 0xE6
57#define STS21_COMMAND_READ_REG 0xE7
58#define STS21_COMMAND_SOFT_RESET 0xFE
59#define STS21_COMMAND_GET_SN1 0xFA0FU
60#define STS21_COMMAND_GET_SN2 0xFCC9U
61
65#define STS21_ADDRESS 0x94
66
77static uint8_t a_sts21_write_command(sts21_handle_t *handle, uint8_t *data, uint16_t len)
78{
79 if (handle->iic_write_cmd(STS21_ADDRESS, data, len) != 0) /* iic write */
80 {
81 return 1; /* return error */
82 }
83
84 return 0; /* success return 0 */
85}
86
97static uint8_t a_sts21_read_command(sts21_handle_t *handle, uint8_t *data, uint16_t len)
98{
99 if (handle->iic_read_cmd(STS21_ADDRESS, data, len) != 0) /* iic read */
100 {
101 return 1; /* return error */
102 }
103
104 return 0; /* success return 0 */
105}
106
118static uint8_t a_sts21_write(sts21_handle_t *handle, uint8_t reg, uint8_t *data, uint16_t len)
119{
120 if (handle->iic_write(STS21_ADDRESS, reg, data, len) != 0) /* iic write */
121 {
122 return 1; /* return error */
123 }
124
125 return 0; /* success return 0 */
126}
127
139static uint8_t a_sts21_read(sts21_handle_t *handle, uint8_t reg, uint8_t *data, uint16_t len)
140{
141 if (handle->iic_read(STS21_ADDRESS, reg, data, len) != 0) /* iic read */
142 {
143 return 1; /* return error */
144 }
145
146 return 0; /* success return 0 */
147}
148
160static uint8_t a_sts21_read_hold(sts21_handle_t *handle, uint8_t reg, uint8_t *data, uint16_t len)
161{
162 if (handle->iic_read_with_wait(STS21_ADDRESS, reg, data, len) != 0) /* iic read */
163 {
164 return 1; /* return error */
165 }
166
167 return 0; /* success return 0 */
168}
169
181static uint8_t a_sts21_read16(sts21_handle_t *handle, uint16_t reg, uint8_t *data, uint16_t len)
182{
183 if (handle->iic_read_address16(STS21_ADDRESS, reg, data, len) != 0) /* iic read */
184 {
185 return 1; /* return error */
186 }
187
188 return 0; /* success return 0 */
189}
190
198static uint8_t a_sts21_crc(uint8_t *data, uint16_t len)
199{
200 const uint16_t POLYNOMIAL = 0x131;
201 uint8_t crc = 0x00;
202 uint16_t i;
203 uint16_t j;
204
205 for (i = 0; i < len; i++) /* loop all */
206 {
207 crc ^= (data[i]); /* calc crc */
208 for (j= 8; j > 0; j--) /* loop */
209 {
210 if ((crc & 0x80) != 0) /* 1 */
211 {
212 crc = (crc << 1) ^ POLYNOMIAL; /* calc crc */
213 }
214 else /* 0 */
215 {
216 crc = (crc << 1); /* calc crc */
217 }
218 }
219 }
220
221 return crc; /* return crc */
222}
223
235{
236 uint8_t res;
237 uint8_t command;
238
239 if (handle == NULL) /* check handle */
240 {
241 return 2; /* return error */
242 }
243 if (handle->debug_print == NULL) /* check debug_print */
244 {
245 return 3; /* return error */
246 }
247 if (handle->iic_init == NULL) /* check iic_init */
248 {
249 handle->debug_print("sts21: iic_init is null.\n"); /* iic_init is null */
250
251 return 3; /* return error */
252 }
253 if (handle->iic_deinit == NULL) /* check iic_deinit */
254 {
255 handle->debug_print("sts21: iic_deinit is null.\n"); /* iic_deinit is null */
256
257 return 3; /* return error */
258 }
259 if (handle->iic_read_cmd == NULL) /* check iic_read_cmd */
260 {
261 handle->debug_print("sts21: iic_read_cmd is null.\n"); /* iic_read_cmd is null */
262
263 return 3; /* return error */
264 }
265 if (handle->iic_read == NULL) /* check iic_read */
266 {
267 handle->debug_print("sts21: iic_read is null.\n"); /* iic_read is null */
268
269 return 3; /* return error */
270 }
271 if (handle->iic_read_address16 == NULL) /* check iic_read_address16 */
272 {
273 handle->debug_print("sts21: iic_read_address16 is null.\n"); /* iic_read_address16 is null */
274
275 return 3; /* return error */
276 }
277 if (handle->iic_read_with_wait == NULL) /* check iic_read_with_wait */
278 {
279 handle->debug_print("sts21: iic_read_with_wait is null.\n"); /* iic_read_with_wait is null */
280
281 return 3; /* return error */
282 }
283 if (handle->iic_write_cmd == NULL) /* check iic_write_cmd */
284 {
285 handle->debug_print("sts21: iic_write_cmd is null.\n"); /* iic_write_cmd is null */
286
287 return 3; /* return error */
288 }
289 if (handle->iic_write == NULL) /* check iic_write */
290 {
291 handle->debug_print("sts21: iic_write is null.\n"); /* iic_write is null */
292
293 return 3; /* return error */
294 }
295 if (handle->delay_ms == NULL) /* check delay_ms */
296 {
297 handle->debug_print("sts21: delay_ms is null.\n"); /* delay_ms is null */
298
299 return 3; /* return error */
300 }
301
302 if (handle->iic_init() != 0) /* iic init */
303 {
304 handle->debug_print("sts21: iic init failed.\n"); /* iic init failed */
305
306 return 1; /* return error */
307 }
308
309 command = STS21_COMMAND_SOFT_RESET; /* set command */
310 res = a_sts21_write_command(handle, &command, 1); /* write command */
311 if (res != 0) /* check result */
312 {
313 handle->debug_print("sts21: write command failed.\n"); /* write command failed */
314 (void)handle->iic_deinit(); /* close iic */
315
316 return 1; /* return error */
317 }
318 handle->delay_ms(15); /* delay 15ms */
319 handle->inited = 1; /* flag finish initialization */
320
321 return 0; /* success return 0 */
322}
323
335{
336 uint8_t res;
337 uint8_t command;
338
339 if (handle == NULL) /* check handle */
340 {
341 return 2; /* return error */
342 }
343 if (handle->inited != 1) /* check handle initialization */
344 {
345 return 3; /* return error */
346 }
347
348 command = STS21_COMMAND_SOFT_RESET; /* set command */
349 res = a_sts21_write_command(handle, &command, 1); /* write command */
350 if (res != 0) /* check result */
351 {
352 handle->debug_print("sts21: write command failed.\n"); /* write command failed */
353
354 return 1; /* return error */
355 }
356 handle->delay_ms(15); /* delay 15ms */
357 if (handle->iic_deinit() != 0) /* iic deinit */
358 {
359 handle->debug_print("sts21: iic deinit failed.\n"); /* iic deinit failed */
360
361 return 1; /* return error */
362 }
363 handle->inited = 0; /* flag close */
364
365 return 0; /* success return 0 */
366}
367
379{
380 uint8_t res;
381 uint8_t command;
382
383 if (handle == NULL) /* check handle */
384 {
385 return 2; /* return error */
386 }
387 if (handle->inited != 1) /* check handle initialization */
388 {
389 return 3; /* return error */
390 }
391
392 command = STS21_COMMAND_SOFT_RESET; /* set command */
393 res = a_sts21_write_command(handle, &command, 1); /* write command */
394 if (res != 0) /* check result */
395 {
396 handle->debug_print("sts21: write command failed.\n"); /* write command failed */
397
398 return 1; /* return error */
399 }
400 handle->delay_ms(15); /* delay 15ms */
401
402 return 0; /* success return 0 */
403}
404
417{
418 uint8_t res;
419 uint8_t command;
420 uint8_t prev;
421
422 if (handle == NULL) /* check handle */
423 {
424 return 2; /* return error */
425 }
426 if (handle->inited != 1) /* check handle initialization */
427 {
428 return 3; /* return error */
429 }
430
431 command = STS21_COMMAND_READ_REG; /* set command */
432 res = a_sts21_read(handle, command, &prev, 1); /* read reg */
433 if (res != 0) /* check result */
434 {
435 handle->debug_print("sts21: read reg failed.\n"); /* read reg failed */
436
437 return 1; /* return error */
438 }
439 prev &= ~(1 << 7); /* clear bit7 */
440 prev &= ~(1 << 0); /* clear bit0 */
441 prev |= (((uint8_t)(resolution) >> 1) & 0x01) << 7; /* set resolution */
442 prev |= (((uint8_t)(resolution) >> 0) & 0x01) << 0; /* set resolution */
443 command = STS21_COMMAND_WRITE_REG; /* set command */
444 res = a_sts21_write(handle, command, &prev, 1); /* write reg */
445 if (res != 0) /* check result */
446 {
447 handle->debug_print("sts21: write reg failed.\n"); /* write reg failed */
448
449 return 1; /* return error */
450 }
451 handle->resolution = resolution; /* set resolution */
452
453 return 0; /* success return 0 */
454}
455
468{
469 uint8_t res;
470 uint8_t command;
471 uint8_t prev;
472 uint8_t r;
473
474 if (handle == NULL) /* check handle */
475 {
476 return 2; /* return error */
477 }
478 if (handle->inited != 1) /* check handle initialization */
479 {
480 return 3; /* return error */
481 }
482
483 command = STS21_COMMAND_READ_REG; /* set command */
484 res = a_sts21_read(handle, command, &prev, 1); /* read reg */
485 if (res != 0) /* check result */
486 {
487 handle->debug_print("sts21: read reg failed.\n"); /* read reg failed */
488
489 return 1; /* return error */
490 }
491 r = (((prev >> 7) & 0x01) << 1) | (((prev >> 0) & 0x01) << 0); /* get data*/
492 *resolution = (sts21_resolution_t)(r);
493
494 return 0; /* success return 0 */
495}
496
509{
510 uint8_t res;
511 uint8_t command;
512 uint8_t prev;
513
514 if (handle == NULL) /* check handle */
515 {
516 return 2; /* return error */
517 }
518 if (handle->inited != 1) /* check handle initialization */
519 {
520 return 3; /* return error */
521 }
522
523 command = STS21_COMMAND_READ_REG; /* set command */
524 res = a_sts21_read(handle, command, &prev, 1); /* read reg */
525 if (res != 0) /* check result */
526 {
527 handle->debug_print("sts21: read reg failed.\n"); /* read reg failed */
528
529 return 1; /* return error */
530 }
531 prev &= ~(1 << 2); /* clear settings */
532 prev |= enable << 2; /* set bool */
533 command = STS21_COMMAND_WRITE_REG; /* set command */
534 res = a_sts21_write(handle, command, &prev, 1); /* write reg */
535 if (res != 0) /* check result */
536 {
537 handle->debug_print("sts21: write reg failed.\n"); /* write reg failed */
538
539 return 1; /* return error */
540 }
541
542 return 0; /* success return 0 */
543}
544
557{
558 uint8_t res;
559 uint8_t command;
560 uint8_t prev;
561
562 if (handle == NULL) /* check handle */
563 {
564 return 2; /* return error */
565 }
566 if (handle->inited != 1) /* check handle initialization */
567 {
568 return 3; /* return error */
569 }
570
571 command = STS21_COMMAND_READ_REG; /* set command */
572 res = a_sts21_read(handle, command, &prev, 1); /* read reg */
573 if (res != 0) /* check result */
574 {
575 handle->debug_print("sts21: read reg failed.\n"); /* read reg failed */
576
577 return 1; /* return error */
578 }
579 *enable = (sts21_bool_t)((prev >> 2) & 0x01); /* get bool */
580
581 return 0; /* success return 0 */
582}
583
596{
597 uint8_t res;
598 uint8_t command;
599 uint8_t prev;
600
601 if (handle == NULL) /* check handle */
602 {
603 return 2; /* return error */
604 }
605 if (handle->inited != 1) /* check handle initialization */
606 {
607 return 3; /* return error */
608 }
609
610 command = STS21_COMMAND_READ_REG; /* set command */
611 res = a_sts21_read(handle, command, &prev, 1); /* read reg */
612 if (res != 0) /* check result */
613 {
614 handle->debug_print("sts21: read reg failed.\n"); /* read reg failed */
615
616 return 1; /* return error */
617 }
618 prev &= ~(1 << 1); /* clear settings */
619 prev |= enable << 1; /* set bool */
620 command = STS21_COMMAND_WRITE_REG; /* set command */
621 res = a_sts21_write(handle, command, &prev, 1); /* write reg */
622 if (res != 0) /* check result */
623 {
624 handle->debug_print("sts21: write reg failed.\n"); /* write reg failed */
625
626 return 1; /* return error */
627 }
628
629 return 0; /* success return 0 */
630}
631
644{
645 uint8_t res;
646 uint8_t command;
647 uint8_t prev;
648
649 if (handle == NULL) /* check handle */
650 {
651 return 2; /* return error */
652 }
653 if (handle->inited != 1) /* check handle initialization */
654 {
655 return 3; /* return error */
656 }
657
658 command = STS21_COMMAND_READ_REG; /* set command */
659 res = a_sts21_read(handle, command, &prev, 1); /* read reg */
660 if (res != 0) /* check result */
661 {
662 handle->debug_print("sts21: read reg failed.\n"); /* read reg failed */
663
664 return 1; /* return error */
665 }
666 *enable = (sts21_bool_t)((prev >> 1) & 0x01); /* set bool */
667
668 return 0; /* success return 0 */
669}
670
683{
684 uint8_t res;
685 uint8_t command;
686 uint8_t prev;
687
688 if (handle == NULL) /* check handle */
689 {
690 return 2; /* return error */
691 }
692 if (handle->inited != 1) /* check handle initialization */
693 {
694 return 3; /* return error */
695 }
696
697 command = STS21_COMMAND_READ_REG; /* set command */
698 res = a_sts21_read(handle, command, &prev, 1); /* read reg */
699 if (res != 0) /* check result */
700 {
701 handle->debug_print("sts21: read reg failed.\n"); /* read reg failed */
702
703 return 1; /* return error */
704 }
705 *status = (sts21_status_t)((prev >> 6) & 0x01); /* set status */
706
707 return 0; /* success return 0 */
708}
709
721{
722 if (handle == NULL) /* check handle */
723 {
724 return 2; /* return error */
725 }
726 if (handle->inited != 1) /* check handle initialization */
727 {
728 return 3; /* return error */
729 }
730
731 handle->mode = (uint8_t)mode; /* set mode */
732
733 return 0; /* success return 0 */
734}
735
747{
748 if (handle == NULL) /* check handle */
749 {
750 return 2; /* return error */
751 }
752 if (handle->inited != 1) /* check handle initialization */
753 {
754 return 3; /* return error */
755 }
756
757 *mode = (sts21_mode_t)(handle->mode); /* get mode */
758
759 return 0; /* success return 0 */
760}
761
775uint8_t sts21_read(sts21_handle_t *handle, uint16_t *temperature_raw, float *temperature_s)
776{
777 uint8_t res;
778 uint8_t command;
779 uint8_t data[3];
780
781 if (handle == NULL) /* check handle */
782 {
783 return 2; /* return error */
784 }
785 if (handle->inited != 1) /* check handle initialization */
786 {
787 return 3; /* return error */
788 }
789
790 if(handle->mode == (uint8_t)(STS21_MODE_HOLD_MASTER)) /* hold master */
791 {
792 command = STS21_COMMAND_TRIGGER_T_MEASUREMENT_HOLD_MASTER; /* set command */
793 res = a_sts21_read_hold(handle, command, data, 3); /* read hold */
794 if (res != 0) /* check result */
795 {
796 handle->debug_print("sts21: read reg failed.\n"); /* read reg failed */
797
798 return 1; /* return error */
799 }
800 if (a_sts21_crc(data, 2) != data[2]) /* check crc */
801 {
802 handle->debug_print("sts21: crc check failed.\n"); /* crc check failed */
803
804 return 4; /* return error */
805 }
806 *temperature_raw = (uint16_t)((((uint16_t)data[0]) << 8) | data[1]); /* set raw temperature */
807 (*temperature_raw) &= ~0x0003; /* clear status bits */
808 *temperature_s = (float)(*temperature_raw) / 65536.0f * 175.72f - 46.85f; /* convert raw temperature */
809 }
810 else /* no hold master */
811 {
812 command = STS21_COMMAND_TRIGGER_T_MEASUREMENT_NO_HOLD_MASTER; /* set command */
813 res = a_sts21_write_command(handle, &command, 1); /* write command */
814 if (res != 0) /* check result */
815 {
816 handle->debug_print("sts21: write reg failed.\n"); /* write reg failed */
817
818 return 1; /* return error */
819 }
820 if (handle->resolution == STS21_RESOLUTION_T_14BIT) /* 14bit */
821 {
822 handle->delay_ms(86); /* delay 86ms */
823 }
824 else if (handle->resolution == STS21_RESOLUTION_T_12BIT) /* 12bit */
825 {
826 handle->delay_ms(23); /* delay 23ms */
827 }
828 else if (handle->resolution == STS21_RESOLUTION_T_13BIT) /* 13bit */
829 {
830 handle->delay_ms(44); /* delay 44ms */
831 }
832 else /* 11bit */
833 {
834 handle->delay_ms(12); /* delay 12ms */
835 }
836 res = a_sts21_read_command(handle, data, 3); /* read command */
837 if (res != 0) /* check result */
838 {
839 handle->debug_print("sts21: read reg failed.\n"); /* read reg failed */
840
841 return 1; /* return error */
842 }
843 if (a_sts21_crc(data, 2) != data[2]) /* check crc */
844 {
845 handle->debug_print("sts21: crc check failed.\n"); /* crc check failed */
846
847 return 4; /* return error */
848 }
849 *temperature_raw = (uint16_t)((((uint16_t)data[0]) << 8) | data[1]); /* set raw temperature */
850 (*temperature_raw) &= ~0x0003; /* clear status bits */
851 *temperature_s = (float)(*temperature_raw) / 65536.0f * 175.72f - 46.85f; /* convert raw temperature */
852 }
853
854 return 0; /* success return 0 */
855}
856
869uint8_t sts21_get_serial_number(sts21_handle_t *handle, uint8_t sn[8])
870{
871 uint8_t res;
872 uint16_t command;
873 uint8_t data[8];
874
875 if (handle == NULL) /* check handle */
876 {
877 return 2; /* return error */
878 }
879 if (handle->inited != 1) /* check handle initialization */
880 {
881 return 3; /* return error */
882 }
883
884 command = STS21_COMMAND_GET_SN1; /* get serial number command */
885 res = a_sts21_read16(handle, command, (uint8_t *)data, 8); /* read data */
886 if (res != 0) /* check result */
887 {
888 handle->debug_print("sts21: read data failed.\n"); /* read data failed */
889
890 return 1; /* return error */
891 }
892 if (a_sts21_crc((uint8_t *)&data[0], 1) != data[1]) /* check crc */
893 {
894 handle->debug_print("sts21: crc check failed.\n"); /* crc check failed */
895
896 return 4; /* return error */
897 }
898 if (a_sts21_crc((uint8_t *)&data[2], 1) != data[3]) /* check crc */
899 {
900 handle->debug_print("sts21: crc check failed.\n"); /* crc check failed */
901
902 return 4; /* return error */
903 }
904 if (a_sts21_crc((uint8_t *)&data[4], 1) != data[5]) /* check crc */
905 {
906 handle->debug_print("sts21: crc check failed.\n"); /* crc check failed */
907
908 return 4; /* return error */
909 }
910 if (a_sts21_crc((uint8_t *)&data[6], 1) != data[7]) /* check crc */
911 {
912 handle->debug_print("sts21: crc check failed.\n"); /* crc check failed */
913
914 return 4; /* return error */
915 }
916 sn[5] = data[0]; /* set sn5 */
917 sn[4] = data[2]; /* set sn4 */
918 sn[3] = data[4]; /* set sn3 */
919 sn[2] = data[6]; /* set sn2 */
920
921 command = STS21_COMMAND_GET_SN2; /* get serial number command */
922 res = a_sts21_read16(handle, command, (uint8_t *)data, 6); /* read data */
923 if (res != 0) /* check result */
924 {
925 handle->debug_print("sts21: read data failed.\n"); /* read data failed */
926
927 return 1; /* return error */
928 }
929 if (a_sts21_crc((uint8_t *)data, 2) != data[2]) /* check crc */
930 {
931 handle->debug_print("sts21: crc check failed.\n"); /* crc check failed */
932
933 return 4; /* return error */
934 }
935 if (a_sts21_crc((uint8_t *)&data[3], 2) != data[5]) /* check crc */
936 {
937 handle->debug_print("sts21: crc check failed.\n"); /* crc check failed */
938
939 return 4; /* return error */
940 }
941 sn[1] = data[0]; /* set sn1 */
942 sn[0] = data[1]; /* set sn0 */
943 sn[7] = data[3]; /* set sn7 */
944 sn[6] = data[4]; /* set sn6 */
945
946 return 0; /* success return 0 */
947}
948
962uint8_t sts21_set_reg(sts21_handle_t *handle, uint8_t reg, uint8_t *data, uint16_t len)
963{
964 if (handle == NULL) /* check handle */
965 {
966 return 2; /* return error */
967 }
968 if (handle->inited != 1) /* check handle initialization */
969 {
970 return 3; /* return error */
971 }
972
973 return a_sts21_write(handle, reg, data, len); /* write command */
974}
975
989uint8_t sts21_get_reg(sts21_handle_t *handle, uint8_t reg, uint8_t *data, uint16_t len)
990{
991 if (handle == NULL) /* check handle */
992 {
993 return 2; /* return error */
994 }
995 if (handle->inited != 1) /* check handle initialization */
996 {
997 return 3; /* return error */
998 }
999
1000 return a_sts21_read(handle, reg, data, len); /* read data */
1001}
1002
1016uint8_t sts21_get_reg16(sts21_handle_t *handle, uint16_t reg, uint8_t *data, uint16_t len)
1017{
1018 if (handle == NULL) /* check handle */
1019 {
1020 return 2; /* return error */
1021 }
1022 if (handle->inited != 1) /* check handle initialization */
1023 {
1024 return 3; /* return error */
1025 }
1026
1027 return a_sts21_read16(handle, reg, data, len); /* read data */
1028}
1029
1042uint8_t sts21_set_cmd(sts21_handle_t *handle, uint8_t *data, uint16_t len)
1043{
1044 if (handle == NULL) /* check handle */
1045 {
1046 return 2; /* return error */
1047 }
1048 if (handle->inited != 1) /* check handle initialization */
1049 {
1050 return 3; /* return error */
1051 }
1052
1053 return a_sts21_write_command(handle, data, len); /* write command */
1054}
1055
1068uint8_t sts21_get_cmd(sts21_handle_t *handle, uint8_t *data, uint16_t len)
1069{
1070 if (handle == NULL) /* check handle */
1071 {
1072 return 2; /* return error */
1073 }
1074 if (handle->inited != 1) /* check handle initialization */
1075 {
1076 return 3; /* return error */
1077 }
1078
1079 return a_sts21_read_command(handle, data, len); /* read data */
1080}
1081
1091{
1092 if (info == NULL) /* check handle */
1093 {
1094 return 2; /* return error */
1095 }
1096
1097 memset(info, 0, sizeof(sts21_info_t)); /* initialize sts21 info structure */
1098 strncpy(info->chip_name, CHIP_NAME, 32); /* copy chip name */
1099 strncpy(info->manufacturer_name, MANUFACTURER_NAME, 32); /* copy manufacturer name */
1100 strncpy(info->interface, "IIC", 8); /* copy interface name */
1101 info->supply_voltage_min_v = SUPPLY_VOLTAGE_MIN; /* set minimal supply voltage */
1102 info->supply_voltage_max_v = SUPPLY_VOLTAGE_MAX; /* set maximum supply voltage */
1103 info->max_current_ma = MAX_CURRENT; /* set maximum current */
1104 info->temperature_max = TEMPERATURE_MAX; /* set minimal temperature */
1105 info->temperature_min = TEMPERATURE_MIN; /* set maximum temperature */
1106 info->driver_version = DRIVER_VERSION; /* set driver version */
1107
1108 return 0; /* success return 0 */
1109}
#define STS21_COMMAND_SOFT_RESET
#define STS21_COMMAND_TRIGGER_T_MEASUREMENT_HOLD_MASTER
chip command definition
#define MAX_CURRENT
#define STS21_COMMAND_WRITE_REG
#define STS21_COMMAND_GET_SN2
#define STS21_ADDRESS
chip address definition
#define SUPPLY_VOLTAGE_MAX
#define STS21_COMMAND_GET_SN1
#define STS21_COMMAND_READ_REG
#define TEMPERATURE_MAX
#define MANUFACTURER_NAME
#define TEMPERATURE_MIN
#define SUPPLY_VOLTAGE_MIN
#define CHIP_NAME
chip information definition
#define DRIVER_VERSION
#define STS21_COMMAND_TRIGGER_T_MEASUREMENT_NO_HOLD_MASTER
driver sts21 header file
sts21_resolution_t
sts21 resolution enumeration definition
uint8_t sts21_soft_reset(sts21_handle_t *handle)
soft reset the chip
uint8_t sts21_info(sts21_info_t *info)
get chip's information
uint8_t sts21_set_heater(sts21_handle_t *handle, sts21_bool_t enable)
enable or disable heater
uint8_t sts21_get_status(sts21_handle_t *handle, sts21_status_t *status)
get status
uint8_t sts21_get_disable_otp_reload(sts21_handle_t *handle, sts21_bool_t *enable)
get disable otp reload status
sts21_mode_t
sts21 mode enumeration definition
uint8_t sts21_get_mode(sts21_handle_t *handle, sts21_mode_t *mode)
get chip mode
uint8_t sts21_set_resolution(sts21_handle_t *handle, sts21_resolution_t resolution)
set resolution
sts21_status_t
sts21 status enumeration definition
uint8_t sts21_get_serial_number(sts21_handle_t *handle, uint8_t sn[8])
get serial number
uint8_t sts21_get_heater(sts21_handle_t *handle, sts21_bool_t *enable)
get heater status
struct sts21_info_s sts21_info_t
sts21 information structure definition
uint8_t sts21_set_disable_otp_reload(sts21_handle_t *handle, sts21_bool_t enable)
enable or disable disable otp reload
struct sts21_handle_s sts21_handle_t
sts21 handle structure definition
sts21_bool_t
sts21 bool enumeration definition
uint8_t sts21_deinit(sts21_handle_t *handle)
close the chip
uint8_t sts21_set_mode(sts21_handle_t *handle, sts21_mode_t mode)
set chip mode
uint8_t sts21_get_resolution(sts21_handle_t *handle, sts21_resolution_t *resolution)
get resolution
uint8_t sts21_init(sts21_handle_t *handle)
initialize the chip
uint8_t sts21_read(sts21_handle_t *handle, uint16_t *temperature_raw, float *temperature_s)
read data
@ STS21_RESOLUTION_T_14BIT
@ STS21_RESOLUTION_T_13BIT
@ STS21_RESOLUTION_T_12BIT
@ STS21_MODE_HOLD_MASTER
uint8_t sts21_get_cmd(sts21_handle_t *handle, uint8_t *data, uint16_t len)
get command
uint8_t sts21_set_cmd(sts21_handle_t *handle, uint8_t *data, uint16_t len)
set command
uint8_t sts21_set_reg(sts21_handle_t *handle, uint8_t reg, uint8_t *data, uint16_t len)
set the chip register
uint8_t sts21_get_reg16(sts21_handle_t *handle, uint16_t reg, uint8_t *data, uint16_t len)
get the chip register16
uint8_t sts21_get_reg(sts21_handle_t *handle, uint8_t reg, uint8_t *data, uint16_t len)
get the chip register
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,...)
uint8_t(* iic_init)(void)
uint8_t(* iic_read_with_wait)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* iic_read_cmd)(uint8_t addr, uint8_t *buf, uint16_t len)
uint8_t(* iic_write)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* iic_read)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* iic_deinit)(void)
uint8_t(* iic_write_cmd)(uint8_t addr, uint8_t *buf, uint16_t len)
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]