4 changed files with 87 additions and 269 deletions
@ -0,0 +1,44 @@ |
|||
#include "errorcode.hpp"
|
|||
|
|||
#define ERR2STR(code) \
|
|||
case code: \ |
|||
return #code; |
|||
|
|||
namespace iflytop { |
|||
namespace err { |
|||
|
|||
#define ERR_ITERM(enum) \
|
|||
{ enum, #enum } |
|||
|
|||
static ecode_table_item_t table[] = { |
|||
|
|||
ERR_ITERM(ksucc), |
|||
ERR_ITERM(kfail), |
|||
|
|||
ERR_ITERM(kstep_motor_not_found_zero_point), |
|||
ERR_ITERM(kstep_motor_not_go_zero), |
|||
ERR_ITERM(kstep_motor_over_temperature), |
|||
ERR_ITERM(kstep_motor_over_voltage), |
|||
ERR_ITERM(kstep_motor_run_overtime), |
|||
ERR_ITERM(kstep_motor_not_enable), |
|||
ERR_ITERM(kstep_motor_ioindex_out_of_range), |
|||
ERR_ITERM(kstep_motor_subic_reset), |
|||
ERR_ITERM(kstep_motor_drv_err), |
|||
ERR_ITERM(kstep_motor_uv_cp), |
|||
ERR_ITERM(kstep_motor_not_found_point_edge), |
|||
}; |
|||
|
|||
const char* error2str(int32_t code) { |
|||
for (int i = 0; i < sizeof(table) / sizeof(table[0]); i++) { |
|||
if (table[i].index == code) { |
|||
return table[i].info; |
|||
} |
|||
} |
|||
return "unknown error"; |
|||
} |
|||
|
|||
ecode_table_item_t* error_get_table() { return table; } |
|||
int error_get_table_size() { return sizeof(table) / sizeof(table[0]); } |
|||
|
|||
} // namespace err
|
|||
} // namespace iflytop
|
@ -0,0 +1,40 @@ |
|||
#pragma once
|
|||
#include <stdint.h>
|
|||
|
|||
namespace iflytop { |
|||
namespace err { |
|||
using namespace std; |
|||
|
|||
#define ERROR_CODE(errortype, suberrorcode) (errortype + suberrorcode)
|
|||
|
|||
typedef enum { |
|||
|
|||
ksucc = ERROR_CODE(0, 0), |
|||
kfail = ERROR_CODE(0, 1), |
|||
|
|||
kstep_motor_not_found_zero_point = ERROR_CODE(600, 0), // 未找到零点
|
|||
kstep_motor_not_go_zero = ERROR_CODE(600, 1), // 设备未归零
|
|||
kstep_motor_over_temperature = ERROR_CODE(600, 2), // 过温
|
|||
kstep_motor_over_voltage = ERROR_CODE(600, 3), // 过压
|
|||
kstep_motor_run_overtime = ERROR_CODE(600, 4), // 运行超时
|
|||
kstep_motor_not_enable = ERROR_CODE(600, 5), // 电机未使能
|
|||
kstep_motor_ioindex_out_of_range = ERROR_CODE(600, 6), // IO超出范围
|
|||
kstep_motor_subic_reset = ERROR_CODE(600, 7), // 子IC复位
|
|||
kstep_motor_drv_err = ERROR_CODE(600, 8), // 驱动器异常
|
|||
kstep_motor_uv_cp = ERROR_CODE(600, 9), // 驱动器异常
|
|||
kstep_motor_not_found_point_edge = ERROR_CODE(600, 10), // 未找到零点
|
|||
|
|||
} error_t; |
|||
|
|||
typedef struct { |
|||
int index; |
|||
const char* info; |
|||
} ecode_table_item_t; |
|||
|
|||
const char* error2str(int32_t code); |
|||
|
|||
ecode_table_item_t* error_get_table(); |
|||
int error_get_table_size(); |
|||
|
|||
} // namespace err
|
|||
} // namespace iflytop
|
@ -1,269 +0,0 @@ |
|||
#pragma once |
|||
|
|||
#include <stdint.h> |
|||
|
|||
#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_parameter_error = 8, |
|||
kifyhrs_ecode_electrode_is_not_inserted = 9, |
|||
kifyhrs_ecode_device_exception = 10, |
|||
kifyhrs_ecode_invalid_state = 11, |
|||
|
|||
kifyhrs_ecode_overtime = 200, |
|||
kifyhrs_ecode_channel_is_close = 201, |
|||
kifyhrs_ecode_upper_exception = 202, |
|||
|
|||
} ify_hrs_error_code_t; |
|||
|
|||
static inline const char *ify_hrs_error_code_to_string(ify_hrs_error_code_t code) { |
|||
switch (code) { |
|||
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_parameter_error: |
|||
return "parameter error"; |
|||
case kifyhrs_ecode_electrode_is_not_inserted: |
|||
return "electrode is not inserted"; |
|||
case kifyhrs_ecode_device_exception: |
|||
return "device exception"; |
|||
case kifyhrs_ecode_invalid_state: |
|||
return "invalid state"; |
|||
case kifyhrs_ecode_overtime: |
|||
return "overtime"; |
|||
case kifyhrs_ecode_channel_is_close: |
|||
return "channel is close"; |
|||
|
|||
case kifyhrs_ecode_upper_exception: |
|||
return "upper exception"; |
|||
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_realtime_preview = 8, |
|||
ify_hrs_cmd_stop_realtime_preview = 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_ads1293_error_detail_info = 19, // 内部使用 |
|||
ify_hrs_cmd_change_sn = 20, // 内部使用 |
|||
ify_hrs_cmd_read_device_exception_state = 21, // 读取设备异常状态 |
|||
ify_hrs_cmd_read_ads1293_cfg_type = 22, // 读取ads1293使用的配置类型 |
|||
ify_hrs_cmd_start_storage = 23, // |
|||
ify_hrs_cmd_stop_storage = 24, // |
|||
|
|||
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_set_ecg_in_test_mode = 150, |
|||
ify_hrs_cmd_set_ecg_report_data_in_raw_mode = 151, // 设置ECG上报数据为原始数据 |
|||
ify_hrs_cmd_ecg_subic_read_reg = 152, |
|||
ify_hrs_cmd_ecg_subic_write_reg = 153, |
|||
|
|||
} 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 is_storaging : 1; // 位置 |
|||
uint8_t holder : 4; // 位置 |
|||
} device_state0; |
|||
uint8_t device_state1; // 预留 |
|||
uint8_t powerlevel; // 电量 |
|||
uint8_t storage_item_num; // 记录存储条数 |
|||
// uint32_t storage_setting_time_s; |
|||
// uint32_t storage_has_storaged_time_s; |
|||
} 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; |
|||
|
|||
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; |
|||
|
|||
uint32_t sample_data_index; |
|||
uint16_t leadoff_state; |
|||
uint16_t sample_data_num; |
|||
int32_t frame[]; // 上报的数据 |
|||
} m1003_heartrate_report_packet_t; |
|||
|
|||
typedef struct { |
|||
uint8_t frame_type; |
|||
uint8_t frame_index; |
|||
uint8_t cmd; |
|||
|
|||
uint32_t sample_data_index; |
|||
uint32_t reportdata[50]; |
|||
} ads1291_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) |
@ -0,0 +1,3 @@ |
|||
#pragma once
|
|||
|
|||
#include "errorcode.hpp"
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue