Browse Source

update

master
zhaohe 1 year ago
parent
commit
c03a468c6b
  1. 2
      app/src/app_basic_service/zapp.c
  2. 8
      app/src/app_service/display_ctrl_service/display_mgr.c
  3. 2
      app/src/app_service/ecg_service/algo/iflytop_simple_filter_ext.h
  4. 55
      app/src/app_service/ecg_service/algo/zdata_statistics.c
  5. 3
      app/src/app_service/ecg_service/algo/zdata_statistics.h
  6. 32
      app/src/app_service/ecg_service/ecg_algo.c
  7. 6
      app/src/app_service/ecg_service/ecg_service.c
  8. 15
      app/src/one_conduction_main.c

2
app/src/app_basic_service/zapp.c

@ -94,7 +94,7 @@ void zapp_init() {
m_delay_event_preset_tmr[8].tmrid = m_delay_event_preset_tmr8;
m_delay_event_preset_tmr[9].tmrid = m_delay_event_preset_tmr9;
}
void zapp_start_schedule() { ZERROR_CHECK(app_timer_start(m_state_machine_driver_tmr, APP_TIMER_TICKS(300), NULL)); }
void zapp_start_schedule() { ZERROR_CHECK(app_timer_start(m_state_machine_driver_tmr, APP_TIMER_TICKS(1000), NULL)); }
/***********************************************************************************************************************
* state_machine *

8
app/src/app_service/display_ctrl_service/display_mgr.c

@ -85,7 +85,9 @@ static void _page_change(page_t page) {
for (int i = 0; i < m_pageNum; i++) {
if (m_page_processers[i].page == m_page) {
if (m_page_processers[i].on_page_load) m_page_processers[i].on_page_load();
ZERROR_CHECK(app_timer_start(m_dsp_mgr_schedule_tmr, APP_TIMER_TICKS(10 /*ms*/), NULL));
int32_t period = m_page_processers[i].page_get_schedule_period();
ZERROR_CHECK(app_timer_start(m_dsp_mgr_schedule_tmr, APP_TIMER_TICKS(period /*ms*/), NULL));
break;
}
}
@ -239,7 +241,7 @@ void samplePage_update_state(int progress_s, int wave_y, int heartrate, bool upd
}
static void page_sampling_unload() {}
static uint32_t page_sampling_get_scheduler_period() { return 10; }
static uint32_t page_sampling_get_scheduler_period() { return 20; }
static void page_sampling_tmr_cb() {
static int count = 0;
count++;
@ -247,7 +249,7 @@ static void page_sampling_tmr_cb() {
int wave_y = (int)ecg_service_get_display_val();
int heartrate = (int)ecg_service_get_heart_rate();
samplePage_update_state(capturetime / 1000, wave_y, heartrate, count % 30 == 0, count % 10 == 0);
samplePage_update_state(capturetime / 1000, wave_y, heartrate, count % 15 == 0, count % 5 == 0);
}
/***********************************************************************************************************************

2
app/src/app_service/ecg_service/algo/iflytop_simple_filter_ext.h

@ -1,7 +1,7 @@
#pragma once
#include "iflytop_simple_filter.h"
#define FILTER_MAX_ORDER 10
#define FILTER_MAX_ORDER 20
typedef struct {
LPFilter_t lp_filter[FILTER_MAX_ORDER];
int order;

55
app/src/app_service/ecg_service/algo/zdata_statistics.c

@ -1,38 +1,57 @@
#include "zdata_statistics.h"
#include <string.h>
void zdata_statistics_init(zdata_statistics_t* p_analyzer, int32_t* buf, int32_t bufsize) {
p_analyzer->buf = buf;
p_analyzer->bufsize = bufsize;
p_analyzer->head = 0;
p_analyzer->tail = 0;
p_analyzer->avg = 0;
p_analyzer->max = 0;
p_analyzer->min = 0;
}
int32_t zdata_statistics_get_date(int off) {}
void zdata_statistics_push(zdata_statistics_t* p_analyzer, int32_t data) {
p_analyzer->buf[p_analyzer->head] = data;
p_analyzer->head = (p_analyzer->head + 1) % p_analyzer->bufsize;
if (p_analyzer->head == p_analyzer->tail) {
p_analyzer->tail = (p_analyzer->tail + 1) % p_analyzer->bufsize;
p_analyzer->sum -= p_analyzer->buf[p_analyzer->tail];
memmove(p_analyzer->buf + 1, p_analyzer->buf, (p_analyzer->bufsize - 1) * sizeof(int32_t));
p_analyzer->buf[0] = data;
p_analyzer->datanum++;
if (p_analyzer->datanum > p_analyzer->bufsize) {
p_analyzer->datanum = p_analyzer->bufsize;
}
p_analyzer->sum = 0;
for (int i = 0; i < p_analyzer->datanum; i++) {
p_analyzer->sum += p_analyzer->buf[i];
}
p_analyzer->avg = p_analyzer->sum / p_analyzer->datanum;
float max = 0;
float min = 0;
max = p_analyzer->buf[0];
min = p_analyzer->buf[0];
for (int i = 0; i < p_analyzer->datanum; i++) {
max = max > p_analyzer->buf[i] ? max : p_analyzer->buf[i];
min = min < p_analyzer->buf[i] ? min : p_analyzer->buf[i];
}
p_analyzer->sum += data;
p_analyzer->avg = p_analyzer->sum / p_analyzer->bufsize;
p_analyzer->max = p_analyzer->max > data ? p_analyzer->max : data;
p_analyzer->min = p_analyzer->min < data ? p_analyzer->min : data;
p_analyzer->max = max;
p_analyzer->min = min;
}
void zdata_statistics_clear(zdata_statistics_t* p_analyzer) {
p_analyzer->head = 0;
p_analyzer->tail = 0;
p_analyzer->sum = 0;
p_analyzer->avg = 0;
p_analyzer->max = 0;
p_analyzer->min = 0;
p_analyzer->sum = 0;
p_analyzer->avg = 0;
p_analyzer->max = 0;
p_analyzer->min = 0;
p_analyzer->datanum = 0;
}
float zdata_statistics_get_avg(zdata_statistics_t* p_analyzer) { return p_analyzer->avg; }
float zdata_statistics_get_max(zdata_statistics_t* p_analyzer) { return p_analyzer->max; }
float zdata_statistics_get_min(zdata_statistics_t* p_analyzer) { return p_analyzer->min; }
bool zdata_statistics_is_full(zdata_statistics_t* p_analyzer) { return p_analyzer->head == p_analyzer->tail; }
bool zdata_statistics_is_full(zdata_statistics_t* p_analyzer) { return p_analyzer->datanum == p_analyzer->bufsize; }

3
app/src/app_service/ecg_service/algo/zdata_statistics.h

@ -12,8 +12,7 @@ typedef struct {
float max;
float min;
uint32_t head;
uint32_t tail;
uint32_t datanum;
} zdata_statistics_t;

32
app/src/app_service/ecg_service/ecg_algo.c

@ -22,27 +22,29 @@ void ecg_algo_init() {
zsimple_qrs_init(&m_qrs, SAMPLE_RATE);
zdata_statistics_init(&m_data_statistics, m_data_statistics_buf, ZARRAY_SIZE(m_data_statistics_buf));
}
void ecg_algo_process_data(int32_t indata) {
int32_t data = indata;
data = LPFilterExt_update(&m_lp_filter, data);
data = HPFilterExt_update(&m_hp_filter, data);
data = NOTCHFilterExt_update(&m_notch_filter, data);
reportdata = data;
int32_t maxval;
int32_t minval;
int32_t nowval100;
void ecg_algo_process_data(int32_t indata) {
float data = indata;
data = LPFilterExt_update(&m_lp_filter, data);
data = HPFilterExt_update(&m_hp_filter, data);
data = NOTCHFilterExt_update(&m_notch_filter, data);
reportdata = data;
zdata_statistics_push(&m_data_statistics, data);
if (zdata_statistics_is_full(&m_data_statistics)) {
zsimple_qrs_process_data(&m_qrs, data, zdata_statistics_get_min(&m_data_statistics), zdata_statistics_get_max(&m_data_statistics),
zdata_statistics_get_avg(&m_data_statistics));
zdata_statistics_get_avg(&m_data_statistics));
/**
* @brief
*/
int32_t max = zdata_statistics_get_max(&m_data_statistics);
int32_t min = zdata_statistics_get_min(&m_data_statistics);
maxval = zdata_statistics_get_max(&m_data_statistics);
minval = zdata_statistics_get_min(&m_data_statistics);
int32_t nowvaloff = data - min;
int32_t nowval100 = nowvaloff * 100 / (max - min);
int32_t nowvaloff = data - minval;
nowval100 = 10 + nowvaloff * 80 / (maxval - minval);
displaydata = nowval100;
} else {
@ -50,9 +52,9 @@ void ecg_algo_process_data(int32_t indata) {
}
}
void ecg_algo_reset() {
LPFilterExt_init(&m_lp_filter, 40, SAMPLE_RATE, 5, true);
HPFilterExt_init(&m_hp_filter, 1, SAMPLE_RATE, 3, true);
NOTCHFilterExt_init(&m_notch_filter, 50, 1, SAMPLE_RATE, 1, true);
LPFilterExt_init(&m_lp_filter, 40, SAMPLE_PERIOD_S, 9, true);
HPFilterExt_init(&m_hp_filter, 1, SAMPLE_PERIOD_S, 1, true);
NOTCHFilterExt_init(&m_notch_filter, 50, 10, SAMPLE_PERIOD_S, 3, false);
zdata_statistics_clear(&m_data_statistics);
zsimple_qrs_clear();
}

