1 #include "barometer.h"
2 #include "drv_baro_qst_qmp6988.h"
3 #include "drv_baro_goertek_spl06.h"
4 #include <stdio.h>
5 #include <stdlib.h>
6
7 static char pressure_str[16] = " ";
8 static char altitude_str[16] = " ";
9 static char Ctemp_str[7] = " ";
10 static char Ftemp_str[7] = " ";
11 static spl06_data_t spl06_data = {0};
12 static qmp6988_data p_qmp6988_data = {0};
13
14 static int running = 1;
15
16 MENU_COVER_TYP barometer_cover = {MENU_COVER_NONE};
17 MENU_TASK_TYP barometer_tasks = {barometer_init, barometer_uninit};
18 MENU_TYP barometer = {"barometer", &barometer_cover, &barometer_tasks, NULL,
19 NULL};
20
21 static aos_task_t barometer_task_handle;
22
barometer_init(void)23 int barometer_init(void)
24 {
25 if (g_haasboard_is_k1c) {
26 p_qmp6988_data.slave = QMP6988_SLAVE_ADDRESS_H;
27 qmp6988_init(&p_qmp6988_data);
28 aos_msleep(10);
29 qmp6988_calc_pressure(&p_qmp6988_data);
30 LOGI(EDU_TAG, "qmp6988_init done\n");
31 } else {
32 spl06_init();
33 spl06_getdata(&spl06_data);
34 LOGI(EDU_TAG, "spl06_init done\n");
35 }
36
37 aos_task_new_ext(&barometer_task_handle, "barometer_task", barometer_task, NULL, 1024, AOS_DEFAULT_APP_PRI);
38 LOGI(EDU_TAG, "aos_task_new barometer_task\n");
39 return 0;
40 }
41
barometer_task()42 void barometer_task()
43 {
44 while (running) {
45 OLED_Clear();
46 if (g_haasboard_is_k1c) {
47 sprintf(pressure_str, " %-10.3lfkPa", p_qmp6988_data.pressure / 1000);
48 LOGD(EDU_TAG, "%s\n", pressure_str);
49 sprintf(altitude_str, " %-12.2lfm", p_qmp6988_data.altitude);
50 LOGD(EDU_TAG, "%s\n", altitude_str);
51 sprintf(Ctemp_str, "%-5.2lf", p_qmp6988_data.temperature);
52 LOGD(EDU_TAG, "%s\n", Ctemp_str);
53 sprintf(Ftemp_str, "%-5.2lf", ((p_qmp6988_data.temperature * 9 / 5) + 32));
54 LOGD(EDU_TAG, "%s\n", Ftemp_str);
55 } else {
56 sprintf(pressure_str, " %-10.3lfkPa", spl06_data.pressure / 10);
57 LOGD(EDU_TAG, "%s\n", pressure_str);
58 sprintf(altitude_str, " %-12.2lfm", spl06_data.altitude);
59 LOGD(EDU_TAG, "%s\n", altitude_str);
60 sprintf(Ctemp_str, "%-5.2lf", spl06_data.Ctemp);
61 LOGD(EDU_TAG, "%s\n", Ctemp_str);
62 sprintf(Ftemp_str, "%-5.2lf", spl06_data.Ftemp);
63 LOGD(EDU_TAG, "%s\n", Ftemp_str);
64 }
65 #if 1
66 OLED_Icon_Draw(14, 4, &icon_atmp_16_16, 0);
67 OLED_Show_String(32, 6, pressure_str, 12, 1);
68
69 OLED_Icon_Draw(14, 23, &icon_asl_16_16, 0);
70 OLED_Show_String(32, 25, altitude_str, 12, 1);
71
72 OLED_Icon_Draw(14, 44, &icon_tempC_16_16, 0);
73 OLED_Show_String(30, 46, Ctemp_str, 12, 1);
74
75 OLED_Icon_Draw(66, 44, &icon_tempF_16_16, 0);
76 OLED_Show_String(82, 46, Ftemp_str, 12, 1);
77
78 OLED_Icon_Draw(2, 24, &icon_skip_left, 0);
79 OLED_Icon_Draw(122, 24, &icon_skip_right, 0);
80 #endif
81 if (g_haasboard_is_k1c) {
82 qmp6988_calc_pressure(&p_qmp6988_data);
83 } else {
84 spl06_getdata(&spl06_data);
85 }
86
87 OLED_Refresh_GRAM();
88
89 aos_msleep(500);
90 }
91
92 running = 1;
93 }
94
barometer_uninit(void)95 int barometer_uninit(void)
96 {
97 running = 0;
98
99 while (!running) {
100 aos_msleep(50);
101 }
102
103 aos_task_delete(&barometer_task_handle);
104 LOGI(EDU_TAG, "aos_task_delete barometer_task\n");
105
106 if (g_haasboard_is_k1c) {
107 qmp6988_deinit();
108 } else {
109 spl06_deinit();
110 }
111
112 return 0;
113 }
114