242 lines
9.1 KiB
C
242 lines
9.1 KiB
C
/**************************************************************************************************
|
||
* 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 状态
|
||
};
|