diff --git a/.vscode/settings.json b/.vscode/settings.json
index 4b2f85b..a0a0f36 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -204,7 +204,10 @@
"ads129x.h": "c",
"ads129x_if_impl.h": "c",
"ads129x_type.h": "c",
- "app_board.h": "c"
+ "app_board.h": "c",
+ "zapp.h": "c",
+ "adc_mgr.h": "c",
+ "battery_mgr_service.h": "c"
},
"files.encoding": "gbk"
}
\ No newline at end of file
diff --git a/app/app.uvoptx b/app/app.uvoptx
index 5f30502..5d0a12b 100644
--- a/app/app.uvoptx
+++ b/app/app.uvoptx
@@ -410,284 +410,20 @@
0
0
0
- .\src\board\board_beep_ctrl.c
- board_beep_ctrl.c
- 0
- 0
-
-
- 1
- 5
- 1
- 0
- 0
- 0
- .\src\board\board_adc_module_ctrl.c
- board_adc_module_ctrl.c
- 0
- 0
-
-
- 1
- 6
- 1
- 0
- 0
- 0
- .\src\board\board_battery_state.c
- board_battery_state.c
- 0
- 0
-
-
- 1
- 7
- 1
- 0
- 0
- 0
- .\src\board\board_ecg_sensor.c
- board_ecg_sensor.c
- 0
- 0
-
-
- 1
- 8
- 1
- 0
- 0
- 0
- .\src\board\board_light_ctrl.c
- board_light_ctrl.c
- 0
- 0
-
-
- 1
- 9
- 1
- 0
- 0
- 0
- .\src\board\board_ssd1306_interface.c
- board_ssd1306_interface.c
- 0
- 0
-
-
- 1
- 10
- 1
- 0
- 0
- 0
- .\src\board\board_eeprom_driver.c
- board_eeprom_driver.c
- 0
- 0
-
-
- 1
- 11
- 1
- 0
- 0
- 0
- .\src\board\board_power_mgr.c
- board_power_mgr.c
- 0
- 0
-
-
- 1
- 12
- 1
- 0
- 0
- 0
- .\src\basic_service\device_state.c
- device_state.c
- 0
- 0
-
-
- 1
- 13
- 1
- 0
- 0
- 0
- .\src\basic_service\device_version_info_mgr.c
+ .\src\app_basic_service\device_version_info_mgr.c
device_version_info_mgr.c
0
0
1
- 14
- 1
- 0
- 0
- 0
- .\src\board\ssd1306\driver_ssd1306.c
- driver_ssd1306.c
- 0
- 0
-
-
- 1
- 15
- 1
- 0
- 0
- 0
- .\src\board\ssd1306\driver_ssd1306_basic.c
- driver_ssd1306_basic.c
- 0
- 0
-
-
- 1
- 16
- 1
- 0
- 0
- 0
- .\src\board\ssd1306\fontlib.c
- fontlib.c
- 0
- 0
-
-
- 1
- 17
- 1
- 0
- 0
- 0
- .\src\board\ssd1306\wave_drawer.c
- wave_drawer.c
- 0
- 0
-
-
- 1
- 18
- 1
- 0
- 0
- 0
- .\src\service\ble_cmd_processer\ble_cmd_process_service.c
- ble_cmd_process_service.c
- 0
- 0
-
-
- 1
- 19
- 1
- 0
- 0
- 0
- .\src\service\display_mgr\display_manager.c
- display_manager.c
- 0
- 0
-
-
- 1
- 20
- 1
- 0
- 0
- 0
- .\src\service\heart_wave_sample_service\heart_ware_sample_data_mgr.c
- heart_ware_sample_data_mgr.c
- 0
- 0
-
-
- 1
- 21
- 1
- 0
- 0
- 0
- .\src\service\heart_wave_sample_service\heart_wave_sample_data_pre_process.c
- heart_wave_sample_data_pre_process.c
- 0
- 0
-
-
- 1
- 22
- 1
- 0
- 0
- 0
- .\src\service\heart_wave_sample_service\heart_wave_sample_service.c
- heart_wave_sample_service.c
- 0
- 0
-
-
- 1
- 23
- 1
- 0
- 0
- 0
- .\src\service\storage\sample_data_manager.c
- sample_data_manager.c
- 0
- 0
-
-
- 1
- 24
- 1
- 0
- 0
- 0
- .\src\service\storage\zeeprom_fs.c
- zeeprom_fs.c
- 0
- 0
-
-
- 1
- 25
- 1
- 0
- 0
- 0
- .\src\basic_service\app_event_distribute.c
- app_event_distribute.c
- 0
- 0
-
-
- 1
- 26
- 1
- 0
- 0
- 0
- .\src\board\ads129x\ads129x.c
- ads129x.c
- 0
- 0
-
-
- 1
- 27
+ 5
1
0
0
0
- .\src\board\app_board.c
- app_board.c
+ .\src\app_basic_service\zapp.c
+ zapp.c
0
0
@@ -701,7 +437,7 @@
0
2
- 28
+ 6
1
0
0
@@ -721,7 +457,7 @@
0
3
- 29
+ 7
1
0
0
@@ -733,7 +469,7 @@
3
- 30
+ 8
1
0
0
@@ -753,7 +489,7 @@
0
4
- 31
+ 9
1
0
0
@@ -773,7 +509,7 @@
0
5
- 32
+ 10
1
0
0
@@ -785,7 +521,7 @@
5
- 33
+ 11
1
0
0
@@ -797,7 +533,7 @@
5
- 34
+ 12
1
0
0
@@ -809,7 +545,7 @@
5
- 35
+ 13
1
0
0
@@ -821,7 +557,7 @@
5
- 36
+ 14
1
0
0
@@ -833,7 +569,7 @@
5
- 37
+ 15
1
0
0
@@ -845,7 +581,7 @@
5
- 38
+ 16
1
0
0
@@ -857,7 +593,7 @@
5
- 39
+ 17
1
0
0
@@ -877,7 +613,7 @@
0
6
- 40
+ 18
1
0
0
@@ -891,13 +627,13 @@
nRF_Drivers
- 1
+ 0
0
0
0
7
- 41
+ 19
1
0
0
@@ -909,7 +645,7 @@
7
- 42
+ 20
1
0
0
@@ -921,7 +657,7 @@
7
- 43
+ 21
1
0
0
@@ -933,7 +669,7 @@
7
- 44
+ 22
1
0
0
@@ -945,7 +681,7 @@
7
- 45
+ 23
1
0
0
@@ -957,7 +693,7 @@
7
- 46
+ 24
1
0
0
@@ -969,7 +705,7 @@
7
- 47
+ 25
1
0
0
@@ -981,7 +717,7 @@
7
- 48
+ 26
1
0
0
@@ -993,7 +729,7 @@
7
- 49
+ 27
1
0
0
@@ -1005,7 +741,7 @@
7
- 50
+ 28
1
0
0
@@ -1017,7 +753,7 @@
7
- 51
+ 29
1
0
0
@@ -1029,7 +765,7 @@
7
- 52
+ 30
1
0
0
@@ -1041,7 +777,7 @@
7
- 53
+ 31
1
0
0
@@ -1053,7 +789,7 @@
7
- 54
+ 32
1
0
0
@@ -1065,7 +801,7 @@
7
- 55
+ 33
1
0
0
@@ -1077,7 +813,7 @@
7
- 56
+ 34
1
0
0
@@ -1089,7 +825,7 @@
7
- 57
+ 35
1
0
0
@@ -1101,7 +837,7 @@
7
- 58
+ 36
1
0
0
@@ -1113,7 +849,7 @@
7
- 59
+ 37
1
0
0
@@ -1125,7 +861,7 @@
7
- 60
+ 38
1
0
0
@@ -1145,7 +881,7 @@
0
8
- 61
+ 39
1
0
0
@@ -1157,7 +893,7 @@
8
- 62
+ 40
1
0
0
@@ -1169,7 +905,7 @@
8
- 63
+ 41
1
0
0
@@ -1181,7 +917,7 @@
8
- 64
+ 42
1
0
0
@@ -1193,7 +929,7 @@
8
- 65
+ 43
1
0
0
@@ -1205,7 +941,7 @@
8
- 66
+ 44
1
0
0
@@ -1217,7 +953,7 @@
8
- 67
+ 45
1
0
0
@@ -1229,7 +965,7 @@
8
- 68
+ 46
1
0
0
@@ -1241,7 +977,7 @@
8
- 69
+ 47
1
0
0
@@ -1253,7 +989,7 @@
8
- 70
+ 48
1
0
0
@@ -1265,7 +1001,7 @@
8
- 71
+ 49
1
0
0
@@ -1277,7 +1013,7 @@
8
- 72
+ 50
1
0
0
@@ -1289,7 +1025,7 @@
8
- 73
+ 51
1
0
0
@@ -1301,7 +1037,7 @@
8
- 74
+ 52
1
0
0
@@ -1313,7 +1049,7 @@
8
- 75
+ 53
1
0
0
@@ -1325,7 +1061,7 @@
8
- 76
+ 54
1
0
0
@@ -1337,7 +1073,7 @@
8
- 77
+ 55
1
0
0
@@ -1349,7 +1085,7 @@
8
- 78
+ 56
1
0
0
@@ -1361,7 +1097,7 @@
8
- 79
+ 57
1
0
0
@@ -1373,7 +1109,7 @@
8
- 80
+ 58
1
0
0
@@ -1385,7 +1121,7 @@
8
- 81
+ 59
1
0
0
@@ -1397,7 +1133,7 @@
8
- 82
+ 60
1
0
0
@@ -1409,7 +1145,7 @@
8
- 83
+ 61
1
0
0
@@ -1421,7 +1157,7 @@
8
- 84
+ 62
1
0
0
@@ -1433,7 +1169,7 @@
8
- 85
+ 63
1
0
0
@@ -1445,7 +1181,7 @@
8
- 86
+ 64
1
0
0
@@ -1457,7 +1193,7 @@
8
- 87
+ 65
1
0
0
@@ -1477,7 +1213,7 @@
0
9
- 88
+ 66
1
0
0
@@ -1489,7 +1225,7 @@
9
- 89
+ 67
1
0
0
@@ -1501,7 +1237,7 @@
9
- 90
+ 68
1
0
0
@@ -1513,7 +1249,7 @@
9
- 91
+ 69
1
0
0
@@ -1525,7 +1261,7 @@
9
- 92
+ 70
1
0
0
@@ -1537,7 +1273,7 @@
9
- 93
+ 71
1
0
0
@@ -1557,7 +1293,7 @@
0
10
- 94
+ 72
1
0
0
@@ -1569,7 +1305,7 @@
10
- 95
+ 73
1
0
0
@@ -1581,7 +1317,7 @@
10
- 96
+ 74
1
0
0
@@ -1601,7 +1337,7 @@
0
11
- 97
+ 75
1
0
0
@@ -1613,7 +1349,7 @@
11
- 98
+ 76
1
0
0
@@ -1625,7 +1361,7 @@
11
- 99
+ 77
1
0
0
@@ -1645,7 +1381,7 @@
0
12
- 100
+ 78
1
0
0
@@ -1657,7 +1393,7 @@
12
- 101
+ 79
1
0
0
@@ -1669,7 +1405,7 @@
12
- 102
+ 80
1
0
0
@@ -1689,7 +1425,7 @@
0
13
- 103
+ 81
1
0
0
@@ -1701,7 +1437,7 @@
13
- 104
+ 82
1
0
0
@@ -1721,7 +1457,7 @@
0
14
- 105
+ 83
1
0
0
@@ -1733,7 +1469,7 @@
14
- 106
+ 84
1
0
0
@@ -1745,7 +1481,7 @@
14
- 107
+ 85
1
0
0
@@ -1757,7 +1493,7 @@
14
- 108
+ 86
1
0
0
@@ -1770,6 +1506,38 @@
+ app_service
+ 1
+ 0
+ 0
+ 0
+
+ 15
+ 87
+ 1
+ 0
+ 0
+ 0
+ .\src\app_service\battery_mgr_service.c
+ battery_mgr_service.c
+ 0
+ 0
+
+
+ 15
+ 88
+ 1
+ 0
+ 0
+ 0
+ .\src\app_service\adc_mgr.c
+ adc_mgr.c
+ 0
+ 0
+
+
+
+
::CMSIS
0
0
diff --git a/app/app.uvprojx b/app/app.uvprojx
index 13cc01b..180d424 100644
--- a/app/app.uvprojx
+++ b/app/app.uvprojx
@@ -399,124 +399,14 @@
.\src\main.c
- board_beep_ctrl.c
- 1
- .\src\board\board_beep_ctrl.c
-
-
- board_adc_module_ctrl.c
- 1
- .\src\board\board_adc_module_ctrl.c
-
-
- board_battery_state.c
- 1
- .\src\board\board_battery_state.c
-
-
- board_ecg_sensor.c
- 1
- .\src\board\board_ecg_sensor.c
-
-
- board_light_ctrl.c
- 1
- .\src\board\board_light_ctrl.c
-
-
- board_ssd1306_interface.c
- 1
- .\src\board\board_ssd1306_interface.c
-
-
- board_eeprom_driver.c
- 1
- .\src\board\board_eeprom_driver.c
-
-
- board_power_mgr.c
- 1
- .\src\board\board_power_mgr.c
-
-
- device_state.c
- 1
- .\src\basic_service\device_state.c
-
-
device_version_info_mgr.c
1
- .\src\basic_service\device_version_info_mgr.c
-
-
- driver_ssd1306.c
- 1
- .\src\board\ssd1306\driver_ssd1306.c
-
-
- driver_ssd1306_basic.c
- 1
- .\src\board\ssd1306\driver_ssd1306_basic.c
-
-
- fontlib.c
- 1
- .\src\board\ssd1306\fontlib.c
-
-
- wave_drawer.c
- 1
- .\src\board\ssd1306\wave_drawer.c
-
-
- ble_cmd_process_service.c
- 1
- .\src\service\ble_cmd_processer\ble_cmd_process_service.c
-
-
- display_manager.c
- 1
- .\src\service\display_mgr\display_manager.c
-
-
- heart_ware_sample_data_mgr.c
- 1
- .\src\service\heart_wave_sample_service\heart_ware_sample_data_mgr.c
-
-
- heart_wave_sample_data_pre_process.c
- 1
- .\src\service\heart_wave_sample_service\heart_wave_sample_data_pre_process.c
-
-
- heart_wave_sample_service.c
- 1
- .\src\service\heart_wave_sample_service\heart_wave_sample_service.c
-
-
- sample_data_manager.c
- 1
- .\src\service\storage\sample_data_manager.c
+ .\src\app_basic_service\device_version_info_mgr.c
- zeeprom_fs.c
+ zapp.c
1
- .\src\service\storage\zeeprom_fs.c
-
-
- app_event_distribute.c
- 1
- .\src\basic_service\app_event_distribute.c
-
-
- ads129x.c
- 1
- .\src\board\ads129x\ads129x.c
-
-
- app_board.c
- 1
- .\src\board\app_board.c
+ .\src\app_basic_service\zapp.c
@@ -3898,6 +3788,21 @@
+ app_service
+
+
+ battery_mgr_service.c
+ 1
+ .\src\app_service\battery_mgr_service.c
+
+
+ adc_mgr.c
+ 1
+ .\src\app_service\adc_mgr.c
+
+
+
+
::CMSIS
@@ -4298,124 +4203,14 @@
.\src\main.c
- board_beep_ctrl.c
- 1
- .\src\board\board_beep_ctrl.c
-
-
- board_adc_module_ctrl.c
- 1
- .\src\board\board_adc_module_ctrl.c
-
-
- board_battery_state.c
- 1
- .\src\board\board_battery_state.c
-
-
- board_ecg_sensor.c
- 1
- .\src\board\board_ecg_sensor.c
-
-
- board_light_ctrl.c
- 1
- .\src\board\board_light_ctrl.c
-
-
- board_ssd1306_interface.c
- 1
- .\src\board\board_ssd1306_interface.c
-
-
- board_eeprom_driver.c
- 1
- .\src\board\board_eeprom_driver.c
-
-
- board_power_mgr.c
- 1
- .\src\board\board_power_mgr.c
-
-
- device_state.c
- 1
- .\src\basic_service\device_state.c
-
-
device_version_info_mgr.c
1
- .\src\basic_service\device_version_info_mgr.c
-
-
- driver_ssd1306.c
- 1
- .\src\board\ssd1306\driver_ssd1306.c
-
-
- driver_ssd1306_basic.c
- 1
- .\src\board\ssd1306\driver_ssd1306_basic.c
-
-
- fontlib.c
- 1
- .\src\board\ssd1306\fontlib.c
-
-
- wave_drawer.c
- 1
- .\src\board\ssd1306\wave_drawer.c
-
-
- ble_cmd_process_service.c
- 1
- .\src\service\ble_cmd_processer\ble_cmd_process_service.c
-
-
- display_manager.c
- 1
- .\src\service\display_mgr\display_manager.c
-
-
- heart_ware_sample_data_mgr.c
- 1
- .\src\service\heart_wave_sample_service\heart_ware_sample_data_mgr.c
-
-
- heart_wave_sample_data_pre_process.c
- 1
- .\src\service\heart_wave_sample_service\heart_wave_sample_data_pre_process.c
-
-
- heart_wave_sample_service.c
- 1
- .\src\service\heart_wave_sample_service\heart_wave_sample_service.c
-
-
- sample_data_manager.c
- 1
- .\src\service\storage\sample_data_manager.c
+ .\src\app_basic_service\device_version_info_mgr.c
- zeeprom_fs.c
+ zapp.c
1
- .\src\service\storage\zeeprom_fs.c
-
-
- app_event_distribute.c
- 1
- .\src\basic_service\app_event_distribute.c
-
-
- ads129x.c
- 1
- .\src\board\ads129x\ads129x.c
-
-
- app_board.c
- 1
- .\src\board\app_board.c
+ .\src\app_basic_service\zapp.c
@@ -7797,6 +7592,21 @@
+ app_service
+
+
+ battery_mgr_service.c
+ 1
+ .\src\app_service\battery_mgr_service.c
+
+
+ adc_mgr.c
+ 1
+ .\src\app_service\adc_mgr.c
+
+
+
+
::CMSIS
diff --git a/app/src/app_basic_service/basic/event.h b/app/src/app_basic_service/basic/event.h
new file mode 100644
index 0000000..9a3d33d
--- /dev/null
+++ b/app/src/app_basic_service/basic/event.h
@@ -0,0 +1,33 @@
+#pragma once
+#include
+#include
+
+#include "aproject_config/config.h"
+typedef enum {
+ kplod_connected_event = 0, // 导联连接事件
+ kplod_disconnected_event, // 导联断开事件
+ kplod_connecting_event, // 导联连接中事件
+
+ kbattery_start_charge_event, // 充电事件
+ kbattery_end_charge_event, // 充电结束事件
+
+ kevent_tmr_scheduler_event, // 定时器调度事件
+
+ kevent_capture_256data_event, // 采样数据回调
+ kevent_capture_little_data_block_event, // 单次采样数据回调
+} app_event_type_t;
+
+typedef int32_t one_frame_t;
+
+typedef struct {
+ app_event_type_t eventType;
+ union {
+ uint32_t plod_connected_accumulation_time; // 导联连接累计时间
+ uint8_t* capture_data_cache; // 实时采样数据,数据长度为256字节
+ struct {
+ uint32_t frameIndex;
+ uint32_t timestamp;
+ one_frame_t data[LITTLE_DATA_BLOCK_FRAME_NUM];
+ } little_data_block;
+ } val;
+} app_event_t;
\ No newline at end of file
diff --git a/app/src/app_basic_service/basic/gstate.h b/app/src/app_basic_service/basic/gstate.h
new file mode 100644
index 0000000..957b765
--- /dev/null
+++ b/app/src/app_basic_service/basic/gstate.h
@@ -0,0 +1,10 @@
+#pragma once
+#include
+#include
+
+#include "aproject_config/config.h"
+
+typedef struct {
+ bool sample_capture_state_is_over30s; // 采样是否超过30s
+ bool is_preview; // 当前是否正在预览
+} gstate_t;
diff --git a/app/src/basic_service/app_event.h b/app/src/app_basic_service/basic/state.h
similarity index 56%
rename from app/src/basic_service/app_event.h
rename to app/src/app_basic_service/basic/state.h
index 793b18a..9fec6cb 100644
--- a/app/src/basic_service/app_event.h
+++ b/app/src/app_basic_service/basic/state.h
@@ -4,35 +4,6 @@
#include "aproject_config/config.h"
typedef enum {
- kplod_connected_event = 0, // 导联连接事件
- kplod_disconnected_event, // 导联断开事件
- kplod_connecting_event, // 导联连接中事件
-
- kbattery_start_charge_event, // 充电事件
- kbattery_end_charge_event, // 充电结束事件
-
- kevent_tmr_scheduler_event, // 定时器调度事件
-
- kevent_capture_256data_event, // 采样数据回调
- kevent_capture_little_data_block_event, // 单次采样数据回调
-} app_event_type_t;
-
-typedef int32_t one_frame_t;
-
-typedef struct {
- app_event_type_t eventType;
- union {
- uint32_t plod_connected_accumulation_time; // 导联连接累计时间
- uint8_t* capture_data_cache; // 实时采样数据,数据长度为256字节
- struct {
- uint32_t frameIndex;
- uint32_t timestamp;
- one_frame_t data[LITTLE_DATA_BLOCK_FRAME_NUM];
- } little_data_block;
- } val;
-} app_event_t;
-
-typedef enum {
// 待机
kdevice_state_standby = 0,
// 充电中
diff --git a/app/src/basic_service/device_version_info_mgr.c b/app/src/app_basic_service/device_version_info_mgr.c
similarity index 100%
rename from app/src/basic_service/device_version_info_mgr.c
rename to app/src/app_basic_service/device_version_info_mgr.c
diff --git a/app/src/basic_service/device_version_info_mgr.h b/app/src/app_basic_service/device_version_info_mgr.h
similarity index 100%
rename from app/src/basic_service/device_version_info_mgr.h
rename to app/src/app_basic_service/device_version_info_mgr.h
diff --git a/app/src/app_basic_service/zapp.c b/app/src/app_basic_service/zapp.c
new file mode 100644
index 0000000..ce9e09d
--- /dev/null
+++ b/app/src/app_basic_service/zapp.c
@@ -0,0 +1,82 @@
+#include "zapp.h"
+
+#include "znordic.h"
+
+typedef struct {
+ app_event_listener_t cbfunc;
+} AppEventListener;
+
+static device_state_t m_device_state = kdevice_state_standby; // 设备状态
+static uint32_t m_change_to_cur_state_tp = 0; // 切换到当前状态的时间戳
+static on_state_change_t m_onstate_change;
+static AppEventListener m_listener[10];
+static int m_listener_num = 0;
+
+APP_TIMER_DEF(m_state_machine_driver_tmr); // 状态机驱动定时器
+#define SCHED_MAX_EVENT_DATA_SIZE MAX(sizeof(app_event_t), APP_TIMER_SCHED_EVENT_DATA_SIZE)
+
+/***********************************************************************************************************************
+ * CALL BAK *
+ ***********************************************************************************************************************/
+static void state_machine_driver_tmr_cb(void* p_context) { //
+ static app_event_t appevent;
+ appevent.eventType = kevent_tmr_scheduler_event;
+ wd_feed();
+ zapp_ebus_push_event(&appevent);
+}
+
+static void app_event_process_cb(void* p_event_data, uint16_t event_size) {
+ for (int i = 0; i < m_listener_num; i++) {
+ if (m_listener[i].cbfunc) {
+ m_listener[i].cbfunc(p_event_data, event_size);
+ }
+ }
+}
+
+/***********************************************************************************************************************
+ * EXTERN *
+ ***********************************************************************************************************************/
+void zapp_early_init() { APP_SCHED_INIT(SCHED_MAX_EVENT_DATA_SIZE, 20); }
+void zapp_init() { ZERROR_CHECK(app_timer_create(&m_state_machine_driver_tmr, APP_TIMER_MODE_REPEATED, state_machine_driver_tmr_cb)); }
+void zapp_start_schedule() { ZERROR_CHECK(app_timer_start(m_state_machine_driver_tmr, APP_TIMER_TICKS(300), NULL)); }
+
+/***********************************************************************************************************************
+ * state_machine *
+ ***********************************************************************************************************************/
+void zapp_state_machine_reg_state_change_listener(on_state_change_t listener) { m_onstate_change = listener; }
+void zapp_state_machine_change_state(device_state_t tostate) {
+ ZLOGI("change state from %s to %s", device_state_to_str(m_device_state), device_state_to_str(tostate));
+ device_state_t nowstate = m_device_state;
+
+ m_device_state = tostate;
+ if (m_onstate_change) {
+ m_onstate_change(nowstate, m_device_state);
+ }
+ m_change_to_cur_state_tp = znordic_getpower_on_ms();
+}
+device_state_t zapp_state_machine_now_state() { return m_device_state; }
+uint32_t zapp_state_machine_haspassed_ms() { return znordic_haspassed_ms(m_change_to_cur_state_tp); }
+
+/***********************************************************************************************************************
+ * EBUS *
+ ***********************************************************************************************************************/
+void zapp_ebus_push_event(app_event_t* event) { app_event_process_cb(event, sizeof(app_event_t)); }
+void zapp_ebus_reg_event_listener(app_event_listener_t listener) {
+ ZASSERT(m_listener_num < 10);
+ m_listener[m_listener_num++].cbfunc = listener;
+}
+
+/***********************************************************************************************************************
+ * GSTATE *
+ ***********************************************************************************************************************/
+static gstate_t gstate;
+gstate_t* zapp_get_gstate() { return &gstate; }
+
+void zapp_gstate_set_is_over30s(bool over30s) {
+ gstate_t* p_gstate = zapp_get_gstate();
+ p_gstate->sample_capture_state_is_over30s = over30s;
+}
+void zapp_gstate_set_preview_state(bool is_preview) {
+ gstate_t* p_gstate = zapp_get_gstate();
+ p_gstate->is_preview = is_preview;
+}
diff --git a/app/src/app_basic_service/zapp.h b/app/src/app_basic_service/zapp.h
new file mode 100644
index 0000000..b6ac5db
--- /dev/null
+++ b/app/src/app_basic_service/zapp.h
@@ -0,0 +1,37 @@
+#pragma once
+#include
+#include
+
+#include "aproject_config/config.h"
+#include "basic/event.h"
+#include "basic/gstate.h"
+#include "basic/state.h"
+
+typedef void (*on_state_change_t)(device_state_t from, device_state_t to);
+typedef void (*app_event_listener_t)(void* p_event_data, uint16_t event_size);
+
+void zapp_early_init();
+void zapp_init();
+void zapp_start_schedule();
+
+/***********************************************************************************************************************
+ * StateMachine *
+ ***********************************************************************************************************************/
+void zapp_state_machine_reg_state_change_listener(on_state_change_t listener);
+void zapp_state_machine_change_state(device_state_t tostate);
+device_state_t zapp_state_machine_now_state();
+device_state_t zapp_state_machine_now_state();
+uint32_t zapp_state_machine_haspassed_ms();
+
+/***********************************************************************************************************************
+ * event bus *
+ ***********************************************************************************************************************/
+void zapp_ebus_push_event(app_event_t* event);
+void zapp_ebus_reg_event_listener(app_event_listener_t listener);
+
+/***********************************************************************************************************************
+ * GSTATE *
+ ***********************************************************************************************************************/
+gstate_t* zapp_get_gstate();
+void zapp_gstate_set_is_over30s(bool over30s);
+void zapp_gstate_set_preview_state(bool is_preview);
diff --git a/app/src/app_service/adc_mgr.c b/app/src/app_service/adc_mgr.c
new file mode 100644
index 0000000..4034d22
--- /dev/null
+++ b/app/src/app_service/adc_mgr.c
@@ -0,0 +1,37 @@
+
+#include "adc_mgr.h"
+
+/*******************************************************************************
+ * ADC *
+ *******************************************************************************/
+
+static uint8_t m_now_adc_channel = 0xff;
+
+void adc_mgr_set_ch(uint8_t ch) {
+ if (m_now_adc_channel != ch) {
+ if (m_now_adc_channel != 0xff) nrfx_saadc_channel_uninit(m_now_adc_channel);
+ if (ch == BATTERY_ADC_CHANNEL) {
+ nrf_saadc_channel_config_t channel_config = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(BATTERY_ADC_PIN);
+ channel_config.acq_time = NRF_SAADC_ACQTIME_40US;
+ ZERROR_CHECK(nrfx_saadc_channel_init(BATTERY_ADC_CHANNEL, &channel_config));
+ }
+ }
+ m_now_adc_channel = ch;
+}
+
+void adc_mgr_init() {}
+
+void adc_mgr_load() {
+ nrf_drv_saadc_config_t adccfg = NRFX_SAADC_DEFAULT_CONFIG;
+ adccfg.resolution = NRF_SAADC_RESOLUTION_12BIT; // 4096 等于满采样率
+ ZERROR_CHECK(nrf_drv_saadc_init(&adccfg, NULL));
+}
+void adc_mgr_unload() {
+ adc_mgr_set_ch(0xff);
+ nrf_drv_saadc_uninit();
+}
+
+int16_t adc_mgr_get_val(uint8_t ch) {
+ adc_mgr_set_ch(ch);
+ return znrf_adc_channel_read_val(ch);
+}
diff --git a/app/src/app_service/adc_mgr.h b/app/src/app_service/adc_mgr.h
new file mode 100644
index 0000000..bdae805
--- /dev/null
+++ b/app/src/app_service/adc_mgr.h
@@ -0,0 +1,14 @@
+#pragma once
+
+#include
+#include
+
+#include "aproject_config/config.h"
+#include "znordic.h"
+
+void adc_mgr_init();
+
+void adc_mgr_load();
+void adc_mgr_unload();
+
+int16_t adc_mgr_get_val(uint8_t ch);
diff --git a/app/src/app_service/battery_mgr_service.c b/app/src/app_service/battery_mgr_service.c
new file mode 100644
index 0000000..4f22cda
--- /dev/null
+++ b/app/src/app_service/battery_mgr_service.c
@@ -0,0 +1,46 @@
+#include "battery_mgr_service.h"
+
+#include "adc_mgr.h"
+#include "app_basic_service/zapp.h"
+
+APP_TIMER_DEF(battery_state_detect_tmr); //
+static bool m_battery_is_chargeing = false; //
+
+static bool battery_get_chargeing_state() { return !nrf_gpio_pin_read(BATTERY_CHARGE_DETECT_PIN); }
+static void module_tmr_cb(void *context) { //
+ bool chargeing_state = battery_get_chargeing_state();
+ if (chargeing_state != m_battery_is_chargeing) {
+ app_event_t event;
+ memset(&event, 0, sizeof(event));
+ if (chargeing_state) {
+ ZLOGI("battery is charging");
+ event.eventType = kbattery_start_charge_event;
+ } else {
+ ZLOGI("battery end charging");
+ event.eventType = kbattery_end_charge_event;
+ }
+ zapp_ebus_push_event(&event);
+ }
+ m_battery_is_chargeing = chargeing_state;
+}
+
+/***********************************************************************************************************************
+ * extern *
+ ***********************************************************************************************************************/
+void BatteryMgrService_init() {
+ adc_mgr_init();
+ /**
+ * @brief 500ms启动定时器500ms检查一次当前是否正在充电
+ */
+ nrf_gpio_cfg_sense_input(BATTERY_CHARGE_DETECT_PIN, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_NOSENSE);
+ app_timer_create(&battery_state_detect_tmr, APP_TIMER_MODE_REPEATED, module_tmr_cb);
+ app_timer_start(battery_state_detect_tmr, APP_TIMER_TICKS(500), NULL);
+}
+
+void BatteryMgrService_load() { adc_mgr_load(); }
+void BatteryMgrService_unload() {
+ // adc是公共资源,在最上层进行unload
+}
+
+int16_t BatteryMgrService_get_battery_level() { return 30; }
+int16_t BatteryMgrService_get_charging_state() { return !nrf_gpio_pin_read(BATTERY_CHARGE_DETECT_PIN); }
\ No newline at end of file
diff --git a/app/src/app_service/battery_mgr_service.h b/app/src/app_service/battery_mgr_service.h
new file mode 100644
index 0000000..d327358
--- /dev/null
+++ b/app/src/app_service/battery_mgr_service.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#include
+#include
+
+#include "aproject_config/config.h"
+#include "adc_mgr.h"
+#include "znordic.h"
+
+void BatteryMgrService_init();
+
+void BatteryMgrService_load();
+void BatteryMgrService_unload();
+
+
+int16_t BatteryMgrService_get_battery_level();
+int16_t BatteryMgrService_get_charging_state();
diff --git a/app/src/service/ble_cmd_processer/ble_cmd_process_service.c b/app/src/bakservice/ble_cmd_processer/ble_cmd_process_service.c
similarity index 52%
rename from app/src/service/ble_cmd_processer/ble_cmd_process_service.c
rename to app/src/bakservice/ble_cmd_processer/ble_cmd_process_service.c
index 903749c..ea9e6fd 100644
--- a/app/src/service/ble_cmd_processer/ble_cmd_process_service.c
+++ b/app/src/bakservice/ble_cmd_processer/ble_cmd_process_service.c
@@ -259,245 +259,3 @@ static void send_success_receipt(ify_hrs_packet_t* rxpacket, int32_t emptydatasi
zdatachannel_data_send2(txbuf, sendlen);
}
-/*******************************************************************************
- * 下发消息处理 *
- *******************************************************************************/
-void ble_cmder_process_rx(uint8_t* rx, int len) {
- if (len < sizeof(ify_hrs_packet_t)) {
- ZLOGI("rx len error:%d", len);
- return;
- }
-
- ify_hrs_packet_t* rxheader = (ify_hrs_packet_t*)rx;
- ify_hrs_packet_t* txheader = (ify_hrs_packet_t*)txbuf;
- ify_hrs_cmd_t cmd = (ify_hrs_cmd_t)rxheader->cmd;
- memset(txbuf, 0, sizeof(txbuf));
-
- txheader->cmd = rxheader->cmd;
- txheader->frame_index = rxheader->frame_index;
- txheader->frame_type = kifyhrs_pt_cmd_receipt;
-
- ZLOGI("rx cmd:%d index:%d datalen:%d", cmd, rxheader->frame_index, len - sizeof(ify_hrs_packet_t));
- NRF_LOG_HEXDUMP_INFO(rx, len);
-
- if (cmd == ify_hrs_cmd_read_device_version) {
- device_version_info_receipt_t* receipt = (device_version_info_receipt_t*)txheader->data;
- uint16_t sendlen = sizeof(ify_hrs_packet_t) + sizeof(device_version_info_receipt_t);
-
- receipt->blestack_version = device_info_read_blestack_version();
- receipt->bootloader_version = device_info_read_bootloader_version();
- receipt->firmware_version = device_info_read_firmware_version();
- receipt->hardware_version = device_info_read_hardware_version();
- zdatachannel_data_send2(txbuf, sendlen);
- }
-
- else if (cmd == ify_hrs_cmd_read_sensor_info) {
- sensor_info_receipt_t* receipt = (sensor_info_receipt_t*)txheader->data;
- uint16_t sendlen = sizeof(ify_hrs_packet_t) + sizeof(sensor_info_receipt_t);
-
- receipt->sensor_num = 1;
- receipt->sensor_precision = SAMPLE_PRECISION;
- receipt->sensor_sample_rate = SAMPLE_RATE / 10;
- receipt->sensor0_pos = kifyhrs_sensor_pos_none;
- receipt->sensor1_pos = kifyhrs_sensor_pos_none;
- receipt->sensor2_pos = kifyhrs_sensor_pos_none;
-
- zdatachannel_data_send2(txbuf, sendlen);
- }
-
- else if (cmd == ify_hrs_cmd_read_device_state) {
- device_state_receipt_t* receipt = (device_state_receipt_t*)txheader->data;
- uint16_t sendlen = sizeof(ify_hrs_packet_t) + sizeof(device_state_receipt_t);
-
- receipt->drop_state0 = (0);
- receipt->drop_state1 = 0x00;
- receipt->device_state0.sampling_state = (ds_now_state() == kdevice_state_sampling);
- receipt->device_state0.report_state = global_state_get()->preivew_state;
- receipt->device_state0.low_battery = (BoardBattery_get_battery_level() < APP_LOW_BATTERY_WARNING_LIMIT);
- receipt->device_state0.full_storge = (sample_data_mgr_storage_is_full());
-
- receipt->device_state1 = 0;
- receipt->powerlevel = BoardBattery_get_battery_level();
- receipt->storage_item_num = sample_data_mgr_get_file_num();
-
- zdatachannel_data_send2(txbuf, sendlen);
- }
-
- else if (cmd == ify_hrs_cmd_read_time) {
- read_time_receipt_t* receipt = (read_time_receipt_t*)txheader->data;
- uint16_t sendlen = sizeof(ify_hrs_packet_t) + sizeof(read_time_receipt_t);
- static ztm_t ztm;
- znordic_rtc_gettime(&ztm);
-
- receipt->year = (ztm.tm_year + 1900 - 2000);
- receipt->month = ztm.tm_mon + 1;
- receipt->day = ztm.tm_mday;
- receipt->hour = ztm.tm_hour;
- receipt->minute = ztm.tm_min;
- receipt->second = ztm.tm_sec;
- zdatachannel_data_send2(txbuf, sendlen);
- }
-
- else if (cmd == ify_hrs_cmd_sync_time) {
- sync_time_cmd_t* cmd = (sync_time_cmd_t*)rxheader->data;
- uint16_t sendlen = sizeof(ify_hrs_packet_t);
-
- znordic_rtc_settime(cmd->year + 2000, cmd->month, cmd->day, cmd->hour, cmd->minute, cmd->second);
- zdatachannel_data_send2(txbuf, sendlen);
- }
-
- else if (cmd == ify_hrs_cmd_start_upload_record) {
- send_error_receipt(rxheader, kifyhrs_ecode_cmd_not_support);
- }
-
- else if (cmd == ify_hrs_cmd_stop_upload_record) {
- send_error_receipt(rxheader, kifyhrs_ecode_cmd_not_support);
- }
-
- else if (cmd == ify_hrs_cmd_start_realtime_preview) {
- global_state_set_preview_state(true);
- send_success_receipt(rxheader, 0);
- }
-
- else if (cmd == ify_hrs_cmd_stop_realtime_preview) {
- global_state_set_preview_state(false);
- send_success_receipt(rxheader, 0);
- }
-
- else if (cmd == ify_hrs_cmd_read_records_info) {
- // 指令 10-读取采样记录头部信息
- read_record_info_cmd_t* cmd = (read_record_info_cmd_t*)rxheader->data;
- read_record_info_receipt_t* receipt = (read_record_info_receipt_t*)txheader->data;
- uint16_t sendlen = sizeof(ify_hrs_packet_t) + sizeof(read_record_info_receipt_t);
-
- uint8_t recordoff = cmd->record_index;
-
- // 采样时不支持
- if (ds_now_state() != kdevice_state_home) {
- send_error_receipt(rxheader, kifyhrs_ecode_device_busy);
- return;
- }
-
- sample_data_fileinfo_list_t* recordlist = sample_data_mgr_get_fileinfo_list();
- if (recordoff >= recordlist->count) {
- send_error_receipt(rxheader, kifyhrs_ecode_no_record_find);
- return;
- }
-
- sample_data_fileinfo_t* fileinfo = recordlist->fileinfo[recordoff];
- memcpy(receipt->record_id, fileinfo->filename, 6);
- receipt->frameNum = fileinfo->size / 2; // 2byte per frame
- receipt->dataSize = fileinfo->size;
- receipt->sensorNum = 1;
- receipt->captureRate = SAMPLE_RATE / 10;
- receipt->capturePrecision = SAMPLE_PRECISION;
- receipt->compressAlgorithm = 0;
- receipt->checksum = fileinfo->checksum;
- zdatachannel_data_send2(txbuf, sendlen);
-
- }
-
- else if (cmd == ify_hrs_cmd_del_record) {
- // 指令 11-删除采样记录
- del_record_cmd_t* cmd = (del_record_cmd_t*)rxheader->data;
-
- static sample_data_filename_t filename;
- memset(&filename, 0, sizeof(filename));
- memcpy(&filename, cmd->record_id, sizeof(cmd->record_id));
-
- // 采样时不支持
- if (ds_now_state() != kdevice_state_home) {
- send_error_receipt(rxheader, kifyhrs_ecode_device_busy);
- return;
- }
-
- int ecode = sample_data_mgr_delete_file(&filename);
- if (ecode == 0) {
- send_success_receipt(rxheader, 0);
- } else {
- send_error_receipt(rxheader, kifyhrs_ecode_unkown_error);
- }
- }
-
- else if (cmd == ify_hrs_cmd_start_upload_record) { // 12 0x0C
- // 指令 12-上传采集记录
- start_upload_record_cmd_t* cmd = (start_upload_record_cmd_t*)rxheader->data;
-
- static sample_data_filename_t filename;
- memset(&filename, 0, sizeof(filename));
- memcpy(&filename, cmd->record_id, sizeof(cmd->record_id));
-
- // 采样时不支持
- if (ds_now_state() != kdevice_state_home) {
- send_error_receipt(rxheader, kifyhrs_ecode_device_busy);
- return;
- }
-
- int ecode = ble_start_upload_record(&filename);
- if (ecode == 0) {
- ify_hrs_packet_t* txheader = (ify_hrs_packet_t*)txbuf;
- uint16_t sendlen = sizeof(ify_hrs_packet_t) + 1; // 凑齐4BYTE,方便调试
- txheader->cmd = rxheader->cmd;
- txheader->frame_index = rxheader->frame_index;
- txheader->frame_type = kifyhrs_pt_cmd_receipt;
-
- zdatachannel_data_send2(txbuf, sendlen);
- } else {
- send_error_receipt(rxheader, ecode);
- }
- }
-
- else if (cmd == ify_hrs_cmd_stop_upload_record) {
- ble_stop_upload_record();
- send_success_receipt(rxheader, 0);
- }
-
- else if (cmd == ify_hrs_cmd_enter_ota) {
- send_error_receipt(rxheader, kifyhrs_ecode_cmd_not_support);
- }
-
- else if (cmd == ify_hrs_cmd_read_sn) {
- read_sn_receipt_t* receipt = (read_sn_receipt_t*)txheader->data;
- uint16_t sendlen = sizeof(ify_hrs_packet_t) + sizeof(read_sn_receipt_t);
- device_info_read_sn((sn_t*)&receipt->sn);
- zdatachannel_data_send2(txbuf, sendlen);
- }
-
- else if (cmd == ify_hrs_cmd_reset) {
- NVIC_SystemReset();
- }
-
- /***********************************************************************************************************************
- * 测试指令 *
- ***********************************************************************************************************************/
-
- // void hwss_start_capture(void);
- // void hwss_start_prepare_capture(void);
- // void hwss_stop_capture(void);
-
- // void hwss_subic_write_reg(uint8_t addr, uint8_t val);
- // uint8_t hwss_subic_read_reg(uint8_t addr);
-
- // else if (cmd == ify_hrs_test_cmd_start_capture) {
- // hwss_start_prepare_capture();
- // hwss_start_capture();
- // send_success_receipt(rxheader, 0);
- // } else if (cmd == ify_hrs_test_cmd_stop_capture) {
- // hwss_stop_capture();
- // send_success_receipt(rxheader, 0);
- // } else if (cmd == ify_hrs_test_cmd_read_reg) {
- // uint8_t regadd = rxheader->data[0];
- // uint8_t regval = hwss_subic_read_reg(regadd);
- // txheader->data[0] = regval;
- // send_success_receipt(rxheader, 1);
- // } else if (cmd == ify_hrs_test_cmd_write_reg) {
- // uint8_t regadd = rxheader->data[0];
- // uint8_t regval = rxheader->data[1];
- // hwss_subic_write_reg(regadd, regval);
- // send_success_receipt(rxheader, 0);
- // }
- //
- else {
- send_error_receipt(rxheader, kifyhrs_ecode_cmd_not_support);
- }
-}
diff --git a/app/src/service/ble_cmd_processer/ble_cmd_process_service.h b/app/src/bakservice/ble_cmd_processer/ble_cmd_process_service.h
similarity index 100%
rename from app/src/service/ble_cmd_processer/ble_cmd_process_service.h
rename to app/src/bakservice/ble_cmd_processer/ble_cmd_process_service.h
diff --git a/app/src/service/display_mgr/display_manager.c b/app/src/bakservice/display_mgr/display_manager.c
similarity index 100%
rename from app/src/service/display_mgr/display_manager.c
rename to app/src/bakservice/display_mgr/display_manager.c
diff --git a/app/src/service/display_mgr/display_manager.h b/app/src/bakservice/display_mgr/display_manager.h
similarity index 100%
rename from app/src/service/display_mgr/display_manager.h
rename to app/src/bakservice/display_mgr/display_manager.h
diff --git a/app/src/service/display_mgr/font.h b/app/src/bakservice/display_mgr/font.h
similarity index 100%
rename from app/src/service/display_mgr/font.h
rename to app/src/bakservice/display_mgr/font.h
diff --git a/app/src/service/heart_wave_sample_service/heart_ware_sample_data_mgr.c b/app/src/bakservice/heart_wave_sample_service/heart_ware_sample_data_mgr.c
similarity index 100%
rename from app/src/service/heart_wave_sample_service/heart_ware_sample_data_mgr.c
rename to app/src/bakservice/heart_wave_sample_service/heart_ware_sample_data_mgr.c
diff --git a/app/src/service/heart_wave_sample_service/heart_ware_sample_data_mgr.h b/app/src/bakservice/heart_wave_sample_service/heart_ware_sample_data_mgr.h
similarity index 100%
rename from app/src/service/heart_wave_sample_service/heart_ware_sample_data_mgr.h
rename to app/src/bakservice/heart_wave_sample_service/heart_ware_sample_data_mgr.h
diff --git a/app/src/service/heart_wave_sample_service/heart_wave_sample_data_pre_process.c b/app/src/bakservice/heart_wave_sample_service/heart_wave_sample_data_pre_process.c
similarity index 100%
rename from app/src/service/heart_wave_sample_service/heart_wave_sample_data_pre_process.c
rename to app/src/bakservice/heart_wave_sample_service/heart_wave_sample_data_pre_process.c
diff --git a/app/src/service/heart_wave_sample_service/heart_wave_sample_data_pre_process.h b/app/src/bakservice/heart_wave_sample_service/heart_wave_sample_data_pre_process.h
similarity index 100%
rename from app/src/service/heart_wave_sample_service/heart_wave_sample_data_pre_process.h
rename to app/src/bakservice/heart_wave_sample_service/heart_wave_sample_data_pre_process.h
diff --git a/app/src/service/heart_wave_sample_service/heart_wave_sample_service.c b/app/src/bakservice/heart_wave_sample_service/heart_wave_sample_service.c
similarity index 100%
rename from app/src/service/heart_wave_sample_service/heart_wave_sample_service.c
rename to app/src/bakservice/heart_wave_sample_service/heart_wave_sample_service.c
diff --git a/app/src/service/heart_wave_sample_service/heart_wave_sample_service.h b/app/src/bakservice/heart_wave_sample_service/heart_wave_sample_service.h
similarity index 100%
rename from app/src/service/heart_wave_sample_service/heart_wave_sample_service.h
rename to app/src/bakservice/heart_wave_sample_service/heart_wave_sample_service.h
diff --git a/app/src/service/storage/sample_data_manager.c b/app/src/bakservice/storage/sample_data_manager.c
similarity index 100%
rename from app/src/service/storage/sample_data_manager.c
rename to app/src/bakservice/storage/sample_data_manager.c
diff --git a/app/src/service/storage/sample_data_manager.h b/app/src/bakservice/storage/sample_data_manager.h
similarity index 100%
rename from app/src/service/storage/sample_data_manager.h
rename to app/src/bakservice/storage/sample_data_manager.h
diff --git a/app/src/service/storage/storage_service.h b/app/src/bakservice/storage/storage_service.h
similarity index 100%
rename from app/src/service/storage/storage_service.h
rename to app/src/bakservice/storage/storage_service.h
diff --git a/app/src/service/storage/zeeprom_fs.c b/app/src/bakservice/storage/zeeprom_fs.c
similarity index 100%
rename from app/src/service/storage/zeeprom_fs.c
rename to app/src/bakservice/storage/zeeprom_fs.c
diff --git a/app/src/service/storage/zeeprom_fs.h b/app/src/bakservice/storage/zeeprom_fs.h
similarity index 100%
rename from app/src/service/storage/zeeprom_fs.h
rename to app/src/bakservice/storage/zeeprom_fs.h
diff --git a/app/src/basic_service/app_event_distribute.c b/app/src/basic_service/app_event_distribute.c
deleted file mode 100644
index a30938e..0000000
--- a/app/src/basic_service/app_event_distribute.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "basic_service/app_event_distribute.h"
-
-#include "basic_service/app_event.h"
-#include "app_scheduler.h"
-
-static AppEventListener m_listener[10];
-static int m_listener_num = 0;
-
-static void app_event_process_cb(void* p_event_data, uint16_t event_size) {
- for (int i = 0; i < m_listener_num; i++) {
- if (m_listener[i].cbfunc) {
- m_listener[i].cbfunc(p_event_data, event_size);
- }
- }
-}
-
-void AppEvent_regListener(app_event_listener_t listener) { //
- m_listener[m_listener_num++].cbfunc = listener;
-}
-
-void AppEvent_pushEvent(app_event_t* event) { //
- app_sched_event_put(event, sizeof(app_event_t), app_event_process_cb);
-}
diff --git a/app/src/basic_service/app_event_distribute.h b/app/src/basic_service/app_event_distribute.h
deleted file mode 100644
index 2a004ae..0000000
--- a/app/src/basic_service/app_event_distribute.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#pragma once
-#include
-#include
-
-#include "basic_service/app_event.h"
-
-
-typedef void (*app_event_listener_t)(void* p_event_data, uint16_t event_size);
-
-typedef struct {
- app_event_listener_t cbfunc;
-} AppEventListener;
-
-void AppEvent_regListener(app_event_listener_t listener);
-void AppEvent_pushEvent(app_event_t* event);
diff --git a/app/src/basic_service/device_state.c b/app/src/basic_service/device_state.c
deleted file mode 100644
index 0791c4e..0000000
--- a/app/src/basic_service/device_state.c
+++ /dev/null
@@ -1,64 +0,0 @@
-
-#include "device_state.h"
-
-#include "basic_service/app_event_distribute.h"
-#include "znordic.h"
-/***********************************************************************************************************************
- * 状态机 *
- ***********************************************************************************************************************/
-static device_state_t m_device_state = kdevice_state_standby; // 设备状态
-static uint32_t m_change_to_cur_state_tp = 0; // 切换到当前状态的时间戳
-static on_state_change_t m_onstate_change;
-APP_TIMER_DEF(m_state_machine_driver_tmr); // 状态机驱动定时器
-// static zapp_timer_context m_state_machine_driver_tmr_context;
-
-static void state_machine_driver_tmr_cb(void* p_context) { //
- static app_event_t appevent;
- appevent.eventType = kevent_tmr_scheduler_event;
- wd_feed();
- AppEvent_pushEvent(&appevent);
-}
-
-void ds_change_to_state(device_state_t tostate) {
- ZLOGI("change state from %s to %s", device_state_to_str(m_device_state), device_state_to_str(tostate));
- device_state_t nowstate = m_device_state;
-
- m_device_state = tostate;
- if (m_onstate_change) {
- m_onstate_change(nowstate, m_device_state);
- }
- m_change_to_cur_state_tp = znordic_getpower_on_ms();
-}
-
-uint32_t ds_cur_state_haspassed_ms() { return znordic_haspassed_ms(m_change_to_cur_state_tp); }
-device_state_t ds_now_state() { return m_device_state; }
-
-void ds_init(on_state_change_t onstate_change) {
- m_onstate_change = onstate_change;
- ZERROR_CHECK(app_timer_create(&m_state_machine_driver_tmr, APP_TIMER_MODE_REPEATED, state_machine_driver_tmr_cb));
- ZERROR_CHECK(app_timer_start(m_state_machine_driver_tmr, APP_TIMER_TICKS(300), NULL));
-}
-
-/***********************************************************************************************************************
- * sample_capture_state *
- ***********************************************************************************************************************/
-static sample_capture_state_t m_sample_capture_state;
-
-sample_capture_state_t* sample_capture_state_get() { //
- return &m_sample_capture_state;
-}
-void sample_capture_state_reset() { //
- m_sample_capture_state.is_over30s = false;
-};
-void sample_capture_state_set_is_over30s(bool over30s) { //
- m_sample_capture_state.is_over30s = over30s;
-}
-
-/***********************************************************************************************************************
- * global_state *
- ***********************************************************************************************************************/
-
-global_state_t m_global_state;
-global_state_t* global_state_get() { return &m_global_state; }
-void global_state_set_preview_state(bool is_preview) { m_global_state.preivew_state = is_preview; }
-
diff --git a/app/src/basic_service/device_state.h b/app/src/basic_service/device_state.h
deleted file mode 100644
index 872cfae..0000000
--- a/app/src/basic_service/device_state.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#pragma once
-#include
-#include
-
-#include "aproject_config/config.h"
-#include "basic_service/app_event.h"
-
-typedef void (*on_state_change_t)(device_state_t from, device_state_t to);
-
-void ds_init(on_state_change_t onstate_change);
-void ds_change_to_state(device_state_t state);
-uint32_t ds_cur_state_haspassed_ms();
-device_state_t ds_now_state();
-
-typedef struct {
- bool is_over30s;
-} sample_capture_state_t;
-
-sample_capture_state_t* sample_capture_state_get();
-
-void sample_capture_state_reset();
-void sample_capture_state_set_is_over30s(bool over30s);
-
-typedef struct {
- bool preivew_state;
-} global_state_t;
-
-global_state_t* global_state_get();
-void global_state_set_preview_state(bool is_preview);
\ No newline at end of file
diff --git a/app/src/main.c b/app/src/main.c
index 18bfdad..c78e27b 100644
--- a/app/src/main.c
+++ b/app/src/main.c
@@ -6,20 +6,19 @@
#include
//
#include "aproject_config/config.h"
-#include "basic_service/app_event.h"
-#include "basic_service/app_event_distribute.h"
-#include "basic_service/device_version_info_mgr.h"
+#include "app_basic_service/device_version_info_mgr.h"
+#include "app_basic_service/zapp.h"
#include "zble_module.h"
#include "zdatachannel_service.h"
+#include "one_conduction_main.h"
//
-#define SCHED_MAX_EVENT_DATA_SIZE MAX(sizeof(app_event_t), APP_TIMER_SCHED_EVENT_DATA_SIZE)
ZDATACHANNEL_DEF(m_zhrs, 2 /*优先级*/, 1 /*client num*/); // 蓝牙服务
/**
* @brief 蓝牙消息解析
*/
void zdatachannel_data_handler(zdatachannel_evt_t *p_evt) {
if (p_evt->type == ZDATACHANNEL_EVT_RX_DATA) {
- ble_cmder_process_rx((uint8_t *)p_evt->params.rx_data.p_data, p_evt->params.rx_data.length);
+ one_conduction_process_rx_packet((uint8_t *)p_evt->params.rx_data.p_data, p_evt->params.rx_data.length);
}
}
void on_service_init(void) {
@@ -29,7 +28,6 @@ void on_service_init(void) {
zdatachannle_init.data_handler = zdatachannel_data_handler;
ZERROR_CHECK(zdatachannel_init(&m_zhrs, &zdatachannle_init));
}
-extern void one_conduction_main();
/*lint -save -e14 */
/**
@@ -65,8 +63,9 @@ void app_error_fault_handler(uint32_t id, uint32_t pc, uint32_t info) {
}
int main() {
- APP_SCHED_INIT(SCHED_MAX_EVENT_DATA_SIZE, 20);
+ zapp_early_init();
znordic_init_without_wd();
+ zapp_init();
/*******************************************************************************
* 蓝牙服务初始化 *
@@ -75,7 +74,6 @@ int main() {
cfg.deviceName = device_info_read_sn_str();
cfg.on_service_init = on_service_init;
zble_module_init(&cfg);
- ble_cmder_init();
/*******************************************************************************
* 设备控制服务初始化 *
*******************************************************************************/
@@ -83,5 +81,6 @@ int main() {
/*******************************************************************************
* LOOP *
*******************************************************************************/
+ zapp_start_schedule();
znordic_loop();
}
diff --git a/app/src/one_conduction_main.c b/app/src/one_conduction_main.c
index 6a830f7..67bee27 100644
--- a/app/src/one_conduction_main.c
+++ b/app/src/one_conduction_main.c
@@ -1,400 +1,179 @@
#include
+#include
-#include "basic_service/app_event.h"
-#include "basic_service/app_event_distribute.h"
-#include "basic_service/device_version_info_mgr.h"
-//
-#include "board/board_adc_module_ctrl.h"
-#include "board/board_battery_state.h"
-#include "board/board_beep_ctrl.h"
-#include "board/board_ecg_sensor.h"
-#include "board/board_light_ctrl.h"
-#include "board/board_power_mgr.h"
-//
-#include "board/ads129x/ads129x.h"
-#include "board/app_board.h"
-#include "service/ble_cmd_processer/ble_cmd_process_service.h"
-#include "service/display_mgr/display_manager.h"
-#include "service/heart_wave_sample_service/heart_wave_sample_service.h"
-#include "service/storage/storage_service.h"
-#include "zble_module.h"
+#include "app_basic_service/device_version_info_mgr.h"
+#include "app_basic_service/zapp.h"
+#include "app_service/battery_mgr_service.h"
+#include "aproject_config/config.h"
+#include "ify_hrs_protocol/heart_rate_sensor_protocol.h"
#include "zdatachannel_service.h"
-#include "znordic.h"
+/***********************************************************************************************************************
+ * GLOBAL *
+ ***********************************************************************************************************************/
+
+static uint8_t bletxbuf[255];
+static uint8_t blereportbuf[255];
/*******************************************************************************
- * GLOBAL *
+ * UTILS *
*******************************************************************************/
+static void send_error_receipt(ify_hrs_packet_t* rxpacket, int32_t errorcode) {
+ ify_hrs_packet_t* txheader = (ify_hrs_packet_t*)bletxbuf;
+ error_receipt_t* receipt = (error_receipt_t*)txheader->data;
+ uint16_t sendlen = sizeof(ify_hrs_packet_t) + sizeof(error_receipt_t);
+
+ txheader->cmd = rxpacket->cmd;
+ txheader->frame_index = rxpacket->frame_index;
+ txheader->frame_type = kifyhrs_pt_error_receipt;
+ receipt->errorcode = errorcode;
+ zdatachannel_data_send2(bletxbuf, sendlen);
+}
-static int m_cur_fd;
-static sample_data_filename_t sampledata_file_name;
+static void send_success_receipt(ify_hrs_packet_t* rxpacket, int32_t emptydatasize) {
+ ify_hrs_packet_t* txheader = (ify_hrs_packet_t*)bletxbuf;
+ uint16_t sendlen = sizeof(ify_hrs_packet_t) + emptydatasize;
-#define SCHED_MAX_EVENT_DATA_SIZE MAX(sizeof(app_event_t), APP_TIMER_SCHED_EVENT_DATA_SIZE)
+ txheader->cmd = rxpacket->cmd;
+ txheader->frame_index = rxpacket->frame_index;
+ txheader->frame_type = kifyhrs_pt_cmd_receipt;
-/*******************************************************************************
- * 事件处理 *
- *******************************************************************************/
-void ENTER_DEEP_SLEEP() {
- // 进入深度睡眠前,使能唤醒引脚
- BoardBattery_sence_gpio_init_before_sleep();
- // nrf_sdh_disable_request();
- app_timer_pause();
- nrf_sdh_suspend();
- sd_power_system_off();
- NVIC_SystemReset();
+ zdatachannel_data_send2(bletxbuf, sendlen);
}
/*******************************************************************************
- * 状态切换方法 *
+ * 下发消息处理 *
*******************************************************************************/
-
-static void on_state_change(device_state_t from, device_state_t to) {
- /**
- * @brief 开关机控制
- */
- if (from == kdevice_state_standby && to != kdevice_state_standby) {
- /**
- * @brief 切换到工作状态
- */
- BoardBeepCtrl_load();
- BoardLight_load();
-
- sample_data_mgr_init();
- dsp_mgr_init();
- ble_cmder_init();
- ble_cmder_start_adv();
-
- app_board_change_state(kapp_power_state_working);
-
- } else if (to == kdevice_state_standby) {
- /**
- * @brief 切换到待机模式
- *
- */
- dsp_mgr_uninit();
- sample_data_mgr_uninit();
-
- BoardLight_unload();
-
- BoardBeepCtrl_unload();
- ble_stop_upload_record();
- zble_module_disconnect();
- for (size_t i = 0; i < 100; i++) {
- nrf_delay_ms(10);
- if (!zble_module_is_connected()) {
- break;
- }
- }
- ble_cmder_stop_adv();
- ble_cmder_uninit();
- board_power_mgr_main_power_supply_set(false);
- app_board_change_state(kapp_power_state_standby);
+void one_conduction_process_rx_packet(uint8_t* rx, int len) {
+ if (len < sizeof(ify_hrs_packet_t)) {
+ ZLOGI("rx len error:%d", len);
+ return;
}
- /***********************************************************************************************************************
- * 切换状态 附带操作 *
- ***********************************************************************************************************************/
- if (to == kdevice_state_home) {
- dsp_mgr_change_to_main();
- } else if (to == kdevice_state_poweron) {
- dsp_mgr_change_to_welcome();
- } else if (to == kdevice_state_charging) {
- dsp_mgr_change_to_chargingPage();
- }
-}
+ ify_hrs_packet_t* rxheader = (ify_hrs_packet_t*)rx;
+ ify_hrs_packet_t* txheader = (ify_hrs_packet_t*)bletxbuf;
+ ify_hrs_cmd_t cmd = (ify_hrs_cmd_t)rxheader->cmd;
+ memset(bletxbuf, 0, sizeof(bletxbuf));
-static void app_event_listener(void* p_event_data, uint16_t event_size) {
- if (!p_event_data) return;
- app_event_t* p_event = (app_event_t*)p_event_data;
+ txheader->cmd = rxheader->cmd;
+ txheader->frame_index = rxheader->frame_index;
+ txheader->frame_type = kifyhrs_pt_cmd_receipt;
- if (ds_now_state() != kdevice_state_standby && //
- ds_now_state() != kdevice_state_charging && //
- ds_now_state() != kdevice_state_poweron //
- ) {
- if (zdatachannel_is_connected()) {
- BoardLight_setGreenLightEffect(kLightEffect_slowFlash);
- } else {
- BoardLight_setGreenLightEffect(kLightEffect_quickFlash);
- }
- }
+ ZLOGI("rx cmd:%d index:%d datalen:%d", cmd, rxheader->frame_index, len - sizeof(ify_hrs_packet_t));
+ NRF_LOG_HEXDUMP_INFO(rx, len);
- /*******************************************************************************
- * 待机状态 *
- *******************************************************************************/
- static uint32_t lasttrypoweron_time = 0;
+ if (cmd == ify_hrs_cmd_read_device_version) {
+ device_version_info_receipt_t* receipt = (device_version_info_receipt_t*)txheader->data;
+ uint16_t sendlen = sizeof(ify_hrs_packet_t) + sizeof(device_version_info_receipt_t);
- if (ds_now_state() == kdevice_state_standby) {
- // 充电事件触发 --> 切换到充电页面
- if (BoardBattery_get_charging_state()) {
- ds_change_to_state(kdevice_state_charging);
- }
+ receipt->blestack_version = device_info_read_blestack_version();
+ receipt->bootloader_version = device_info_read_bootloader_version();
+ receipt->firmware_version = device_info_read_firmware_version();
+ receipt->hardware_version = device_info_read_hardware_version();
+ zdatachannel_data_send2(bletxbuf, sendlen);
+ }
- // 导联连接事件触发 --> 切换到开机中页面
+ else if (cmd == ify_hrs_cmd_read_sensor_info) {
+ sensor_info_receipt_t* receipt = (sensor_info_receipt_t*)txheader->data;
+ uint16_t sendlen = sizeof(ify_hrs_packet_t) + sizeof(sensor_info_receipt_t);
- else if (hwss_lead_get_state_connected_state() && znordic_haspassed_ms(lasttrypoweron_time) >= LOW_BATTERY_REMINDER_DELAY_MS) {
- lasttrypoweron_time = znordic_getpower_on_ms();
- // if (BoardBattery_get_battery_level() > APP_WORK_BATTERY_LEVEL) {
- // TODO: 检查电池地量
- if (true) {
- ds_change_to_state(kdevice_state_poweron);
- } else {
- BoardLight_load();
- BoardLight_blockFlash(3, 100);
- BoardLight_unload();
- }
- }
+ receipt->sensor_num = 1;
+ receipt->sensor_precision = SAMPLE_PRECISION;
+ receipt->sensor_sample_rate = SAMPLE_RATE / 10;
+ receipt->sensor0_pos = kifyhrs_sensor_pos_none;
+ receipt->sensor1_pos = kifyhrs_sensor_pos_none;
+ receipt->sensor2_pos = kifyhrs_sensor_pos_none;
- /**
- * @brief
- * TODO:
- * 1. 永远不进入超低功耗状态,直到电池电量低于一定程度
- * 2. 如果RTC未被设置,则重置设备状态
- * 3. 在每次从待机状态切换到开机状态,如果RTC未被设置,则清空已经存储的波形数据
- */
- else if (ds_cur_state_haspassed_ms() >= 10000) {
- if (!znordic_rtc_has_setted()) {
- }
- }
+ zdatachannel_data_send2(bletxbuf, sendlen);
}
- /*******************************************************************************
- * 充电状态 *
- *******************************************************************************/
- else if (ds_now_state() == kdevice_state_charging) {
- if (!BoardBattery_get_charging_state()) {
- ds_change_to_state(kdevice_state_standby);
- }
+ else if (cmd == ify_hrs_cmd_read_sn) {
+ read_sn_receipt_t* receipt = (read_sn_receipt_t*)txheader->data;
+ uint16_t sendlen = sizeof(ify_hrs_packet_t) + sizeof(read_sn_receipt_t);
+ device_info_read_sn((sn_t*)&receipt->sn);
+ zdatachannel_data_send2(bletxbuf, sendlen);
}
- /*******************************************************************************
- * 开机中 *
- *******************************************************************************/
-
- else if (ds_now_state() == kdevice_state_poweron) {
- if (ds_cur_state_haspassed_ms() >= 1500) {
- ds_change_to_state(kdevice_state_home);
- }
+ else if (cmd == ify_hrs_cmd_reset) {
+ NVIC_SystemReset();
}
- /*******************************************************************************
- * 首页 *
- *******************************************************************************/
-
- else if (ds_now_state() == kdevice_state_home) {
- // 如果用户长时间不操作,自动切换到待机状态
- if (!zdatachannel_is_connected() && //
- !hwss_lead_get_state_connected_state() && //
- ds_cur_state_haspassed_ms() >= AUTOMATIC_SLEEP_TIME) {
- ds_change_to_state(kdevice_state_standby);
- }
- // 如果用户继续保持静止,切换到采集页面
- else if (hwss_lead_get_state_connected_state() && ds_cur_state_haspassed_ms() > 1500) {
- // dsp_mgr_change_to_preparePage
- if (!BoardBattery_get_charging_state()) {
- ds_change_to_state(kdevice_state_keep_still);
- dsp_mgr_change_to_preparePage();
- hwss_start_prepare_capture();
- if (ble_is_upload_record()) {
- ble_stop_upload_record();
- }
- }
- }
-#if 0
- //TODO:使能
- // 低电量,设备进入待机模式
- else if (BoardBattery_get_battery_level() < APP_AUTO_STANDY_BATTERY_LEVEL && ds_cur_state_haspassed_ms() > 3000) {
- ds_change_to_state(kdevice_state_standby);
- } //
-#endif
-
- else if (!ble_is_upload_record() && zble_module_is_connected() && zdatachannel_last_rx_data_haspassed_s() >= BLE_UNCONNECTED_OVERTIME_S) {
- ZLOGI("auto sleep because ble unconnected");
- ds_change_to_state(kdevice_state_standby);
- }
-
- else if (BoardBattery_get_charging_state()) {
- // BoardLight_setGreenLightEffect(kLightEffect_close);
- ds_change_to_state(kdevice_state_standby);
- }
+ else if (cmd == ify_hrs_cmd_read_time) {
+ read_time_receipt_t* receipt = (read_time_receipt_t*)txheader->data;
+ uint16_t sendlen = sizeof(ify_hrs_packet_t) + sizeof(read_time_receipt_t);
+ static ztm_t ztm;
+ znordic_rtc_gettime(&ztm);
+
+ receipt->year = (ztm.tm_year + 1900 - 2000);
+ receipt->month = ztm.tm_mon + 1;
+ receipt->day = ztm.tm_mday;
+ receipt->hour = ztm.tm_hour;
+ receipt->minute = ztm.tm_min;
+ receipt->second = ztm.tm_sec;
+ zdatachannel_data_send2(bletxbuf, sendlen);
}
- /*******************************************************************************
- * 保持静止页面 *
- *******************************************************************************/
- else if (ds_now_state() == kdevice_state_keep_still) {
- if (!hwss_lead_get_state_connected_state()) {
- // 如果用户未保持静止,切换到首页
- ds_change_to_state(kdevice_state_home);
- hwss_stop_capture();
- } else {
- /*******************************************************************************
- * 页面加载中 *
- *******************************************************************************/
- if (ds_cur_state_haspassed_ms() >= (KEEP_STILL_OVERTIME_MS_1P5 * 5)) {
- /**
- * @brief
- *
- * 1. 启动采样定时器
- * 2. 切换状态
- * 3. 切换页面
- */
- ds_change_to_state(kdevice_state_sampling);
- dsp_mgr_change_to_sampling(0, 0);
- hwss_start_capture();
- static ztm_t tm;
- memset(&sampledata_file_name, 0, sizeof(sampledata_file_name));
- znordic_rtc_gettime(&tm);
- sample_capture_state_reset();
-
- sampledata_file_name.year = tm.tm_year + 1900 - 2000;
- sampledata_file_name.month = tm.tm_mon + 1;
- sampledata_file_name.day = tm.tm_mday;
- sampledata_file_name.hour = tm.tm_hour;
- sampledata_file_name.min = tm.tm_min;
- sampledata_file_name.sec = tm.tm_sec;
- m_cur_fd = sample_data_mgr_open(&sampledata_file_name, kwrflag_write_only);
- BoardBeepCtrl_setEffect(kBoardBeepEffect_oneShortBeep);
+ else if (cmd == ify_hrs_cmd_sync_time) {
+ sync_time_cmd_t* cmd = (sync_time_cmd_t*)rxheader->data;
+ uint16_t sendlen = sizeof(ify_hrs_packet_t);
- } else if (ds_cur_state_haspassed_ms() >= (KEEP_STILL_OVERTIME_MS_1P5 * 4)) {
- if (dsp_mgr_preparePage_get_progress() != 4) {
- dsp_mgr_preparePage_set_progress(4);
- }
- } else if (ds_cur_state_haspassed_ms() >= (KEEP_STILL_OVERTIME_MS_1P5 * 3)) {
- if (dsp_mgr_preparePage_get_progress() != 3) {
- dsp_mgr_preparePage_set_progress(3);
- }
- } else if (ds_cur_state_haspassed_ms() >= (KEEP_STILL_OVERTIME_MS_1P5 * 2)) {
- if (dsp_mgr_preparePage_get_progress() != 2) {
- dsp_mgr_preparePage_set_progress(2);
- }
- } else if (ds_cur_state_haspassed_ms() >= (KEEP_STILL_OVERTIME_MS_1P5 * 1)) {
- if (dsp_mgr_preparePage_get_progress() != 1) {
- dsp_mgr_preparePage_set_progress(1);
- }
- }
- }
+ znordic_rtc_settime(cmd->year + 2000, cmd->month, cmd->day, cmd->hour, cmd->minute, cmd->second);
+ zdatachannel_data_send2(bletxbuf, sendlen);
}
- /*******************************************************************************
- * 采样页面逻辑 *
- *******************************************************************************/
-
- else if (ds_now_state() == kdevice_state_sampling) {
- /*******************************************************************************
- * 采样数据存储 *
- *******************************************************************************/
- if (p_event->eventType == kevent_capture_256data_event) {
- // if (hwss_has_captured_time_ms() <= (MAX_STORAGE_TIMEOUT_S * 1000)) {
- // sample_data_mgr_write(m_cur_fd, p_event->val.capture_data_cache, 256);
- // }
- }
- /*******************************************************************************
- * 实时采样数据上报 *
- *******************************************************************************/
- if (p_event->eventType == kevent_capture_little_data_block_event) {
- // 单帧实时上报
- if (global_state_get()->preivew_state) ble_cmder_try_report_one_sample_data(p_event);
- }
-
- /*******************************************************************************
- * 采样足30秒事件捕获 *
- *******************************************************************************/
- if (hwss_has_captured_time_ms() >= (SAMPLE_MIN_TIME_S * 1000)) {
- if (!sample_capture_state_get()->is_over30s) {
- BoardBeepCtrl_setEffect(kBoardBeepEffect_oneShortBeep);
- sample_capture_state_set_is_over30s(true);
- }
- }
-
- /*******************************************************************************
- * 采样结束判定 *
- *******************************************************************************/
- bool capture_end = false;
- if (hwss_has_captured_time_ms() >= (MAX_STORAGE_TIMEOUT_S * 1000)) {
- capture_end = true;
- } else if (p_event->eventType == kplod_disconnected_event) {
- ble_cmder_try_report_sensor_drop_event(0x01, 0);
- capture_end = true;
- }
+ /***********************************************************************************************************************
+ * 基础指令 *
+ ***********************************************************************************************************************/
- if (capture_end) {
- if (sample_capture_state_get()->is_over30s) {
- sample_data_mgr_close(m_cur_fd);
- dsp_mgr_change_to_sampleSuc();
- BoardBeepCtrl_setEffect(kBoardBeepEffect_oneShortBeep);
- ds_change_to_state(kdevice_state_sampling_complete);
- hwss_stop_capture();
+ else if (cmd == ify_hrs_cmd_read_device_state) {
+ device_state_receipt_t* receipt = (device_state_receipt_t*)txheader->data;
+ uint16_t sendlen = sizeof(ify_hrs_packet_t) + sizeof(device_state_receipt_t);
- } else {
- // 采样不足三十秒
+ receipt->drop_state0 = (0);
+ receipt->drop_state1 = 0x00;
+ receipt->device_state0.sampling_state = (zapp_state_machine_now_state() == kdevice_state_sampling);
+ receipt->device_state0.preview_state = zapp_get_gstate()->is_preview;
+ receipt->device_state0.low_battery = (BatteryMgrService_get_battery_level() < APP_LOW_BATTERY_WARNING_LIMIT);
+ receipt->device_state0.full_storge = false;
- // 停止采样
- hwss_stop_capture();
- // 关闭文件
- sample_data_mgr_close(m_cur_fd);
- // 删除文件
- sample_data_mgr_delete_file(&sampledata_file_name);
- // 切换到采集出错页面
- dsp_mgr_change_to_samplingError();
- BoardBeepCtrl_setEffect(kBoardBeepEffect_threeShortBeep);
- ds_change_to_state(kdevice_state_sampling_error);
- }
- }
+ receipt->device_state1 = 0;
+ receipt->powerlevel = BatteryMgrService_get_battery_level();
+ receipt->storage_item_num = 0;
+ zdatachannel_data_send2(bletxbuf, sendlen);
}
- /*******************************************************************************
- * 采样完成页面 *
- *******************************************************************************/
- else if (ds_now_state() == kdevice_state_sampling_complete) {
- if (ds_cur_state_haspassed_ms() >= 3000) {
- ZLOGI("ds_cur_state_haspassed_ms() %d> 3000", ds_cur_state_haspassed_ms());
- ds_change_to_state(kdevice_state_home);
- ble_cmder_report_sample_finish_event();
- }
- }
- /*******************************************************************************
- * 采样错误页面 *
- *******************************************************************************/
- else if (ds_now_state() == kdevice_state_sampling_error) {
- if ((ds_cur_state_haspassed_ms() >= 3000) || //
- (ds_cur_state_haspassed_ms() >= 1000 && hwss_lead_get_state_connected_state())) {
- ZLOGI("ds_cur_state_haspassed_ms() %d> 3000", ds_cur_state_haspassed_ms());
- ds_change_to_state(kdevice_state_home);
- ble_cmder_report_sample_finish_event();
- }
- }
-
- /******************************************************************************************************************
- * 测试模式 *
- ******************************************************************************************************************/
-
- else if (ds_now_state() == kdevice_state_test_mode) {
- /**
- * @brief 测试模式下永远不退出,当前模式
- */
-
- if (p_event->eventType == kevent_capture_little_data_block_event) {
- ble_cmder_try_report_one_sample_data(p_event);
- }
+ /***********************************************************************************************************************
+ * 测试指令 *
+ ***********************************************************************************************************************/
+ // void hwss_start_capture(void);
+ // void hwss_start_prepare_capture(void);
+ // void hwss_stop_capture(void);
+
+ // void hwss_subic_write_reg(uint8_t addr, uint8_t val);
+ // uint8_t hwss_subic_read_reg(uint8_t addr);
+
+ // else if (cmd == ify_hrs_test_cmd_start_capture) {
+ // hwss_start_prepare_capture();
+ // hwss_start_capture();
+ // send_success_receipt(rxheader, 0);
+ // } else if (cmd == ify_hrs_test_cmd_stop_capture) {
+ // hwss_stop_capture();
+ // send_success_receipt(rxheader, 0);
+ // } else if (cmd == ify_hrs_test_cmd_read_reg) {
+ // uint8_t regadd = rxheader->data[0];
+ // uint8_t regval = hwss_subic_read_reg(regadd);
+ // txheader->data[0] = regval;
+ // send_success_receipt(rxheader, 1);
+ // } else if (cmd == ify_hrs_test_cmd_write_reg) {
+ // uint8_t regadd = rxheader->data[0];
+ // uint8_t regval = rxheader->data[1];
+ // hwss_subic_write_reg(regadd, regval);
+ // send_success_receipt(rxheader, 0);
+ // }
+ //
+ else {
+ send_error_receipt(rxheader, kifyhrs_ecode_cmd_not_support);
}
}
-/*******************************************************************************
- * MAIN_CODE *
- *******************************************************************************/
-
-void one_conduction_main() {
- ZLOGI("one_conduction_main");
- AppEvent_regListener(app_event_listener);
- app_board_init();
- BoardBeepCtrl_init();
- BoardLight_Init();
- /**
- * @brief 服务初始化
- */
- hwss_init();
- ds_init(on_state_change);
-
- ds_change_to_state(kdevice_state_test_mode);
- znordic_loop();
-}
+void one_conduction_main() { ZLOGI("one_conduction_main"); }
diff --git a/app/src/one_conduction_main.h b/app/src/one_conduction_main.h
index e245aa9..2323c0c 100644
--- a/app/src/one_conduction_main.h
+++ b/app/src/one_conduction_main.h
@@ -1,4 +1,5 @@
#pragma once
-
+#include
void one_conduction_main();
+void one_conduction_process_rx_packet(uint8_t* rx, int len);