/************************************************************************************************** * 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 状态 };