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