6
app/src/app_service/ecg_service/ecg_service.c

@ -196,12 +196,12 @@ static void ads1291_ready_pin_irq(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t a
ads129x_read_data(&capture_data);
//
// ecg_algo_process_data(capture_data.ch1data);
ecg_algo_process_data(capture_data.ch1data);
//
one_frame_t frame;
// frame.data = ecg_algo_get_report_data();
frame.data = capture_data.ch1data;
frame.data = ecg_algo_get_report_data();
// frame.data = capture_data.ch1data;
frame.leadoff = capture_data.loffstate;
ecg_data_mgr_push_one_frame(frame);
}

15
app/src/one_conduction_main.c

@ -214,7 +214,7 @@ void on_state_change(device_state_t from, device_state_t to) {
beep_load();
light_ctrl_load();
dsp_mgr_load();
// dsp_mgr_change_page(kpage_welcome);
dsp_mgr_change_page(kpage_welcome);
ecg_service_load();
m_poweron_flag = true;
@ -225,6 +225,7 @@ void on_state_change(device_state_t from, device_state_t to) {
} else if (from == kstate_mainPage) {
} else if (from == kstate_capture) {
ecg_service_stop_capture();
beep_set_effect(STOP_SAMPLE_EFFECT);
} else if (from == kstate_charging) {
}
@ -256,6 +257,8 @@ void on_state_change(device_state_t from, device_state_t to) {
} else if (to == kstate_capture) {
dsp_mgr_change_page(kpage_sampling);
ecg_service_start_capture();
beep_set_effect(START_SAMPLE_EFFECT);
} else if (to == kstate_charging) {
dsp_mgr_change_page(kpage_charging_page);
}
@ -264,12 +267,16 @@ void on_state_change(device_state_t from, device_state_t to) {
/***********************************************************************************************************************
* ʼþ´¦Àí *
***********************************************************************************************************************/
void on_zapp_ebus_event(void* p_event_data, uint16_t event_size) {
extern int32_t maxval;
extern int32_t minval;
extern int32_t nowval100;
void on_zapp_ebus_event(void* p_event_data, uint16_t event_size) {
if (!p_event_data) return;
app_event_t* p_event = (app_event_t*)p_event_data;
if(p_event->eventType == kappevent_tmr_scheduler_event){
ZLOGI("tmr event.");
if (p_event->eventType == kappevent_tmr_scheduler_event) {
ZLOGI("tmr event. %d %d %d", nowval100, minval, maxval);
}
if (zapp_state_machine_now_state() == kstate_standby) {

Loading…
Cancel
Save