/*---------------------------------------------------------------------------- * Copyright (c) Fenda Technologies Co., Ltd. 2021. All rights reserved. * * Description: ble_test_special_server.c * * Author: shey.tanxiaoyu * * Create: 2022-04-20 *--------------------------------------------------------------------------*/ #include #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 重启 };