11 changed files with 855 additions and 352 deletions
-
3.gitmodules
-
6README.md
-
1ify_hrs_protocol
-
210mainwindow.cpp
-
21mainwindow.h
-
369mainwindow.ui
-
BINsrc/ads129x/ads1291.pdf
-
286src/ads129x/ads129x_type.h
-
46src/electrocardiograph_tester.cpp
-
29src/electrocardiograph_tester.hpp
-
236src/heart_rate_sensor_protocol.h
@ -0,0 +1,3 @@ |
|||
[submodule "ify_hrs_protocol"] |
|||
path = ify_hrs_protocol |
|||
url = zwsd@192.168.1.3:p_dynamic_electrocardiograph/ify_hrs_protocol.git |
@ -0,0 +1,286 @@ |
|||
#pragma once |
|||
#include <stdint.h> |
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
typedef enum { |
|||
ADS129X_REG_ID = 0x00, |
|||
ADS129X_REG_CONFIG1 = 0x01, |
|||
ADS129X_REG_CONFIG2 = 0x02, |
|||
ADS129X_REG_LOFF = 0x03, |
|||
ADS129X_REG_CH1SET = 0x04, |
|||
ADS129X_REG_CH2SET = 0x05, |
|||
ADS129X_REG_RLDSENS = 0x06, |
|||
ADS129X_REG_LOFFSENS = 0x07, |
|||
ADS129X_REG_LOFFSTAT = 0x08, |
|||
ADS129X_REG_RESP1 = 0x09, |
|||
ADS129X_REG_RESP2 = 0x0A, |
|||
ADS129X_REG_GPIO = 0x0B |
|||
} ADS129X_REG_E; |
|||
|
|||
typedef struct { |
|||
uint8_t id; /* id,ads1292r固定为0x73 */ |
|||
uint8_t cfg1; /* 设置寄存器 */ |
|||
uint8_t cfg2; /* 设置寄存器 */ |
|||
uint8_t loff; /* 导联 */ |
|||
uint8_t ch1set; /* 通道一设置 */ |
|||
uint8_t ch2set; /* 通道二设置 */ |
|||
uint8_t rld_sens; /* 右腿驱动 */ |
|||
uint8_t loff_sens; /* 导联 */ |
|||
uint8_t loff_stat; /* 导联 */ |
|||
uint8_t resp1; /* 呼吸 */ |
|||
uint8_t resp2; /* 呼吸 */ |
|||
uint8_t gpio; /* gpio1,2的控制 */ |
|||
} ads129x_regs_t; |
|||
|
|||
#define ADS129X_REG_SIZE_MAX 12 /* ADS1291寄存器数量 */ |
|||
#define ADS129X_ID 0x52 |
|||
|
|||
/* 属于ADS129X_REG_CONFIG1的寄存器设置 */ |
|||
#define ADS129X_SINGLE_SHOT_OFF 0 /* 连续转换模式,默认 */ |
|||
#define ADS129X_SINGLE_SHOT_ON 1 /* 单次转换模式 */ |
|||
/* 采样率,该模块采用fclk为512k,0分频模式,其他配置下采样率会改变 */ |
|||
#define ADS129X_OVERSAMPLING_125SPS 0 |
|||
#define ADS129X_OVERSAMPLING_250SPS 1 |
|||
#define ADS129X_OVERSAMPLING_500SPS 2 /* 默认 */ |
|||
#define ADS129X_OVERSAMPLING_1000SPS 3 |
|||
#define ADS129X_OVERSAMPLING_2000SPS 4 |
|||
#define ADS129X_OVERSAMPLING_4000SPS 5 |
|||
#define ADS129X_OVERSAMPLING_8000SPS 6 |
|||
#define ADS129X_OVERSAMPLING_NONESPS 7 |
|||
|
|||
/* 属于ADS129X_REG_CONFIG2的寄存器设置 */ |
|||
#define ADS129X_PDB_LOFF_COMP_OFF 0 /* 导联脱落比较器关,默认 */ |
|||
#define ADS129X_PDB_LOFF_COMP_ON 1 /* 导联脱落比较器开 */ |
|||
#define ADS129X_PDB_REFBUF_OFF 0 /* 内部参考电压关,默认 */ |
|||
#define ADS129X_PDB_REFBUF_ON 1 /* 内部参考电压开 */ |
|||
#define ADS129X_VREF_2420MV 0 /* 选择参考电压为2.42v,默认 */ |
|||
#define ADS129X_VREF_4033MV 1 /* 选择参考电压为4.033v */ |
|||
#define ADS129X_CLK_OUTPUT_OFF 0 /* 时钟输出关,默认 */ |
|||
#define ADS129X_CLK_OUTPUT_ON 1 /* 时钟输出开 */ |
|||
#define ADS129X_INT_TEST_OFF 0 /* 内部测试电压关,默认 */ |
|||
#define ADS129X_INT_TEST_ON 1 /* 内部测试电压开 */ |
|||
#define ADS129X_INT_FREQ_DC 0 /* 直流,默认 */ |
|||
#define ADS129X_INT_FREQ_AC 1 /* 1HZ方波 */ |
|||
|
|||
/* 属于ADS129X_REG_LOFF的寄存器设置 */ |
|||
|
|||
/* 属于ADS129X_REG_CH1SET,与ADS129X_REG_CH2SET的寄存器设置 */ |
|||
#define ADS129X_CHx_OFF 1 /* 禁止使用通道一 */ |
|||
#define ADS129X_CHx_ON 0 /* 使用通道一,默认 */ |
|||
|
|||
#define ADS129X_GAIN_6 0 /* 使用通道一6倍增益,默认 */ |
|||
#define ADS129X_GAIN_1 1 /* 使用通道一1倍增益 */ |
|||
#define ADS129X_GAIN_2 2 /* 使用通道一2倍增益 */ |
|||
#define ADS129X_GAIN_3 3 /* 使用通道一3倍增益 */ |
|||
#define ADS129X_GAIN_4 4 /* 使用通道一4倍增益 */ |
|||
#define ADS129X_GAIN_8 5 /* 使用通道一8倍增益 */ |
|||
#define ADS129X_GAIN_12 6 /* 使用通道一12倍增益 */ |
|||
/* 选择通道一的输入 */ |
|||
#define ADS129X_CHx_INPUT_NORMAL 0 /* 正常电极输入,默认 */ |
|||
#define ADS129X_CHx_INPUT_SHORTED 1 /* 短路,测偏执用 */ |
|||
#define ADS129X_CHx_INPUT_RLD 2 /* 右腿驱动 */ |
|||
/* For channel 1, (MVDDP – MVDDN) is [0.5(AVDD + AVSS)]; for channel 2, (MVDDP – MVDDN) is DVDD / 4. */ |
|||
/* For channel 2,VDD / 2 for supply measurement */ |
|||
#define ADS129X_CHx_INPUT_MVDD 3 |
|||
#define ADS129X_CHx_INPUT_TEMP 4 /* 板载温度 */ |
|||
#define ADS129X_CHx_INPUT_TEST 5 /* 内部测试信号 */ |
|||
#define ADS129X_CHx_INPUT_RLDDRP 6 |
|||
#define ADS129X_CHx_INPUT_RLDDRM 7 |
|||
#define ADS129X_CHx_INPUT_RLDDRPM 8 |
|||
#define ADS129X_CHx_INPUT_ROUTE 9 /* 连接到通道三 */ |
|||
#define ADS129X_CHx_INPUT_RESERVED 10 /* 预留 */ |
|||
|
|||
/* 属于ADS129X_REG_RLDSENS的寄存器设置 */ |
|||
#define ADS129X_CHOP_FREQ_DIV4 3 /* PGA斩波频率未fMOD/4 */ |
|||
#define ADS129X_PDB_RLD_OFF 0 /* 右腿驱动电源关,默认 */ |
|||
#define ADS129X_PDB_RLD_ON 1 /* 右腿驱动电源开 */ |
|||
#define ADS129X_PDB_RLD_SENSE_OFF 0 /* 右腿驱动导联脱落检测关,默认 */ |
|||
#define ADS129X_PDB_RLD_SENSE_ON 1 /* 右腿驱动导联脱落检测开 */ |
|||
#define ADS129X_RLD2N_OFF 0 /* 通道二负极为右腿输入关,默认 */ |
|||
#define ADS129X_RLD2N_ON 1 /* 通道二负极为右腿输入开 */ |
|||
#define ADS129X_RLD2P_OFF 0 /* 通道二正极为右腿输入关,默认 */ |
|||
#define ADS129X_RLD2P_ON 1 /* 通道二正极为右腿输入开 */ |
|||
#define ADS129X_RLD1N_OFF 0 /* 通道一负极为右腿输入关,默认 */ |
|||
#define ADS129X_RLD1N_ON 1 /* 通道一负极为右腿输入开 */ |
|||
#define ADS129X_RLD1P_OFF 0 /* 通道一正极为右腿输入关,默认 */ |
|||
#define ADS129X_RLD1P_ON 1 /* 通道一正极为右腿输入开 */ |
|||
|
|||
/* 属于ADS129X_REG_LOFFSENS的寄存器设置 */ |
|||
#define ADS129X_FLIP2_OFF 0 /* 导联脱落检测通道二电流方向关,默认 */ |
|||
#define ADS129X_FLIP2_ON 1 /* 导联脱落检测通道二电流方向开 */ |
|||
#define ADS129X_FLIP1_OFF 0 /* 导联脱落检测通道一电流方向关,默认 */ |
|||
#define ADS129X_FLIP1_ON 1 /* 导联脱落检测通道一电流方向开 */ |
|||
#define ADS129X_LOFF2N_OFF 0 /* 通道二负极导联脱落检测关,默认 */ |
|||
#define ADS129X_LOFF2N_ON 1 /* 通道二负极导联脱落检测开 */ |
|||
#define ADS129X_LOFF2P_OFF 0 /* 通道二正极导联脱落检测关,默认 */ |
|||
#define ADS129X_LOFF2P_ON 1 /* 通道二正极导联脱落检测开 */ |
|||
#define ADS129X_LOFF1N_OFF 0 /* 通道一负极导联脱落检测关,默认 */ |
|||
#define ADS129X_LOFF1N_ON 1 /* 通道一负极导联脱落检测开 */ |
|||
#define ADS129X_LOFF1P_OFF 0 /* 通道一正极导联脱落检测关,默认 */ |
|||
#define ADS129X_LOFF1P_ON 1 /* 通道一正极导联脱落检测开 */ |
|||
|
|||
/* 属于ADS129X_REG_LOFFSTAT的寄存器设置 */ |
|||
#define ADS129X_CLK_DIV4 0 /* 0 = fMOD = fCLK / 4 (default, use when fCLK = 512 kHz) */ |
|||
#define ADS129X_CLK_DIV16 1 /* 1 = fMOD = fCLK / 16 (use when fCLK = 2.048 MHz) */ |
|||
|
|||
/* 属于ADS129X_REG_RESP1的寄存器设置 */ |
|||
#define ADS129X_DEMOD_EN1_OFF 0 /* 通道一上的呼吸解调电路关,默认 */ |
|||
#define ADS129X_DEMOD_EN1_ON 1 /* 通道一上的呼吸解调电路开 */ |
|||
#define ADS129X_DEMOD_EN_OFF 0 /* 通道一上的呼吸调制电路关,默认 */ |
|||
#define ADS129X_DEMOD_EN_ON 1 /* 通道一上的呼吸调制电路开 */ |
|||
#define ADS129X_RESPPH_0 0 /* 解调信号相位偏移0,默认 */ |
|||
#define ADS129X_RESPPH_135 0x0c /* 解调信号相位偏移135度 */ |
|||
#define ADS129X_RESP_CTRL_INT 0 /* 内部呼吸内部时钟,默认 */ |
|||
#define ADS129X_RESP_CTRL_EXT 1 /* 内部呼吸外部时钟 */ |
|||
|
|||
/* 属于ADS129X_REG_RESP2的寄存器设置 */ |
|||
#define ADS129X_CALIB_ON_OFF 0 /* 校准关,默认 */ |
|||
#define ADS129X_CALIB_ON_ON 1 /* 校准开 */ |
|||
#define ADS129X_RESP_FREQ_36 0 /* 通道一上的呼吸调制电路关,默认 */ |
|||
#define ADS129X_RESP_FREQ_64 1 /* 通道一上的呼吸调制电路开 */ |
|||
#define ADS129X_RLDREF_EXT 0 /* 右腿驱动参考电压选择外部反馈,默认 */ |
|||
#define ADS129X_RLDREF_INT 1 /* 右腿驱动参考电压选择内部信号 */ |
|||
|
|||
/* 属于ADS129X_REG_GPIO的寄存器设置 */ |
|||
/** |
|||
* @} |
|||
*/ |
|||
|
|||
/** @addtogroup ADS129X_TYP_REG_MASK ADS1291 TYP Reg Mask |
|||
* @brief 各寄存器值与位置掩码,被ADS129X_GET_BITS与ADS129X_SET_BITS函数调用 |
|||
* @{ |
|||
*/ |
|||
#define ADS129X_ID_POS 0 |
|||
#define ADS129X_ID_MASK 0xFF |
|||
|
|||
#define ADS129X_SINGLE_SHOT_POS 7 |
|||
#define ADS129X_SINGLE_SHOT_MASK 0x80 |
|||
#define ADS129X_DR_POS 0 |
|||
#define ADS129X_DR_MASK 0x07 |
|||
|
|||
#define ADS129X_PDB_LOFF_COMP_POS 6 |
|||
#define ADS129X_PDB_LOFF_COMP_MASK 0x40 |
|||
#define ADS129X_PDB_REFBUF_POS 5 |
|||
#define ADS129X_PDB_REFBUF_MASK 0x20 |
|||
#define ADS129X_VREF_4V_POS 4 |
|||
#define ADS129X_VREF_4V_MASK 0x10 |
|||
#define ADS129X_CLK_EN_POS 3 |
|||
#define ADS129X_CLK_EN_MASK 0x80 |
|||
#define ADS129X_INT_TEST_POS 1 |
|||
#define ADS129X_INT_TEST_MASK 0x02 |
|||
#define ADS129X_INT_FREQ_POS 0 |
|||
#define ADS129X_INT_FREQ_MASK 0x01 |
|||
|
|||
#define ADS129X_PDx_POS 7 |
|||
#define ADS129X_PDx_MASK 0x80 |
|||
#define ADS129X_GAINx_POS 4 |
|||
#define ADS129X_GAINx_MASK 0x70 |
|||
#define ADS129X_MUXx_POS 0 |
|||
#define ADS129X_MUXx_MASK 0x0F |
|||
|
|||
#define ADS129X_CHOP_POS 6 |
|||
#define ADS129X_CHOP_MASK 0xC0 |
|||
#define ADS129X_PDB_RLD_POS 5 |
|||
#define ADS129X_PDB_RLD_MASK 0x20 |
|||
#define ADS129X_RLD_LOFF_SENSE_POS 4 |
|||
#define ADS129X_RLD_LOFF_SENSE_MASK 0x10 |
|||
#define ADS129X_RLD2N_POS 3 |
|||
#define ADS129X_RLD2N_MASK 0x08 |
|||
#define ADS129X_RLD2P_POS 2 |
|||
#define ADS129X_RLD2P_MASK 0x04 |
|||
#define ADS129X_RLD1N_POS 1 |
|||
#define ADS129X_RLD1N_MASK 0x02 |
|||
#define ADS129X_RLD1P_POS 0 |
|||
#define ADS129X_RLD1P_MASK 0x01 |
|||
|
|||
#define ADS129X_FLIP2_POS 5 |
|||
#define ADS129X_FLIP2_MASK 0x20 |
|||
#define ADS129X_FLIP1_POS 4 |
|||
#define ADS129X_FLIP1_MASK 0x10 |
|||
#define ADS129X_LOFF2N_POS 3 |
|||
#define ADS129X_LOFF2N_MASK 0x08 |
|||
#define ADS129X_LOFF2P_POS 2 |
|||
#define ADS129X_LOFF2P_MASK 0x04 |
|||
#define ADS129X_LOFFN_POS 1 |
|||
#define ADS129X_LOFF1N_MASK 0x02 |
|||
#define ADS129X_LOFF1P_POS 0 |
|||
#define ADS129X_LOFF1P_MASK 0x01 |
|||
|
|||
#define ADS129X_CLK_DIV_POS 6 |
|||
#define ADS129X_CLK_DIV_MASK 0x40 |
|||
|
|||
#define ADS129X_RESP_DEMOD_EN1_POS 7 |
|||
#define ADS129X_RESP_DEMOD_EN1_MASK 0x80 |
|||
#define ADS129X_RESP_MOD_EN_POS 6 |
|||
#define ADS129X_RESP_MOD_EN_MASK 0x40 |
|||
#define ADS129X_RESP_PH_POS 2 |
|||
#define ADS129X_RESP_PH_MASK 0x3c |
|||
#define ADS129X_RESP_CTRL_POS 0 |
|||
#define ADS129X_RESP_CTRL_MASK 0x01 |
|||
|
|||
#define ADS129X_CALIB_ON_POS 7 |
|||
#define ADS129X_CALIB_ON_MASK 0x80 |
|||
#define ADS129X_RESP_FREQ_POS 2 |
|||
#define ADS129X_RESP_FREQ_MASK 0x04 |
|||
#define ADS129X_RLDREF_INT_POS 1 |
|||
#define ADS129X_RLDREF_INT_MASK 0x02 |
|||
|
|||
/** |
|||
* @} |
|||
*/ |
|||
|
|||
/** @addtogroup ADS129X_TYP_COMMAND ADS1291 TYP COMMAND |
|||
* @brief 命令 |
|||
* @{ |
|||
*/ |
|||
/* System Commands */ |
|||
#define ADS129X_COMMAND_WAKEUP 0x02 // Wake-up from standby mode |
|||
#define ADS129X_COMMAND_STANDBY 0x04 // Enter standby mode |
|||
#define ADS129X_COMMAND_RESET 0x06 // Reset the device |
|||
#define ADS129X_COMMAND_START 0x08 // Start or restart (synchronize) conversion |
|||
#define ADS129X_COMMAND_STOP 0x0A // Stop conversion |
|||
#define ADS129X_COMMAND_OFFSETCAL 0x1A // Channel offset calibration |
|||
|
|||
/* Data Read Commands */ |
|||
#define ADS129X_COMMAND_RDATAC 0x10 // Enable Read Data Continuous mode. This mode is the default mode at power-up.(1) |
|||
#define ADS129X_COMMAND_SDATAC 0x11 // Stop Read Data Continuously mode |
|||
#define ADS129X_COMMAND_RDATA 0x12 // Read data by command; supports multiple read back |
|||
|
|||
/* Register Read Commands,最后5位为读写的地址 */ |
|||
#define ADS129X_COMMAND_RREG 0x20 // Read n nnnn registers starting at address r rrrr |
|||
#define ADS129X_COMMAND_WREG 0x40 // Write n nnnn registers starting at address r rrrr |
|||
/** |
|||
* @} |
|||
*/ |
|||
|
|||
/** |
|||
* @} |
|||
*/ |
|||
|
|||
/** |
|||
* @} |
|||
*/ |
|||
|
|||
/* Exported macro ------------------------------------------------------------*/ |
|||
/** @brief 读取ADS1291的指定寄存器的指定位 |
|||
* @details |
|||
* @param[in] bitname 位名字 |
|||
* @param[in] reg 寄存器名字 |
|||
* @retval 该位的值 |
|||
*/ |
|||
#define ADS129X_GET_BITS(bitname, reg) ((reg & bitname##_MASK) >> bitname##_POS) |
|||
|
|||
/** @brief 设置ADS1291的指定寄存器的指定位 |
|||
* @details |
|||
* @param[in] reg 寄存器名字 |
|||
* @param[in] bitname 位名字 |
|||
* @param[in] val 要设置的值 |
|||
* @retval NONE |
|||
*/ |
|||
#define ADS129X_SET_BITS(reg, bitname, val) ((reg & ~bitname##_MASK) | ((val << bitname##_POS) & bitname##_MASK)) |
|||
/* Exported functions --------------------------------------------------------*/ |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
@ -1,236 +0,0 @@ |
|||
#include <stdint.h> |
|||
|
|||
#ifndef HEART_RATE_SENSOR_PROTOCOL_H |
|||
#define HEART_RATE_SENSOR_PROTOCOL_H |
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
#pragma pack(push, 1) |
|||
|
|||
typedef struct { |
|||
uint8_t frame_type; |
|||
uint8_t frame_index; |
|||
uint8_t cmd; |
|||
uint8_t data[]; |
|||
} ify_hrs_packet_t; |
|||
|
|||
typedef enum { |
|||
kifyhrs_ecode_success = 0, |
|||
kifyhrs_ecode_unkown_error = 1, |
|||
kifyhrs_ecode_cmd_not_support = 2, |
|||
kifyhrs_ecode_illegal_parameter = 3, |
|||
kifyhrs_ecode_device_busy = 4, |
|||
kifyhrs_ecode_hardware_error = 5, |
|||
kifyhrs_ecode_sensor_drop = 6, |
|||
kifyhrs_ecode_no_record_find = 7, |
|||
|
|||
kifyhrs_ecode_channle_is_close = 100, |
|||
kifyhrs_ecode_overtime = 101, |
|||
kifyhrs_ecode_logic_error = 102, |
|||
|
|||
} ify_hrs_error_code_t; |
|||
|
|||
static inline const char* hrs_ecode2str(ify_hrs_error_code_t ecode) { |
|||
switch (ecode) { |
|||
case kifyhrs_ecode_success: |
|||
return "success"; |
|||
case kifyhrs_ecode_unkown_error: |
|||
return "unkown error"; |
|||
case kifyhrs_ecode_cmd_not_support: |
|||
return "cmd not support"; |
|||
case kifyhrs_ecode_illegal_parameter: |
|||
return "illegal parameter"; |
|||
case kifyhrs_ecode_device_busy: |
|||
return "device busy"; |
|||
case kifyhrs_ecode_hardware_error: |
|||
return "hardware error"; |
|||
case kifyhrs_ecode_sensor_drop: |
|||
return "sensor drop"; |
|||
case kifyhrs_ecode_no_record_find: |
|||
return "no record find"; |
|||
case kifyhrs_ecode_channle_is_close: |
|||
return "channle is close"; |
|||
case kifyhrs_ecode_overtime: |
|||
return "overtime"; |
|||
case kifyhrs_ecode_logic_error: |
|||
return "logic error"; |
|||
default: |
|||
return "unkown error"; |
|||
} |
|||
} |
|||
|
|||
typedef enum { |
|||
kifyhrs_pt_cmd = 1, |
|||
kifyhrs_pt_cmd_receipt = 2, |
|||
kifyhrs_pt_report = 3, |
|||
kifyhrs_pt_error_receipt = 4, |
|||
} ify_hrs_packet_type_t; |
|||
|
|||
typedef enum { |
|||
kifyhrs_sensor_pos_none = 0, // 无指定位置 |
|||
kifyhrs_sensor_pos_I = 1, // I |
|||
kifyhrs_sensor_pos_II = 2, // II |
|||
kifyhrs_sensor_pos_III = 3, // III |
|||
kifyhrs_sensor_pos_V1 = 4, // V1 |
|||
kifyhrs_sensor_pos_V2 = 5, // V2 |
|||
kifyhrs_sensor_pos_V3 = 6, // V3 |
|||
kifyhrs_sensor_pos_V4 = 7, // V4 |
|||
kifyhrs_sensor_pos_V5 = 8, // V5 |
|||
kifyhrs_sensor_pos_V6 = 9, // V6 |
|||
kifyhrs_sensor_pos_aVR = 10, // |
|||
kifyhrs_sensor_pos_aVL = 11, // |
|||
kifyhrs_sensor_pos_aVF = 12, // |
|||
} ify_hrs_sensor_pos_t; |
|||
|
|||
typedef enum { |
|||
ify_hrs_cmd_read_device_version = 1, |
|||
ify_hrs_cmd_read_sensor_info = 2, |
|||
ify_hrs_cmd_read_device_state = 3, |
|||
ify_hrs_cmd_read_time = 4, |
|||
ify_hrs_cmd_sync_time = 5, |
|||
ify_hrs_cmd_start_capture = 6, |
|||
ify_hrs_cmd_stop_capture = 7, |
|||
ify_hrs_cmd_start_realtime_report = 8, |
|||
ify_hrs_cmd_stop_realtime_report = 9, |
|||
ify_hrs_cmd_read_records_info = 10, |
|||
ify_hrs_cmd_del_record = 11, |
|||
ify_hrs_cmd_start_upload_record = 12, |
|||
ify_hrs_cmd_enter_ota = 13, |
|||
ify_hrs_cmd_read_sn = 14, |
|||
ify_hrs_cmd_reset = 15, |
|||
ify_hrs_cmd_stop_upload_record = 16, |
|||
ify_hrs_cmd_start_capture_time_v2 = 17, |
|||
ify_hrs_cmd_start_upload_record_v2 = 18, |
|||
|
|||
ify_hrs_report_heartrate_data = 101, |
|||
ify_hrs_report_battery_level = 102, |
|||
ify_hrs_report_low_battey_level = 103, |
|||
ify_hrs_report_sample_finish_end = 104, |
|||
ify_hrs_report_sensor_drop_detect = 105, |
|||
ify_hrs_report_record_upload_end = 106, |
|||
|
|||
} ify_hrs_cmd_t; |
|||
|
|||
/******************************************************************************* |
|||
* packet_struct * |
|||
*******************************************************************************/ |
|||
typedef struct { |
|||
uint16_t placeholder; |
|||
uint16_t blestack_version; |
|||
uint16_t bootloader_version; |
|||
uint16_t firmware_version; |
|||
uint16_t hardware_version; |
|||
} device_version_info_receipt_t; |
|||
|
|||
typedef struct { |
|||
uint8_t sensor_num; // 数量 |
|||
uint8_t sensor_precision; // 精度 |
|||
uint8_t sensor_sample_rate; // 采样率 |
|||
uint8_t sensor0_pos; // 位置 |
|||
uint8_t sensor1_pos; // 位置 |
|||
uint8_t sensor2_pos; // 位置 |
|||
} sensor_info_receipt_t; |
|||
|
|||
typedef struct { |
|||
uint8_t drop_state0; |
|||
uint8_t drop_state1; |
|||
struct { |
|||
uint8_t sampling_state : 1; // 位置 |
|||
uint8_t report_state : 1; // 位置 |
|||
uint8_t low_battery : 1; // 位置 |
|||
uint8_t full_storge : 1; // 位置 |
|||
uint8_t holder : 4; // 位置 |
|||
} device_state0; |
|||
uint8_t device_state1; // 预留 |
|||
uint8_t powerlevel; // 电量 |
|||
uint8_t storage_item_num; // 记录存储条数 |
|||
} device_state_receipt_t; |
|||
|
|||
typedef struct { |
|||
uint8_t year; |
|||
uint8_t month; |
|||
uint8_t day; |
|||
uint8_t hour; |
|||
uint8_t minute; |
|||
uint8_t second; |
|||
} read_time_receipt_t; |
|||
|
|||
typedef struct { |
|||
uint8_t year; |
|||
uint8_t month; |
|||
uint8_t day; |
|||
uint8_t hour; |
|||
uint8_t minute; |
|||
uint8_t second; |
|||
} sync_time_cmd_t; |
|||
|
|||
typedef struct { |
|||
uint8_t year; |
|||
uint8_t month; |
|||
uint8_t day; |
|||
uint8_t hour; |
|||
uint8_t minute; |
|||
uint8_t second; |
|||
} start_capture_cmd_t; |
|||
|
|||
typedef struct { |
|||
uint8_t record_index; // 最近第几条记录 |
|||
} read_record_info_cmd_t; |
|||
|
|||
typedef struct { |
|||
uint8_t record_id[6]; |
|||
uint32_t frameNum; |
|||
uint32_t dataSize; |
|||
uint8_t sensorNum; |
|||
uint8_t captureRate; // N*10HZ |
|||
uint8_t capturePrecision; |
|||
uint8_t compressAlgorithm; // 压缩算法 |
|||
uint32_t checksum; |
|||
} read_record_info_receipt_t; |
|||
#define A sizeof(read_record_info_receipt_t) |
|||
|
|||
typedef struct { |
|||
uint8_t record_id[6]; |
|||
} del_record_cmd_t; |
|||
|
|||
typedef struct { |
|||
uint8_t record_id[6]; |
|||
} start_upload_record_cmd_t; |
|||
|
|||
typedef struct { |
|||
uint8_t sn[14]; |
|||
} read_sn_receipt_t; |
|||
|
|||
typedef struct { |
|||
uint8_t errorcode; |
|||
} error_receipt_t; |
|||
|
|||
/******************************************************************************* |
|||
* 上报相关结构体 * |
|||
*******************************************************************************/ |
|||
|
|||
typedef struct { |
|||
uint8_t frame_type; |
|||
uint8_t frame_index; |
|||
uint8_t cmd; |
|||
|
|||
uint32_t sample_data_index; |
|||
uint8_t data[]; // 上报的数据 |
|||
} heartrate_report_packet_t; |
|||
|
|||
typedef struct { |
|||
uint8_t frame_type; |
|||
uint8_t frame_index; |
|||
uint8_t cmd; |
|||
|
|||
uint8_t drop_state0; |
|||
uint8_t drop_state1; |
|||
} sensor_drop_event_report_packet_t; |
|||
|
|||
#pragma pack(pop) |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
#endif |
Write
Preview
Loading…
Cancel
Save
Reference in new issue