diff --git a/.vscode/settings.json b/.vscode/settings.json index ca66875..aa3e096 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -106,7 +106,8 @@ "app_event_distribute.h": "c", "board_beep_ctrl.h": "c", "nrf_soc.h": "c", - "sample_data_manager_service.h": "c" + "sample_data_manager_service.h": "c", + "app_event.h": "c" }, "files.encoding": "gbk" } \ No newline at end of file diff --git a/app/src/app_ble_service.c b/app/src/app_ble_service.c index cad6cbc..2345995 100644 --- a/app/src/app_ble_service.c +++ b/app/src/app_ble_service.c @@ -1,6 +1,8 @@ #include "app_ble_service.h" #include "../../ify_hrs_protocol/heart_rate_sensor_protocol.h" +#include "app_event.h" +#include "app_event_distribute.h" #include "app_scheduler.h" #include "board/board.h" #include "board/board_battery_state.h" @@ -81,6 +83,70 @@ static void send_success_receipt(ify_hrs_packet_t* rxpacket, int32_t emptydatasi zdatachannel_data_send2(m_txbuf, sendlen); } +static void prvf_try_report_sensor_drop_event(uint8_t dropstate0, uint8_t dropstate1) { + sensor_drop_event_report_packet_t* reportpacket = (sensor_drop_event_report_packet_t*)m_reportbuf; + reportpacket->cmd = ify_hrs_report_sensor_drop_detect; + reportpacket->frame_index = 0; + reportpacket->frame_type = kifyhrs_pt_report; + reportpacket->drop_state0 = dropstate0; + reportpacket->drop_state1 = dropstate1; + + uint16_t sendlen = sizeof(sensor_drop_event_report_packet_t); + zdatachannel_data_send2(m_reportbuf, sendlen); + return; +} + +static void prvf_try_report_sample_end_event() { + sensor_drop_event_report_packet_t* reportpacket = (ify_hrs_packet_t*)m_reportbuf; + reportpacket->cmd = ify_hrs_report_sample_finish_end; + reportpacket->frame_index = 0; + reportpacket->frame_type = kifyhrs_pt_report; + + uint16_t sendlen = sizeof(ify_hrs_packet_t); + zdatachannel_data_send2(m_reportbuf, sendlen); + return; +} + +void prvf_report_sample_data(uint32_t frameIndex, uint32_t data, uint32_t data2, uint32_t data3) { + if (!m_realtime_report_state) { + return; + } + + heartrate_report_packet_t* reportpacket = (heartrate_report_packet_t*)m_reportbuf; + reportpacket->cmd = ify_hrs_report_heartrate_data; + reportpacket->frame_index = 0; + reportpacket->frame_type = kifyhrs_pt_report; + reportpacket->sample_data_index = frameIndex; + + /** + * @brief 第一导联数据 + */ + reportpacket->data[0] = (data >> 0) & 0xFF; + reportpacket->data[1] = (data >> 8) & 0xFF; + reportpacket->data[2] = (data >> 16) & 0xFF; + reportpacket->data[3] = 0; + + /** + * @brief 第二导联数据 + */ + reportpacket->data[4] = (data2 >> 0) & 0xFF; + reportpacket->data[5] = (data2 >> 8) & 0xFF; + reportpacket->data[6] = (data2 >> 16) & 0xFF; + reportpacket->data[7] = 0; + + /** + * @brief 第三导联数据 + */ + reportpacket->data[8] = (data3 >> 0) & 0xFF; + reportpacket->data[9] = (data3 >> 8) & 0xFF; + reportpacket->data[10] = (data3 >> 16) & 0xFF; + reportpacket->data[11] = 0; + + uint16_t sendlen = sizeof(heartrate_report_packet_t) + 4 * 3; + zdatachannel_data_send2(reportbuf, sendlen); + return; +} + /******************************************************************************* * 消息处理 * *******************************************************************************/ @@ -271,8 +337,6 @@ static void prvf_process_ble_rx_data(void* p_event_data, uint16_t len) { } } - - void AppBleService_onServiceInitCB() { ZLOGI("init zdatachannel service"); static zdatachannel_init_t zdatachannle_init; @@ -281,6 +345,22 @@ void AppBleService_onServiceInitCB() { ZERROR_CHECK(zdatachannel_init(&m_zhrs, &zdatachannle_init)); } -void AppBleService_init() { - // +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_sensor_drop) { + prvf_try_report_sensor_drop_event(event->val.sensor_drop.drop0, event->val.sensor_drop.drop1); + } else if (event->eventType == kevent_sample_stop_event) { + prvf_try_report_sample_end_event(); + } else if (event->eventType == kevent_capture_little_data_block_event) { + // 上报采样数据 + if (m_realtime_report_state) { + // 上报采样数据 + prvf_report_sample_data(event->val.little_data_block.frameIndex, // + event->val.little_data_block.data[0].data0, // + event->val.little_data_block.data[0].data1, // + event->val.little_data_block.data[0].data2); + } + } } + +void AppBleService_init() { AppEvent_regListener(app_event_listener); } diff --git a/app/src/app_event.h b/app/src/app_event.h index 741eaf7..2bf343e 100644 --- a/app/src/app_event.h +++ b/app/src/app_event.h @@ -12,8 +12,11 @@ typedef enum { kevent_button_push_event, // 按键按下事件 kevent_button_release_event, // 按键释放事件 - kevent_start_sample_event, // 开始采集事件 - kevent_stop_sample_event, // 停止采集事件 + kevent_start_sample_cmd_event, // 开始采集事件 + kevent_stop_sample_cmd_event, // 停止采集事件 + + kevent_sample_start_event, // 开始采集事件 + kevent_sample_stop_event, // 停止采集事件 kevent_ble_connect_event, // 蓝牙连接事件 kevent_ble_disconnect_event, // 蓝牙断开事件 diff --git a/app/src/board/board_light_ctrl.c b/app/src/board/board_light_ctrl.c index abbafb9..9668c5f 100644 --- a/app/src/board/board_light_ctrl.c +++ b/app/src/board/board_light_ctrl.c @@ -28,7 +28,7 @@ static void BoardLight_effect_tmr_handler(void *p_context) { // BoardLight_setGreenLightState(false); } } else { - if (BLINK_PERIOD_MS * m_blink_cnt >= 3000) { + if (BLINK_PERIOD_MS * m_blink_cnt >= 1000) { m_blink_cnt = 0; return; } diff --git a/app/src/device_ctrl_service.c b/app/src/device_ctrl_service.c index c2daf1f..b32c398 100644 --- a/app/src/device_ctrl_service.c +++ b/app/src/device_ctrl_service.c @@ -154,7 +154,7 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { // prvf_change_to_standby_state(); } - if (event->eventType == kevent_start_sample_event) { + if (event->eventType == kevent_start_sample_cmd_event) { // SD卡连接到单片机 SampleDataMgr_changeToLocalMode(); // 创建文件 @@ -185,7 +185,7 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { // 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) { + } else if (event->eventType == kevent_stop_sample_cmd_event) { ZLOGI("stop sample because stop sample event"); stopcapture = true; } @@ -206,13 +206,13 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { // void DeviceCtrl_startSample() { ZLOGI("start sample"); static app_event_t event; - event.eventType = kevent_start_sample_event; + event.eventType = kevent_start_sample_cmd_event; AppEvent_pushEvent(&event); } void DeviceCtrl_stopSample() { ZLOGI("stop sample"); static app_event_t event; - event.eventType = kevent_stop_sample_event; + event.eventType = kevent_stop_sample_cmd_event; AppEvent_pushEvent(&event); }