Browse Source

支持测试模式

master
zhaohe 1 year ago
parent
commit
ae06f45c42
  1. 63
      app/src/board/ads129x/ads129x.c
  2. 10
      app/src/board/ads129x/ads129x.h
  3. 30
      app/src/service/ble_cmd_processer/ble_cmd_process_service.c
  4. 3
      app/src/service/heart_wave_sample_service/heart_wave_sample_service.c
  5. 8
      app/src/service/heart_wave_sample_service/heart_wave_sample_service.h
  6. 2
      ify_hrs_protocol

63
app/src/board/ads129x/ads129x.c

@ -58,7 +58,7 @@ uint8_t port_spi_transmit_receive(uint8_t tx) {
}
/* ads129X发送指令 */
uint8_t ads129X_send_cmd(uint8_t cmd) {
uint8_t ads129x_send_cmd(uint8_t cmd) {
uint8_t rx = 0;
ADS129X_CS_RESET(); /* 选中设备 */
@ -73,7 +73,7 @@ uint8_t ads129X_send_cmd(uint8_t cmd) {
}
/* ads129X读写寄存器,自动根据指令类型区分读和写操作 */
uint8_t ads129X_rw_reg(uint8_t cmd, uint8_t data) {
uint8_t ads129x_rw_reg(uint8_t cmd, uint8_t data) {
uint8_t rx = 0;
ADS129X_CS_RESET(); /* 选中设备 */
@ -93,8 +93,8 @@ uint8_t ads129X_rw_reg(uint8_t cmd, uint8_t data) {
return rx;
}
uint8_t ads129X_read_reg(uint8_t add) { return ads129X_rw_reg(ADS129X_COMMAND_RREG | add, 0); }
void ads129X_write_reg(uint8_t add, uint8_t data) { ads129X_rw_reg(ADS129X_COMMAND_WREG | add, data); }
uint8_t ads129x_read_reg(uint8_t add) { return ads129x_rw_reg(ADS129X_COMMAND_RREG | add, 0); }
void ads129x_write_reg(uint8_t add, uint8_t data) { ads129x_rw_reg(ADS129X_COMMAND_WREG | add, data); }
/* 从指定寄存器开始读写一定数量的寄存器 */
void ads129X_write_multiregs(uint8_t reg, uint8_t* ch, uint8_t size) {
@ -138,8 +138,8 @@ void ads129X_read_multiregs(uint8_t reg, uint8_t* ch, uint8_t size) {
ADS129X_CS_SET();
}
static void ads129x_readback_reg(ads129x_regs_t* regcache) { ads129X_read_multiregs(ADS129X_REG_ID, (uint8_t*)regcache, sizeof(ads129x_regs_t)); }
static void ads129x_dump_reg(ads129x_regs_t* regcache) {
static void ads129x_readback_regs(ads129x_regs_t* regcache) { ads129X_read_multiregs(ADS129X_REG_ID, (uint8_t*)regcache, sizeof(ads129x_regs_t)); }
static void ads129x_dump_regs(ads129x_regs_t* regcache) {
ZLOGI("id : %x", regcache->id);
ZLOGI("cfg1 : %x", regcache->cfg1);
ZLOGI("cfg2 : %x", regcache->cfg2);
@ -154,7 +154,7 @@ static void ads129x_dump_reg(ads129x_regs_t* regcache) {
ZLOGI("gpio : %x", regcache->gpio);
}
static bool ads129x_write_reg(ads129x_regs_t* writeval) {
static bool ads129x_write_regs(ads129x_regs_t* writeval) {
static ads129x_regs_t rdbak;
ads129X_write_multiregs(ADS129X_REG_ID, (uint8_t*)writeval, sizeof(ads129x_regs_t));
ads129X_read_multiregs(ADS129X_REG_ID, (uint8_t*)&rdbak, sizeof(ads129x_regs_t));
@ -202,25 +202,36 @@ uint8_t ads129x_init(ads129x_cfg_t* cfg) {
ADS129X_REST_SET();
port_ads129x_delay_ms(100); /* 硬件复位 */
ads129X_send_cmd(ADS129X_COMMAND_SDATAC); /* 软件复位,并停止连续读状态 */
ads129x_send_cmd(ADS129X_COMMAND_SDATAC); /* 软件复位,并停止连续读状态 */
port_ads129x_delay_ms(100);
ads129X_send_cmd(ADS129X_COMMAND_RESET);
ads129x_send_cmd(ADS129X_COMMAND_RESET);
port_ads129x_delay_ms(1000);
ads129X_send_cmd(ADS129X_COMMAND_SDATAC);
ads129x_send_cmd(ADS129X_COMMAND_SDATAC);
port_ads129x_delay_ms(100);
static ads129x_regs_t regcache;
ads129x_readback_regs(&regcache);
ads129x_dump_regs(&regcache);
regcache.cfg1 = 0x02;
regcache.cfg2 = 0xE0;
regcache.loff = 0xF0;
regcache.ch1set = 0x00;
regcache.ch2set = 0x00;
regcache.rld_sens = 0x20;
regcache.loff_sens = 0x03;
ads129x_write_regs(&regcache);
nrf_gpio_pin_set(ads129x_cfg->pwdnpin);
return 0;
}
#if 0
uint8_t ads129x_start_capture(bool test) {
ads129X_send_cmd(ADS129X_COMMAND_SDATAC); /* 进入停止连续读模式 */
port_delay_ms(100);
ads129x_send_cmd(ADS129X_COMMAND_SDATAC); /* 进入停止连续读模式 */
port_delay_ms(10);
static ads129x_regs_t regcache;
ads129x_readback_reg(&regcache);
ads129x_dump_reg(&regcache);
ads129x_readback_regs(&regcache);
ads129x_dump_regs(&regcache);
regcache.cfg1 = 0x02;
regcache.cfg2 = 0xE0;
@ -246,17 +257,25 @@ uint8_t ads129x_start_capture(bool test) {
regcache.ch2set = ADS129X_SET_BITS(regcache.ch2set, ADS129X_MUXx, ADS129X_CHx_INPUT_TEST);
}
ads129x_write_reg(&regcache);
ads129x_write_regs(&regcache);
port_delay_ms(10);
ads129X_send_cmd(ADS129X_COMMAND_START); /* 发送开始数据转换(等效于拉高START引脚) */
ads129x_send_cmd(ADS129X_COMMAND_START); /* 发送开始数据转换(等效于拉高START引脚) */
port_delay_ms(10);
ads129x_read_data_loop();
return 0;
}
#endif
uint8_t ads129x_stop_capture() {}
uint8_t ads129x_start_capture() {
ads129x_send_cmd(ADS129X_COMMAND_START); /* 发送开始数据转换(等效于拉高START引脚) */
return 0;
}
uint8_t ads129x_stop_capture() {
ads129x_send_cmd(ADS129X_COMMAND_STOP); /* 发送停止数据转换(等效于拉低START引脚) */
return 0;
}
static int32_t i24toi32(uint8_t* p_i32) {
int32_t rev = 0;
@ -301,11 +320,9 @@ void ads129x_read_data(ads129x_capture_data_t* capture_data) {
uint8_t ads129x_get_lead_off_state() {
// FLIP2,FLIP1,LOFF2N,LOFF2P,LOFF1N,LOFF1P
uint8_t leadoffstate = ads129X_read_reg(ADS129X_REG_LOFFSTAT);
uint8_t leadoffstate = ads129x_read_reg(ADS129X_REG_LOFFSTAT);
return leadoffstate;
}
uint8_t ads129x_enter_low_power_mode() { return 0; }
uint8_t ads129x_enter_lead_off_detect_mode() { return 0; }
uint8_t ads129x_data_is_ready() { return ADS129X_DRDY_GET(); }

10
app/src/board/ads129x/ads129x.h

@ -38,14 +38,14 @@ typedef struct {
*/
uint8_t ads129x_init(ads129x_cfg_t* cfg);
uint8_t ads129x_start_capture(bool test);
// uint8_t ads129x_start_capture(bool test);
uint8_t ads129x_stop_capture();
uint8_t ads129x_start_capture();
uint8_t ads129x_enter_low_power_mode();
uint8_t ads129x_enter_lead_off_detect_mode();
void ads129x_write_reg(uint8_t addr, uint8_t val);
uint8_t ads129x_read_reg(uint8_t addr);
uint8_t ads129x_data_is_ready();
void ads129x_read_data(ads129x_capture_data_t* rddata);
void ads129x_read_data(ads129x_capture_data_t* rddata);
uint8_t ads129x_get_lead_off_state();

30
app/src/service/ble_cmd_processer/ble_cmd_process_service.c

@ -466,6 +466,36 @@ void ble_cmder_process_rx(uint8_t* rx, int len) {
else if (cmd == ify_hrs_cmd_reset) {
NVIC_SystemReset();
}
/***********************************************************************************************************************
* ²âÊÔÖ¸Áî *
***********************************************************************************************************************/
// void hwss_start_capture(void);
// void hwss_start_prepare_capture(void);
// void hwss_stop_capture(void);
// void hwss_subic_write_reg(uint8_t addr, uint8_t val);
// uint8_t hwss_subic_read_reg(uint8_t addr);
else if (cmd == ify_hrs_test_cmd_start_capture) {
hwss_start_prepare_capture();
hwss_start_capture();
send_success_receipt(rxheader, 0);
} else if (cmd == ify_hrs_test_cmd_stop_capture) {
hwss_stop_capture();
send_success_receipt(rxheader, 0);
} else if (cmd == ify_hrs_test_cmd_read_reg) {
uint8_t regadd = rxheader->data[0];
uint8_t regval = hwss_subic_read_reg(regadd);
txheader->data[0] = regval;
send_success_receipt(rxheader, 1);
} else if (cmd == ify_hrs_test_cmd_write_reg) {
uint8_t regadd = rxheader->data[0];
uint8_t regval = rxheader->data[1];
hwss_subic_write_reg(regadd, regval);
send_success_receipt(rxheader, 0);
}
//
else {
send_error_receipt(rxheader, kifyhrs_ecode_cmd_not_support);

3
app/src/service/heart_wave_sample_service/heart_wave_sample_service.c

@ -72,3 +72,6 @@ float hwss_read_heart_rate(void) { //
int hwss_has_captured_time_ms() { return (znordic_getpower_on_s() - m_start_capture_tp) * 1000; }
bool hwss_lead_get_state_connected_state() { return true; }
void hwss_subic_write_reg(uint8_t addr, uint8_t val) { ads129x_write_reg(addr, val); }
uint8_t hwss_subic_read_reg(uint8_t addr) { return ads129x_read_reg(addr); }

8
app/src/service/heart_wave_sample_service/heart_wave_sample_service.h

@ -1,7 +1,6 @@
#pragma once
#include <stdint.h>
#include <stdbool.h>
#include <stdint.h>
// ÿ256¸ö×Ö½Ú´¥·¢Ò»´Î»Øµ÷
typedef void (*heart_wave_sample_service_callback_t)(uint16_t *p_data, uint16_t length);
@ -9,11 +8,14 @@ typedef void (*heart_wave_sample_service_callback_t)(uint16_t *p_data, uint16_t
void hwss_init(void);
void hwss_start_capture(void);
void hwss_start_prepare_capture(void);
void hwss_stop_capture(void);
void hwss_subic_write_reg(uint8_t addr, uint8_t val);
uint8_t hwss_subic_read_reg(uint8_t addr);
float hwss_read_val(void);
float hwss_read_heart_rate(void);
int hwss_has_captured_time_ms();
void hwss_start_prepare_capture(void);
bool hwss_lead_get_state_connected_state();

2
ify_hrs_protocol

@ -1 +1 @@
Subproject commit dbeb944a12e8f653a0fdb1c273615da51be1094e
Subproject commit 81bdc5323d5618123e1cbe6ee590d3514ca216b0
Loading…
Cancel
Save