1987 lines
69 KiB
C
1987 lines
69 KiB
C
/******************************************************************************
|
||
|
||
版权所有 (C), ,
|
||
|
||
******************************************************************************
|
||
文 件 名 : device_setup_server.c
|
||
版 本 号 : 初稿
|
||
作 者 : sean
|
||
生成日期 : 2020年6月17日
|
||
最近修改 :
|
||
功能描述 : 基础功能接口的设备设置
|
||
函数列表 : user_null_func,
|
||
BLE_SetDeviceTime,//4.2.1
|
||
BLE_GetDeviceTime, //4.2.2
|
||
BLE_UserRaiseWristBrightScreenSwitch, //4.2.3
|
||
BLE_UserTrunWristCutScreenSwitch, //4.2.4
|
||
BLE_UserActivityReminderSwitch, //4.2.5
|
||
BLE_Factory_Reset, //4.2.6
|
||
BLE_SetAlarmClock, //4.2.7
|
||
BLE_GetAlarmClock, //4.2.8
|
||
BLE_UserRecvAndSetAvoidDisturbInfo,//4.2.9
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
BLE_UserGetDeviceMacAddr, //4.2.10
|
||
Ble_UserGetSoftwareVersion,//4.2.11
|
||
Ble_UserGetHardwareVersion,//4.2.12
|
||
BLE_UserBeginFindPhoneACK, // 找手机 主动上报 4.2.13
|
||
BLE_NotifyAPPSynchronizationAlarmACK, // 主动上报 4.2.14 ACK 解析
|
||
Ble_SetTimeFormat, //设置时间显示格式, 4.2.15
|
||
Ble_DisConnectedNotifySwitch,//4.2.16
|
||
user_null_func, //单位设置, 4.2.17
|
||
BLE_UserGetDeviceElectricQuantityOrVoltage, //4.2.18
|
||
user_null_func, //主动上报 4.2.19
|
||
user_null_func //BLE_DeviceChargingStateUpload 主动上报 4.2.20
|
||
|
||
|
||
修改历史 :
|
||
1.日 期 : 2020年5月22日
|
||
作 者 : andy
|
||
修改内容 : 创建文件
|
||
|
||
******************************************************************************/
|
||
|
||
#include "wsf_types.h"
|
||
//#include "hci_drv_apollo3.h"
|
||
|
||
#include "sys_config.h"
|
||
#include "sys_adapter.h"
|
||
#include "crc16.h"
|
||
#include "ble_device_setup_server.h"
|
||
#include "ble_management_server.h"
|
||
#include "ble_data_transmission.h"
|
||
#include "rtc_api.h"
|
||
#include "tp_api.h"
|
||
#include "rom_api.h"
|
||
#include "health_api.h"
|
||
//#include "alarm_clock.h"
|
||
//#include "ancillary_adapter.h"
|
||
//#include "no_disturb.h"
|
||
#include "sql_setting.h"
|
||
#include "sql_weather.h"
|
||
#include "user_charge.h"
|
||
#include "user_adapter.h"
|
||
#include "ate_production_order.h"
|
||
#include "ate_customized_info.h"
|
||
#include "ui_port_fw.h"
|
||
#include "ui_port_resource.h"
|
||
#include "task_fit.h"
|
||
#include "task_ble.h"
|
||
#include "task_ui.h"
|
||
#include "task_ancillary.h"
|
||
#include "ui_more_alarm.h"
|
||
#include "user_alarm_clock.h"
|
||
#include "sql_setting.h"
|
||
#define ENABLE_STATIC_PRINT false
|
||
extern uint32_t am_util_stdio_printf(const char *pcFmt, ...);
|
||
#define static_print_remind(...) 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
|
||
|
||
#ifdef TEST_UI_RESPOND
|
||
bool_t gTestAlarmTimeoutFlag = true; //UI界面响应闹钟超时
|
||
static osTimerId_t testTimeOut = NULL;
|
||
//4.2.7设置,大概1分钟内UI会响铃,否则处理测试过程中UI界面响应超时,通过蓝牙发送超时给APP
|
||
static void TestResponseTimeOut_handler(void)
|
||
{
|
||
if(gTestAlarmTimeoutFlag){
|
||
uint8_t i = 0;
|
||
uint8_t tmpArray[10];
|
||
printf("test Alarm message time out\r\n");
|
||
tmpArray[i++] = 3;
|
||
tmpArray[i++] = 1; //返回结果Type
|
||
tmpArray[i++] = 2; //超时响应
|
||
BLE_SendFrameById(TEST_SPECIAL_SERVER, TEST_ALARMCLOCK, tmpArray, i);
|
||
gTestAlarmTimeoutFlag = false;
|
||
}
|
||
return;
|
||
}
|
||
#endif
|
||
|
||
|
||
/***************************************************************************************************
|
||
|
||
设置设备时间--4.2.1
|
||
|
||
***************************************************************************************************/
|
||
void BLE_SetDeviceTime(uint8_t *in_data, uint16_t in_len, uint8_t *out_data, uint16_t *out_len)
|
||
{
|
||
uint16_t write_idx = 0;
|
||
uint32_t time_stamp = 0;
|
||
int16_t time_offset = 0;
|
||
uint8_t SetSucessCount = 0;
|
||
protocol_data_info_t data_info = {0};
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case time_type:
|
||
// APP下发的时间戳为UTC时间戳
|
||
time_stamp = (*data_info.p_data++) << 24;
|
||
time_stamp += (*data_info.p_data++) << 16;
|
||
time_stamp += (*data_info.p_data++) << 8;
|
||
time_stamp += (*data_info.p_data);
|
||
SetSucessCount++;
|
||
break;
|
||
|
||
case time_offset_type:
|
||
time_offset = (*data_info.p_data++);
|
||
static_print_info("time_offset: 0x%x \r\n", time_offset);
|
||
if(time_offset & 0x80) { //负时区
|
||
time_offset = 0 - ((time_offset - 0x80) * 60); //小时转负分钟数
|
||
time_offset += (0 - (*data_info.p_data)); //负分钟数
|
||
} else {
|
||
time_offset = (time_offset * 60) + (*data_info.p_data);
|
||
}
|
||
SetSucessCount++;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
} while(in_len);
|
||
|
||
if(SetSucessCount >= 2) {
|
||
data_info.error = FENDA_SUCCESS;
|
||
} else {
|
||
data_info.error = REQ_FORMAT_ERROR;
|
||
}
|
||
|
||
static_print_info("time_stamp = %d, time_offset = %d.\r\n", time_stamp, time_offset);
|
||
if(data_info.error == FENDA_SUCCESS)
|
||
{
|
||
sql_setting_set_zone(time_offset);
|
||
rtc_api_set_by_utc_timestamp(time_stamp);
|
||
task_fit_notify(FIT_MSG_TIME_UPDATE, 0);
|
||
}
|
||
|
||
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
*out_len = write_idx;
|
||
}
|
||
|
||
/***************************************************************************************************
|
||
|
||
获取设备时间--4.2.2
|
||
|
||
***************************************************************************************************/
|
||
void BLE_GetDeviceTime(uint8_t *in_data, uint16_t in_len, uint8_t *out_data, uint16_t *out_len)
|
||
{
|
||
uint16_t write_idx = 0;
|
||
uint32_t time_stamp = 0;
|
||
uint16_t time_offset = 0;
|
||
protocol_data_info_t data_info = {0};
|
||
|
||
data_info.error = FENDA_SUCCESS;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case time_type:
|
||
time_stamp = rtc_api_get_utc_timestamp(); // 待添加时区接口
|
||
out_data[write_idx++] = 0x06;
|
||
out_data[write_idx++] = data_info.type;
|
||
out_data[write_idx++] = (time_stamp & 0xff000000) >> 24;
|
||
out_data[write_idx++] = (time_stamp & 0x00ff0000) >> 16;
|
||
out_data[write_idx++] = (time_stamp & 0x0000ff00) >> 8;
|
||
out_data[write_idx++] = time_stamp & 0xff;
|
||
break;
|
||
|
||
case time_offset_type:
|
||
time_offset = sql_setting_get_zone(); // 待添加时区接口
|
||
out_data[write_idx++] = 0x04;
|
||
out_data[write_idx++] = data_info.type;
|
||
out_data[write_idx++] = (time_offset & 0xff00) >> 8;
|
||
out_data[write_idx++] = time_offset & 0x00ff;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
}while(in_len);
|
||
|
||
*out_len = write_idx;
|
||
}
|
||
|
||
|
||
/*****************************************************************************
|
||
函 数 名 : UserRaiseWristBrightScreenSwitch
|
||
功能描述 : 4.2.3 抬腕亮屏开关
|
||
输入参数 : uint8_t *in_data APP下传下来协议数据
|
||
uint16_t in_len APP下传下来的协议数据长度
|
||
|
||
输出参数 :
|
||
uint8_t *out_data APP传下来的协议,解析后需要返回给APP的协议数据
|
||
uint16_t *out_len APP传下来的协议,解析后需要返回个APP的协议数据长度
|
||
|
||
返 回 值 :
|
||
调用函数 :
|
||
被调函数 :
|
||
|
||
修改历史 :
|
||
1.日 期 : 2020年5月25日
|
||
作 者 : andy
|
||
修改内容 : 新生成函数
|
||
|
||
*****************************************************************************/
|
||
/********************************
|
||
*4.2.3 抬腕亮屏开关
|
||
**********************************/
|
||
enum {
|
||
BRIGHT_SCREEN = 1,
|
||
};
|
||
|
||
void BLE_UserRaiseWristBrightScreenSwitch(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};
|
||
uint8_t tmp = 0;
|
||
|
||
data_info.error = FENDA_SUCCESS;
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len); //获取当前服务下的多个type及字节长度,内容,
|
||
|
||
switch((data_info.type & 0x7F)) {
|
||
case BRIGHT_SCREEN:
|
||
tmp = *data_info.p_data;
|
||
static_print_info("BRIGHT_SCREEN SET\r\n");
|
||
health_api_set_bright_screen_sw(tmp);
|
||
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;
|
||
}
|
||
|
||
|
||
/*****************************************************************************
|
||
函 数 名 : UserTrunWristCutScreenSwitch
|
||
功能描述 : 4.2.4 翻腕切屏开关
|
||
输入参数 : uint8_t *in_data APP下传下来协议数据
|
||
uint16_t in_len APP下传下来的协议数据长度
|
||
|
||
输出参数 :
|
||
uint8_t *out_data APP传下来的协议,解析后需要返回给APP的协议数据
|
||
uint16_t *out_len APP传下来的协议,解析后需要返回个APP的协议数据长度
|
||
|
||
返 回 值 :
|
||
调用函数 :
|
||
被调函数 :
|
||
|
||
修改历史 :
|
||
1.日 期 : 2020年5月25日
|
||
作 者 : andy
|
||
修改内容 : 新生成函数
|
||
|
||
*****************************************************************************/
|
||
/********************************
|
||
*4.2.4 翻腕切屏开关
|
||
**********************************/
|
||
enum {
|
||
CUT_SCREEN = 1,
|
||
|
||
};
|
||
|
||
void BLE_UserTrunWristCutScreenSwitch(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};
|
||
// uint8_t tmp = 0;
|
||
|
||
data_info.error = FENDA_SUCCESS;
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len); //获取当前服务下的多个type及字节长度,内容,
|
||
|
||
switch((data_info.type & 0x7F)) {
|
||
case CUT_SCREEN:
|
||
// tmp = *data_info.p_data;
|
||
// health_api_set_switch_screen_sw(tmp);
|
||
|
||
data_info.error = UNSUPPORT_COMMAND_ERROR;
|
||
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;
|
||
}
|
||
|
||
/*****************************************************************************
|
||
函 数 名 : UserActivityReminderSwitch
|
||
功能描述 : 4.2.5 久坐提醒开关
|
||
输入参数 : uint8_t *in_data APP下传下来协议数据
|
||
uint16_t in_len APP下传下来的协议数据长度
|
||
|
||
输出参数 :
|
||
uint8_t *out_data APP传下来的协议,解析后需要返回给APP的协议数据
|
||
uint16_t *out_len APP传下来的协议,解析后需要返回个APP的协议数据长度
|
||
|
||
返 回 值 :
|
||
调用函数 :
|
||
被调函数 :
|
||
|
||
修改历史 :
|
||
1.日 期 : 2020年5月25日
|
||
作 者 : andy
|
||
修改内容 : 新生成函数
|
||
|
||
*****************************************************************************/
|
||
/********************************
|
||
*4.2.5 久坐提醒开关
|
||
**********************************/
|
||
enum {
|
||
LONG_SEAT_REMINDER = 1,
|
||
|
||
};
|
||
|
||
void BLE_UserActivityReminderSwitch(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};
|
||
uint8_t tmp = 0;
|
||
|
||
data_info.error = FENDA_SUCCESS;
|
||
do {
|
||
|
||
user_get_data_info(&data_info, &in_data, &in_len); //获取当前服务下的多个type及字节长度,内容,
|
||
switch((data_info.type & 0x7F)) {
|
||
case LONG_SEAT_REMINDER:
|
||
tmp = *data_info.p_data;
|
||
health_api_set_sedentary_remind_sw(tmp);
|
||
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;
|
||
}
|
||
|
||
/***************************************************************************************************
|
||
|
||
恢复出厂设置--4.2.6
|
||
|
||
***************************************************************************************************/
|
||
void BLE_Factory_Reset(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};
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
data_info.error = FENDA_SUCCESS;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
//APP_TRACE_INFO1("type = %d\r\n", *in_data);
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case reset:
|
||
task_ancillary_notify(ANCILLARY_MSG_RESTORE_FACTORY, 0); // 恢复出厂设置
|
||
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;
|
||
|
||
}
|
||
|
||
/***************************************************************************************************
|
||
|
||
闹钟:设置闹钟--4.2.7
|
||
|
||
***************************************************************************************************/
|
||
void BLE_SetAlarmClock(uint8_t *in_data, uint16_t in_len, uint8_t *out_data, uint16_t *out_len)
|
||
{
|
||
#if 1
|
||
uint16_t write_idx = 0;
|
||
uint8_t i,alarm_idx = 0xff;
|
||
uint8_t j = 0;
|
||
protocol_data_info_t data_info = {0};
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
AlarmClockConfig alarmClock_temp[ALARM_MAX_SIZE] = {0};
|
||
memset(&alarmClock_temp, 0, sizeof(alarmClock_temp));
|
||
|
||
data_info.error = FENDA_SUCCESS;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case LTV_relationship_type:
|
||
|
||
if((*data_info.p_data) != ALARM_RELATIONSHIP_VALUE) {
|
||
data_info.error = PARAM_ERROR;
|
||
in_len = 0;
|
||
}
|
||
break;
|
||
|
||
case alarm_id_type:
|
||
|
||
alarm_idx = *data_info.p_data;
|
||
if(alarm_idx >= ALARM_MAX_SIZE) {
|
||
alarm_idx = ALARM_MAX_SIZE - 1;
|
||
}
|
||
alarmClock_temp[alarm_idx].valid = 1;
|
||
alarmClock_temp[alarm_idx].id = alarm_idx;
|
||
break;
|
||
|
||
case alarm_H_type:
|
||
|
||
alarmClock_temp[alarm_idx].hour = *data_info.p_data;
|
||
// static_print_remind("alarmClock_temp[%d].hourTime = %d--------------\n",alarm_idx,alarmClock_temp[alarm_idx].hourTime);
|
||
break;
|
||
|
||
case alarm_M_type:
|
||
|
||
alarmClock_temp[alarm_idx].minute = *data_info.p_data;
|
||
// static_print_remind("alarmClock_temp[%d].mintueTime = %d--------------\n",alarm_idx,alarmClock_temp[alarm_idx].mintueTime);
|
||
break;
|
||
|
||
case repeat_type:
|
||
|
||
alarmClock_temp[alarm_idx].cycleMode = *data_info.p_data;
|
||
// static_print_remind("alarmClock_temp[%d].cycleMode = %d--------------\n",alarm_idx,alarmClock_temp[alarm_idx].cycleMode);
|
||
break;
|
||
|
||
case alarm_name_type:
|
||
|
||
memcpy(alarmClock_temp[alarm_idx].name, data_info.p_data, data_info.len);
|
||
// static_print_remind("alarmClock_temp[%d].name = %d--------------\n",alarm_idx,alarmClock_temp[alarm_idx].name);
|
||
break;
|
||
|
||
case alarm_enable_type:
|
||
|
||
alarmClock_temp[alarm_idx].enable = *data_info.p_data;
|
||
// static_print_remind("alarmClock_temp[%d].alarmSwitch = %d--------------\n",alarm_idx,alarmClock_temp[alarm_idx].alarmSwitch);
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
|
||
}
|
||
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
} while(in_len);
|
||
|
||
if((alarm_idx != 0xff) && (alarm_idx < ALARM_MAX_SIZE)) {
|
||
//for(i = 0; i <= alarm_idx ;i++)
|
||
//{
|
||
// ADPTUpdateAlarmClock(&alarmClock_temp[i],i);
|
||
//}
|
||
#ifdef TEST_UI_RESPOND
|
||
|
||
gTestAlarmTimeoutFlag = true;
|
||
//闹钟启闹大概是在1分钟以内,超时用70s
|
||
const osTimerAttr_t testTimeOutAttributes = {
|
||
.name = "testTimeOut"
|
||
};
|
||
if(testTimeOut == NULL){
|
||
testTimeOut = osTimerNew((osTimerFunc_t)TestResponseTimeOut_handler, osTimerOnce, NULL,
|
||
&testTimeOutAttributes);
|
||
if(testTimeOut == NULL){
|
||
PRINT_INFO("create testTimeout is fail\n");
|
||
}
|
||
osTimerStart(testTimeOut, pdMS_TO_TICKS(70000));
|
||
}else{
|
||
osTimerReset(testTimeOut);
|
||
}
|
||
#endif
|
||
}
|
||
static_print_info("ble set alarm clock list\r\n");
|
||
// adpt_update_alarm_clock_list(&alarmClock_temp[1]); // 暂时跳过0号“智能闹钟”
|
||
UpdateAlarmClockList(&alarmClock_temp[1]);
|
||
task_ui_notify(EVENT_ALARM_UPDATE,NULL,&alarmClock_temp[1],sizeof(AlarmClockConfig) * ALARM_CLOCK_MAX_NUMBER);
|
||
|
||
|
||
// for(i = 1; i <= ALARM_MAX_SIZE ;i++)
|
||
// {
|
||
// j = i -1;
|
||
// alarm_update(&alarmClock_temp[i],j);
|
||
//// static_print_remind("alarm_update*******************i = %d*****************\n",i);
|
||
// }
|
||
|
||
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
*out_len = write_idx;
|
||
#endif
|
||
}
|
||
|
||
/***************************************************************************************************
|
||
|
||
闹钟:获取设备闹钟--4.2.8
|
||
|
||
***************************************************************************************************/
|
||
void BLE_GetAlarmClock(uint8_t *in_data, uint16_t in_len, uint8_t *out_data, uint16_t *out_len)
|
||
{
|
||
#if 1
|
||
|
||
uint8_t NameLen, i = 0;
|
||
uint8_t id_list;
|
||
uint16_t write_idx = 0, LTV_relationShip_idx = 0;
|
||
protocol_data_info_t data_info = {0};
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
AlarmClockConfig alarmClock_temp[ALARM_MAX_SIZE] = {0};
|
||
data_info.error = FENDA_SUCCESS;
|
||
|
||
//LTV_relationship
|
||
out_data[write_idx++] = 0x03;
|
||
out_data[write_idx++] = LTV_relationship_type;
|
||
LTV_relationShip_idx = write_idx;
|
||
out_data[write_idx++] = ALARM_RELATIONSHIP_VALUE;
|
||
|
||
static_print_info("//******************//\nble get alarm clock list\r\n");
|
||
|
||
// //第0号智能闹钟
|
||
// //LTV(alarm_id)
|
||
// out_data[write_idx++] = 0x03;
|
||
// out_data[write_idx++] = alarm_id_type;
|
||
// out_data[write_idx++] = 0;
|
||
//
|
||
// //LTV(alarm_H)
|
||
// out_data[write_idx++] = 0x03;
|
||
// out_data[write_idx++] = alarm_H_type;
|
||
// out_data[write_idx++] = 0;
|
||
//
|
||
// //LTV(alarm_M)
|
||
// out_data[write_idx++] = 0x03;
|
||
// out_data[write_idx++] = alarm_M_type;
|
||
// out_data[write_idx++] = 0;
|
||
//
|
||
// //LTV(repeat)
|
||
// out_data[write_idx++] = 0x03;
|
||
// out_data[write_idx++] = repeat_type;
|
||
// out_data[write_idx++] = 0;
|
||
//
|
||
// //LTV(alarm_name)
|
||
// out_data[write_idx++] = 0x02;
|
||
// out_data[write_idx++] = alarm_name_type;
|
||
// //LTV(alarm_enable)
|
||
// out_data[write_idx++] = 0x03;
|
||
// out_data[write_idx++] = alarm_enable_type;
|
||
// out_data[write_idx++] = 0;
|
||
|
||
out_data[LTV_relationShip_idx] = write_idx - LTV_relationShip_idx - 1;
|
||
// uint8_t alarm_num = sql_setting_get_alarm_id_list(&id_list);
|
||
|
||
|
||
for(i = 0; i < ALARM_MAX_SIZE - 1; i++) {
|
||
|
||
GetAlarmClock(&alarmClock_temp[i],i);
|
||
// static_print_remind("i=%d,valid=%d,enable=%d,hour=%d,minute=%d,cycleMode=%d\r\n", \
|
||
// i, alarmClock_temp[i].state, alarmClock_temp[i].alarmSwitch, alarmClock_temp[i].hourTime, alarmClock_temp[i].mintueTime, alarmClock_temp[i].cycleMode);
|
||
if(alarmClock_temp[i].valid != 0) {
|
||
//LTV_relationship
|
||
out_data[write_idx++] = 0x03;
|
||
out_data[write_idx++] = LTV_relationship_type;
|
||
LTV_relationShip_idx = write_idx;
|
||
out_data[write_idx++] = ALARM_RELATIONSHIP_VALUE;
|
||
//LTV(alarm_id)
|
||
out_data[write_idx++] = 0x03;
|
||
out_data[write_idx++] = alarm_id_type;
|
||
out_data[write_idx++] = alarmClock_temp[i].id+ 1;
|
||
|
||
//LTV(alarm_H)
|
||
out_data[write_idx++] = 0x03;
|
||
out_data[write_idx++] = alarm_H_type;
|
||
out_data[write_idx++] = alarmClock_temp[i].hour;
|
||
|
||
//LTV(alarm_M)
|
||
out_data[write_idx++] = 0x03;
|
||
out_data[write_idx++] = alarm_M_type;
|
||
out_data[write_idx++] = alarmClock_temp[i].minute;
|
||
|
||
//LTV(repeat)
|
||
out_data[write_idx++] = 0x03;
|
||
out_data[write_idx++] = repeat_type;
|
||
out_data[write_idx++] = alarmClock_temp[i].cycleMode;
|
||
|
||
//LTV(alarm_name)
|
||
NameLen = strlen(alarmClock_temp[i].name);
|
||
if(NameLen > 32) {
|
||
NameLen = 32;
|
||
}
|
||
out_data[write_idx++] = NameLen + 2;
|
||
out_data[write_idx++] = alarm_name_type;
|
||
memcpy(&out_data[write_idx], alarmClock_temp[i].name, NameLen);
|
||
write_idx += NameLen;
|
||
//LTV(alarm_enable)
|
||
out_data[write_idx++] = 0x03;
|
||
out_data[write_idx++] = alarm_enable_type;
|
||
out_data[write_idx++] = alarmClock_temp[i].enable;
|
||
|
||
out_data[LTV_relationShip_idx] = write_idx - LTV_relationShip_idx - 1;
|
||
|
||
}
|
||
}
|
||
*out_len = write_idx;
|
||
#endif
|
||
}
|
||
|
||
/***************************************************************************************************
|
||
|
||
勿打扰--4.2.9
|
||
|
||
***************************************************************************************************/
|
||
void BLE_UserRecvAndSetAvoidDisturbInfo(uint8_t *in_data, uint16_t in_len, uint8_t *out_data, uint16_t *out_len)
|
||
{
|
||
uint8_t write_idx = 0;
|
||
protocol_data_info_t data_info = {0};
|
||
uint8_t per_data[5] = {0};
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
data_info.error = FENDA_SUCCESS;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
switch((data_info.type & 0x7F)) {
|
||
#if 1
|
||
case all_no_disturb_type:
|
||
sql_setting_set_dnd_all_day(*(data_info.p_data));
|
||
break;
|
||
|
||
case without_no_disturb_type: //未佩戴免打扰
|
||
//apdt_set_no_disturb_no_wear((bool_t)(*(data_info.p_data)));
|
||
break;
|
||
|
||
case regularly_no_disturb_type://免打扰开关
|
||
per_data[0] = *(data_info.p_data);
|
||
break;
|
||
|
||
case regularly_start_time_H_type:
|
||
per_data[1] = *(data_info.p_data);
|
||
break;
|
||
|
||
case regularly_start_time_M_type:
|
||
per_data[2] = *(data_info.p_data);
|
||
break;
|
||
|
||
case regularly_end_time_H_type:
|
||
per_data[3] = *(data_info.p_data);
|
||
break;
|
||
|
||
case regularly_end_time_M_type:
|
||
per_data[4] = *(data_info.p_data);
|
||
sql_setting_set_dnd_period(per_data[0],per_data[1],per_data[2],per_data[3],per_data[4]);
|
||
break;
|
||
#endif
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
in_data += (data_info.len);
|
||
in_len -= (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
} while(in_len);
|
||
|
||
task_ble_notify(BLE_SAVE_SETTINGS_MSG, 0); // 异步存储系统设置
|
||
task_ui_notify(EVENT_UPDATA_DISTURB_INFO, 0, NULL, 0);
|
||
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
*out_len = write_idx;
|
||
}
|
||
|
||
/******************************************************************************
|
||
|
||
获取设备蓝牙MAC地址--4.2.10
|
||
|
||
*******************************************************************************/
|
||
void BLE_UserGetDeviceMacAddr(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};
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
uint8_t MAC_Address[MAC_ADDRESS_LEN] = {0};
|
||
|
||
data_info.error = FENDA_SUCCESS;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case get_mac_type:
|
||
user_get_reverse_ble_mac(MAC_Address, MAC_ADDRESS_LEN);
|
||
out_data[write_idx++] = 0x08;
|
||
out_data[write_idx++] = mac_type;
|
||
out_data[write_idx++] = MAC_Address[0];
|
||
out_data[write_idx++] = MAC_Address[1];
|
||
out_data[write_idx++] = MAC_Address[2];
|
||
out_data[write_idx++] = MAC_Address[3];
|
||
out_data[write_idx++] = MAC_Address[4];
|
||
out_data[write_idx++] = MAC_Address[5];
|
||
break;
|
||
default:
|
||
data_info.error=PARAM_ERROR;
|
||
in_len=0;
|
||
break;
|
||
}
|
||
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
} while(in_len);
|
||
|
||
if(data_info.error != FENDA_SUCCESS) {
|
||
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
}
|
||
|
||
*out_len = write_idx;
|
||
}
|
||
|
||
|
||
|
||
/***************************************************************************************************
|
||
|
||
获取软件版本号4.2.11
|
||
|
||
***************************************************************************************************/
|
||
void Ble_UserGetSoftwareVersion(uint8_t *in_data, uint16_t in_len, uint8_t *out_data, uint16_t *out_len)
|
||
{
|
||
uint16_t write_idx = 0;
|
||
const uint8_t* versions_p = NULL;
|
||
uint8_t VersionLen = 0;
|
||
protocol_data_info_t data_info = {0};
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
data_info.error = FENDA_SUCCESS;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case get_version_type:
|
||
versions_p = user_get_mcu_sw_ver();
|
||
VersionLen = strlen((const char*)versions_p);
|
||
if(VersionLen > VERSION_LENGTH_MAX) {
|
||
VersionLen = VERSION_LENGTH_MAX;
|
||
}
|
||
out_data[write_idx++] = VersionLen + 2; //LTV L
|
||
out_data[write_idx++] = version_type;//LTV T
|
||
memcpy(&out_data[write_idx], (const char*)versions_p, VersionLen); //v
|
||
write_idx += VersionLen;
|
||
break;
|
||
default:
|
||
data_info.error=PARAM_ERROR;
|
||
in_len=0;
|
||
break;
|
||
|
||
}
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
|
||
} while(in_len);
|
||
|
||
if(data_info.error != FENDA_SUCCESS) {
|
||
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
}
|
||
|
||
|
||
*out_len = write_idx;
|
||
|
||
}
|
||
|
||
|
||
/***************************************************************************************************
|
||
|
||
获取硬件版本号--4.2.12
|
||
|
||
***************************************************************************************************/
|
||
void Ble_UserGetHardwareVersion(uint8_t *in_data, uint16_t in_len, uint8_t *out_data, uint16_t *out_len)
|
||
{
|
||
uint16_t write_idx = 0;
|
||
hard_version_u versions_num = {0};
|
||
protocol_data_info_t data_info = {0};
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
data_info.error = FENDA_SUCCESS;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case get_hardware_version_type:
|
||
versions_num = user_get_mcu_hw_ver();
|
||
|
||
out_data[write_idx++] = 6; //LTV L
|
||
out_data[write_idx++] = version_type;//LTV T
|
||
out_data[write_idx++] = (versions_num.u32_all >> 24) + '0';
|
||
out_data[write_idx++] = (versions_num.u32_all >> 16) + '0';
|
||
out_data[write_idx++] = (versions_num.u32_all >> 8) + '0';
|
||
out_data[write_idx++] = versions_num.u32_all;
|
||
break;
|
||
|
||
default:
|
||
data_info.error=PARAM_ERROR;
|
||
in_len=0;
|
||
break;
|
||
}
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
} while(in_len);
|
||
|
||
if(data_info.error != FENDA_SUCCESS) {
|
||
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
}
|
||
|
||
*out_len = write_idx;
|
||
}
|
||
|
||
|
||
/***************************************************************************************************
|
||
|
||
找手机--4.2.13
|
||
|
||
***************************************************************************************************/
|
||
void BLE_UserBeginFindSmartPhoneUpload(uint8_t begin)
|
||
{
|
||
//LogFileWriteEvent(EVENT_ID_FIND_PHONE);
|
||
uint16_t write_idx = 0;
|
||
uint8_t buf_temp[SET_TEMP_NUM_MAX] = {0};
|
||
buf_temp[write_idx++] = 0x03; //LTV L值
|
||
buf_temp[write_idx++] = find_phone_type; //type 02 13
|
||
buf_temp[write_idx++] = begin; //value
|
||
BLE_SendFrameById(DEVICE_SETUP_SERVER, FIND_PHONE_ID, buf_temp, write_idx);
|
||
}
|
||
|
||
void BLE_UserBeginFindPhoneACK(uint8_t *in_data, uint16_t in_len, uint8_t *out_data, uint16_t *out_len)
|
||
{
|
||
protocol_data_info_t data_info = {0};
|
||
// uint8_t BeginFindPhoneACK[2];
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
data_info.error = FENDA_SUCCESS;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case find_phone_type:
|
||
// BeginFindPhoneACK[0] = *data_info.p_data++;
|
||
// BeginFindPhoneACK[1] = *data_info.p_data;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
} while(in_len);
|
||
|
||
*out_len = 0;
|
||
}
|
||
|
||
|
||
void BLE_UserEndFindSmartPhoneUpload(uint8_t end)
|
||
{
|
||
uint16_t write_idx = 0;
|
||
uint8_t buf_temp[SET_TEMP_NUM_MAX] = {0};
|
||
buf_temp[write_idx++] = 0x03; //LTV L值
|
||
buf_temp[write_idx++] = find_phone_type; //type 02 13
|
||
buf_temp[write_idx++] = end; //value
|
||
BLE_SendFrameById(DEVICE_SETUP_SERVER, FIND_PHONE_ID, buf_temp, write_idx);
|
||
}
|
||
|
||
/***************************************************************************************************
|
||
|
||
闹钟:通知APP来同步闹钟--4.2.14
|
||
|
||
***************************************************************************************************/
|
||
void BLE_NotifyAPPSynchronizationAlarm(void)
|
||
{
|
||
uint16_t write_idx = 0;
|
||
uint8_t buf_temp[SET_TEMP_NUM_MAX] = {0};
|
||
buf_temp[write_idx++] = 0x02; //LTV L值
|
||
buf_temp[write_idx++] = Alarm_Change_Type; //type
|
||
BLE_SendFrameById(DEVICE_SETUP_SERVER, NOTIFY_APP_SYNCH_ID, buf_temp, write_idx);
|
||
|
||
}
|
||
|
||
void BLE_NotifyAPPSynchronizationAlarmACK(uint8_t *in_data, uint16_t in_len, uint8_t *out_data, uint16_t *out_len)
|
||
{
|
||
protocol_data_info_t data_info = {0};
|
||
// uint8_t NotifySynchronizationAlarmACK[2];
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
data_info.error = FENDA_SUCCESS;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case Alarm_Change_Type:
|
||
// NotifySynchronizationAlarmACK[0] = *data_info.p_data++;
|
||
// NotifySynchronizationAlarmACK[1] = *data_info.p_data;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
} while(in_len);
|
||
|
||
*out_len = 0;
|
||
}
|
||
|
||
|
||
|
||
/***************************************************************************************************
|
||
|
||
设置时间格式--4.2.15
|
||
|
||
*******************************************************************************/
|
||
void Ble_SetTimeFormat(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};
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
data_info.error = FENDA_SUCCESS;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case date_display_type:
|
||
sql_setting_set_date_format((*data_info.p_data));
|
||
break;
|
||
|
||
case time_display_type:
|
||
sql_setting_set_time_format((*data_info.p_data));
|
||
break;
|
||
|
||
default:
|
||
data_info.error=PARAM_ERROR;
|
||
in_len=0;
|
||
break;
|
||
|
||
}
|
||
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
|
||
} while(in_len);
|
||
|
||
if(data_info.error == FENDA_SUCCESS)
|
||
{
|
||
task_ble_notify(BLE_SAVE_SETTINGS_MSG, 0); // 异步存储系统设置
|
||
}
|
||
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
*out_len = write_idx;
|
||
|
||
}
|
||
|
||
/**********************************************************************************
|
||
|
||
蓝牙断开提醒开关--4.2.16
|
||
|
||
***********************************************************************************/
|
||
void Ble_DisConnectedNotifySwitch(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};
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
data_info.error = PARAM_ERROR;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case ble_disconnect_remind_type:
|
||
sql_setting_set_ble_switch_disconn_reminder(*data_info.p_data);
|
||
data_info.error = FENDA_SUCCESS;
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
|
||
} while(in_len);
|
||
|
||
if(data_info.error == FENDA_SUCCESS){
|
||
task_ble_notify(BLE_SAVE_SETTINGS_MSG, 0); // 异步存储系统设置
|
||
}
|
||
|
||
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
*out_len = write_idx;
|
||
|
||
}
|
||
|
||
/**********************************************************************************
|
||
|
||
单位设置 --- 4.2.17
|
||
|
||
***********************************************************************************/
|
||
void BLE_SetMeasuringUnits(uint8_t *in_data, uint16_t in_len, uint8_t *out_data, uint16_t *out_len)
|
||
{
|
||
uint16_t write_idx = 0;
|
||
uint8_t unitSetValue;
|
||
protocol_data_info_t data_info = {0};
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
data_info.error = FENDA_SUCCESS;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case MEASURING_UNIT_TYPE:
|
||
unitSetValue = *data_info.p_data;
|
||
static_print_info("measuring uinit Set Command received,value = 0x%x.\r\n", unitSetValue);
|
||
sql_setting_set_distance_unit(unitSetValue);
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
|
||
} while(in_len);
|
||
if(data_info.error == FENDA_SUCCESS){
|
||
task_ble_notify(BLE_SAVE_SETTINGS_MSG, 0); // 异步存储系统设置
|
||
task_ui_notify(EVENT_TYPE_BLE_CHANG_UNIT, 0,NULL,NULL); // 英制/公制单位切换问题 -- add hes -- bug id 17257
|
||
}
|
||
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
*out_len = write_idx;
|
||
|
||
}
|
||
|
||
/***************************************************************************************************
|
||
|
||
获取设备电量/电压--4.2.18
|
||
|
||
***************************************************************************************************/
|
||
void BLE_UserGetDeviceElectricQuantityOrVoltage(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};
|
||
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
uint8_t powerValue = 0;
|
||
// uint16_t voltageValue = 0;
|
||
chg_usb_stat_e chargingState;
|
||
|
||
data_info.error = FENDA_SUCCESS;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case GET_DEVICE_POWER_TYPE:
|
||
if((*data_info.p_data) == GET_POWER_CHARGE_STATUS) {
|
||
powerValue = charge_api_get_batt_percent();
|
||
chargingState = charge_api_get_usb_status();
|
||
out_data[write_idx++] = 0x03;//power LTV
|
||
out_data[write_idx++] = DEVICE_POWER_TYPE;
|
||
out_data[write_idx++] = powerValue;
|
||
|
||
static_print_info("\r\n*******powerValue = %d**********\r\n", powerValue);
|
||
out_data[write_idx++] = 0x03;//power LTV
|
||
out_data[write_idx++] = DEVICE_CHARGE_STATUS_TYPE;
|
||
if(chargingState == CHG_STAT_CHARGE || chargingState == CHG_STAT_TRICKLE_CHARGE)
|
||
{
|
||
out_data[write_idx++] = PROTOCOL_CHANGING;
|
||
}
|
||
else if (chargingState == CHG_STAT_NOT_USB)
|
||
{
|
||
out_data[write_idx++] = PROTOCOL_NOT_USB;
|
||
}
|
||
else if(chargingState == CHG_STAT_CHARGE_DONE)
|
||
{
|
||
out_data[write_idx++] = PROTOCOL_CHARGE_DON;
|
||
}
|
||
else
|
||
{
|
||
out_data[write_idx++] = 0xff;
|
||
}
|
||
break;
|
||
}else {
|
||
data_info.error = PARAM_ERROR;
|
||
}
|
||
break;
|
||
|
||
default:
|
||
data_info.error=PARAM_ERROR;
|
||
in_len=0;
|
||
break;
|
||
}
|
||
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
|
||
} while(in_len);
|
||
|
||
if(data_info.error != FENDA_SUCCESS) {
|
||
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
}
|
||
|
||
*out_len = write_idx;
|
||
|
||
}
|
||
|
||
|
||
/***************************************************************************************************
|
||
|
||
设备主动上报电量--4.2.19
|
||
|
||
***************************************************************************************************/
|
||
void BLE_DeviceElectricQuantityUpload(void)
|
||
{
|
||
uint16_t write_idx = 0;
|
||
uint8_t buf_temp[SET_TEMP_NUM_MAX] = {0};
|
||
uint8_t power_value = 0;
|
||
chg_usb_stat_e chargingState;
|
||
|
||
power_value = charge_api_get_batt_percent();
|
||
chargingState = charge_api_get_usb_status();
|
||
buf_temp[write_idx++] = 0x03; //LTV L值
|
||
buf_temp[write_idx++] = REPORT_BATTERY_POWER_TYPE; //type
|
||
buf_temp[write_idx++] = power_value;//value
|
||
buf_temp[write_idx++] = 0x03;//POWER_RATTLE_TYPE
|
||
buf_temp[write_idx++] = REPORT_BATTERY_POWER_RATTLE_TYPE;
|
||
if(chargingState == CHG_STAT_CHARGE || chargingState == CHG_STAT_TRICKLE_CHARGE)
|
||
{
|
||
buf_temp[write_idx++] = PROTOCOL_CHANGING;
|
||
}
|
||
else if (chargingState == CHG_STAT_NOT_USB)
|
||
{
|
||
buf_temp[write_idx++] = PROTOCOL_NOT_USB;
|
||
}
|
||
else if(chargingState == CHG_STAT_CHARGE_DONE)
|
||
{
|
||
buf_temp[write_idx++] = PROTOCOL_CHARGE_DON;
|
||
}
|
||
else
|
||
{
|
||
buf_temp[write_idx++] = 0xff;
|
||
}
|
||
BLE_SendFrameById(DEVICE_SETUP_SERVER, DEVICE_UPLOAD_ELEC_ID, buf_temp, write_idx);
|
||
}
|
||
|
||
|
||
/***************************************************************************************************
|
||
|
||
设备主动上报充电状态--4.2.20
|
||
|
||
***************************************************************************************************/
|
||
/*
|
||
void BLE_DeviceChargingStateUpload(void)
|
||
{
|
||
uint16_t write_idx = 0;
|
||
uint8_t buf_temp[SET_TEMP_NUM_MAX] = {0};
|
||
|
||
uint8_t charging_state = 0;
|
||
charging_state = ADPTGetChargeState();
|
||
|
||
buf_temp[write_idx++] = 0x03; //LTV L值
|
||
buf_temp[write_idx++] = REPORT_BATTERY_CHARGE_STATUS_TYPE; //type
|
||
buf_temp[write_idx++] = charging_state;//value
|
||
BLE_SendFrameById(DEVICE_SETUP_SERVER, DEVICE_UPLOAD_CHARGE_STATUS, buf_temp, write_idx);
|
||
}
|
||
*/
|
||
/***************************************************************************************************
|
||
|
||
获取设备各模块版本号(GPS、NFC、TP)--4.2.21
|
||
|
||
***************************************************************************************************/
|
||
void BLE_GetDeviceModeVersion(uint8_t *in_data, uint16_t in_len, uint8_t *out_data, uint16_t *out_len)
|
||
{
|
||
uint16_t write_idx = 0;
|
||
// int32_t Ret = 0;
|
||
uint32_t tp_version = 0;
|
||
uint8_t *ver_p = NULL;;
|
||
uint8_t versionSize = 0;
|
||
protocol_data_info_t data_info = {0};
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
static_print_info("begin BLE_GetDeviceModeVersion.\r\n");
|
||
|
||
data_info.error = PARAM_ERROR;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case GET_VERSION_TYPE:
|
||
data_info.error = FENDA_SUCCESS;
|
||
//TP mode Version
|
||
tp_version = touchpad_api_read_ver();
|
||
static_print_info("TP firwmare version:%d.\r\n", tp_version);
|
||
out_data[write_idx++] = 4; //LTV L
|
||
out_data[write_idx++] = VERSION_TP_TYPE;//LTV T
|
||
out_data[write_idx++] = (tp_version >> 8) + '0';
|
||
out_data[write_idx++] = tp_version + '0';
|
||
//GPS mode Version
|
||
ver_p = user_gps_get_firware_ver();
|
||
static_print_info("GPS firware_ver: %s \n", ver_p);
|
||
versionSize = strlen((const char *)ver_p);
|
||
out_data[write_idx++] = versionSize + 2; //LTV L
|
||
out_data[write_idx++] = VERSION_GPS_TYPE;//LTV T
|
||
memcpy(&out_data[write_idx], ver_p, versionSize);
|
||
write_idx += versionSize;
|
||
//FONT mode Version
|
||
out_data[write_idx++] = 2;//LTV L
|
||
out_data[write_idx++] = VERSION_FONT_TYPE;//LTV T
|
||
//IMAGE mode Version
|
||
out_data[write_idx++] = 2;//LTV L
|
||
out_data[write_idx++] = VERSION_IMAGE_TYPE;//LTV T
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
} while(in_len);
|
||
|
||
if(data_info.error != FENDA_SUCCESS) {
|
||
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
}
|
||
|
||
*out_len = write_idx;
|
||
}
|
||
|
||
/**********************************************************************************
|
||
|
||
4.2.23 双击亮屏开关
|
||
|
||
***********************************************************************************/
|
||
void BLE_doublePointBrightScreenSwitch(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};
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
data_info.error = PARAM_ERROR;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case DEVICE_DOUBLE_BRIGHT_SWITCH_TYPE:
|
||
static_print_info("double bright Command received,value = 0x%x.\r\n", (uint8_t)(*data_info.p_data));
|
||
//data_info.error = ADPTSetDClickScreenOn((uint8_t)(*data_info.p_data));
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
in_data = in_data + (data_info.len);
|
||
in_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;
|
||
|
||
}
|
||
|
||
/**********************************************************************************
|
||
|
||
// 4.2.24 手机型号下发
|
||
|
||
***********************************************************************************/
|
||
void BLE_getPhoneType(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};
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
data_info.error = PARAM_ERROR;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case DEVICE_GET_PHONE_TYPE_TYPE:
|
||
static_print_info("get phone type Command received.Type = %s.\r\n", data_info.p_data);
|
||
data_info.error = sql_setting_set_phone_name(data_info.p_data,data_info.len);
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
|
||
} while(in_len);
|
||
|
||
if(data_info.error == FENDA_SUCCESS)
|
||
{
|
||
task_ble_notify(BLE_SAVE_SETTINGS_MSG, 0); // 异步存储系统设置
|
||
}
|
||
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
*out_len = write_idx;
|
||
|
||
}
|
||
|
||
/**********************************************************************************
|
||
|
||
4.2.25 推送新版本提醒到设备
|
||
|
||
***********************************************************************************/
|
||
void BLE_getNewVersionNotice(uint8_t *in_data, uint16_t in_len, uint8_t *out_data, uint16_t *out_len)
|
||
{
|
||
uint16_t write_idx = 0;
|
||
uint8_t *pNewVersionData = NULL,versionDataLen = NULL,firmwareVerisonType = NULL;
|
||
protocol_data_info_t data_info = {0};
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
data_info.error = PARAM_ERROR;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case DEVICE_NEW_VERSION_TYPE:
|
||
static_print_info("get Device new version Command received,NewVersion = %s.\r\n", data_info.p_data);
|
||
pNewVersionData = data_info.p_data;
|
||
versionDataLen = (uint8_t)(data_info.len%0x100);
|
||
break;
|
||
case DEVICE_VERSION_TYPE_TYPE:
|
||
static_print_info("get Device version type Command received,Versiontype = 0x%x.\r\n", *data_info.p_data);
|
||
firmwareVerisonType = *data_info.p_data;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
|
||
} while(in_len);
|
||
|
||
if((pNewVersionData !=NULL)&&(versionDataLen != NULL)&&(firmwareVerisonType != NULL))
|
||
{
|
||
//data_info.error = ADPTFirmwareNewVersion(pNewVersionData,versionDataLen,firmwareVerisonType);
|
||
}
|
||
|
||
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
*out_len = write_idx;
|
||
|
||
}
|
||
|
||
|
||
/**********************************************************************************
|
||
|
||
4.2.26 喝水提醒
|
||
|
||
***********************************************************************************/
|
||
void BLE_drinkWaterRemindSet(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};
|
||
// WaterRemind wateRemindParam;
|
||
// memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
// memset(&wateRemindParam, 0, sizeof(wateRemindParam));
|
||
|
||
// data_info.error = PARAM_ERROR;
|
||
|
||
// do {
|
||
// user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
// switch(data_info.type & 0x7f) { //无子节点
|
||
// case WATER_REMIND_SWITCH_TYPE:
|
||
// PRINT_INFO("water remind switch Command received,value = 0x%x.\r\n", (uint8_t)(*data_info.p_data));
|
||
// wateRemindParam.waterRemindEnable = (uint8_t)(*data_info.p_data);
|
||
// break;
|
||
// case WATER_REMIND_INTERVAL_TYPE:
|
||
// PRINT_INFO("water remind interval Command received,value = 0x%x.\r\n", (uint8_t)(*data_info.p_data));
|
||
// wateRemindParam.interval = (uint8_t)(*data_info.p_data);
|
||
// break;
|
||
// case WATER_REMIND_START_TYPE:
|
||
// wateRemindParam.startTime = (uint8_t)(*data_info.p_data++)*0x100;
|
||
// wateRemindParam.startTime += (uint8_t)(*data_info.p_data);
|
||
// PRINT_INFO("water remind start Command received.startTime = %d.\r\n", wateRemindParam.startTime);
|
||
// break;
|
||
// case WATER_REMIND_END_TYPE:
|
||
// wateRemindParam.endTime = (uint8_t)(*data_info.p_data++)*0x100;
|
||
// wateRemindParam.endTime += (uint8_t)(*data_info.p_data);
|
||
// PRINT_INFO("water remind end Command received.endTime = %d.\r\n",wateRemindParam.endTime);
|
||
// break;
|
||
// default:
|
||
// break;
|
||
// }
|
||
// in_data = in_data + (data_info.len);
|
||
// in_len = in_len - (2 + data_info.len);
|
||
// if(in_len > FRAM_MAX_SIZ) {
|
||
// in_len = 0;
|
||
// }
|
||
|
||
// } while(in_len);
|
||
|
||
// data_info.error = ADPTSetDrinkWaterRemind(wateRemindParam);
|
||
|
||
// write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
// *out_len = write_idx;
|
||
|
||
}
|
||
|
||
/**********************************************************************************
|
||
|
||
4.2.27 手机电量下发到 设备
|
||
|
||
***********************************************************************************/
|
||
void BLE_getPhoneBatteryInfo(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};
|
||
uint8_t batteryValue;
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
data_info.error = PARAM_ERROR;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case PHONE_BATTERY_SET_POWER_TYPE:
|
||
batteryValue = *data_info.p_data;
|
||
static_print_info("phone battery set power Command received,value = %d.\r\n", batteryValue);
|
||
//data_info.error = ADPTSetPhoneBattery(batteryValue);
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
in_data = in_data + (data_info.len);
|
||
in_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;
|
||
|
||
}
|
||
|
||
/***************************************************************************************************
|
||
|
||
获取设备版本信息(GPS、NFC、TP)--4.2.28
|
||
|
||
***************************************************************************************************/
|
||
void BLE_GetDeviceVersionInfo(uint8_t *in_data, uint16_t in_len, uint8_t *out_data, uint16_t *out_len)
|
||
{
|
||
uint16_t write_idx = 0;
|
||
int32_t Ret = 0;
|
||
const uint8_t* firwmare_versions_p = NULL;
|
||
hard_version_u versions_num = {0};
|
||
uint32_t tp_version = 0;
|
||
uint8_t *ver_p = NULL;
|
||
psn_calibra_t psn_temp = {0};
|
||
uint16_t temp_crc = 0;
|
||
uint8_t MAC_Address[MAC_ADDRESS_LEN] = {0};
|
||
uint8_t VersionLen = 0;
|
||
protocol_data_info_t data_info = {0};
|
||
char imageVersionArray[VERSION_LENGTH_MAX] = {0x31, 0x2E, 0x34, 0x2E, 0x36};
|
||
char fontVersionArray[VERSION_LENGTH_MAX] = {0x31, 0x2E, 0x34, 0x2E, 0x36};
|
||
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
static_print_info("begin BLE_GetDeviceModeVersion.\r\n");
|
||
|
||
data_info.error = PARAM_ERROR;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case GET_VERSION_TYPE:
|
||
data_info.error = FENDA_SUCCESS;
|
||
//TP mode Version
|
||
tp_version = touchpad_api_read_ver();
|
||
static_print_info("TP firwmare version:%d.\r\n", tp_version);
|
||
out_data[write_idx++] = 4; //LTV L
|
||
out_data[write_idx++] = VERSION_TP_TYPE;//LTV T
|
||
out_data[write_idx++] = (tp_version >> 8) + '0';
|
||
out_data[write_idx++] = tp_version + '0';
|
||
|
||
//GPS mode Version
|
||
ver_p = user_gps_get_firware_ver();
|
||
static_print_info("GPS firware_ver: %s \n", ver_p);
|
||
VersionLen = strlen((const char *)ver_p);
|
||
out_data[write_idx++] = VersionLen + 2; //LTV L
|
||
out_data[write_idx++] = VERSION_GPS_TYPE;//LTV T
|
||
memcpy(&out_data[write_idx], ver_p, VersionLen);
|
||
write_idx += VersionLen;
|
||
|
||
//FONT mode Version
|
||
ui_get_font_version(fontVersionArray,1);
|
||
VersionLen = strlen(fontVersionArray);
|
||
static_print_info("font mode version:%s.\r\n", fontVersionArray);
|
||
if(VersionLen > VERSION_LENGTH_MAX) {
|
||
VersionLen = VERSION_LENGTH_MAX;
|
||
}
|
||
out_data[write_idx++] = VersionLen + 2;//LTV L
|
||
out_data[write_idx++] = VERSION_FONT_TYPE;//LTV T
|
||
memcpy(&out_data[write_idx], fontVersionArray, VersionLen); //v
|
||
write_idx += VersionLen;
|
||
|
||
//IMAGE mode Version
|
||
ui_get_image_version(imageVersionArray,1);
|
||
VersionLen = strlen(imageVersionArray);
|
||
static_print_info("image mode version:%s.\r\n", imageVersionArray);
|
||
if(VersionLen > VERSION_LENGTH_MAX) {
|
||
VersionLen = VERSION_LENGTH_MAX;
|
||
}
|
||
out_data[write_idx++] = VersionLen + 2;//LTV L
|
||
out_data[write_idx++] = VERSION_IMAGE_TYPE;//LTV T
|
||
memcpy(&out_data[write_idx], imageVersionArray, VersionLen); //v
|
||
write_idx += VersionLen;
|
||
|
||
// firmware Version
|
||
firwmare_versions_p = user_get_mcu_sw_ver();
|
||
VersionLen = strlen((const char*)firwmare_versions_p);
|
||
if(VersionLen > VERSION_LENGTH_MAX) {
|
||
VersionLen = VERSION_LENGTH_MAX;
|
||
}
|
||
out_data[write_idx++] = VersionLen + 2; //LTV L
|
||
out_data[write_idx++] = FIRMWARE_VERSION_TYPE;//LTV T
|
||
memcpy(&out_data[write_idx], (const char*)firwmare_versions_p, VersionLen); //v
|
||
write_idx += VersionLen;
|
||
|
||
// hardware Version
|
||
versions_num = user_get_mcu_hw_ver();
|
||
out_data[write_idx++] = 6; //LTV L
|
||
out_data[write_idx++] = HARDWARE_VERSION_TYPE;//LTV T
|
||
out_data[write_idx++] = (versions_num.u32_all >> 24) + '0';
|
||
out_data[write_idx++] = (versions_num.u32_all >> 16) + '0';
|
||
out_data[write_idx++] = (versions_num.u32_all >> 8) + '0';
|
||
out_data[write_idx++] = versions_num.u32_all + '0';
|
||
|
||
// Device type
|
||
out_data[write_idx++] = 3; //LTV L
|
||
out_data[write_idx++] = DEVICE_TYPE_TYPE;//LTV T
|
||
out_data[write_idx++] = 88; // 设备型号还未定义
|
||
|
||
// Device SN
|
||
rom_api_read(FACTORY_PSN_ADDR, ( uint8_t * ) &psn_temp, sizeof(psn_temp));
|
||
VersionLen = sizeof(psn_temp.psn);
|
||
out_data[write_idx++] = VersionLen + 2; //LTV L
|
||
out_data[write_idx++] = DEVICE_SN_TYPE; //LTV T
|
||
memcpy(&out_data[write_idx], psn_temp.psn, VersionLen);
|
||
write_idx += VersionLen;
|
||
static_print_info("VersionLen =%d\r\n", VersionLen);
|
||
|
||
// Device MAC
|
||
user_get_reverse_ble_mac(MAC_Address, MAC_ADDRESS_LEN);
|
||
out_data[write_idx++] = 0x08;
|
||
out_data[write_idx++] = DEVICE_MAC_TYPE;
|
||
out_data[write_idx++] = MAC_Address[0];
|
||
out_data[write_idx++] = MAC_Address[1];
|
||
out_data[write_idx++] = MAC_Address[2];
|
||
out_data[write_idx++] = MAC_Address[3];
|
||
out_data[write_idx++] = MAC_Address[4];
|
||
out_data[write_idx++] = MAC_Address[5];
|
||
|
||
// device model
|
||
out_data[write_idx++] = 2; //LTV L
|
||
out_data[write_idx++] = DEVICE_MODEL_TYPE;//LTV T
|
||
|
||
// device pid
|
||
out_data[write_idx++] = 2; //LTV L
|
||
out_data[write_idx++] = DEVICE_PID_TYPE;//LTV T
|
||
|
||
// device vid
|
||
out_data[write_idx++] = 2; //LTV L
|
||
out_data[write_idx++] = DEVICE_VID_TYPE;//LTV T
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
} while(in_len);
|
||
|
||
if(data_info.error != FENDA_SUCCESS) {
|
||
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
}
|
||
|
||
*out_len = write_idx;
|
||
}
|
||
|
||
|
||
|
||
|
||
/**********************************************************************************
|
||
|
||
4.2.29 手机网络状态下发到设备
|
||
|
||
***********************************************************************************/
|
||
void BLE_getPhoneInternetStatus(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};
|
||
uint8_t internetStatusValue;
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
data_info.error = PARAM_ERROR;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case PHONE_INTERNET_STATUS_TYPE:
|
||
internetStatusValue = *data_info.p_data;
|
||
static_print_info("phone internet status received,value = %d.\r\n", internetStatusValue);
|
||
user_set_phone_net_status(internetStatusValue);
|
||
data_info.error = FENDA_SUCCESS;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
|
||
} while(in_len);
|
||
|
||
// UpdateWeatherPhoneNetState(user_get_phone_net_status());
|
||
// ------TO BE ADDED 向UI发送消息 -------
|
||
// QueryUiUpdateWeatherInfo();
|
||
|
||
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
*out_len = write_idx;
|
||
|
||
}
|
||
|
||
/**********************************************************************************
|
||
|
||
4.2.30 手机发送找手环命令
|
||
|
||
***********************************************************************************/
|
||
void BLE_findDevice(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};
|
||
uint8_t findDeviceValue;
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
data_info.error = PARAM_ERROR;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case FIND_DEVICE_TYPE:
|
||
findDeviceValue = *data_info.p_data;
|
||
static_print_info("phone find device Command received.\r\n");
|
||
ui_port_send_sys_remind_event(EVENT_REMIND_FIND_BAND, findDeviceValue, NULL, 0);
|
||
data_info.error = FENDA_SUCCESS;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
in_data = in_data + (data_info.len);
|
||
in_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;
|
||
|
||
}
|
||
|
||
/***************************************************************************************************
|
||
|
||
4.2.31 设备上报找手环状态
|
||
|
||
***************************************************************************************************/
|
||
void BLE_ReportFindDeviceStatus(uint8_t status)
|
||
{
|
||
uint16_t write_idx = 0;
|
||
uint8_t buf_temp[TEMP_NUM_MAX] = {0};
|
||
buf_temp[write_idx++] = 0x03;
|
||
buf_temp[write_idx++] = FIND_DEVICE_STATUS_TYPE;
|
||
buf_temp[write_idx++] = status;
|
||
|
||
BLE_SendFrameById(DEVICE_SETUP_SERVER, REPORT_FIND_DEVICE_STATUS_ID,buf_temp, write_idx);
|
||
}
|
||
|
||
/**********************************************************************************
|
||
|
||
4.2.35 获取设备侧勿扰信息
|
||
|
||
***********************************************************************************/
|
||
void BLE_getDisturbInfo(uint8_t *in_data, uint16_t in_len, uint8_t *out_data, uint16_t *out_len)
|
||
{
|
||
uint16_t write_idx = 0;
|
||
uint8_t get_time[4] = {0};
|
||
uint8_t status = 0;
|
||
|
||
status = sql_setting_get_dnd_period(&get_time[0], &get_time[1], &get_time[2], &get_time[3]);
|
||
#if 1
|
||
out_data[write_idx++] = 0x03;
|
||
out_data[write_idx++] = all_no_disturb_type;
|
||
out_data[write_idx++] = sql_setting_get_dnd_all_day();//GetNoDisturbAllDay();
|
||
out_data[write_idx++] = 0x03;
|
||
out_data[write_idx++] = without_no_disturb_type;
|
||
out_data[write_idx++] = 0x01;//GetNoDisturbNoWear();
|
||
out_data[write_idx++] = 0x03;
|
||
out_data[write_idx++] = regularly_no_disturb_type;
|
||
out_data[write_idx++] = status;//GetNoDisturbPeriod();
|
||
out_data[write_idx++] = 0x03;
|
||
out_data[write_idx++] = regularly_start_time_H_type;
|
||
out_data[write_idx++] = get_time[0];//GetNoDisturbStartHour();
|
||
out_data[write_idx++] = 0x03;
|
||
out_data[write_idx++] = regularly_start_time_M_type;
|
||
out_data[write_idx++] = get_time[1];//GetNoDisturbStartMinute();
|
||
out_data[write_idx++] = 0x03;
|
||
out_data[write_idx++] = regularly_end_time_H_type;
|
||
out_data[write_idx++] = get_time[2];//GetNoDisturbEndHour();
|
||
out_data[write_idx++] = 0x03;
|
||
out_data[write_idx++] = regularly_end_time_M_type;
|
||
out_data[write_idx++] = get_time[3];//GetNoDisturbEndMinute();
|
||
#endif
|
||
*out_len = write_idx;
|
||
}
|
||
|
||
/***************************************************************************************************
|
||
|
||
4.2.36 设备通知APP 同步勿扰信息
|
||
|
||
***************************************************************************************************/
|
||
void BLE_reportDisturbStatus(void)
|
||
{
|
||
uint16_t write_idx = 0;
|
||
uint8_t buf_temp[TEMP_NUM_MAX] = {0};
|
||
buf_temp[write_idx++] = 0x02;
|
||
buf_temp[write_idx++] = REPORT_DISTURB_STATUS_TYPE;
|
||
BLE_SendFrameById(DEVICE_SETUP_SERVER, REPORT_DISTURBINFO_ID,buf_temp, write_idx);
|
||
}
|
||
|
||
/**********************************************************************************
|
||
|
||
4.2.37 APP 下发温度单位
|
||
|
||
***********************************************************************************/
|
||
void BLE_SetTemperatureUnit(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};
|
||
uint8_t tempUnitValue;
|
||
memset(&data_info, 0, sizeof(protocol_data_info_t));
|
||
|
||
data_info.error = PARAM_ERROR;
|
||
|
||
do {
|
||
user_get_data_info(&data_info, &in_data, &in_len);
|
||
|
||
switch(data_info.type & 0x7f) { //无子节点
|
||
case 0x01:
|
||
// SetWeatherTempUnit((uint8_t)(*data_info.p_data));
|
||
// task_ble_notify(BLE_SAVE_WEATHER_MSG, 0); // 异步存储天气信息
|
||
tempUnitValue = *data_info.p_data;
|
||
data_info.error = FENDA_SUCCESS;
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
in_data = in_data + (data_info.len);
|
||
in_len = in_len - (2 + data_info.len);
|
||
if(in_len > FRAM_MAX_SIZ) {
|
||
in_len = 0;
|
||
}
|
||
|
||
} while(in_len);
|
||
|
||
if(data_info.error == FENDA_SUCCESS)
|
||
{
|
||
#if 1
|
||
//重置并保存天气温度单位
|
||
sql_weather_set_temper_unit(tempUnitValue);
|
||
task_ble_notify(BLE_SAVE_WEATHER_MSG, 0); // 异步存储天气信息
|
||
task_ble_notify(BLE_WEATHER_UPDATE_MSG, 0);
|
||
// ------TO BE ADDED 向UI发送消息 ------- add hes 2022.4.11
|
||
task_ui_notify(EVENT_WEATHER_UPDATE,NULL,NULL,NULL);
|
||
#endif
|
||
}
|
||
|
||
write_idx = user_set_protocol_error(out_data, DEVICE_SETUP_SERVER, data_info.error);
|
||
*out_len = write_idx;
|
||
|
||
}
|
||
|
||
// 所有涉及到设备管理的函数指针,这里的顺序和common id 顺序相同
|
||
const p_func_t DeviceSetupServerFunc[DEVICE_SETUP_SERVERE_MAX_ID] = {
|
||
user_null_func,
|
||
BLE_SetDeviceTime,//4.2.1
|
||
BLE_GetDeviceTime, //4.2.2
|
||
BLE_UserRaiseWristBrightScreenSwitch, //4.2.3
|
||
BLE_UserTrunWristCutScreenSwitch, //4.2.4
|
||
BLE_UserActivityReminderSwitch, //4.2.5
|
||
BLE_Factory_Reset, //4.2.6
|
||
BLE_SetAlarmClock, //4.2.7
|
||
BLE_GetAlarmClock, //4.2.8
|
||
BLE_UserRecvAndSetAvoidDisturbInfo,//4.2.9
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
BLE_UserGetDeviceMacAddr, //4.2.10
|
||
Ble_UserGetSoftwareVersion,//4.2.11
|
||
Ble_UserGetHardwareVersion,//4.2.12
|
||
BLE_UserBeginFindPhoneACK, // 找手机 主动上报 4.2.13
|
||
BLE_NotifyAPPSynchronizationAlarmACK, // 主动上报 4.2.14 ACK 解析
|
||
Ble_SetTimeFormat, //设置时间显示格式, 4.2.15
|
||
Ble_DisConnectedNotifySwitch,//4.2.16
|
||
BLE_SetMeasuringUnits, //单位设置, 4.2.17
|
||
BLE_UserGetDeviceElectricQuantityOrVoltage, //4.2.18
|
||
user_null_func, //主动上报 4.2.19
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func, //BLE_DeviceChargingStateUpload 主动上报 4.2.20
|
||
BLE_GetDeviceModeVersion, //获取各设备模块固件版本号 4.2.21
|
||
user_null_func,
|
||
BLE_doublePointBrightScreenSwitch,
|
||
BLE_getPhoneType,
|
||
BLE_getNewVersionNotice,
|
||
BLE_drinkWaterRemindSet,
|
||
BLE_getPhoneBatteryInfo,
|
||
BLE_GetDeviceVersionInfo, //4.2.28
|
||
BLE_getPhoneInternetStatus, //4.2.29
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
BLE_findDevice, //4,2.30
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
user_null_func,
|
||
BLE_getDisturbInfo, //4.2.35
|
||
user_null_func,
|
||
BLE_SetTemperatureUnit
|
||
};
|
||
|