diff --git a/app/src/board/ads129x/ads129x.c b/app/src/board/ads129x/ads129x.c index 65364c3..bc3a1d2 100644 --- a/app/src/board/ads129x/ads129x.c +++ b/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(®cache); + ads129x_dump_regs(®cache); + 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(®cache); + 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(®cache); - ads129x_dump_reg(®cache); + ads129x_readback_regs(®cache); + ads129x_dump_regs(®cache); 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(®cache); + ads129x_write_regs(®cache); 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(); } diff --git a/app/src/board/ads129x/ads129x.h b/app/src/board/ads129x/ads129x.h index 7eb972a..202ac06 100644 --- a/app/src/board/ads129x/ads129x.h +++ b/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(); diff --git a/app/src/service/ble_cmd_processer/ble_cmd_process_service.c b/app/src/service/ble_cmd_processer/ble_cmd_process_service.c index 254b75d..46c4cc3 100644 --- a/app/src/service/ble_cmd_processer/ble_cmd_process_service.c +++ b/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); diff --git a/app/src/service/heart_wave_sample_service/heart_wave_sample_service.c b/app/src/service/heart_wave_sample_service/heart_wave_sample_service.c index 702edce..41b0742 100644 --- a/app/src/service/heart_wave_sample_service/heart_wave_sample_service.c +++ b/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); } \ No newline at end of file diff --git a/app/src/service/heart_wave_sample_service/heart_wave_sample_service.h b/app/src/service/heart_wave_sample_service/heart_wave_sample_service.h index e143635..c71815f 100644 --- a/app/src/service/heart_wave_sample_service/heart_wave_sample_service.h +++ b/app/src/service/heart_wave_sample_service/heart_wave_sample_service.h @@ -1,7 +1,6 @@ #pragma once -#include #include - +#include // 每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(); \ No newline at end of file diff --git a/ify_hrs_protocol b/ify_hrs_protocol index dbeb944..81bdc53 160000 --- a/ify_hrs_protocol +++ b/ify_hrs_protocol @@ -1 +1 @@ -Subproject commit dbeb944a12e8f653a0fdb1c273615da51be1094e +Subproject commit 81bdc5323d5618123e1cbe6ee590d3514ca216b0