1/*
2 * Copyright (c) 2017, The Linux Foundation. All rights reserved.
3 * Not a Contribution
4 */
5/*
6 * Copyright (C) 2016 The Android Open Source Project
7 *
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
11 *
12 *      http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 */
20
21#define LOG_TAG "LocSvc_GnssConfigurationInterface"
22
23#include <log_util.h>
24#include "Gnss.h"
25#include "GnssConfiguration.h"
26
27namespace android {
28namespace hardware {
29namespace gnss {
30namespace V1_0 {
31namespace implementation {
32
33GnssConfiguration::GnssConfiguration(Gnss* gnss) : mGnss(gnss) {
34}
35
36// Methods from ::android::hardware::gps::V1_0::IGnssConfiguration follow.
37Return<bool> GnssConfiguration::setSuplEs(bool enabled)  {
38    if (mGnss == nullptr) {
39        LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__);
40        return false;
41    }
42
43    GnssConfig config;
44    memset(&config, 0, sizeof(GnssConfig));
45    config.size = sizeof(GnssConfig);
46    config.flags = GNSS_CONFIG_FLAGS_SUPL_EM_SERVICES_BIT;
47    config.suplEmergencyServices = static_cast<GnssConfigSuplEmergencyServices>(enabled);
48
49    return mGnss->updateConfiguration(config);
50}
51
52Return<bool> GnssConfiguration::setSuplVersion(uint32_t version)  {
53    if (mGnss == nullptr) {
54        LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__);
55        return false;
56    }
57
58    GnssConfig config;
59    memset(&config, 0, sizeof(GnssConfig));
60    config.size = sizeof(GnssConfig);
61    config.flags = GNSS_CONFIG_FLAGS_SUPL_VERSION_VALID_BIT;
62    config.suplVersion = static_cast<GnssConfigSuplVersion>(version);
63
64    return mGnss->updateConfiguration(config);
65}
66
67Return<bool> GnssConfiguration::setSuplMode(uint8_t mode)  {
68    if (mGnss == nullptr) {
69        LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__);
70        return false;
71    }
72
73    GnssConfig config;
74    memset(&config, 0, sizeof(GnssConfig));
75    config.size = sizeof(GnssConfig);
76    config.flags = GNSS_CONFIG_FLAGS_SUPL_MODE_BIT;
77    config.suplModeMask = static_cast<GnssConfigSuplModeMask>(mode);
78
79    return mGnss->updateConfiguration(config);
80}
81
82Return<bool> GnssConfiguration::setLppProfile(uint8_t lppProfile) {
83    if (mGnss == nullptr) {
84        LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__);
85        return false;
86    }
87
88    GnssConfig config;
89    memset(&config, 0, sizeof(GnssConfig));
90    config.size = sizeof(GnssConfig);
91    config.flags = GNSS_CONFIG_FLAGS_LPP_PROFILE_VALID_BIT;
92    config.lppProfile = static_cast<GnssConfigLppProfile>(lppProfile);
93
94    return mGnss->updateConfiguration(config);
95}
96
97Return<bool> GnssConfiguration::setGlonassPositioningProtocol(uint8_t protocol) {
98    if (mGnss == nullptr) {
99        LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__);
100        return false;
101    }
102
103    GnssConfig config;
104    memset(&config, 0, sizeof(GnssConfig));
105    config.size = sizeof(GnssConfig);
106    config.flags = GNSS_CONFIG_FLAGS_AGLONASS_POSITION_PROTOCOL_VALID_BIT;
107    config.aGlonassPositionProtocolMask =
108        static_cast<GnssConfigAGlonassPositionProtocolMask>(protocol);
109
110    return mGnss->updateConfiguration(config);
111}
112
113Return<bool> GnssConfiguration::setGpsLock(uint8_t lock) {
114    if (mGnss == nullptr) {
115        LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__);
116        return false;
117    }
118
119    GnssConfig config;
120    memset(&config, 0, sizeof(GnssConfig));
121    config.size = sizeof(GnssConfig);
122    config.flags = GNSS_CONFIG_FLAGS_GPS_LOCK_VALID_BIT;
123    config.gpsLock = static_cast<GnssConfigGpsLock>(lock);
124
125    return mGnss->updateConfiguration(config);
126}
127
128Return<bool> GnssConfiguration::setEmergencySuplPdn(bool enabled) {
129    if (mGnss == nullptr) {
130        LOC_LOGE("%s]: mGnss is nullptr", __FUNCTION__);
131        return false;
132    }
133
134    GnssConfig config;
135    memset(&config, 0, sizeof(GnssConfig));
136    config.size = sizeof(GnssConfig);
137    config.flags = GNSS_CONFIG_FLAGS_EM_PDN_FOR_EM_SUPL_VALID_BIT;
138    config.emergencyPdnForEmergencySupl =
139        static_cast<GnssConfigEmergencyPdnForEmergencySupl>(enabled);
140
141    return mGnss->updateConfiguration(config);
142}
143
144}  // namespace implementation
145}  // namespace V1_0
146}  // namespace gnss
147}  // namespace hardware
148}  // namespace android
149