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