diff --git a/README.md b/README.md
index f1dfd34..0b421f4 100644
--- a/README.md
+++ b/README.md
@@ -221,6 +221,17 @@ TODO:
2. 如果要实现不丢数据,需要在eeprom中存储文件扇区信息,同时由于扇区的大小大于256字节,所以需要优化eeprom的写入函数。
单导蓝牙使用注意事项:
+
+ 1. 开机后
+ 开启广播
+ 2. 关机
+ 关闭广播
+ 关机条件:
+ 1. 蓝牙断开
+ 2. 设备未操作
+ 3. 30s内无任何蓝牙指令(连接)
+
+
1. 蓝牙的广播的启停独立控制和设备开机关机逻辑分开
开启广播:开机时候,如果当前没有开启广播,则打开广播
关闭广播: 关机后30s内无连接关闭广播
diff --git a/app/app.uvoptx b/app/app.uvoptx
index 0c3dc85..2b07cb9 100644
--- a/app/app.uvoptx
+++ b/app/app.uvoptx
@@ -619,6 +619,18 @@
0
0
+
+ 1
+ 22
+ 1
+ 0
+ 0
+ 0
+ .\src\basic\device_info_mgr.c
+ device_info_mgr.c
+ 0
+ 0
+
@@ -629,7 +641,7 @@
0
2
- 22
+ 23
1
0
0
@@ -649,7 +661,7 @@
0
3
- 23
+ 24
1
0
0
@@ -661,7 +673,7 @@
3
- 24
+ 25
1
0
0
@@ -681,7 +693,7 @@
0
4
- 25
+ 26
1
0
0
@@ -701,7 +713,7 @@
0
5
- 26
+ 27
1
0
0
@@ -713,7 +725,7 @@
5
- 27
+ 28
1
0
0
@@ -725,7 +737,7 @@
5
- 28
+ 29
1
0
0
@@ -737,7 +749,7 @@
5
- 29
+ 30
1
0
0
@@ -749,7 +761,7 @@
5
- 30
+ 31
1
0
0
@@ -761,7 +773,7 @@
5
- 31
+ 32
1
0
0
@@ -773,7 +785,7 @@
5
- 32
+ 33
1
0
0
@@ -785,7 +797,7 @@
5
- 33
+ 34
1
0
0
@@ -805,7 +817,7 @@
0
6
- 34
+ 35
1
0
0
@@ -825,7 +837,7 @@
0
7
- 35
+ 36
1
0
0
@@ -837,7 +849,7 @@
7
- 36
+ 37
1
0
0
@@ -849,7 +861,7 @@
7
- 37
+ 38
1
0
0
@@ -861,7 +873,7 @@
7
- 38
+ 39
1
0
0
@@ -873,7 +885,7 @@
7
- 39
+ 40
1
0
0
@@ -885,7 +897,7 @@
7
- 40
+ 41
1
0
0
@@ -897,7 +909,7 @@
7
- 41
+ 42
1
0
0
@@ -909,7 +921,7 @@
7
- 42
+ 43
1
0
0
@@ -921,7 +933,7 @@
7
- 43
+ 44
1
0
0
@@ -933,7 +945,7 @@
7
- 44
+ 45
1
0
0
@@ -945,7 +957,7 @@
7
- 45
+ 46
1
0
0
@@ -957,7 +969,7 @@
7
- 46
+ 47
1
0
0
@@ -969,7 +981,7 @@
7
- 47
+ 48
1
0
0
@@ -981,7 +993,7 @@
7
- 48
+ 49
1
0
0
@@ -993,7 +1005,7 @@
7
- 49
+ 50
1
0
0
@@ -1005,7 +1017,7 @@
7
- 50
+ 51
1
0
0
@@ -1017,7 +1029,7 @@
7
- 51
+ 52
1
0
0
@@ -1029,7 +1041,7 @@
7
- 52
+ 53
1
0
0
@@ -1041,7 +1053,7 @@
7
- 53
+ 54
1
0
0
@@ -1053,7 +1065,7 @@
7
- 54
+ 55
1
0
0
@@ -1073,7 +1085,7 @@
0
8
- 55
+ 56
1
0
0
@@ -1085,7 +1097,7 @@
8
- 56
+ 57
1
0
0
@@ -1097,7 +1109,7 @@
8
- 57
+ 58
1
0
0
@@ -1109,7 +1121,7 @@
8
- 58
+ 59
1
0
0
@@ -1121,7 +1133,7 @@
8
- 59
+ 60
1
0
0
@@ -1133,7 +1145,7 @@
8
- 60
+ 61
1
0
0
@@ -1145,7 +1157,7 @@
8
- 61
+ 62
1
0
0
@@ -1157,7 +1169,7 @@
8
- 62
+ 63
1
0
0
@@ -1169,7 +1181,7 @@
8
- 63
+ 64
1
0
0
@@ -1181,7 +1193,7 @@
8
- 64
+ 65
1
0
0
@@ -1193,7 +1205,7 @@
8
- 65
+ 66
1
0
0
@@ -1205,7 +1217,7 @@
8
- 66
+ 67
1
0
0
@@ -1217,7 +1229,7 @@
8
- 67
+ 68
1
0
0
@@ -1229,7 +1241,7 @@
8
- 68
+ 69
1
0
0
@@ -1241,7 +1253,7 @@
8
- 69
+ 70
1
0
0
@@ -1253,7 +1265,7 @@
8
- 70
+ 71
1
0
0
@@ -1265,7 +1277,7 @@
8
- 71
+ 72
1
0
0
@@ -1277,7 +1289,7 @@
8
- 72
+ 73
1
0
0
@@ -1289,7 +1301,7 @@
8
- 73
+ 74
1
0
0
@@ -1301,7 +1313,7 @@
8
- 74
+ 75
1
0
0
@@ -1313,7 +1325,7 @@
8
- 75
+ 76
1
0
0
@@ -1325,7 +1337,7 @@
8
- 76
+ 77
1
0
0
@@ -1337,7 +1349,7 @@
8
- 77
+ 78
1
0
0
@@ -1349,7 +1361,7 @@
8
- 78
+ 79
1
0
0
@@ -1361,7 +1373,7 @@
8
- 79
+ 80
1
0
0
@@ -1373,7 +1385,7 @@
8
- 80
+ 81
1
0
0
@@ -1385,7 +1397,7 @@
8
- 81
+ 82
1
0
0
@@ -1405,7 +1417,7 @@
0
9
- 82
+ 83
1
0
0
@@ -1417,7 +1429,7 @@
9
- 83
+ 84
1
0
0
@@ -1429,7 +1441,7 @@
9
- 84
+ 85
1
0
0
@@ -1441,7 +1453,7 @@
9
- 85
+ 86
1
0
0
@@ -1453,7 +1465,7 @@
9
- 86
+ 87
1
0
0
@@ -1465,7 +1477,7 @@
9
- 87
+ 88
1
0
0
@@ -1485,7 +1497,7 @@
0
10
- 88
+ 89
1
0
0
@@ -1497,7 +1509,7 @@
10
- 89
+ 90
1
0
0
@@ -1509,7 +1521,7 @@
10
- 90
+ 91
1
0
0
@@ -1529,7 +1541,7 @@
0
11
- 91
+ 92
1
0
0
@@ -1541,7 +1553,7 @@
11
- 92
+ 93
1
0
0
@@ -1553,7 +1565,7 @@
11
- 93
+ 94
1
0
0
@@ -1573,7 +1585,7 @@
0
12
- 94
+ 95
1
0
0
@@ -1593,7 +1605,7 @@
0
13
- 95
+ 96
1
0
0
@@ -1605,7 +1617,7 @@
13
- 96
+ 97
1
0
0
diff --git a/app/app.uvprojx b/app/app.uvprojx
index cea356e..a696e6c 100644
--- a/app/app.uvprojx
+++ b/app/app.uvprojx
@@ -488,6 +488,11 @@
1
.\src\one_conduction\ble_cmd_process_service.c
+
+ device_info_mgr.c
+ 1
+ .\src\basic\device_info_mgr.c
+
@@ -4322,6 +4327,11 @@
1
.\src\one_conduction\ble_cmd_process_service.c
+
+ device_info_mgr.c
+ 1
+ .\src\basic\device_info_mgr.c
+
diff --git a/app/src/basic/zdatachannel_service.c b/app/src/basic/zdatachannel_service.c
index 8d3f214..3868763 100644
--- a/app/src/basic/zdatachannel_service.c
+++ b/app/src/basic/zdatachannel_service.c
@@ -174,7 +174,7 @@ uint32_t zdatachannel_init(zdatachannel_t *p_nus, zdatachannel_init_t const *p_n
}
uint32_t zdatachannel_data_send(uint8_t *p_data, uint16_t *p_length) {
- ret_code_t err_code;
+
ble_gatts_hvx_params_t hvx_params;
if (!p_datachannel->cmd_tx_channel_is_notification_enabled) {
@@ -196,7 +196,7 @@ uint32_t zdatachannel_data_send(uint8_t *p_data, uint16_t *p_length) {
}
uint32_t zdatachannel_block_data_send(uint8_t *p_data, uint16_t *p_length) {
- ret_code_t err_code;
+
ble_gatts_hvx_params_t hvx_params;
if (!p_datachannel->datablock_tx_channel_is_notification_enabled) {
diff --git a/app/src/basic/zdatachannel_service.h b/app/src/basic/zdatachannel_service.h
index 9d3f8a3..bdd9d7f 100644
--- a/app/src/basic/zdatachannel_service.h
+++ b/app/src/basic/zdatachannel_service.h
@@ -78,7 +78,13 @@ uint32_t zdatachannel_init(zdatachannel_t* p_nus, zdatachannel_init_t const* p_n
void zdatachannel_on_ble_evt(ble_evt_t const* p_ble_evt, void* p_context);
uint32_t zdatachannel_data_send(uint8_t* p_data, uint16_t* p_length);
+static inline uint32_t zdatachannel_data_send2(uint8_t* p_data, uint16_t p_length){
+ return zdatachannel_data_send(p_data, &p_length);
+}
uint32_t zdatachannel_block_data_send(uint8_t* p_data, uint16_t* p_length);
+static inline uint32_t zdatachannel_block_data_send2(uint8_t* p_data, uint16_t p_length){
+ return zdatachannel_block_data_send(p_data, &p_length);
+}
#ifdef __cplusplus
}
diff --git a/app/src/one_conduction/ble_cmd_process_service.c b/app/src/one_conduction/ble_cmd_process_service.c
index 71388d0..0ae27ec 100644
--- a/app/src/one_conduction/ble_cmd_process_service.c
+++ b/app/src/one_conduction/ble_cmd_process_service.c
@@ -26,7 +26,7 @@ static void send_error_receipt(ify_hrs_packet_t* rxpacket, int32_t errorcode) {
txheader->frame_type = kifyhrs_pt_error_receipt;
receipt->errorcode = kifyhrs_ecode_cmd_not_support;
- zdatachannel_data_send(txbuf, sendlen);
+ zdatachannel_data_send2(txbuf, sendlen);
}
static void send_success_receipt(ify_hrs_packet_t* rxpacket) {
@@ -37,7 +37,7 @@ static void send_success_receipt(ify_hrs_packet_t* rxpacket) {
txheader->frame_index = rxpacket->frame_index;
txheader->frame_type = kifyhrs_pt_cmd_receipt;
- zdatachannel_data_send(txbuf, sendlen);
+ zdatachannel_data_send2(txbuf, sendlen);
}
/*******************************************************************************
@@ -47,8 +47,7 @@ void ble_cmder_process_rx(uint8_t* rx, int len) {
ify_hrs_packet_t* rxheader = (ify_hrs_packet_t*)rx;
ify_hrs_packet_t* txheader = (ify_hrs_packet_t*)txbuf;
- int packetdata_len = len - sizeof(ify_hrs_packet_t);
- ify_hrs_cmd_t cmd = rxheader->cmd;
+ ify_hrs_cmd_t cmd = (ify_hrs_cmd_t)rxheader->cmd;
txheader->cmd = rxheader->cmd;
txheader->frame_index = rxheader->frame_index;
@@ -64,7 +63,7 @@ void ble_cmder_process_rx(uint8_t* rx, int len) {
receipt->bootloader_version = device_info_read_bootloader_version();
receipt->firmware_version = device_info_read_firmware_version();
receipt->hardware_version = device_info_read_hardware_version();
- zdatachannel_data_send(txbuf, sendlen);
+ zdatachannel_data_send2(txbuf, sendlen);
}
else if (ify_hrs_cmd_read_sensor_info) {
@@ -78,7 +77,7 @@ void ble_cmder_process_rx(uint8_t* rx, int len) {
receipt->sensor1_pos = kifyhrs_sensor_pos_none;
receipt->sensor2_pos = kifyhrs_sensor_pos_none;
- zdatachannel_data_send(txbuf, sendlen);
+ zdatachannel_data_send2(txbuf, sendlen);
}
else if (ify_hrs_cmd_read_device_state) {
@@ -93,7 +92,7 @@ void ble_cmder_process_rx(uint8_t* rx, int len) {
receipt->powerlevel = SingleLeadECG_battery_val();
receipt->storage_item_num = sample_data_mgr_get_file_num();
- zdatachannel_data_send(txbuf, sendlen);
+ zdatachannel_data_send2(txbuf, sendlen);
}
else if (ify_hrs_cmd_read_time) {
@@ -108,7 +107,7 @@ void ble_cmder_process_rx(uint8_t* rx, int len) {
receipt->hour = ztm.tm_hour;
receipt->minute = ztm.tm_min;
receipt->second = ztm.tm_sec;
- zdatachannel_data_send(txbuf, sendlen);
+ zdatachannel_data_send2(txbuf, sendlen);
}
else if (ify_hrs_cmd_sync_time) {
@@ -116,7 +115,7 @@ void ble_cmder_process_rx(uint8_t* rx, int len) {
uint16_t sendlen = sizeof(ify_hrs_packet_t);
znordic_rtc_settime(cmd->year + 2000, cmd->month, cmd->day, cmd->hour, cmd->minute, cmd->second);
- zdatachannel_data_send(txbuf, sendlen);
+ zdatachannel_data_send2(txbuf, sendlen);
}
else if (ify_hrs_cmd_start_capture) {
@@ -168,13 +167,12 @@ void ble_cmder_process_rx(uint8_t* rx, int len) {
receipt->capturePrecision = SAMPLE_PRECISION;
receipt->compressAlgorithm = 0;
- zdatachannel_data_send(txbuf, sendlen);
+ zdatachannel_data_send2(txbuf, sendlen);
}
else if (ify_hrs_cmd_del_record) {
- del_record_cmd_t* cmd = (del_record_cmd_t*)rxheader->data;
- uint16_t sendlen = sizeof(ify_hrs_packet_t);
+ del_record_cmd_t* cmd = (del_record_cmd_t*)rxheader->data;
static sample_data_filename_t filename;
memset(&filename, 0, sizeof(filename));
@@ -189,8 +187,7 @@ void ble_cmder_process_rx(uint8_t* rx, int len) {
}
else if (ify_hrs_cmd_start_upload_record) {
- start_upload_record_cmd_t* cmd = (start_upload_record_cmd_t*)rxheader->data;
- uint16_t sendlen = sizeof(ify_hrs_packet_t);
+ start_upload_record_cmd_t* cmd = (start_upload_record_cmd_t*)rxheader->data;
static sample_data_filename_t filename;
memset(&filename, 0, sizeof(filename));
@@ -212,7 +209,7 @@ void ble_cmder_process_rx(uint8_t* rx, int len) {
read_sn_receipt_t* receipt = (read_sn_receipt_t*)txheader->data;
uint16_t sendlen = sizeof(ify_hrs_packet_t) + sizeof(read_sn_receipt_t);
device_info_read_sn((sn_t*)&receipt->sn);
- zdatachannel_data_send(txbuf, sendlen);
+ zdatachannel_data_send2(txbuf, sendlen);
}
else if (ify_hrs_cmd_reset) {
diff --git a/app/src/one_conduction/heart_wave_sample_service.c b/app/src/one_conduction/heart_wave_sample_service.c
index 03a9aa2..816ba51 100644
--- a/app/src/one_conduction/heart_wave_sample_service.c
+++ b/app/src/one_conduction/heart_wave_sample_service.c
@@ -59,7 +59,7 @@ static float Filter(filter_t* filter, float newInput) {
return newv;
}
void nrfx_timer_event_handler(nrf_timer_event_t event_type, void* p_context) { //
- uint16_t val = SingleLeadECG_battery_get_adc_val(); // 12bit
+ uint16_t val = SingleLeadECG_ecg_plod_get_ecg_val(); // 12bit
float val_af100 = (float)val / 4096.0f * 100;
diff --git a/app/src/one_conduction/one_conduction_board.c b/app/src/one_conduction/one_conduction_board.c
index 9c83911..5193c2f 100644
--- a/app/src/one_conduction/one_conduction_board.c
+++ b/app/src/one_conduction/one_conduction_board.c
@@ -53,56 +53,40 @@
/*******************************************************************************
* ADC *
*******************************************************************************/
-typedef enum {
- ADC_UNSET_CH = 0,
- ADC_BATTERY_CH,
- ADC_ECG_CH,
-} adc_channel_t;
-adc_channel_t m_now_adc_channel = ADC_UNSET_CH;
+uint8_t m_now_adc_channel = 0xff;
+
+void SingleLeadECG_adc_set_ch(uint8_t ch);
void SingleLeadECG_adc_module_init() {
nrf_drv_saadc_config_t adccfg = NRFX_SAADC_DEFAULT_CONFIG;
adccfg.resolution = NRF_SAADC_RESOLUTION_12BIT; // 4096 等于满采样率
ZERROR_CHECK(nrf_drv_saadc_init(&adccfg, NULL));
-
- nrf_saadc_channel_config_t channel_config = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(ECG_ADC_PIN);
- channel_config.acq_time = NRF_SAADC_ACQTIME_40US;
- ZERROR_CHECK(nrfx_saadc_channel_init(ECG_ADC_CHANNEL, &channel_config));
+ // SingleLeadECG_adc_set_ch(BATTERY_ADC_CHANNEL);
}
-void SingleLeadECG_adc_set_ch(adc_channel_t ch) {
+void SingleLeadECG_adc_set_ch(uint8_t ch) {
if (m_now_adc_channel != ch) {
- if (m_now_adc_channel == ADC_ECG_CH) {
- nrfx_saadc_channel_uninit(ECG_ADC_CHANNEL);
- } else if (m_now_adc_channel == ADC_BATTERY_CH) {
- nrfx_saadc_channel_uninit(BATTERY_ADC_CHANNEL);
- }
+ if (m_now_adc_channel != 0xff) nrfx_saadc_channel_uninit(m_now_adc_channel);
- if (ch == ADC_ECG_CH) {
+ if (ch == ECG_ADC_CHANNEL) {
nrf_saadc_channel_config_t channel_config = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(ECG_ADC_PIN);
channel_config.acq_time = NRF_SAADC_ACQTIME_40US;
ZERROR_CHECK(nrfx_saadc_channel_init(ECG_ADC_CHANNEL, &channel_config));
- } else if (ch == ADC_BATTERY_CH) {
+ } else if (ch == BATTERY_ADC_CHANNEL) {
nrf_saadc_channel_config_t channel_config = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(BATTERY_ADC_PIN);
- channel_config.acq_time = NRF_SAADC_ACQTIME_10US;
+ channel_config.acq_time = NRF_SAADC_ACQTIME_40US;
ZERROR_CHECK(nrfx_saadc_channel_init(BATTERY_ADC_CHANNEL, &channel_config));
}
}
m_now_adc_channel = ch;
}
-int16_t SingleLeadECG_adc_get_val(adc_channel_t ch) {
- // SingleLeadECG_adc_set_ch(ch);
- if (ch == ADC_ECG_CH) {
- return znrf_adc_channel_read_val(ECG_ADC_CHANNEL);
- } else if (ch == ADC_BATTERY_CH) {
- return znrf_adc_channel_read_val(BATTERY_ADC_CHANNEL);
- }
- return 0;
+int16_t SingleLeadECG_adc_get_val(uint8_t ch) {
+ SingleLeadECG_adc_set_ch(ch);
+ return znrf_adc_channel_read_val(ch);
}
void SingleLeadECG_adc_module_deinit() {
- // SingleLeadECG_adc_set_ch(ADC_UNSET_CH);
- nrfx_saadc_channel_uninit(ECG_ADC_CHANNEL);
+ SingleLeadECG_adc_set_ch(0xff);
nrf_drv_saadc_uninit();
}
@@ -256,7 +240,7 @@ void SingleLeadECG_ecg_io_init() {
uint32_t SingleLeadECG_ecg_nlod_get_connected_state() { return nrf_gpio_pin_read(ECG_NLOD_PIN); }
uint32_t SingleLeadECG_ecg_plod_get_connected_state() { return !nrf_gpio_pin_read(ECG_PLOD_PIN); }
-int16_t SingleLeadECG_ecg_plod_get_ecg_val() { return SingleLeadECG_adc_get_val(ADC_ECG_CH); }
+int16_t SingleLeadECG_ecg_plod_get_ecg_val() { return SingleLeadECG_adc_get_val(ECG_ADC_CHANNEL); }
/*******************************************************************************
* BATTERY *
@@ -264,7 +248,7 @@ int16_t SingleLeadECG_ecg_plod_get_ecg_val() { return SingleLeadECG_adc_get_val
void SingleLeadECG_battery_init() {}
void SingleLeadECG_battery_deinit() {}
-int16_t SingleLeadECG_battery_get_adc_val() { return SingleLeadECG_adc_get_val(ADC_BATTERY_CH); }
+int16_t SingleLeadECG_battery_get_adc_val() { return SingleLeadECG_adc_get_val(BATTERY_ADC_CHANNEL); }
int16_t SingleLeadECG_battery_val() { return 50; }
void SingleLeadECG_battery_charge_detect_io_init() { //
nrf_gpio_cfg_sense_input(BATTERY_CHARGE_DETECT_PIN, NRF_GPIO_PIN_PULLUP, NRF_GPIO_PIN_NOSENSE);
diff --git a/app/src/one_conduction/one_conduction_main.c b/app/src/one_conduction/one_conduction_main.c
index 26cc174..279ee68 100644
--- a/app/src/one_conduction/one_conduction_main.c
+++ b/app/src/one_conduction/one_conduction_main.c
@@ -238,7 +238,7 @@ void app_event_process_cb(void* p_event_data, uint16_t event_size) {
/*******************************************************************************
* 页面加载中 *
*******************************************************************************/
- if (ds_cur_state_haspassed_ms() >= (500 * 5)) {
+ if (ds_cur_state_haspassed_ms() >= (2000 * 5)) {
/**
* @brief 保持静止2500ms后,切换到采集页面
*
@@ -261,19 +261,19 @@ void app_event_process_cb(void* p_event_data, uint16_t event_size) {
sampledata_file_name.sec = tm.tm_sec;
m_cur_fd = sample_data_mgr_open(&sampledata_file_name, kwrflag_write_only);
- } else if (ds_cur_state_haspassed_ms() >= (500 * 4)) {
+ } else if (ds_cur_state_haspassed_ms() >= (2000 * 4)) {
if (dsp_mgr_preparePage_get_progress() != 4) {
dsp_mgr_preparePage_set_progress(4);
}
- } else if (ds_cur_state_haspassed_ms() >= (500 * 3)) {
+ } else if (ds_cur_state_haspassed_ms() >= (2000 * 3)) {
if (dsp_mgr_preparePage_get_progress() != 3) {
dsp_mgr_preparePage_set_progress(3);
}
- } else if (ds_cur_state_haspassed_ms() >= (500 * 2)) {
+ } else if (ds_cur_state_haspassed_ms() >= (2000 * 2)) {
if (dsp_mgr_preparePage_get_progress() != 2) {
dsp_mgr_preparePage_set_progress(2);
}
- } else if (ds_cur_state_haspassed_ms() >= (500 * 1)) {
+ } else if (ds_cur_state_haspassed_ms() >= (2000 * 1)) {
if (dsp_mgr_preparePage_get_progress() != 1) {
dsp_mgr_preparePage_set_progress(1);
}