1eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh/* 2eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * Copyright (c) 2017, The Linux Foundation. All rights reserved. 3eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * Not a Contribution 4eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh */ 5eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh/* 6eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * Copyright (C) 2016 The Android Open Source Project 7eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * 8eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * Licensed under the Apache License, Version 2.0 (the "License"); 9eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * you may not use this file except in compliance with the License. 10eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * You may obtain a copy of the License at 11eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * 12eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * http://www.apache.org/licenses/LICENSE-2.0 13eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * 14eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * Unless required by applicable law or agreed to in writing, software 15eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * distributed under the License is distributed on an "AS IS" BASIS, 16eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 17eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * See the License for the specific language governing permissions and 18eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * limitations under the License. 19eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh */ 20eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 21eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define LOG_TAG "LocSvc_GnssConfigurationInterface" 22eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 23eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <log_util.h> 24eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include "Gnss.h" 25eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include "GnssConfiguration.h" 26eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 27eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhnamespace android { 28eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhnamespace hardware { 29eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhnamespace gnss { 30eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhnamespace V1_0 { 31eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhnamespace implementation { 32eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 33eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain VongsouvanhGnssConfiguration::GnssConfiguration(Gnss* gnss) : mGnss(gnss) { 34eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} 35eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 36eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh// Methods from ::android::hardware::gps::V1_0::IGnssConfiguration follow. 37eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain VongsouvanhReturn<bool> GnssConfiguration::setSuplEs(bool enabled) { 38eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh if (mGnss == nullptr) { 39eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__); 40eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return false; 41eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh } 42eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 43eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh GnssConfig config; 44eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh memset(&config, 0, sizeof(GnssConfig)); 45eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.size = sizeof(GnssConfig); 46eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.flags = GNSS_CONFIG_FLAGS_SUPL_EM_SERVICES_BIT; 47eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.suplEmergencyServices = (enabled ? 48eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh GNSS_CONFIG_SUPL_EMERGENCY_SERVICES_YES : 49eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh GNSS_CONFIG_SUPL_EMERGENCY_SERVICES_NO); 50eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 51eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return mGnss->updateConfiguration(config); 52eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} 53eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 54eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain VongsouvanhReturn<bool> GnssConfiguration::setSuplVersion(uint32_t version) { 55eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh if (mGnss == nullptr) { 56eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__); 57eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return false; 58eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh } 59eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 60eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh GnssConfig config; 61eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh memset(&config, 0, sizeof(GnssConfig)); 62eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.size = sizeof(GnssConfig); 63eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.flags = GNSS_CONFIG_FLAGS_SUPL_VERSION_VALID_BIT; 64eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh switch (version) { 65eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh case 0x00020002: 66eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.suplVersion = GNSS_CONFIG_SUPL_VERSION_2_0_2; 67eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 68eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh case 0x00020000: 69eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.suplVersion = GNSS_CONFIG_SUPL_VERSION_2_0_0; 70eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 71eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh case 0x00010000: 72eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.suplVersion = GNSS_CONFIG_SUPL_VERSION_1_0_0; 73eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 74eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh default: 75eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LOC_LOGE("%s]: invalid version: 0x%x.", __FUNCTION__, version); 76eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return false; 77eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 78eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh } 79eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 80eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return mGnss->updateConfiguration(config); 81eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} 82eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 83eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain VongsouvanhReturn<bool> GnssConfiguration::setSuplMode(uint8_t mode) { 84eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh if (mGnss == nullptr) { 85eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__); 86eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return false; 87eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh } 88eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 89eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh GnssConfig config; 90eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh memset(&config, 0, sizeof(GnssConfig)); 91eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.size = sizeof(GnssConfig); 92eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.flags = GNSS_CONFIG_FLAGS_SUPL_MODE_BIT; 93eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh switch (mode) { 94eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh case 0: 95eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.suplModeMask = 0; // STANDALONE ONLY 96eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 97eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh case 1: 98eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.suplModeMask = GNSS_CONFIG_SUPL_MODE_MSB_BIT; 99eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 100eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh case 2: 101eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.suplModeMask = GNSS_CONFIG_SUPL_MODE_MSA_BIT; 102eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 103eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh case 3: 104eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.suplModeMask = GNSS_CONFIG_SUPL_MODE_MSB_BIT | GNSS_CONFIG_SUPL_MODE_MSA_BIT; 105eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 106eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh default: 107eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LOC_LOGE("%s]: invalid mode: %d.", __FUNCTION__, mode); 108eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return false; 109eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 110eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh } 111eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 112eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return mGnss->updateConfiguration(config); 113eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} 114eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 115eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain VongsouvanhReturn<bool> GnssConfiguration::setLppProfile(uint8_t lppProfile) { 116eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh if (mGnss == nullptr) { 117eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__); 118eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return false; 119eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh } 120eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 121eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh GnssConfig config; 122eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh memset(&config, 0, sizeof(GnssConfig)); 123eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.size = sizeof(GnssConfig); 124eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.flags = GNSS_CONFIG_FLAGS_LPP_PROFILE_VALID_BIT; 125eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh switch (lppProfile) { 126eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh case 0: 127eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.lppProfile = GNSS_CONFIG_LPP_PROFILE_RRLP_ON_LTE; 128eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 129eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh case 1: 130eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.lppProfile = GNSS_CONFIG_LPP_PROFILE_USER_PLANE; 131eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 132eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh case 2: 133eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.lppProfile = GNSS_CONFIG_LPP_PROFILE_CONTROL_PLANE; 134eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 135eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh case 3: 136eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.lppProfile = GNSS_CONFIG_LPP_PROFILE_USER_PLANE_AND_CONTROL_PLANE; 137eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 138eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh default: 139eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LOC_LOGE("%s]: invalid lppProfile: %d.", __FUNCTION__, lppProfile); 140eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return false; 141eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 142eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh } 143eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 144eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return mGnss->updateConfiguration(config); 145eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} 146eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 147eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain VongsouvanhReturn<bool> GnssConfiguration::setGlonassPositioningProtocol(uint8_t protocol) { 148eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh if (mGnss == nullptr) { 149eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__); 150eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return false; 151eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh } 152eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 153eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh GnssConfig config; 154eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh memset(&config, 0, sizeof(GnssConfig)); 155eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.size = sizeof(GnssConfig); 156eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 157eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.flags = GNSS_CONFIG_FLAGS_AGLONASS_POSITION_PROTOCOL_VALID_BIT; 158eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh if (protocol & (1<<0)) { 159eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.aGlonassPositionProtocolMask |= GNSS_CONFIG_RRC_CONTROL_PLANE_BIT; 160eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh } 161eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh if (protocol & (1<<1)) { 162eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.aGlonassPositionProtocolMask |= GNSS_CONFIG_RRLP_USER_PLANE_BIT; 163eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh } 164eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh if (protocol & (1<<2)) { 165eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.aGlonassPositionProtocolMask |= GNSS_CONFIG_LLP_USER_PLANE_BIT; 166eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh } 167eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh if (protocol & (1<<3)) { 168eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.aGlonassPositionProtocolMask |= GNSS_CONFIG_LLP_CONTROL_PLANE_BIT; 169eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh } 170eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 171eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return mGnss->updateConfiguration(config); 172eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} 173eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 174eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain VongsouvanhReturn<bool> GnssConfiguration::setGpsLock(uint8_t lock) { 175eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh if (mGnss == nullptr) { 176eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__); 177eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return false; 178eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh } 179eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 180eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh GnssConfig config; 181eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh memset(&config, 0, sizeof(GnssConfig)); 182eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.size = sizeof(GnssConfig); 183eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.flags = GNSS_CONFIG_FLAGS_GPS_LOCK_VALID_BIT; 184eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh switch (lock) { 185eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh case 0: 186eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.gpsLock = GNSS_CONFIG_GPS_LOCK_NONE; 187eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 188eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh case 1: 189eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.gpsLock = GNSS_CONFIG_GPS_LOCK_MO; 190eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 191eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh case 2: 192eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.gpsLock = GNSS_CONFIG_GPS_LOCK_NI; 193eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 194eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh case 3: 195eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.gpsLock = GNSS_CONFIG_GPS_LOCK_MO_AND_NI; 196eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 197eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh default: 198eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LOC_LOGE("%s]: invalid lock: %d.", __FUNCTION__, lock); 199eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return false; 200eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh break; 201eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh } 202eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 203eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return mGnss->updateConfiguration(config); 204eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} 205eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 206eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain VongsouvanhReturn<bool> GnssConfiguration::setEmergencySuplPdn(bool enabled) { 207eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh if (mGnss == nullptr) { 208eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__); 209eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return false; 210eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh } 211eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 212eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh GnssConfig config; 213eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh memset(&config, 0, sizeof(GnssConfig)); 214eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.size = sizeof(GnssConfig); 215eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.flags = GNSS_CONFIG_FLAGS_EM_PDN_FOR_EM_SUPL_VALID_BIT; 216eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh config.emergencyPdnForEmergencySupl = (enabled ? 217eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh GNSS_CONFIG_EMERGENCY_PDN_FOR_EMERGENCY_SUPL_YES : 218eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh GNSS_CONFIG_EMERGENCY_PDN_FOR_EMERGENCY_SUPL_NO); 219eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 220eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh return mGnss->updateConfiguration(config); 221eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} 222eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 223eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} // namespace implementation 224eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} // namespace V1_0 225eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} // namespace gnss 226eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} // namespace hardware 227eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} // namespace android 228