mcu_hi3321_watch/tjd/ble/protocol/ble_gps_server.c
2025-05-26 20:15:20 +08:00

242 lines
9.1 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**************************************************************************************************
* Copyright (c) Fenda Technologies Co., Ltd. 2020-2021. All rights reserved.
* Description: GPS服务功能
* Author: sean.wangxiaochao
* Create: 2021-03-26
************************************************************************************************/
#include "ble_gps_server.h"
#include "ble_data_transmission.h"
#include "sys_config.h"
#include "exercise_proc.h"
/***************************************************************************************************
4.18.3 设备主动请求GPS信息
***************************************************************************************************/
void deviceRequestphoneGpsInfo(uint8_t command)
{
ble_printf("REQ GPS %d\n", command);
uint16_t write_idx = 0;
uint8_t buf_temp[10] = {0};
buf_temp[write_idx++] = 0x03; //LTV L值
buf_temp[write_idx++] = DEVICE_GPS_REQUEST_TYPE; //type 02 13
buf_temp[write_idx++] = command; //value
BLE_SendFrameById(GPS_SERVER, DEVICE_REQ_PHONE_GPS_INFO_ID, buf_temp, write_idx);
}
/*****************************************************************************
函 数 名 : deviceRequestGpsInfoACK
功能描述 : 4.18.3 设备接收APP下发的GPS信息
输入参数 : uint8_t *in_data APP下传下来协议数据
uint16_t in_len APP下传下来的协议数据长度
输出参数 :
uint8_t *out_data APP传下来的协议解析后需要返回给APP的协议数据
uint16_t *out_len APP传下来的协议解析后需要返回个APP的协议数据长度
返 回 值 :
调用函数 :
被调函数 :
修改历史 :
1.日 期 : 2021年03月26日
作 者 : sean
修改内容 : 新生成函数
*****************************************************************************/
void BLE_deviceRequestGpsInfoACK(uint8_t *in_data,uint16_t in_len,uint8_t
*out_data,uint16_t *out_len)
{
uint16_t writeIdx=0;
uint8_t gpsStatusValue = 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);//获取当前服务下的多个type及字节长度内容
switch((data_info.type & 0x7F))
{
case DEVICE_GPS_STATUS_ACK_TYPE:
gpsStatusValue = *data_info.p_data;
ble_printf("APP GPS status received,value = 0x%x.\r\n",gpsStatusValue);
if (gpsStatusValue == 1) {
exercise_proc_set_gps_state(1);
} else {
exercise_proc_set_gps_state(0);
}
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);
writeIdx = user_set_protocol_error(out_data,GPS_SERVER,data_info.error);
*out_len = writeIdx;
}
/*****************************************************************************
函 数 名 : BLE_dReceiveAppGpsInfo
功能描述 : 4.18.5 APP 下发GPS 信息
输入参数 : uint8_t *in_data APP下传下来协议数据
uint16_t in_len APP下传下来的协议数据长度
输出参数 :
uint8_t *out_data APP传下来的协议解析后需要返回给APP的协议数据
uint16_t *out_len APP传下来的协议解析后需要返回个APP的协议数据长度
返 回 值 :
调用函数 :
被调函数 :
修改历史 :
1.日 期 : 2021年08月03日
作 者 : sean
修改内容 : 新生成函数
*****************************************************************************/
void BLE_dReceiveAppGpsInfo(uint8_t *in_data,uint16_t in_len,uint8_t
*out_data,uint16_t *out_len)
{
uint16_t tmpValue16,writeIdx=0;
FitGpsInfo tempFitGpsInfo;
protocol_data_info_t data_info = {0};
memset(&data_info, 0, sizeof(protocol_data_info_t));
memset(&tempFitGpsInfo, 0, sizeof(tempFitGpsInfo));
uint32_t tmpValue;
data_info.error=FENDA_SUCCESS;
do
{
tmpValue = 0;
tmpValue16 = 0;
user_get_data_info(&data_info,&in_data,&in_len);//获取当前服务下的多个type及字节长度内容
switch((data_info.type & 0x7F))
{
case APP_GPS_LONGITUDE_TYPE:
tmpValue = (*data_info.p_data++)<<24;
tmpValue += (*data_info.p_data++)<<16;
tmpValue += (*data_info.p_data++)<<8;
tmpValue += (*data_info.p_data);
ble_printf("APP GPS longitude received,value = 0x%x.\r\n",tmpValue);
tempFitGpsInfo.longtitude = tmpValue;
break;
case APP_GPS_LATITUDE_TYPE:
tmpValue = (*data_info.p_data++)<<24;
tmpValue += (*data_info.p_data++)<<16;
tmpValue += (*data_info.p_data++)<<8;
tmpValue += (*data_info.p_data);
ble_printf("APP GPS latitude received,value = 0x%x.\r\n",tmpValue);
tempFitGpsInfo.latitude = tmpValue;
break;
case APP_GPS_DISTANCES_TYPE:
tmpValue16 = (*data_info.p_data++)<<8;
tmpValue16 += (*data_info.p_data);
ble_printf("APP GPS distances received,value = 0x%x.\r\n",tmpValue16);
tempFitGpsInfo.distance = tmpValue16;
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);
exercise_proc_set_gps_info(tempFitGpsInfo.longtitude, tempFitGpsInfo.latitude, tempFitGpsInfo.distance);
writeIdx = user_set_protocol_error(out_data,GPS_SERVER,data_info.error);
*out_len = writeIdx;
}
/*****************************************************************************
函 数 名 : BLE_ReceiveAppGpsStatus
功能描述 : 4.18.6 APP 主动下发GPS 状态
输入参数 : uint8_t *in_data APP下传下来协议数据
uint16_t in_len APP下传下来的协议数据长度
输出参数 :
uint8_t *out_data APP传下来的协议解析后需要返回给APP的协议数据
uint16_t *out_len APP传下来的协议解析后需要返回个APP的协议数据长度
返 回 值 :
调用函数 :
被调函数 :
修改历史 :
1.日 期 : 2021年08月23日
作 者 : sean
修改内容 : 新生成函数
*****************************************************************************/
void BLE_ReceiveAppGpsStatus(uint8_t *in_data,uint16_t in_len,uint8_t
*out_data,uint16_t *out_len)
{
uint16_t writeIdx=0;
uint8_t gpsStatusValue = 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);//获取当前服务下的多个type及字节长度内容
switch((data_info.type & 0x7F))
{
case DEVICE_GPS_STATUS_TYPE:
gpsStatusValue = *data_info.p_data;
ble_printf("APP GPS status received,value = 0x%x.\r\n",gpsStatusValue);
if (gpsStatusValue == 1) {
exercise_proc_set_gps_state(1);
} else {
exercise_proc_set_gps_state(0);
}
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);
writeIdx = user_set_protocol_error(out_data,GPS_SERVER,data_info.error);
*out_len = writeIdx;
}
const p_func_t GpsServerFunc[GPS_SERVERE_MAX_ID]=
{
user_null_func,
user_null_func, //App询问是否可以下发星历文件--4.18.1
user_null_func, //设备请求星历文件状态--4.18.2
BLE_deviceRequestGpsInfoACK, //4.18.3 设备主动请求GPS 信息
user_null_func, //4.18.4 APP 下发 GPS 坐标点到设备
BLE_dReceiveAppGpsInfo, //4.18.5 APP 下发GPS 信息
BLE_ReceiveAppGpsStatus, // 4.18.6 APP 主动下发GPS 状态
};