293 lines
11 KiB
C
293 lines
11 KiB
C
/*----------------------------------------------------------------------------
|
|
* Copyright (c) Fenda Technologies Co., Ltd. 2021. All rights reserved.
|
|
*
|
|
* Description: ble_test_special_server.c
|
|
*
|
|
* Author: shey.tanxiaoyu
|
|
*
|
|
* Create: 2022-04-20
|
|
*--------------------------------------------------------------------------*/
|
|
|
|
#include <stdlib.h>
|
|
#include "ble_test_special_server.h"
|
|
#include "task_ancillary.h"
|
|
#include "sys_config.h"
|
|
#include "pressure_api.h"
|
|
#include "pump_api.h"
|
|
#include "alg_proc.h"
|
|
#include "pressure_api.h"
|
|
#include "task_alg.h"
|
|
#include "am_mcu_apollo.h"
|
|
#include "health_api.h"
|
|
#include "exercise_api.h"
|
|
#include "rtc_api.h"
|
|
#include "sys_restart.h"
|
|
#include "collect_data.h"
|
|
#include "ble_protocol.h"
|
|
|
|
#define ENABLE_STATIC_PRINT 1
|
|
extern uint32_t am_util_stdio_printf(const char *pcFmt, ...);
|
|
#define static_print_error(...) am_util_stdio_printf(__VA_ARGS__)//错误打印一般常开
|
|
#if ENABLE_STATIC_PRINT
|
|
#define static_print_info(...) am_util_stdio_printf(__VA_ARGS__)//一般信息打印宏控制
|
|
#else
|
|
#define static_print_info(...)
|
|
#endif
|
|
|
|
extern uint8_t bt_printf_flag;
|
|
|
|
/* 4.13.2 字符串指令测试 */
|
|
void ble_string_command_test(uint8_t *in_data, uint16_t in_len, uint8_t *out_data, uint16_t *out_len)
|
|
{
|
|
static uint32_t frequency_hz = 0;
|
|
static uint8_t duty_ratio = 0;
|
|
uint32_t alg_collect_data_flag = 0;
|
|
char temp_str[10];
|
|
uint16_t write_idx = 0;
|
|
protocol_data_info_t data_info = {0};
|
|
// uint16_t step_datail_buf[24];
|
|
|
|
/*
|
|
e.g. 输入123:
|
|
|
|
in_data[0] = 5;
|
|
in_data[1] = 1;
|
|
in_data[2] = 31;
|
|
in_data[3] = 32;
|
|
in_data[4] = 33;
|
|
in_len = 5;
|
|
|
|
data_info.p_data[0] = 31;
|
|
data_info.p_data[1] = 32;
|
|
data_info.p_data[2] = 33;
|
|
data_info.len = 3;
|
|
*/
|
|
|
|
memset(temp_str, 0, sizeof(temp_str));
|
|
|
|
for (uint32_t i = 0; i < in_len; i++) {
|
|
health_printf("%x; %d\n", in_data[i], in_len);
|
|
}
|
|
|
|
data_info.error = FENDA_SUCCESS;
|
|
do {
|
|
user_get_data_info(&data_info, &in_data, &in_len);
|
|
switch ((data_info.type & 0x7F)) {
|
|
case 01:
|
|
for (uint32_t i = 0; i < data_info.len; i++) {
|
|
health_printf("info %x;\n", data_info.p_data[i]);
|
|
}
|
|
switch (data_info.p_data[0]) {
|
|
/* 压力传感器测试 */
|
|
case 'a':
|
|
switch (data_info.p_data[1]) {
|
|
case '0': // a0 : 0mmHg校准
|
|
pressure_api_adjust_control(BASELINE_000_ADJUST);
|
|
break;
|
|
|
|
case '1': // a1 : 150mmHg校准
|
|
pressure_api_adjust_control(BASELINE_150_ADJUST);
|
|
break;
|
|
|
|
case '2': // a2 : 250mmHg校准
|
|
pressure_api_adjust_control(BASELINE_250_ADJUST);
|
|
break;
|
|
|
|
case '3': // a3 : 300mmHg校准
|
|
pressure_api_adjust_control(BASELINE_300_ADJUST);
|
|
break;
|
|
|
|
case '4': // a4 : 清除FLASH压力传感器校准数据
|
|
pressure_api_adjust_mram_clear();
|
|
break;
|
|
|
|
case '5': // a5 : 开启血压测量
|
|
health_api_set_bp_measure_sw(0, 1, 0, 0);
|
|
break;
|
|
|
|
case '6': // a6 : 关闭血压测量
|
|
health_api_set_bp_measure_sw(0, 0, 0, 0);
|
|
break;
|
|
|
|
case '7': // a7 : 设备重启
|
|
system_restart();
|
|
break;
|
|
|
|
case '8': // a8 : 开启气泵
|
|
pump_api_out_pwm_control(23100, 120);
|
|
break;
|
|
|
|
case '9': // a9 : 关闭气泵
|
|
pump_api_out_pwm_control(0, 0);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
/* 气泵控制 */
|
|
case 'b':
|
|
switch (data_info.p_data[1]) {
|
|
case '0': // b0 : 输出频率设置
|
|
memcpy(temp_str, &data_info.p_data[2], data_info.len - 2);
|
|
frequency_hz = atoi(temp_str);
|
|
health_printf("pump_out_pwm frequency_hz = %d; duty_ratio = %d;\n", frequency_hz, duty_ratio);
|
|
pump_api_out_pwm_control(frequency_hz, duty_ratio);
|
|
break;
|
|
|
|
case '1': // b1 : 输出占空比设置
|
|
memcpy(temp_str, &data_info.p_data[2], data_info.len - 2);
|
|
duty_ratio = atoi(temp_str);
|
|
health_printf("pump_out_pwm frequency_hz = %d; duty_ratio = %d;\n", frequency_hz, duty_ratio);
|
|
pump_api_out_pwm_control(frequency_hz, duty_ratio);
|
|
break;
|
|
|
|
case '2': // b2 : 输入频率设置
|
|
memcpy(temp_str, &data_info.p_data[2], data_info.len - 2);
|
|
frequency_hz = atoi(temp_str);
|
|
health_printf("pump_in_pwm frequency_hz = %d; duty_ratio = %d;\n", frequency_hz, duty_ratio);
|
|
pump_api_in_pwm_control(frequency_hz, duty_ratio);
|
|
break;
|
|
|
|
case '3': // b3 : 输入占空比设置
|
|
memcpy(temp_str, &data_info.p_data[2], data_info.len - 2);
|
|
duty_ratio = atoi(temp_str);
|
|
health_printf("pump_in_pwm frequency_hz = %d; duty_ratio = %d;\n", frequency_hz, duty_ratio);
|
|
pump_api_in_pwm_control(frequency_hz, duty_ratio);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case 'c':
|
|
switch (data_info.p_data[1]) {
|
|
case '0': // c0 : 关闭采数
|
|
alg_collect_data_flag = 0;
|
|
collect_data_flag_write(alg_collect_data_flag);
|
|
system_restart();
|
|
break;
|
|
|
|
case '1': // c1 : 开启采数
|
|
alg_collect_data_flag = 1;
|
|
collect_data_flag_write(alg_collect_data_flag);
|
|
system_restart();
|
|
break;
|
|
|
|
case '2':
|
|
health_api_get_real_body_temp_val();
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case 't':
|
|
am_util_stdio_printf("for test ble send log\n ");
|
|
bt_printf_flag = 1;
|
|
break;
|
|
|
|
case 'w':
|
|
switch (data_info.p_data[1]) {
|
|
case '0': // w0 : 关闭强制佩戴
|
|
alg_proc_always_wear_set(0);
|
|
break;
|
|
|
|
case '1': // w1 : 开启强制佩戴
|
|
alg_proc_always_wear_set(1);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
in_data = data_info.p_data;
|
|
in_data += (data_info.len);
|
|
in_len -= (2 + data_info.len);
|
|
if (in_len > FRAM_MAX_SIZ) {
|
|
in_len = 0;
|
|
}
|
|
} while (in_len);
|
|
|
|
write_idx = user_set_protocol_error(out_data, TEST_SPECIAL_SERVER, data_info.error);
|
|
*out_len = write_idx;
|
|
}
|
|
|
|
|
|
// 恢复出厂设置测试指令,不删除配对文件
|
|
void ble_factory_reset_test(uint8_t *in_data, uint16_t in_len, uint8_t *out_data, uint16_t *out_len)
|
|
{
|
|
uint16_t write_idx = 0;
|
|
protocol_data_info_t data_info = {0};
|
|
|
|
data_info.error = FENDA_SUCCESS;
|
|
ble_printf("BLE_Factory_Reset_Test\r\n");
|
|
do {
|
|
user_get_data_info(&data_info, &in_data, &in_len);
|
|
switch(data_info.type & 0x7f) { //无子节点
|
|
case 0x01:
|
|
task_ancillary_notify(ANCILLARY_MSG_RESTORE_FACTORY_TEST, 0); // 恢复出厂设置但是保存配对文件
|
|
ble_printf("ANCILLARY_MSG_RESTORE_FACTORY_TEST\r\n");
|
|
break;
|
|
|
|
default:
|
|
data_info.error = PARAM_ERROR;
|
|
in_len = 0;
|
|
break;
|
|
|
|
}
|
|
in_data += (data_info.len);
|
|
in_len -= (2 + data_info.len);
|
|
if(in_len > FRAM_MAX_SIZ) {
|
|
in_len = 0;
|
|
}
|
|
|
|
} while(in_len);
|
|
|
|
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
|
*out_len = write_idx;
|
|
}
|
|
|
|
|
|
const p_func_t test_special_server_func[TEST_SPECIAL_SERVERE_MAX_ID] = {
|
|
user_null_func,
|
|
user_null_func, //4.13.1 切换启动模式
|
|
ble_string_command_test, //4.13.2 字符串指令测试
|
|
user_null_func, //4.13.3 反复单次运动测试
|
|
user_null_func, //4.13.4 反复消息推送测试
|
|
user_null_func, //4.13.5 反复闹钟测试
|
|
user_null_func, //4.13.6 反复来电测试
|
|
user_null_func, //4.13.7 遍历各界面+按键事件测试
|
|
user_null_func, //4.13.8 单次运动详细数据模拟测试
|
|
user_null_func, //4.13.9 单次运动配速数据模拟测试
|
|
user_null_func, //4.13.a
|
|
user_null_func, //4.13.b
|
|
user_null_func, //4.13.c
|
|
user_null_func, //4.13.d
|
|
user_null_func, //4.13.e
|
|
user_null_func, //4.13.f
|
|
user_null_func, //4.13.10 单次运动统计数据模拟测试
|
|
user_null_func, //4.13.11 睡眠数据模拟测试
|
|
user_null_func, //4.13.12 全天数据模拟测试
|
|
user_null_func, //4.13.13 读取电池状态
|
|
user_null_func, //4.13.14 读取主板温度
|
|
user_null_func, //4.13.15 客户算法调试协议
|
|
ble_factory_reset_test, //4.13.16 恢复出厂设置
|
|
user_null_func, //4.13.17 重启
|
|
};
|
|
|
|
|