diff --git a/app/src/app_ble_service.c b/app/src/app_ble_service.c index c1f9993..4ec5fe5 100644 --- a/app/src/app_ble_service.c +++ b/app/src/app_ble_service.c @@ -18,8 +18,8 @@ static uint8_t rxbufcache[256]; static bool is_rxbufcache_used = false; // 接收到的消息是否正在被处理中 static bool m_realtime_report_state = false; // 实时上报状态 -static uint8_t m_txbuf[128]; -static uint8_t m_reportbuf[128]; +static uint8_t m_txbuf[256]; +static uint8_t m_reportbuf[256]; APP_TIMER_DEF(m_record_upload_tmr); // 数据上报定时器 APP_TIMER_DEF(m_record_upload_finish_packet_report_tmr); // 数据上报完成上报定时器 @@ -111,7 +111,7 @@ static void prvf_try_report_sample_end_event() { return; } -void prvf_report_sample_data(uint32_t frameIndex, uint32_t data, uint32_t data2, uint32_t data3) { +void prvf_report_sample_data(uint32_t frameIndex, one_frame_data_t* data, int32_t ndata) { if (!m_realtime_report_state) { return; } @@ -125,19 +125,22 @@ void prvf_report_sample_data(uint32_t frameIndex, uint32_t data, uint32_t data2, /** * @brief 第一导联数据 */ - // reportpacket->data[0] = (data >> 0) & 0xFF; - // reportpacket->data[1] = (data >> 8) & 0xFF; - // reportpacket->data[2] = (data >> 16) & 0xFF; - // reportpacket->data[3] = + for (int i = 0; i < ndata; i++) { - *(uint32_t*)(reportpacket->data) = data; - *(uint32_t*)(reportpacket->data + 4) = data2; - *(uint32_t*)(reportpacket->data + 8) = data3; + reportpacket->data[i * 9 + 0] = ((data[i].data0)) >> 0; + reportpacket->data[i * 9 + 1] = ((data[i].data0)) >> 8; + reportpacket->data[i * 9 + 2] = ((data[i].data0)) >> 16; - // reportpacket->data[12] = 0xFE; - // reportpacket->data[13] = 0xEF; + reportpacket->data[i * 9 + 3] = ((data[i].data1)) >> 0; + reportpacket->data[i * 9 + 4] = ((data[i].data1)) >> 8; + reportpacket->data[i * 9 + 5] = ((data[i].data1)) >> 16; - uint16_t sendlen = sizeof(heartrate_report_packet_t) + 4 * 3; + reportpacket->data[i * 9 + 6] = ((data[i].data2)) >> 0; + reportpacket->data[i * 9 + 7] = ((data[i].data2)) >> 8; + reportpacket->data[i * 9 + 8] = ((data[i].data2)) >> 16; + } + uint16_t sendlen = sizeof(heartrate_report_packet_t) + ndata * 9; + ZLOGI("report data %d %d", sendlen, ndata); zdatachannel_data_send2(m_reportbuf, sendlen); return; } @@ -505,10 +508,10 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { // static int cnt = 0; cnt++; if (DeviceCtrl_now_state() == kdevice_state_sampling && cnt % 10 == 0) { - uint8_t drop0 = hwss_get_drop_state0(); - uint8_t drop1 = hwss_get_drop_state1(); - ZLOGI("[%d] drop %s", znordic_getpower_on_ms(), dropstate(drop0, drop1)); - prvf_try_report_sensor_drop_event(drop0, drop1); + // uint8_t drop0 = hwss_get_drop_state0(); + // uint8_t drop1 = hwss_get_drop_state1(); + // ZLOGI("[%d] drop %s", znordic_getpower_on_ms(), dropstate(drop0, drop1)); + // prvf_try_report_sensor_drop_event(drop0, drop1); } } else if (event->eventType == kevent_sample_stop_event) { @@ -517,10 +520,8 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { // // 上报采样数据 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); + prvf_report_sample_data(event->val.little_data_block.frameIndex, // + event->val.little_data_block.data, LITTLE_DATA_BLOCK_FRAME_NUM); } } } diff --git a/app/src/heart_wave_sample_service.c b/app/src/heart_wave_sample_service.c index e0a5d6c..076e0f2 100644 --- a/app/src/heart_wave_sample_service.c +++ b/app/src/heart_wave_sample_service.c @@ -138,9 +138,9 @@ static inline void prvf_light_block_trigger_event() { // memcpy(event.val.little_data_block.data, m_sensor_little_frame_cache, LITTLE_DATA_BLOCK_FRAME_NUM * sizeof(one_frame_data_t)); for (uint32_t i = 0; i < LITTLE_DATA_BLOCK_FRAME_NUM; i++) { - event.val.little_data_block.data[i].data0 = m_sensor_little_frame_cache[0].data0; - event.val.little_data_block.data[i].data1 = m_sensor_little_frame_cache[0].data1; - event.val.little_data_block.data[i].data2 = m_sensor_little_frame_cache[0].data2; + event.val.little_data_block.data[i].data0 = m_sensor_little_frame_cache[i].data0; + event.val.little_data_block.data[i].data1 = m_sensor_little_frame_cache[i].data1; + event.val.little_data_block.data[i].data2 = m_sensor_little_frame_cache[i].data2; // event.val.little_data_block.data[0].data0 = 1111111111; // event.val.little_data_block.data[0].data1 = 2222222222; // event.val.little_data_block.data[0].data2 = 3333333333; @@ -418,8 +418,8 @@ void hwss_init(void) { ZASSERT(SAMPLE_RATE == 400); uint32_t timer_ticks = nrfx_timer_ms_to_ticks(&m_timer, 5); // 200HZ ZLOGI("timer_ticks:%d\n", timer_ticks); - ZASSERT(timer_ticks % 2 == 0); // - timer_ticks = timer_ticks / 2; // 400HZ + ZASSERT(timer_ticks % 2 == 0); // + timer_ticks = timer_ticks / 2; // 400HZ nrfx_timer_extended_compare(&m_timer, NRF_TIMER_CC_CHANNEL0, timer_ticks, NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK, true); } @@ -434,6 +434,7 @@ void hwss_start_capture(void) { m_work_flag = true; m_frame_index = 0; m_frame_filter_index = 0; + prvf_light_block_cache_clear(); ads1293_start_conversion(&m_ads1293_0); ads1293_start_conversion(&m_ads1293_1); nrfx_timer_enable(&m_timer); @@ -443,6 +444,7 @@ void hwss_stop_capture(void) { m_work_flag = false; m_frame_index = 0; m_frame_filter_index = 0; + prvf_light_block_cache_clear(); ads1293_stop_conversion(&m_ads1293_0); ads1293_stop_conversion(&m_ads1293_1); } diff --git a/test.txt b/test.txt new file mode 100644 index 0000000..28c1d1d --- /dev/null +++ b/test.txt @@ -0,0 +1,37 @@ +单导: +采样率:500HZ +位宽:12位 + +上报频率 +100HZ +上报数据示例: + +0: 0帧数据(2BYTE),1帧数据(2BYTE),2帧数据(2BYTE),3帧数据(2BYTE),4帧数据(2BYTE) +5: 5帧数据(2BYTE),6帧数据(2BYTE),7帧数据(2BYTE),8帧数据(2BYTE),9帧数据(2BYTE) +10:10帧数据(2BYTE),11帧数据(2BYTE),12帧数据(2BYTE),13帧数据(2BYTE),14帧数据(2BYTE) +15:15帧数据(2BYTE),16帧数据(2BYTE),17帧数据(2BYTE),18帧数据(2BYTE),19帧数据(2BYTE) + + +三导: +采样率:400HZ +位宽:24位 + +上报频率: +100HZ +上报数据示例: + +0: 0帧数据_CH0(3BYTE),0帧数据_CH1(3BYTE),0帧数据_CH2(3BYTE), + 1帧数据_CH0(3BYTE),1帧数据_CH1(3BYTE),1帧数据_CH2(3BYTE), + 2帧数据_CH0(3BYTE),2帧数据_CH1(3BYTE),2帧数据_CH2(3BYTE), + 3帧数据_CH0(3BYTE),3帧数据_CH1(3BYTE),3帧数据_CH2(3BYTE), + +4: 4帧数据_CH0(3BYTE),4帧数据_CH1(3BYTE),4帧数据_CH2(3BYTE), + 5帧数据_CH0(3BYTE),5帧数据_CH1(3BYTE),5帧数据_CH2(3BYTE), + 6帧数据_CH0(3BYTE),6帧数据_CH1(3BYTE),6帧数据_CH2(3BYTE), + 7帧数据_CH0(3BYTE),7帧数据_CH1(3BYTE),7帧数据_CH2(3BYTE), + +8: 8帧数据_CH0(3BYTE),8帧数据_CH1(3BYTE),8帧数据_CH2(3BYTE), + 9帧数据_CH0(3BYTE),9帧数据_CH1(3BYTE),9帧数据_CH2(3BYTE), + 10帧数据_CH0(3BYTE),10帧数据_CH1(3BYTE),10帧数据_CH2(3BYTE), + 11帧数据_CH0(3BYTE),311数据_CH1(3BYTE),311数据_CH2(3BYTE), +