diff --git a/.vscode/settings.json b/.vscode/settings.json
index 888ac10..ca66875 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -101,7 +101,12 @@
"nrf_drv_gpiote.h": "c",
"device_ctrl_service.h": "c",
"board_battery_state.h": "c",
- "board_sdcard_driver.h": "c"
+ "board_sdcard_driver.h": "c",
+ "board_button.h": "c",
+ "app_event_distribute.h": "c",
+ "board_beep_ctrl.h": "c",
+ "nrf_soc.h": "c",
+ "sample_data_manager_service.h": "c"
},
"files.encoding": "gbk"
}
\ No newline at end of file
diff --git a/app/app.uvoptx b/app/app.uvoptx
index 0654d60..ff4cb7f 100644
--- a/app/app.uvoptx
+++ b/app/app.uvoptx
@@ -135,7 +135,6 @@
0
DLGUARM
- d
0
@@ -148,7 +147,24 @@
UL2CM3(-S0 -C0 -P0 -FD20000000 -FC4000 -FN2 -FF0nrf52xxx -FS00 -FL0200000 -FF1nrf52xxx_uicr -FS110001000 -FL11000 -FP0($$Device:nRF52833_xxAA$Flash\nrf52xxx.flm) -FP1($$Device:nRF52833_xxAA$Flash\nrf52xxx_uicr.flm))
-
+
+
+ 0
+ 0
+ 116
+ 1
+ 163038
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ .\src\board\board_sdcard_driver.c
+
+ \\nrf52833_xxaa\src/board/board_sdcard_driver.c\116
+
+
0
diff --git a/app/app.uvprojx b/app/app.uvprojx
index 33fa471..05f9627 100644
--- a/app/app.uvprojx
+++ b/app/app.uvprojx
@@ -313,7 +313,7 @@
1
- 4
+ 1
0
0
1
diff --git a/app/src/app_ble_service.c b/app/src/app_ble_service.c
index e659b66..cad6cbc 100644
--- a/app/src/app_ble_service.c
+++ b/app/src/app_ble_service.c
@@ -141,11 +141,11 @@ static void prvf_process_ble_rx_data(void* p_event_data, uint16_t len) {
receipt->device_state0.sampling_state = (DeviceCtrl_now_state() == kdevice_state_sampling);
receipt->device_state0.report_state = m_realtime_report_state;
receipt->device_state0.low_battery = (BoardBattery_get_battery_level() < 20);
- receipt->device_state0.full_storge = (sample_data_mgr_storage_is_full());
+ receipt->device_state0.full_storge = (SampleDataMgr_storageIsFull());
receipt->device_state1 = 0;
receipt->powerlevel = BoardBattery_get_battery_level();
- receipt->storage_item_num = sample_data_mgr_get_file_num();
+ receipt->storage_item_num = SampleDataMgr_getFileNum();
zdatachannel_data_send2(m_txbuf, sendlen);
}
@@ -216,7 +216,7 @@ static void prvf_process_ble_rx_data(void* p_event_data, uint16_t len) {
return;
}
- sample_data_fileinfo_list_t* recordlist = sample_data_mgr_get_fileinfo_list();
+ sample_data_fileinfo_list_t* recordlist = SampleDataMgr_getFileinfoList();
if (recordoff >= recordlist->count) {
send_error_receipt(rxheader, kifyhrs_ecode_no_record_find);
return;
@@ -271,8 +271,7 @@ static void prvf_process_ble_rx_data(void* p_event_data, uint16_t len) {
}
}
-void AppBleService_startAdv() { zble_module_start_adv(); }
-void AppBleService_stopAdv() { zble_module_stop_adv(); }
+
void AppBleService_onServiceInitCB() {
ZLOGI("init zdatachannel service");
diff --git a/app/src/app_ble_service.h b/app/src/app_ble_service.h
index 2f5d92c..6e8e5a1 100644
--- a/app/src/app_ble_service.h
+++ b/app/src/app_ble_service.h
@@ -10,9 +10,6 @@ void AppBleService_onServiceInitCB();
void AppBleService_init();
void AppBleService_uninit();
-void AppBleService_startAdv();
-void AppBleService_stopAdv();
-
void AppBleService_try_report_one_sample_data(uint32_t frameIndex, uint16_t data);
void AppBleService_try_report_sensor_drop_event(uint8_t dropstate0, uint8_t dropstate1);
void AppBleService_report_sample_finish_event();
diff --git a/app/src/app_event.h b/app/src/app_event.h
index 27b2237..a8fedc0 100644
--- a/app/src/app_event.h
+++ b/app/src/app_event.h
@@ -9,6 +9,16 @@ typedef enum {
kevent_tmr_scheduler, // 定时器调度事件
kevent_capture_data_block_event, // 每采集一定数据后回调一次
kevent_capture_little_data_block_event, // 传感器小数据块回调事件
+ kevent_button_push_event, // 按键按下事件
+ kevent_button_release_event, // 按键释放事件
+
+ kevent_start_sample_event, //开始采集事件
+ kevent_stop_sample_event, //停止采集事件
+
+ kevent_ble_connect_event, //蓝牙连接事件
+ kevent_ble_disconnect_event, //蓝牙断开事件
+
+
} app_event_type_t;
typedef struct {
diff --git a/app/src/app_event_distribute.c b/app/src/app_event_distribute.c
index daecda0..8b66357 100644
--- a/app/src/app_event_distribute.c
+++ b/app/src/app_event_distribute.c
@@ -14,10 +14,10 @@ static void app_event_process_cb(void* p_event_data, uint16_t event_size) {
}
}
-void AppEvent_regListener(AppEventListener* listener) { //
- m_listener[m_listener_num] = *listener;
+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);
+ app_sched_event_put(event, sizeof(app_event_t), app_event_process_cb);
}
diff --git a/app/src/app_event_distribute.h b/app/src/app_event_distribute.h
index 855b405..7f22132 100644
--- a/app/src/app_event_distribute.h
+++ b/app/src/app_event_distribute.h
@@ -11,5 +11,5 @@ typedef struct {
app_event_listener_t cbfunc;
} AppEventListener;
-void AppEvent_regListener(AppEventListener* listener);
+void AppEvent_regListener(app_event_listener_t listener);
void AppEvent_pushEvent(app_event_t* event);
diff --git a/app/src/board/board.h b/app/src/board/board.h
index cf213b9..6b643dc 100644
--- a/app/src/board/board.h
+++ b/app/src/board/board.h
@@ -63,5 +63,7 @@
#define SAMPLE_RATE 800
#define SAMPLE_PRECISION 24
-#define APP_MAX_EVEN_SIZE MAX(APP_TIMER_SCHED_EVENT_DATA_SIZE,sizeof(app_event_t))
-#define APP_EVENT_QUEUE_SIZE 20
\ No newline at end of file
+#define APP_MAX_EVEN_SIZE MAX(APP_TIMER_SCHED_EVENT_DATA_SIZE, sizeof(app_event_t))
+#define APP_EVENT_QUEUE_SIZE 20
+
+#define APP_AUTO_SLEEP_TIMEOUT_MS (10 * 1000)
\ No newline at end of file
diff --git a/app/src/board/board_beep_ctrl.c b/app/src/board/board_beep_ctrl.c
index 6c156ae..d88666d 100644
--- a/app/src/board/board_beep_ctrl.c
+++ b/app/src/board/board_beep_ctrl.c
@@ -1,5 +1,5 @@
#include "board_beep_ctrl.h"
-#define BEEP_TIMER_INTERVAL (200)
+#define BEEP_TIMER_INTERVAL (150)
APP_TIMER_DEF(m_beep_tmr); //
static nrf_drv_pwm_t m_beep_pwm0 = NRF_DRV_PWM_INSTANCE(BEEP_PWM_INSTANCE);
@@ -20,7 +20,7 @@ static nrf_drv_pwm_config_t const m_beep_pwm0_config0 = {
.step_mode = NRF_PWM_STEP_AUTO,
};
BoardBeepEffect_t m_beep_effect = kBoardBeepEffect_none;
-static uint32_t m_beep_cnt = 0;
+static uint32_t m_beep_cnt = 0;
static void beep_tmr_handler(void *context) {
if (m_beep_effect == kBoardBeepEffect_none) {
@@ -34,27 +34,30 @@ static void beep_tmr_handler(void *context) {
m_beep_effect = kBoardBeepEffect_none;
}
} else if (m_beep_effect == kBoardBeepEffect_threeShortBeep) {
- if (m_beep_cnt % 2 == 0) {
- BoardBeepCtrl_set(true);
- } else if (m_beep_cnt % 2 == 1) {
- BoardBeepCtrl_set(false);
- } else if (m_beep_cnt >= 6) {
+ if (m_beep_cnt < 6) {
+ if (m_beep_cnt % 2 == 0) {
+ BoardBeepCtrl_set(true);
+ } else if (m_beep_cnt % 2 == 1) {
+ BoardBeepCtrl_set(false);
+ }
+ } else {
BoardBeepCtrl_set(false);
app_timer_stop(m_beep_tmr);
m_beep_effect = kBoardBeepEffect_none;
}
+
} else if (m_beep_effect == kBoardBeepEffect_continuousShortBeep) {
// 每隔1秒响三声
- ZASSERT(BEEP_TIMER_INTERVAL == 200);
- if (m_beep_cnt <= 6) {
+ if (m_beep_cnt < 6) {
if (m_beep_cnt % 2 == 0) {
BoardBeepCtrl_set(true);
} else if (m_beep_cnt % 2 == 1) {
BoardBeepCtrl_set(false);
}
} else {
- if (BEEP_TIMER_INTERVAL * m_beep_cnt >= 1000) {
+ if (BEEP_TIMER_INTERVAL * m_beep_cnt >= 10000) {
m_beep_cnt = 0;
+ return;
}
}
}
diff --git a/app/src/board/board_light_ctrl.c b/app/src/board/board_light_ctrl.c
index 476fd17..abbafb9 100644
--- a/app/src/board/board_light_ctrl.c
+++ b/app/src/board/board_light_ctrl.c
@@ -4,7 +4,7 @@
#include "znordic.h"
#define BLINK_CNT 1
-#define BLINK_PERIOD_MS (1000)
+#define BLINK_PERIOD_MS (100)
static LightEffect m_light_effect;
static bool m_led_green_light_state;
@@ -21,8 +21,17 @@ static void BoardLight_effect_tmr_handler(void *p_context) { //
BoardLight_setGreenLightState(true);
}
} else if (m_light_effect == kLightEffect_slowFlash) {
- if (m_blink_cnt % 1 == 0) {
- BoardLight_toggleGreenLightState();
+ if (m_blink_cnt < 2) {
+ if (m_blink_cnt % 2 == 0) {
+ BoardLight_setGreenLightState(true);
+ } else if (m_blink_cnt % 2 == 1) {
+ BoardLight_setGreenLightState(false);
+ }
+ } else {
+ if (BLINK_PERIOD_MS * m_blink_cnt >= 3000) {
+ m_blink_cnt = 0;
+ return;
+ }
}
}
m_blink_cnt++;
diff --git a/app/src/board/board_sdcard_driver.c b/app/src/board/board_sdcard_driver.c
index 9b25798..a1ad682 100644
--- a/app/src/board/board_sdcard_driver.c
+++ b/app/src/board/board_sdcard_driver.c
@@ -6,9 +6,9 @@
* 结构体定义 *
*******************************************************************************/
-FATFS m_fs;
+FATFS m_fs;
BoardSdcardConnectTo_t m_connectTo = kConnectToNone;
-static bool m_sdcard_inited;
+static bool m_sdcard_inited;
NRF_BLOCK_DEV_SDC_DEFINE( //
m_block_dev_sdc, //
@@ -31,7 +31,7 @@ NRF_BLOCK_DEV_SDC_DEFINE( //
*
*/
void Board_sdcardInit() {
- if (!m_sdcard_inited) return;
+ if (m_sdcard_inited) return;
/**
* @brief SDCARD SPI 引脚初始化
*/
@@ -43,19 +43,19 @@ void Board_sdcardInit() {
* @brief SD卡 USB读卡器IC复位引脚
* 引脚一直配置成高即可
*/
- znrf_gpio_cfg_output(SDCARD_USBDRIVER_IC_RESET_PIN, NRF_GPIO_PIN_NOPULL);
+ znrf_gpio_cfg_output(SDCARD_USBDRIVER_IC_RESET_PIN, NRF_GPIO_PIN_PULLUP);
nrf_gpio_pin_write(SDCARD_USBDRIVER_IC_RESET_PIN, 1);
/**
* @brief 初始化 SD卡连接切换引脚
*/
- znrf_gpio_cfg_output(SDCARD_USBDRIVER_IC_JUNCTION_CTRL_NOE_PIN, NRF_GPIO_PIN_NOPULL);
+ znrf_gpio_cfg_output(SDCARD_USBDRIVER_IC_JUNCTION_CTRL_NOE_PIN, NRF_GPIO_PIN_PULLUP);
nrf_gpio_pin_write(SDCARD_USBDRIVER_IC_JUNCTION_CTRL_NOE_PIN, 0); // OE = 0
/**
* @brief SDCARD电源控制引脚
*/
- znrf_gpio_cfg_output(SDCARD_POWER_CTRL_PIN, NRF_GPIO_PIN_NOPULL);
+ znrf_gpio_cfg_output(SDCARD_POWER_CTRL_PIN, NRF_GPIO_PIN_PULLUP);
nrf_gpio_pin_write(SDCARD_POWER_CTRL_PIN, 0); // POWER = 0 打开电源
- m_connectTo = kConnectToExt;
+ m_connectTo = kConnectToNone;
static diskio_blkdev_t drives[] = //
{DISKIO_BLOCKDEV_CONFIG(NRF_BLOCKDEV_BASE_ADDR(m_block_dev_sdc, block_dev), NULL)};
@@ -100,17 +100,17 @@ void Board_sdcardConnectToExt() {
* @brief 关闭SD卡电源
*/
nrf_gpio_pin_write(SDCARD_POWER_CTRL_PIN, 1);
-
+ nrf_delay_ms(100); // 让SD卡通过断电复位一会
+ nrf_gpio_pin_write(SDCARD_POWER_CTRL_PIN, 0); // 开
/**
* @brief 切换引脚连接
*/
nrf_gpio_pin_write(SDCARD_USBDRIVER_IC_JUNCTION_CTRL_NOE_PIN, 0);
- /**
- * @brief 打开SD卡电源
- */
- nrf_delay_ms(30); // 让SD卡通过断电复位一会
- nrf_gpio_pin_write(SDCARD_POWER_CTRL_PIN, 0); // 开
+ nrf_gpio_pin_write(SDCARD_USBDRIVER_IC_RESET_PIN, 0);
+ nrf_delay_ms(30);
+ nrf_gpio_pin_write(SDCARD_USBDRIVER_IC_RESET_PIN, 1);
+
m_connectTo = kConnectToExt;
}
void Board_sdcardConnectToInternal() {
@@ -166,7 +166,7 @@ void Board_sdcardConnectToInternal() {
ZLOGI("Mount success");
NRF_LOG_INFO("Capacity: %d MB", capacity);
- m_connectTo == kConnectToInternal;
+ m_connectTo = kConnectToInternal;
}
BoardSdcardConnectTo_t Board_sdcardGetConnectTo() { return m_connectTo; }
\ No newline at end of file
diff --git a/app/src/device_ctrl_service.c b/app/src/device_ctrl_service.c
index 256efd2..c704a6f 100644
--- a/app/src/device_ctrl_service.c
+++ b/app/src/device_ctrl_service.c
@@ -1,8 +1,233 @@
#include "device_ctrl_service.h"
+#include "app_event_distribute.h"
+#include "board/board_battery_state.h"
+#include "board/board_beep_ctrl.h"
+#include "board/board_button.h"
+#include "board/board_light_ctrl.h"
+#include "board/board_sdcard_driver.h"
+#include "heart_wave_sample_service.h"
+#include "sample_data_manager_service.h"
+#include "zble_module.h"
+#include "zdatachannel_service.h"
+//
+APP_TIMER_DEF(m_state_machine_driver_tmr); // 状态机驱动定时器
static device_state_t m_device_state = kdevice_state_standby; // 设备状态
static uint32_t m_change_to_cur_state_tp = 0; // 切换到当前状态的时间戳
+static int m_sample_data_fd = -1; // 采集数据文件描述符
+/*******************************************************************************
+ * 函数列表 *
+ *******************************************************************************/
+
+void DeviceCtrl_change_to_state(device_state_t state);
+uint32_t DeviceCtrl_cur_state_haspassed_ms();
+device_state_t DeviceCtrl_now_state();
+
+/*******************************************************************************
+ * 事件路由 *
+ *******************************************************************************/
+
+static void state_machine_driver_tmr_cb(void* p_context) { //
+ static app_event_t appevent;
+ appevent.eventType = kevent_tmr_scheduler;
+ AppEvent_pushEvent(&appevent);
+}
+/**
+ * @brief 按键事件处理
+ */
+static void board_button_cb(ButtonIndex_t pin_no, ButtonAction_t button_action) { //
+ static app_event_t event;
+ event.eventType = button_action == kButtonAction_push ? kevent_button_push_event : kevent_button_release_event;
+ AppEvent_pushEvent(&event);
+}
+
+static void zble_event_listener(zble_event_t* ble_event) { //
+ static app_event_t event;
+ if (ble_event->eventType == kzble_event_connected) {
+ event.eventType = kevent_ble_connect_event;
+ AppEvent_pushEvent(&event);
+ } else if (ble_event->eventType == kzble_event_disconnected) {
+ event.eventType = kevent_ble_disconnect_event;
+ AppEvent_pushEvent(&event);
+ }
+}
+
+/*******************************************************************************
+ * 事件处理 *
+ *******************************************************************************/
+static bool m_ispoweron = false;
+static void poweroff() {
+ if (!m_ispoweron) return;
+ BoardBeepCtrl_unload();
+ BoardLight_unload();
+ BoardBattery_unload();
+ BoardButton_unload();
+ SampleDataMgr_unloadDriver();
+ hwss_unload();
+ DeviceCtrl_change_to_state(kdevice_state_standby);
+ zble_module_stop_adv();
+ BoardLight_setGreenLightEffect(kLightEffect_close);
+
+ // 进入深度睡眠前,使能唤醒引脚
+ BoardButton_enable_sense();
+ // 系统进入深度睡眠
+ sd_power_system_off();
+ m_ispoweron = false;
+}
+static void poweron() {
+ if (m_ispoweron) {
+ return;
+ }
+
+ BoardBeepCtrl_load();
+ BoardLight_load();
+ BoardBattery_load();
+ BoardButton_load();
+ SampleDataMgr_loadDriver();
+ hwss_load();
+ DeviceCtrl_change_to_state(kdevice_state_ready);
+ zble_module_start_adv();
+ BoardLight_setGreenLightEffect(kLightEffect_slowFlash);
+ m_ispoweron = true;
+}
+
+static sample_data_filename_t* cratefilename() {
+ static ztm_t tm;
+ static sample_data_filename_t sampledata_file_name;
+ memset(&sampledata_file_name, 0, sizeof(sampledata_file_name));
+ znordic_rtc_gettime(&tm);
+
+ 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;
+}
+
+static void prvf_change_to_standby_state() { poweroff(); }
+static void prvf_change_to_ready_state() { poweron(); }
+static void prvf_change_to_sample_state() { //
+ if (m_device_state == kdevice_state_sampling) {
+ return;
+ }
+ DeviceCtrl_change_to_state(kdevice_state_sampling);
+}
+
+static void app_event_listener(void* p_event_data, uint16_t event_size) { //
+ app_event_t* event = (app_event_t*)p_event_data;
+
+ /*******************************************************************************
+ * 状态无关事件处理 *
+ *******************************************************************************/
+ if (event->eventType == kevent_ble_connect_event) {
+ BoardLight_setGreenLightEffect(kLightEffect_open);
+ return;
+ } else if (event->eventType == kevent_ble_disconnect_event) {
+ BoardLight_setGreenLightEffect(kLightEffect_slowFlash);
+ return;
+ }
+
+ /*******************************************************************************
+ * 状态机 *
+ *******************************************************************************/
+ if (m_device_state == kdevice_state_standby) {
+ // 休眠模式现在是深度睡眠,所以永远不会触发这个回调
+ }
+ //
+ else if (m_device_state == kdevice_state_ready) {
+ if (!zble_module_is_connected() && DeviceCtrl_cur_state_haspassed_ms() > APP_AUTO_SLEEP_TIMEOUT_MS) {
+ ZLOGI("auto sleep");
+ prvf_change_to_standby_state();
+ }
+
+ if (event->eventType == kevent_start_sample_event) {
+ // SD卡连接到单片机
+ SampleDataMgr_changeToLocalMode();
+ // 创建文件
+ m_sample_data_fd = SampleDataMgr_open(cratefilename(), kwrflag_write_only);
+ ZASSERT(m_sample_data_fd > 0);
+ // 切换到采集状态
+ prvf_change_to_sample_state();
+ // 开始采集
+ hwss_start_capture();
+ }
+ }
+ //
+ else if (m_device_state == kdevice_state_sampling) {
+ // 采集的字节长度超过最大字节长度,停止采集
+
+ if (event->eventType == kevent_capture_data_block_event) {
+ SampleDataMgr_write(m_sample_data_fd, (uint8_t*)event->val.block_sensor_data.data, event->val.block_sensor_data.len);
+ }
+
+ bool stopcapture = false;
+ if (SampleDataMgr_getFileSizeByFd(m_sample_data_fd) > SDCARD_MAX_FILE_SIZE) {
+ ZLOGI("stop sample because file size is too large");
+ stopcapture = true;
+ } else if (event->eventType == kevent_stop_sample_event) {
+ ZLOGI("stop sample because stop sample event");
+ stopcapture = true;
+ }
+
+ if (stopcapture) {
+ // 关闭文件
+ SampleDataMgr_close(m_sample_data_fd);
+ // SD卡连接到外部typec
+ SampleDataMgr_changeToExtMode();
+ // 停止采集
+ hwss_stop_capture();
+ // 切换到待机状态
+ prvf_change_to_ready_state();
+ }
+ }
+}
+
+void DeviceCtrl_startSample() {
+ ZLOGI("start sample");
+ static app_event_t event;
+ event.eventType = kevent_start_sample_event;
+ AppEvent_pushEvent(&event);
+}
+void DeviceCtrl_stopSample() {
+ ZLOGI("stop sample");
+ static app_event_t event;
+ event.eventType = kevent_stop_sample_event;
+ AppEvent_pushEvent(&event);
+}
+
+/*******************************************************************************
+ * EXTERN *
+ *******************************************************************************/
+
+void DeviceCtrl_init() {
+ // 蜂鸣器初始化
+ BoardBeepCtrl_init();
+ // 板载指示灯初始化
+ BoardLight_Init();
+ // 按键初始化
+ BoardButton_Init(board_button_cb);
+ // 电池初始化
+ BoardBattery_init();
+ // SD卡初始化
+ SampleDataMgr_init();
+ // 心电采集服务初始化
+ hwss_init();
+ // 注册事件监听
+ AppEvent_regListener(app_event_listener);
+ // 监听蓝牙事件
+ zble_module_reglistener(zble_event_listener);
+ // 切换到待机状态
+ prvf_change_to_ready_state();
+
+ 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(100), NULL)); // 200HZ采样
+}
+
+/*******************************************************************************
+ * UTILS *
+ *******************************************************************************/
void DeviceCtrl_change_to_state(device_state_t state) {
ZLOGI("change state from %s to %s", ds2str(m_device_state), ds2str(state));
m_device_state = state;
@@ -11,8 +236,57 @@ void DeviceCtrl_change_to_state(device_state_t state) {
uint32_t DeviceCtrl_cur_state_haspassed_ms() { return znordic_haspassed_ms(m_change_to_cur_state_tp); }
device_state_t DeviceCtrl_now_state() { return m_device_state; }
-void DeviceCtrl_startSample() {}
-void DeviceCtrl_stopSample() {}
-void DeviceCtrl_schdeule() {}
+#if 0
+static void DeviceCtrl_test() {
+ /**
+ * @brief
+ * 1. 测试蜂鸣器
+ * 2. 测试按键
+ * 3. 测试LED
+ * 4. 测试指示灯
+ * . SD卡
+ * 5. 测试电池电量采集
+ */
+#if 0
+ //蜂鸣器测试
+ BoardBeepCtrl_init();
+ BoardBeepCtrl_load();
+ BoardBeepCtrl_setEffect(kBoardBeepEffect_continuousShortBeep);
+#endif
+
+#if 1
+ // BoardButton_Init(board_button_cb);
+
+#endif
-void DeviceCtrl_init() {}
+#if 0
+ BoardLight_Init();
+ BoardLight_load();
+ BoardLight_setGreenLightEffect(kLightEffect_slowFlash);
+#endif
+#if 0
+ Board_sdcardInit();
+ Board_sdcardConnectToInternal();
+ Board_sdcardConnectToExt();
+
+ Board_sdcardConnectToInternal();
+ Board_sdcardConnectToExt();
+
+#endif
+#if 0
+ sample_data_mgr_init();
+ sample_data_mgr_loadDriver();
+ sample_data_mgr_change_to_local_mode();
+
+ sample_data_filename_t filename;
+ int fd = sample_data_mgr_open(&filename, kwrflag_write_only);
+ sample_data_mgr_write(fd, "123456", 6);
+ sample_data_mgr_close(fd);
+ sample_data_mgr_change_to_ext_mode();
+#endif
+#if 1
+ // 蜂鸣器测试
+
+#endif
+}
+#endif
diff --git a/app/src/heart_wave_sample_service.c b/app/src/heart_wave_sample_service.c
index 129ebda..8ad7043 100644
--- a/app/src/heart_wave_sample_service.c
+++ b/app/src/heart_wave_sample_service.c
@@ -154,7 +154,7 @@ static void ads1293_spi_writereg_and_check(ads1293_t* ads, uint8_t addr, uint8_t
}
}
-static void ads1293_init() {
+static void ads1293_init() {
/*******************************************************************************
* SPI初始化 *
*******************************************************************************/
@@ -273,15 +273,11 @@ void hwss_init(void) {
/**
* @brief 初始化ads1293硬件接口
*/
- ads1293_init();
-}
-void hwss_uninit(void) {
- /**
- * @brief 反初始化ads1293硬件接口
- */
- ads1293_uninit();
}
+void hwss_load(void) { ads1293_init(); }
+void hwss_unload(void) { ads1293_uninit(); }
+
void hwss_start_capture(void) {
m_work_flag = true;
ads1293_start_conversion(&m_ads1293_0);
diff --git a/app/src/heart_wave_sample_service.h b/app/src/heart_wave_sample_service.h
index 015f89d..5b467a5 100644
--- a/app/src/heart_wave_sample_service.h
+++ b/app/src/heart_wave_sample_service.h
@@ -16,10 +16,9 @@
* @brief 初始化
*/
void hwss_init(void);
-/**
- * @brief unint
- */
-void hwss_uninit(void);
+
+void hwss_load(void);
+void hwss_unload(void);
/**
* @brief 开始采集
diff --git a/app/src/main.c b/app/src/main.c
index ec85a9e..b23259e 100644
--- a/app/src/main.c
+++ b/app/src/main.c
@@ -9,20 +9,31 @@
#include "app_event_distribute.h"
#include "basic/ads1293/ads1293.h"
#include "board/board.h"
+#include "device_ctrl_service.h"
#include "zble_module.h"
#include "zdatachannel_service.h"
#include "znordic_device_info_mgr.h"
-#include "device_ctrl_service.h"
//
int main() {
APP_SCHED_INIT(APP_MAX_EVEN_SIZE, APP_EVENT_QUEUE_SIZE);
znordic_init();
+ NRF_LOG_INFO("compile time :%s", __TIME__);
+
+ /*******************************************************************************
+ * 蓝牙服务初始化 *
+ *******************************************************************************/
static zble_module_cfg_t cfg;
cfg.deviceName = device_info_read_sn_str();
cfg.on_service_init = AppBleService_onServiceInitCB;
zble_module_init(&cfg);
- NRF_LOG_INFO("compile time :%s", __TIME__);
+ AppBleService_init();
+ /*******************************************************************************
+ * 设备控制服务初始化 *
+ *******************************************************************************/
DeviceCtrl_init();
+ /*******************************************************************************
+ * LOOP *
+ *******************************************************************************/
znordic_loop();
}
diff --git a/app/src/sample_data_manager_service.c b/app/src/sample_data_manager_service.c
index 6c2cbf4..3e78d05 100644
--- a/app/src/sample_data_manager_service.c
+++ b/app/src/sample_data_manager_service.c
@@ -48,6 +48,11 @@ static void read_file_info() {
memcpy(m_sample_fileinfo_list.fileinfo[0]->filename, &_filename, sizeof(sample_data_filename_t));
m_sample_fileinfo_list.fileinfo[0]->size = fno.fsize;
m_sample_fileinfo_list.count = 1;
+
+ ZLOGI("filelist:");
+ ZLOGI(" name:%s", "0.bin");
+ ZLOGI(" size:%d", fno.fsize);
+
} else {
m_sample_fileinfo_list.fileinfo[0]->size = 0;
m_sample_fileinfo_list.count = 0;
@@ -57,17 +62,16 @@ static void read_file_info() {
/**
* @brief 文件驱动管理
*/
-void sample_data_mgr_init() {
+void SampleDataMgr_init() {
Board_sdcardInit();
-
// 先连接到单片机,读取下文件状态信息
- sample_data_mgr_change_to_local_mode();
- sample_data_mgr_change_to_ext_mode();
+ SampleDataMgr_changeToLocalMode();
+ SampleDataMgr_changeToExtMode();
}
-void sample_data_mgr_loadDriver() {
+void SampleDataMgr_loadDriver() {
// donothing
}
-void sample_data_mgr_unloadDriver() {
+void SampleDataMgr_unloadDriver() {
// donothin
}
typedef struct {
@@ -79,17 +83,18 @@ typedef struct {
/**
* @brief 存储器连接单片机
*/
-void sample_data_mgr_change_to_local_mode() {
+void SampleDataMgr_changeToLocalMode() {
+ ZLOGI("change to local mode");
Board_sdcardConnectToInternal();
read_file_info();
}
/**
* @brief 存储器连接外部typec
*/
-void sample_data_mgr_change_to_ext_mode() {
+void SampleDataMgr_changeToExtMode() {
+ ZLOGI("change to ext mode");
if (Board_sdcardGetConnectTo() == kConnectToInternal) {
read_file_info();
- return;
}
Board_sdcardConnectToExt();
}
@@ -104,39 +109,39 @@ void sample_data_mgr_change_to_ext_mode() {
static FIL m_default_file_handler;
static bool m_is_open;
-int32_t sample_data_mgr_open(sample_data_filename_t* filename, wrflag_t flag) {
+int32_t SampleDataMgr_open(sample_data_filename_t* filename, wrflag_t flag) {
FRESULT ff_result = f_open(&m_default_file_handler, (const TCHAR*)"0.bin", FA_CREATE_ALWAYS | FA_READ | FA_WRITE);
ZASSERT(ff_result == FR_OK);
m_is_open = true;
return 1;
}
-int32_t sample_data_mgr_close(int32_t fd) {
+int32_t SampleDataMgr_close(int32_t fd) {
ZASSERT(m_is_open);
FRESULT ff_result = f_close(&m_default_file_handler);
ZASSERT(ff_result == FR_OK);
m_is_open = false;
return 0;
}
-int32_t sample_data_mgr_write(int32_t fd, const uint8_t* data, int32_t size) {
+int32_t SampleDataMgr_write(int32_t fd, const uint8_t* data, int32_t size) {
ZASSERT(m_is_open);
UINT write_size;
FRESULT ff_result = f_write(&m_default_file_handler, data, size, &write_size);
ZASSERT(ff_result == FR_OK);
return write_size;
}
-int32_t sample_data_mgr_read(int32_t fd, uint8_t* data, int32_t size) {
+int32_t SampleDataMgr_read(int32_t fd, uint8_t* data, int32_t size) {
ZASSERT(m_is_open);
UINT read_size;
FRESULT ff_result = f_read(&m_default_file_handler, data, size, &read_size);
ZASSERT(ff_result == FR_OK);
return read_size;
}
-int32_t sample_data_mgr_get_file_size_by_fd(int32_t fd) {
+int32_t SampleDataMgr_getFileSizeByFd(int32_t fd) {
ZASSERT(m_is_open);
return f_size(&m_default_file_handler);
}
-int32_t sample_data_mgr_delete_file(sample_data_filename_t* filename) {
+int32_t SampleDataMgr_deleteFile(sample_data_filename_t* filename) {
if (Board_sdcardGetConnectTo() == kConnectToExt) {
/**
* @brief
@@ -149,8 +154,8 @@ int32_t sample_data_mgr_delete_file(sample_data_filename_t* filename) {
return 0;
}
-sample_data_fileinfo_list_t* sample_data_mgr_get_fileinfo_list() { //
+sample_data_fileinfo_list_t* SampleDataMgr_getFileinfoList() { //
return &m_sample_fileinfo_list;
}
-bool sample_data_mgr_storage_is_full() { return m_sample_fileinfo_list.count >= FILE_MAX_COUNT; }
-int32_t sample_data_mgr_get_file_num() { return m_sample_fileinfo_list.count; }
+bool SampleDataMgr_storageIsFull() { return m_sample_fileinfo_list.count >= FILE_MAX_COUNT; }
+int32_t SampleDataMgr_getFileNum() { return m_sample_fileinfo_list.count; }
diff --git a/app/src/sample_data_manager_service.h b/app/src/sample_data_manager_service.h
index a6f7b95..1781f7d 100644
--- a/app/src/sample_data_manager_service.h
+++ b/app/src/sample_data_manager_service.h
@@ -44,9 +44,9 @@ typedef struct {
/**
* @brief 文件驱动管理
*/
-void sample_data_mgr_init();
-void sample_data_mgr_loadDriver();
-void sample_data_mgr_unloadDriver();
+void SampleDataMgr_init();
+void SampleDataMgr_loadDriver();
+void SampleDataMgr_unloadDriver();
/*******************************************************************************
* 模式切换操作 *
*******************************************************************************/
@@ -54,25 +54,25 @@ void sample_data_mgr_unloadDriver();
/**
* @brief 存储器连接单片机
*/
-void sample_data_mgr_change_to_local_mode();
+void SampleDataMgr_changeToLocalMode();
/**
* @brief 存储器连接外部typec
*/
-void sample_data_mgr_change_to_ext_mode();
+void SampleDataMgr_changeToExtMode();
/*******************************************************************************
* FILE_OPERATION *
*******************************************************************************/
-int32_t sample_data_mgr_open(sample_data_filename_t* filename, wrflag_t flag);
-int32_t sample_data_mgr_close(int32_t fd);
-int32_t sample_data_mgr_write(int32_t fd, const uint8_t* data, int32_t size);
-int32_t sample_data_mgr_read(int32_t fd, uint8_t* data, int32_t size);
-int32_t sample_data_mgr_get_file_size_by_fd(int32_t fd);
+int32_t SampleDataMgr_open(sample_data_filename_t* filename, wrflag_t flag);
+int32_t SampleDataMgr_close(int32_t fd);
+int32_t SampleDataMgr_write(int32_t fd, const uint8_t* data, int32_t size);
+int32_t SampleDataMgr_read(int32_t fd, uint8_t* data, int32_t size);
+int32_t SampleDataMgr_getFileSizeByFd(int32_t fd);
/*******************************************************************************
* 文件管理操作 *
*******************************************************************************/
-int32_t sample_data_mgr_delete_file(sample_data_filename_t* filename);
-sample_data_fileinfo_list_t* sample_data_mgr_get_fileinfo_list();
-bool sample_data_mgr_storage_is_full();
-int32_t sample_data_mgr_get_file_num();
+int32_t SampleDataMgr_deleteFile(sample_data_filename_t* filename);
+sample_data_fileinfo_list_t* SampleDataMgr_getFileinfoList();
+bool SampleDataMgr_storageIsFull();
+int32_t SampleDataMgr_getFileNum();
diff --git a/libznordic b/libznordic
index 7eee0f9..44e3c04 160000
--- a/libznordic
+++ b/libznordic
@@ -1 +1 @@
-Subproject commit 7eee0f956b26dd0870837349b6ae9d237dabf031
+Subproject commit 44e3c0469ba810f63f28577799e230c849c5c613