|
|
@ -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); } |