GPS HAL Binderization
A Debug interface as well as a configuration interface will be added in another CL. Bug: 31974439 Test: mma Change-Id: I977d95fc815172bd2aae7c78f81e1fc7c9bce72a
This commit is contained in:
parent
4436797966
commit
e596a71046
19 changed files with 2329 additions and 0 deletions
|
@ -6,6 +6,7 @@ subdirs = [
|
|||
"benchmarks/msgq/1.0",
|
||||
"bluetooth/1.0",
|
||||
"biometrics/fingerprint/2.1",
|
||||
"gnss/1.0",
|
||||
"graphics/allocator/2.0",
|
||||
"graphics/allocator/2.0/default",
|
||||
"graphics/composer/2.1",
|
||||
|
|
166
gnss/1.0/Android.bp
Normal file
166
gnss/1.0/Android.bp
Normal file
|
@ -0,0 +1,166 @@
|
|||
// This file is autogenerated by hidl-gen. Do not edit manually.
|
||||
|
||||
genrule {
|
||||
name: "android.hardware.gnss@1.0_genc++",
|
||||
tool: "hidl-gen",
|
||||
cmd: "$tool -o $genDir -Lc++ -randroid.hardware:hardware/interfaces android.hardware.gnss@1.0",
|
||||
srcs: [
|
||||
"types.hal",
|
||||
"IAGnss.hal",
|
||||
"IAGnssCallback.hal",
|
||||
"IAGnssRil.hal",
|
||||
"IAGnssRilCallback.hal",
|
||||
"IGnss.hal",
|
||||
"IGnssCallback.hal",
|
||||
"IGnssGeofenceCallback.hal",
|
||||
"IGnssGeofencing.hal",
|
||||
"IGnssMeasurement.hal",
|
||||
"IGnssMeasurementCallback.hal",
|
||||
"IGnssNavigationMessage.hal",
|
||||
"IGnssNavigationMessageCallback.hal",
|
||||
"IGnssNi.hal",
|
||||
"IGnssNiCallback.hal",
|
||||
"IGnssXtra.hal",
|
||||
"IGnssXtraCallback.hal",
|
||||
],
|
||||
out: [
|
||||
"android/hardware/gnss/1.0/types.cpp",
|
||||
"android/hardware/gnss/1.0/AGnssAll.cpp",
|
||||
"android/hardware/gnss/1.0/AGnssCallbackAll.cpp",
|
||||
"android/hardware/gnss/1.0/AGnssRilAll.cpp",
|
||||
"android/hardware/gnss/1.0/AGnssRilCallbackAll.cpp",
|
||||
"android/hardware/gnss/1.0/GnssAll.cpp",
|
||||
"android/hardware/gnss/1.0/GnssCallbackAll.cpp",
|
||||
"android/hardware/gnss/1.0/GnssGeofenceCallbackAll.cpp",
|
||||
"android/hardware/gnss/1.0/GnssGeofencingAll.cpp",
|
||||
"android/hardware/gnss/1.0/GnssMeasurementAll.cpp",
|
||||
"android/hardware/gnss/1.0/GnssMeasurementCallbackAll.cpp",
|
||||
"android/hardware/gnss/1.0/GnssNavigationMessageAll.cpp",
|
||||
"android/hardware/gnss/1.0/GnssNavigationMessageCallbackAll.cpp",
|
||||
"android/hardware/gnss/1.0/GnssNiAll.cpp",
|
||||
"android/hardware/gnss/1.0/GnssNiCallbackAll.cpp",
|
||||
"android/hardware/gnss/1.0/GnssXtraAll.cpp",
|
||||
"android/hardware/gnss/1.0/GnssXtraCallbackAll.cpp",
|
||||
],
|
||||
}
|
||||
|
||||
genrule {
|
||||
name: "android.hardware.gnss@1.0_genc++_headers",
|
||||
tool: "hidl-gen",
|
||||
cmd: "$tool -o $genDir -Lc++ -randroid.hardware:hardware/interfaces android.hardware.gnss@1.0",
|
||||
srcs: [
|
||||
"types.hal",
|
||||
"IAGnss.hal",
|
||||
"IAGnssCallback.hal",
|
||||
"IAGnssRil.hal",
|
||||
"IAGnssRilCallback.hal",
|
||||
"IGnss.hal",
|
||||
"IGnssCallback.hal",
|
||||
"IGnssGeofenceCallback.hal",
|
||||
"IGnssGeofencing.hal",
|
||||
"IGnssMeasurement.hal",
|
||||
"IGnssMeasurementCallback.hal",
|
||||
"IGnssNavigationMessage.hal",
|
||||
"IGnssNavigationMessageCallback.hal",
|
||||
"IGnssNi.hal",
|
||||
"IGnssNiCallback.hal",
|
||||
"IGnssXtra.hal",
|
||||
"IGnssXtraCallback.hal",
|
||||
],
|
||||
out: [
|
||||
"android/hardware/gnss/1.0/types.h",
|
||||
"android/hardware/gnss/1.0/IAGnss.h",
|
||||
"android/hardware/gnss/1.0/IHwAGnss.h",
|
||||
"android/hardware/gnss/1.0/BnAGnss.h",
|
||||
"android/hardware/gnss/1.0/BpAGnss.h",
|
||||
"android/hardware/gnss/1.0/BsAGnss.h",
|
||||
"android/hardware/gnss/1.0/IAGnssCallback.h",
|
||||
"android/hardware/gnss/1.0/IHwAGnssCallback.h",
|
||||
"android/hardware/gnss/1.0/BnAGnssCallback.h",
|
||||
"android/hardware/gnss/1.0/BpAGnssCallback.h",
|
||||
"android/hardware/gnss/1.0/BsAGnssCallback.h",
|
||||
"android/hardware/gnss/1.0/IAGnssRil.h",
|
||||
"android/hardware/gnss/1.0/IHwAGnssRil.h",
|
||||
"android/hardware/gnss/1.0/BnAGnssRil.h",
|
||||
"android/hardware/gnss/1.0/BpAGnssRil.h",
|
||||
"android/hardware/gnss/1.0/BsAGnssRil.h",
|
||||
"android/hardware/gnss/1.0/IAGnssRilCallback.h",
|
||||
"android/hardware/gnss/1.0/IHwAGnssRilCallback.h",
|
||||
"android/hardware/gnss/1.0/BnAGnssRilCallback.h",
|
||||
"android/hardware/gnss/1.0/BpAGnssRilCallback.h",
|
||||
"android/hardware/gnss/1.0/BsAGnssRilCallback.h",
|
||||
"android/hardware/gnss/1.0/IGnss.h",
|
||||
"android/hardware/gnss/1.0/IHwGnss.h",
|
||||
"android/hardware/gnss/1.0/BnGnss.h",
|
||||
"android/hardware/gnss/1.0/BpGnss.h",
|
||||
"android/hardware/gnss/1.0/BsGnss.h",
|
||||
"android/hardware/gnss/1.0/IGnssCallback.h",
|
||||
"android/hardware/gnss/1.0/IHwGnssCallback.h",
|
||||
"android/hardware/gnss/1.0/BnGnssCallback.h",
|
||||
"android/hardware/gnss/1.0/BpGnssCallback.h",
|
||||
"android/hardware/gnss/1.0/BsGnssCallback.h",
|
||||
"android/hardware/gnss/1.0/IGnssGeofenceCallback.h",
|
||||
"android/hardware/gnss/1.0/IHwGnssGeofenceCallback.h",
|
||||
"android/hardware/gnss/1.0/BnGnssGeofenceCallback.h",
|
||||
"android/hardware/gnss/1.0/BpGnssGeofenceCallback.h",
|
||||
"android/hardware/gnss/1.0/BsGnssGeofenceCallback.h",
|
||||
"android/hardware/gnss/1.0/IGnssGeofencing.h",
|
||||
"android/hardware/gnss/1.0/IHwGnssGeofencing.h",
|
||||
"android/hardware/gnss/1.0/BnGnssGeofencing.h",
|
||||
"android/hardware/gnss/1.0/BpGnssGeofencing.h",
|
||||
"android/hardware/gnss/1.0/BsGnssGeofencing.h",
|
||||
"android/hardware/gnss/1.0/IGnssMeasurement.h",
|
||||
"android/hardware/gnss/1.0/IHwGnssMeasurement.h",
|
||||
"android/hardware/gnss/1.0/BnGnssMeasurement.h",
|
||||
"android/hardware/gnss/1.0/BpGnssMeasurement.h",
|
||||
"android/hardware/gnss/1.0/BsGnssMeasurement.h",
|
||||
"android/hardware/gnss/1.0/IGnssMeasurementCallback.h",
|
||||
"android/hardware/gnss/1.0/IHwGnssMeasurementCallback.h",
|
||||
"android/hardware/gnss/1.0/BnGnssMeasurementCallback.h",
|
||||
"android/hardware/gnss/1.0/BpGnssMeasurementCallback.h",
|
||||
"android/hardware/gnss/1.0/BsGnssMeasurementCallback.h",
|
||||
"android/hardware/gnss/1.0/IGnssNavigationMessage.h",
|
||||
"android/hardware/gnss/1.0/IHwGnssNavigationMessage.h",
|
||||
"android/hardware/gnss/1.0/BnGnssNavigationMessage.h",
|
||||
"android/hardware/gnss/1.0/BpGnssNavigationMessage.h",
|
||||
"android/hardware/gnss/1.0/BsGnssNavigationMessage.h",
|
||||
"android/hardware/gnss/1.0/IGnssNavigationMessageCallback.h",
|
||||
"android/hardware/gnss/1.0/IHwGnssNavigationMessageCallback.h",
|
||||
"android/hardware/gnss/1.0/BnGnssNavigationMessageCallback.h",
|
||||
"android/hardware/gnss/1.0/BpGnssNavigationMessageCallback.h",
|
||||
"android/hardware/gnss/1.0/BsGnssNavigationMessageCallback.h",
|
||||
"android/hardware/gnss/1.0/IGnssNi.h",
|
||||
"android/hardware/gnss/1.0/IHwGnssNi.h",
|
||||
"android/hardware/gnss/1.0/BnGnssNi.h",
|
||||
"android/hardware/gnss/1.0/BpGnssNi.h",
|
||||
"android/hardware/gnss/1.0/BsGnssNi.h",
|
||||
"android/hardware/gnss/1.0/IGnssNiCallback.h",
|
||||
"android/hardware/gnss/1.0/IHwGnssNiCallback.h",
|
||||
"android/hardware/gnss/1.0/BnGnssNiCallback.h",
|
||||
"android/hardware/gnss/1.0/BpGnssNiCallback.h",
|
||||
"android/hardware/gnss/1.0/BsGnssNiCallback.h",
|
||||
"android/hardware/gnss/1.0/IGnssXtra.h",
|
||||
"android/hardware/gnss/1.0/IHwGnssXtra.h",
|
||||
"android/hardware/gnss/1.0/BnGnssXtra.h",
|
||||
"android/hardware/gnss/1.0/BpGnssXtra.h",
|
||||
"android/hardware/gnss/1.0/BsGnssXtra.h",
|
||||
"android/hardware/gnss/1.0/IGnssXtraCallback.h",
|
||||
"android/hardware/gnss/1.0/IHwGnssXtraCallback.h",
|
||||
"android/hardware/gnss/1.0/BnGnssXtraCallback.h",
|
||||
"android/hardware/gnss/1.0/BpGnssXtraCallback.h",
|
||||
"android/hardware/gnss/1.0/BsGnssXtraCallback.h",
|
||||
],
|
||||
}
|
||||
|
||||
cc_library_shared {
|
||||
name: "android.hardware.gnss@1.0",
|
||||
generated_sources: ["android.hardware.gnss@1.0_genc++"],
|
||||
generated_headers: ["android.hardware.gnss@1.0_genc++_headers"],
|
||||
export_generated_headers: ["android.hardware.gnss@1.0_genc++_headers"],
|
||||
shared_libs: [
|
||||
"libhidl",
|
||||
"libhwbinder",
|
||||
"libutils",
|
||||
"libcutils",
|
||||
],
|
||||
}
|
77
gnss/1.0/IAGnss.hal
Normal file
77
gnss/1.0/IAGnss.hal
Normal file
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.gnss@1.0;
|
||||
|
||||
import IAGnssCallback;
|
||||
|
||||
/*
|
||||
* Extended interface for AGNSS support.
|
||||
*/
|
||||
interface IAGnss {
|
||||
enum ApnIpType : uint16_t {
|
||||
INVALID = 0,
|
||||
IPV4 = 1,
|
||||
IPV6 = 2,
|
||||
IPV4V6 = 3
|
||||
};
|
||||
|
||||
/*
|
||||
* Opens the AGNSS interface and provides the callback routines to the
|
||||
* implementation of this interface.
|
||||
*
|
||||
* @param callback Handle to the AGNSS status callback interface.
|
||||
*/
|
||||
setCallback(IAGnssCallback callback);
|
||||
|
||||
/*
|
||||
* Notifies that the AGNSS data connection has been closed.
|
||||
*
|
||||
* @return success True if the operation is successful.
|
||||
*/
|
||||
dataConnClosed() generates (bool success);
|
||||
|
||||
/*
|
||||
* Notifies that a data connection is not available for AGNSS.
|
||||
*
|
||||
* @return success True if the operation is successful.
|
||||
*/
|
||||
dataConnFailed() generates (bool success);
|
||||
|
||||
/*
|
||||
* Sets the hostname and port for the AGNSS server.
|
||||
*
|
||||
* @param type Specifies if SUPL or C2K.
|
||||
* @param hostname Hostname of the AGNSS server.
|
||||
* @param port Port number associated with the server.
|
||||
*
|
||||
* @return success True if the operation is successful.
|
||||
*/
|
||||
setServer(AGnssType type, string hostname, int32_t port)
|
||||
generates (bool success);
|
||||
|
||||
/*
|
||||
* Notifies that a data connection is available and sets the name of the
|
||||
* APN, and its IP type, to be used for SUPL connections.
|
||||
*
|
||||
* @param apn Access Point Name(follows regular APN naming convention).
|
||||
* @param apnIpType Specifies if SUPL or C2K.
|
||||
*
|
||||
* @return success True if the operation is successful.
|
||||
*/
|
||||
dataConnOpenWithApnIpType(string apn, ApnIpType apnIpType)
|
||||
generates (bool success);
|
||||
};
|
78
gnss/1.0/IAGnssCallback.hal
Normal file
78
gnss/1.0/IAGnssCallback.hal
Normal file
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.gnss@1.0;
|
||||
|
||||
/** Callback structure for the AGNSS interface. */
|
||||
interface IAGnssCallback {
|
||||
/** AGNSS type **/
|
||||
enum AGnssType : uint16_t {
|
||||
TYPE_SUPL = 1,
|
||||
TYPE_C2K = 2
|
||||
};
|
||||
|
||||
enum AGnssStatusValue : uint16_t {
|
||||
/** GNSS requests data connection for AGNSS. */
|
||||
REQUEST_AGNSS_DATA_CONN = 1,
|
||||
/** GNSS releases the AGNSS data connection. */
|
||||
RELEASE_AGNSS_DATA_CONN = 2,
|
||||
/** AGNSS data connection initiated */
|
||||
AGNSS_DATA_CONNECTED = 3,
|
||||
/** AGNSS data connection completed */
|
||||
AGNSS_DATA_CONN_DONE = 4,
|
||||
/** AGNSS data connection failed */
|
||||
AGNSS_DATA_CONN_FAILED = 5
|
||||
};
|
||||
|
||||
/*
|
||||
* Represents the status of AGNSS augmented to support IPv4.
|
||||
*/
|
||||
struct AGnssStatusIpV4 {
|
||||
AGnssType type;
|
||||
AGnssStatusValue status;
|
||||
/*
|
||||
* 32-bit IPv4 address.
|
||||
*/
|
||||
uint32_t ipV4Addr;
|
||||
};
|
||||
|
||||
/*
|
||||
* Represents the status of AGNSS augmented to support IPv6.
|
||||
*/
|
||||
struct AGnssStatusIpV6 {
|
||||
AGnssType type;
|
||||
AGnssStatusValue status;
|
||||
/*
|
||||
* 128-bit IPv6 address.
|
||||
*/
|
||||
uint8_t[16] ipV6Addr;
|
||||
};
|
||||
|
||||
/*
|
||||
* Callback with AGNSS(IpV4) status information.
|
||||
*
|
||||
* @param status Will be of type AGnssStatusIpV4.
|
||||
*/
|
||||
agnssStatusIpV4Cb(AGnssStatusIpV4 status);
|
||||
|
||||
/*
|
||||
* Callback with AGNSS(IpV6) status information.
|
||||
*
|
||||
* @param status Will be of type AGnssStatusIpV6.
|
||||
*/
|
||||
agnssStatusIpV6Cb(AGnssStatusIpV6 status);
|
||||
|
||||
};
|
151
gnss/1.0/IAGnssRil.hal
Normal file
151
gnss/1.0/IAGnssRil.hal
Normal file
|
@ -0,0 +1,151 @@
|
|||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.gnss@1.0;
|
||||
|
||||
import IAGnssRilCallback;
|
||||
|
||||
/*
|
||||
* Extended interface for AGNSS RIL support. An Assisted GNSS Radio Interface
|
||||
* Layer interface allows the GNSS chipset to request radio interface layer
|
||||
* information from Android platform. Examples of such information are reference
|
||||
* location, unique subscriber ID, phone number string and network availability changes.
|
||||
*/
|
||||
interface IAGnssRil {
|
||||
enum SetIDType : uint16_t {
|
||||
NONE = 0,
|
||||
IMSI = 1,
|
||||
MSISDM = 2
|
||||
};
|
||||
|
||||
enum NetworkType : int32_t {
|
||||
MOBILE = 0,
|
||||
WIFI = 1,
|
||||
MMS = 2,
|
||||
SUPL = 3,
|
||||
DUN = 4,
|
||||
HIPRI = 5,
|
||||
WIMAX = 6,
|
||||
};
|
||||
|
||||
enum AGnssRefLocationType {
|
||||
GSM_CELLID = 1,
|
||||
UMTS_CELLID = 2,
|
||||
MAC = 3,
|
||||
LTE_CELLID = 4,
|
||||
};
|
||||
|
||||
/* CellID for 2G, 3G and LTE, used in AGNSS. */
|
||||
struct AGnssRefLocationCellID {
|
||||
AGnssRefLocationType type;
|
||||
|
||||
/* Mobile Country Code. */
|
||||
uint16_t mcc;
|
||||
|
||||
/* Mobile Network Code .*/
|
||||
uint16_t mnc;
|
||||
|
||||
/*
|
||||
* Location Area Code in 2G, 3G and LTE. In 3G lac is discarded. In LTE,
|
||||
* lac is populated with tac, to ensure that we don't break old clients that
|
||||
* might rely in the old (wrong) behavior.
|
||||
*/
|
||||
uint16_t lac;
|
||||
|
||||
/* Cell id in 2G. Utran Cell id in 3G. Cell Global Id EUTRA in LTE. */
|
||||
uint32_t cid;
|
||||
|
||||
/* Tracking Area Code in LTE. */
|
||||
uint16_t tac;
|
||||
|
||||
/* Physical Cell id in LTE (not used in 2G and 3G) */
|
||||
uint16_t pcid;
|
||||
};
|
||||
|
||||
struct AGnssRefLocationMac {
|
||||
uint8_t[6] mac;
|
||||
};
|
||||
|
||||
/* Represents ref locations */
|
||||
struct AGnssRefLocation {
|
||||
AGnssRefLocationType type;
|
||||
|
||||
union RefLoc {
|
||||
AGnssRefLocationCellID cellID;
|
||||
AGnssRefLocationMac mac;
|
||||
};
|
||||
|
||||
RefLoc refLocVal;
|
||||
};
|
||||
|
||||
/*
|
||||
* Opens the AGNSS interface and provides the callback routines
|
||||
* to the implementation of this interface.
|
||||
*
|
||||
* @param callback Interface for AGnssRil callbacks.
|
||||
*/
|
||||
setCallback(IAGnssRilCallback callback);
|
||||
|
||||
/*
|
||||
* Sets the reference location.
|
||||
*
|
||||
* @param agnssReflocation AGNSS reference location CellID/MAC.
|
||||
*/
|
||||
setRefLocation(AGnssRefLocation agnssReflocation);
|
||||
|
||||
/*
|
||||
* Sets the SET ID.
|
||||
*
|
||||
* @param type Must be populated with either IMSI or MSISDN or NONE.
|
||||
* @param setid If type is IMSI then setid is populated with
|
||||
* a string representing the unique Subscriber ID, for example, the IMSI for
|
||||
* a GMS phone. If type is MSISDN, then setid must contain
|
||||
* the phone number string for line 1. For example, the MSISDN for a GSM phone.
|
||||
* If the type is NONE, then the string must be empty.
|
||||
*
|
||||
* @return success True if all parameters were valid and operation was
|
||||
* successful.
|
||||
*/
|
||||
setSetId(SetIDType type, string setid) generates (bool success);
|
||||
|
||||
/*
|
||||
* Notify GNSS of network status changes.
|
||||
*
|
||||
* @param connected Indicates whether network connectivity exists and
|
||||
* it is possible to establish connections and pass data.
|
||||
* @param type Indicates the kind of network, for eg. mobile, wifi etc.
|
||||
* @param roaming Indicates whether the device is currently roaming on
|
||||
* this network.
|
||||
*
|
||||
* @return success True is all parameters were valid and operation was
|
||||
* successful.
|
||||
*/
|
||||
updateNetworkState(bool connected, NetworkType type, bool roaming)
|
||||
generates (bool success);
|
||||
|
||||
/*
|
||||
* Notify GNSS of network status changes.
|
||||
*
|
||||
* @param available Indicates whether network connectivity is available.
|
||||
* @param apn String containing the Access Point Name.
|
||||
*
|
||||
* @return success True if all parameters were valid and the operation was
|
||||
* successful.
|
||||
* TODO(b/32022567): Add VTS test to validate the format of APN.
|
||||
*/
|
||||
updateNetworkAvailability(bool available, string apn) generates (bool success);
|
||||
|
||||
};
|
51
gnss/1.0/IAGnssRilCallback.hal
Normal file
51
gnss/1.0/IAGnssRilCallback.hal
Normal file
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.gnss@1.0;
|
||||
|
||||
/*
|
||||
* Callback for IAGnssRil interface. Used to request SET ID and
|
||||
* Reference Location.
|
||||
*/
|
||||
interface IAGnssRilCallback {
|
||||
/* Kinds of SET ID that can be requested */
|
||||
enum ID : uint32_t {
|
||||
IMSI = 1 << 0L,
|
||||
MSISDN = 1 << 1L,
|
||||
};
|
||||
|
||||
/* Kinds of reference location that can be requested. */
|
||||
enum RefLoc : uint32_t {
|
||||
CELLID = 1 << 0L,
|
||||
MAC = 1 << 1L
|
||||
};
|
||||
|
||||
/*
|
||||
* The Hal uses this API to request a SET ID.
|
||||
*
|
||||
* @param setIdflag Specifies the kind of SET ID that is required by the HAL.
|
||||
*/
|
||||
requestSetIdCb(ID setIdflag);
|
||||
|
||||
/*
|
||||
* The Hal uses this API to request a reference location.
|
||||
*
|
||||
* @param refLocflag Specifies the kind of reference location that is required
|
||||
* by the HAL.
|
||||
*/
|
||||
requestRefLocCb(RefLoc refLocflag);
|
||||
|
||||
};
|
203
gnss/1.0/IGnss.hal
Normal file
203
gnss/1.0/IGnss.hal
Normal file
|
@ -0,0 +1,203 @@
|
|||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.gnss@1.0;
|
||||
|
||||
import IAGnss;
|
||||
import IAGnssRil;
|
||||
import IGnssMeasurement;
|
||||
import IGnssNavigationMessage;
|
||||
import IGnssCallback;
|
||||
import IGnssGeofencing;
|
||||
import IGnssNi;
|
||||
import IGnssXtra;
|
||||
|
||||
/* Represents the standard GNSS interface. */
|
||||
interface IGnss {
|
||||
/* Requested operational mode for GNSS operation. */
|
||||
enum GnssPositionMode : uint32_t {
|
||||
/** Mode for running GNSS standalone (no assistance). */
|
||||
STANDALONE = 0,
|
||||
/** AGNSS MS-Based mode. */
|
||||
MS_BASED = 1,
|
||||
/*
|
||||
* AGNSS MS-Assisted mode. This mode is not maintained by the platform anymore.
|
||||
* It is strongly recommended to use MS_BASED instead.
|
||||
*/
|
||||
MS_ASSISTED = 2,
|
||||
};
|
||||
|
||||
/* Requested recurrence mode for GNSS operation. */
|
||||
enum GnssPositionRecurrence : uint32_t {
|
||||
/** Receive GNSS fixes on a recurring basis at a specified period. */
|
||||
RECURRENCE_PERIODIC = 0,
|
||||
/** Request a single shot GNSS fix. */
|
||||
RECURRENCE_SINGLE = 1
|
||||
};
|
||||
|
||||
/*
|
||||
* Flags used to specify which aiding data to delete when calling
|
||||
* deleteAidingData().
|
||||
*/
|
||||
enum GnssAidingData : uint16_t {
|
||||
DELETE_EPHEMERIS = 0x0001,
|
||||
DELETE_ALMANAC = 0x0002,
|
||||
DELETE_POSITION = 0x0004,
|
||||
DELETE_TIME = 0x0008,
|
||||
DELETE_IONO = 0x0010,
|
||||
DELETE_UTC = 0x0020,
|
||||
DELETE_HEALTH = 0x0040,
|
||||
DELETE_SVDIR = 0x0080,
|
||||
DELETE_SVSTEER = 0x0100,
|
||||
DELETE_SADATA = 0x0200,
|
||||
DELETE_RTI = 0x0400,
|
||||
DELETE_CELLDB_INFO = 0x8000,
|
||||
DELETE_ALL = 0xFFFF
|
||||
};
|
||||
|
||||
/*
|
||||
* Opens the interface and provides the callback routines
|
||||
* to the implementation of this interface.
|
||||
*
|
||||
* @param callback Callback interface for IGnss.
|
||||
*
|
||||
* @return success Returns true on success.
|
||||
*/
|
||||
setCallback(IGnssCallback callback) generates (bool success);
|
||||
|
||||
/*
|
||||
* Starts navigating.
|
||||
*
|
||||
* @return success Returns true on success.
|
||||
*/
|
||||
start() generates (bool success);
|
||||
|
||||
/*
|
||||
* Stops navigating.
|
||||
*
|
||||
* @return success Returns true on success.
|
||||
*/
|
||||
stop() generates (bool success);
|
||||
|
||||
/*
|
||||
* Closes the interface.
|
||||
*/
|
||||
cleanup();
|
||||
|
||||
/*
|
||||
* Injects the current time.
|
||||
*
|
||||
* @param timeMs This is the UTC time received from the NTP server, its value
|
||||
* is given in milliseconds since January 1, 1970.
|
||||
* @param timeReferenceMs The corresponding value of
|
||||
* SystemClock.elapsedRealtime() from the device when the NTP response was
|
||||
* received in milliseconds.
|
||||
* @param uncertaintyMs Uncertainty associated with the value represented by
|
||||
* time. Represented in milliseconds.
|
||||
*
|
||||
* @return success Returns true if the operation is successful.
|
||||
*
|
||||
injectTime(GnssUtcTime timeMs, int64_t timeReferenceMs, int32_t uncertaintyMs)
|
||||
generates (bool success);
|
||||
|
||||
/*
|
||||
* Injects current location from another location provider (typically cell
|
||||
* ID).
|
||||
*
|
||||
* @param latitudeDegrees Measured in Degrees.
|
||||
* @param longitudeDegrees Measured in Degrees.
|
||||
* @param accuracyMeters Measured in meters.
|
||||
*
|
||||
* @return success Returns true if successful.
|
||||
*/
|
||||
injectLocation(double latitudeDegrees, double longitudeDegrees, float accuracyMeters)
|
||||
generates (bool success);
|
||||
|
||||
/*
|
||||
* Specifies that the next call to start will not use the
|
||||
* information defined in the flags. GnssAidingData value of DELETE_ALL is
|
||||
* passed for a cold start.
|
||||
*
|
||||
* @param aidingDataFlags Flags specifying the aiding data to be deleted.
|
||||
*/
|
||||
deleteAidingData(GnssAidingData aidingDataFlags);
|
||||
|
||||
/*
|
||||
* @param mode Parameter must be one of MS_BASED or STANDALONE.
|
||||
* It is allowed by the platform (and it is recommended) to fallback to
|
||||
* MS_BASED if MS_ASSISTED is passed in, and MS_BASED is supported.
|
||||
* @recurrence GNSS postion recurrence value, either periodic or single.
|
||||
* @param minIntervalMs Represents the time between fixes in milliseconds.
|
||||
* @param preferredAccuracyMeters Represents the requested fix accuracy in meters.
|
||||
* @param preferredTimeMs Represents the requested time to first fix in milliseconds.
|
||||
|
||||
* @return success Returns true if successful.
|
||||
*/
|
||||
setPositionMode(GnssPositionMode mode, GnssPositionRecurrence recurrence,
|
||||
uint32_t minIntervalMs, uint32_t preferredAccuracyMeters,
|
||||
uint32_t preferredTimeMs)
|
||||
generates (bool success);
|
||||
|
||||
/*
|
||||
* This method returns the IAGnssRil Interface.
|
||||
*
|
||||
* @return infc Handle to the IAGnssRil interface.
|
||||
*/
|
||||
getExtensionAGnssRil() generates (IAGnssRil infc);
|
||||
|
||||
/*
|
||||
* This method returns the IGnssGeofencing Interface.
|
||||
*
|
||||
* @return infc Handle to the IGnssGeofencing interface.
|
||||
*/
|
||||
getExtensionGnssGeofencing() generates(IGnssGeofencing infc);
|
||||
|
||||
/*
|
||||
* This method returns the IAGnss Interface.
|
||||
*
|
||||
* @return infc Handle to the IAGnss interface.
|
||||
*/
|
||||
getExtensionAGnss() generates (IAGnss infc);
|
||||
|
||||
/*
|
||||
* This method returns the IGnssNi interface.
|
||||
*
|
||||
* @return infc Handle to the IGnssNi interface.
|
||||
*/
|
||||
getExtensionGnssNi() generates (IGnssNi infc);
|
||||
|
||||
/*
|
||||
* This method returns the IGnssMeasurement interface.
|
||||
*
|
||||
* @return infc Handle to the IGnssMeasurement interface.
|
||||
*/
|
||||
getExtensionGnssMeasurement() generates (IGnssMeasurement infc);
|
||||
|
||||
/*
|
||||
* This method returns the IGnssNavigationMessage interface.
|
||||
*
|
||||
* @return infc Handle to the IGnssNavigationMessage interface.
|
||||
*/
|
||||
getExtensionGnssNavigationMessage() generates (IGnssNavigationMessage infc);
|
||||
|
||||
/*
|
||||
* This method returns the IGnssXtra interface.
|
||||
*
|
||||
* @return infc Handle to the IGnssXtra interface.
|
||||
*/
|
||||
getExtensionXtra() generates (IGnssXtra infc);
|
||||
|
||||
};
|
222
gnss/1.0/IGnssCallback.hal
Normal file
222
gnss/1.0/IGnssCallback.hal
Normal file
|
@ -0,0 +1,222 @@
|
|||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.gnss@1.0;
|
||||
|
||||
/*
|
||||
* The interface is required for the HAL to communicate certain information
|
||||
* like status and location info back to the platform, the platform implements
|
||||
* the interfaces and passes a handle to the HAL.
|
||||
*/
|
||||
interface IGnssCallback {
|
||||
/* Flags for the gnssSetCapabilities callback. */
|
||||
enum Capabilities : uint32_t {
|
||||
/*
|
||||
* GNSS HAL schedules fixes for RECURRENCE_PERIODIC mode.
|
||||
* If this is not set, then the framework will use 1000ms for
|
||||
* minInterval and will call start() and stop() to schedule the GNSS.
|
||||
*/
|
||||
SCHEDULING = 1 << 0,
|
||||
/** GNSS supports MS-Based AGNSS mode */
|
||||
MSB = 1 << 1,
|
||||
/** GNSS supports MS-Assisted AGNSS mode */
|
||||
MSA = 1 << 2,
|
||||
/** GNSS supports single-shot fixes */
|
||||
SINGLE_SHOT = 1 << 3,
|
||||
/** GNSS supports on demand time injection */
|
||||
ON_DEMAND_TIME = 1 << 4,
|
||||
/** GNSS supports Geofencing */
|
||||
GEOFENCING = 1 << 5,
|
||||
/** GNSS supports Measurements. */
|
||||
MEASUREMENTS = 1 << 6,
|
||||
/** GNSS supports Navigation Messages */
|
||||
NAV_MESSAGES = 1 << 7,
|
||||
};
|
||||
|
||||
/* GNSS status event values. */
|
||||
enum GnssStatusValue : uint16_t {
|
||||
/** GNSS status unknown. */
|
||||
STATUS_NONE = 0,
|
||||
/** GNSS has begun navigating. */
|
||||
SESSION_BEGIN = 1,
|
||||
/** GNSS has stopped navigating. */
|
||||
SESSION_END = 2,
|
||||
/** GNSS has powered on but is not navigating. */
|
||||
ENGINE_ON = 3,
|
||||
/** GNSS is powered off. */
|
||||
ENGINE_OFF = 4
|
||||
};
|
||||
|
||||
/*
|
||||
* Flags that indicate information about the satellite
|
||||
*/
|
||||
enum GnssSvFlags : uint8_t {
|
||||
FLAGS_NONE = 0,
|
||||
HAS_EPHEMERIS_DATA = 1 << 0,
|
||||
HAS_ALMANAC_DATA = 1 << 1,
|
||||
USED_IN_FIX = 1 << 2
|
||||
};
|
||||
|
||||
struct GnssSvInfo {
|
||||
/*
|
||||
* Pseudo-random number for the SV, or FCN/OSN number for Glonass. The
|
||||
* distinction is made by looking at constellation field. Values must be
|
||||
* in the range of:
|
||||
*
|
||||
* - GNSS: 1-32
|
||||
* - SBAS: 120-151, 183-192
|
||||
* - GLONASS: 1-24, the orbital slot number (OSN), if known. Or, if not:
|
||||
* 93-106, the frequency channel number (FCN) (-7 to +6) offset by
|
||||
* + 100
|
||||
* i.e. report an FCN of -7 as 93, FCN of 0 as 100, and FCN of +6
|
||||
* as 106.
|
||||
* - QZSS: 193-200
|
||||
* - Galileo: 1-36
|
||||
* - Beidou: 1-37
|
||||
*/
|
||||
int16_t svid;
|
||||
|
||||
/*
|
||||
* Defines the constellation of the given SV.
|
||||
*/
|
||||
GnssConstellationType constellation;
|
||||
|
||||
/*
|
||||
* Carrier-to-noise density in dB-Hz, typically in the range [0, 63].
|
||||
* It contains the measured C/N0 value for the signal at the antenna port.
|
||||
*
|
||||
* This is a mandatory value.
|
||||
*/
|
||||
float cN0Dbhz;
|
||||
|
||||
/** Elevation of SV in degrees. */
|
||||
float elevationDegrees;
|
||||
|
||||
/** Azimuth of SV in degrees. */
|
||||
float azimuthDegrees;
|
||||
|
||||
/*
|
||||
* Contains additional data about the given SV.
|
||||
*/
|
||||
GnssSvFlags svFlag;
|
||||
};
|
||||
|
||||
/*
|
||||
* Represents SV status.
|
||||
*/
|
||||
struct GnssSvStatus {
|
||||
/*
|
||||
* Number of GNSS SVs currently visible, refers to the SVs stored in sv_list
|
||||
*/
|
||||
int32_t numSvs;
|
||||
|
||||
/*
|
||||
* Pointer to an array of SVs information for all GNSS constellations,
|
||||
* except GNSS, which is reported using svList
|
||||
*/
|
||||
GnssSvInfo[ConstS32:GNSS_MAX_SVS] gnssSvList;
|
||||
|
||||
};
|
||||
|
||||
/*
|
||||
* Called when a GNSS location is available.
|
||||
*
|
||||
* @param location Location information from HAL.
|
||||
*/
|
||||
gnssLocationCb(GnssLocation location);
|
||||
|
||||
/*
|
||||
* Called to communicate the status of the GNSS engine.
|
||||
*
|
||||
* @param status Status information from HAL.
|
||||
*/
|
||||
gnssStatusCb(GnssStatusValue status);
|
||||
|
||||
/*
|
||||
* @param svInfo SV status information from HAL.
|
||||
*/
|
||||
gnssSvStatusCb(GnssSvStatus svInfo);
|
||||
|
||||
/*
|
||||
* Called when NMEA data is available.
|
||||
* Callback for reporting NMEA sentences.
|
||||
*
|
||||
* @param timestamp Marks the instance of reporting.
|
||||
* @param nmea Follows standard NMEA 0183. Each sentence begins with a '$'
|
||||
* and ends with a carriage return/line feed sequence and can be no longer
|
||||
* than 80 characters of visible text (plus the line terminators). The data
|
||||
* is contained within this single line with data items separated by commas.
|
||||
* The data itself is just ascii text and may extend over multiple sentences
|
||||
* in certain specialized instances but is normally fully contained in one
|
||||
* variable length sentence. The data may vary in the amount of precision
|
||||
* contained in the message. For example time might be indicated to decimal
|
||||
* parts of a second or location may be shown with 3 or even 4 digits after
|
||||
* the decimal point. Programs that read the data must only use the commas
|
||||
* to determine the field boundaries and not depend on column positions.
|
||||
* There is a provision for a checksum at the end of each sentence which may
|
||||
* or may not be checked by the unit that reads the data. The checksum field
|
||||
* consists of a '*' and two hex digits representing an 8 bit exclusive OR
|
||||
* of all characters between, but not including, the '$' and '*'.
|
||||
*/
|
||||
gnssNmeaCb(GnssUtcTime timestamp, string nmea);
|
||||
|
||||
/*
|
||||
* Callback to inform framework of the GNSS engine's capabilities.
|
||||
*
|
||||
* @param capabilities Capability parameter is a bit field of
|
||||
* the Capabilities enum.
|
||||
*/
|
||||
gnssSetCapabilitesCb(uint32_t capabilities);
|
||||
|
||||
/*
|
||||
* Callback utility for acquiring the GNSS wakelock. This can be used to prevent
|
||||
* the CPU from suspending while handling GNSS events.
|
||||
*/
|
||||
gnssAcquireWakelockCb();
|
||||
|
||||
/** Callback utility for releasing the GNSS wakelock. */
|
||||
gnssReleaseWakelockCb();
|
||||
|
||||
/** Callback for requesting NTP time */
|
||||
gnssRequestTimeCb();
|
||||
|
||||
/*
|
||||
* Provides information about how new the underlying GPS/GNSS hardware and
|
||||
* software is.
|
||||
*
|
||||
* This information will be available for Android Test Applications. If a GNSS
|
||||
* HAL does not provide this information, it will be considered "2015 or
|
||||
* earlier".
|
||||
*
|
||||
* If a GNSS HAL does provide this information, then newer years will need to
|
||||
* meet newer CTS standards. E.g. if the date are 2016 or above, then N+ level
|
||||
* GnssMeasurement support will be verified.
|
||||
*/
|
||||
struct GnssSystemInfo{
|
||||
/*
|
||||
* year in which the last update was made to the underlying hardware/firmware
|
||||
* used to capture GNSS signals, e.g. 2016
|
||||
*/
|
||||
uint16_t yearOfHw;
|
||||
};
|
||||
|
||||
/*
|
||||
* Callback to inform framework of the engine's hardware version information.
|
||||
*
|
||||
* @param info GnssSystemInfo about the GPS/GNSS hardware.
|
||||
*/
|
||||
gnssSetSystemInfoCb(GnssSystemInfo info);
|
||||
};
|
188
gnss/1.0/IGnssGeofenceCallback.hal
Normal file
188
gnss/1.0/IGnssGeofenceCallback.hal
Normal file
|
@ -0,0 +1,188 @@
|
|||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.gnss@1.0;
|
||||
|
||||
/*
|
||||
* GNSS Geofence.
|
||||
* There are 3 states associated with a Geofence: Inside, Outside, Unknown.
|
||||
* There are 3 transitions: ENTERED, EXITED, UNCERTAIN.
|
||||
*
|
||||
* An example state diagram with confidence level: 95% and Unknown time limit
|
||||
* set as 30 secs is shown below. (confidence level and Unknown time limit are
|
||||
* explained latter).
|
||||
* ____________________________
|
||||
* | Unknown (30 secs) |
|
||||
* """"""""""""""""""""""""""""
|
||||
* ^ | | ^
|
||||
* UNCERTAIN| |ENTERED EXITED| |UNCERTAIN
|
||||
* | v v |
|
||||
* ________ EXITED _________
|
||||
* | Inside | -----------> | Outside |
|
||||
* | | <----------- | |
|
||||
* """""""" ENTERED """""""""
|
||||
*
|
||||
* Inside state: We are 95% confident that the user is inside the geofence.
|
||||
* Outside state: We are 95% confident that the user is outside the geofence
|
||||
* Unknown state: Rest of the time.
|
||||
*
|
||||
* The Unknown state is better explained with an example:
|
||||
*
|
||||
* __________
|
||||
* | c|
|
||||
* | ___ | _______
|
||||
* | |a| | | b |
|
||||
* | """ | """""""
|
||||
* | |
|
||||
* """"""""""
|
||||
* In the diagram above, "a" and "b" are 2 geofences and "c" is the accuracy
|
||||
* circle reported by the GNSS subsystem. Now with regard to "b", the system is
|
||||
* confident that the user is outside. But with regard to "a" is not confident
|
||||
* whether it is inside or outside the geofence. If the accuracy remains the
|
||||
* same for a sufficient period of time, the UNCERTAIN transition must be
|
||||
* triggered with the state set to Unknown. If the accuracy improves later, an
|
||||
* appropriate transition must be triggered. This "sufficient period of time"
|
||||
* is defined by the parameter in the addGeofenceArea API.
|
||||
* In other words, Unknown state can be interpreted as a state in which the
|
||||
* GNSS subsystem isn't confident enough that the user is either inside or
|
||||
* outside the Geofence. It moves to Unknown state only after the expiry of the
|
||||
* timeout.
|
||||
*
|
||||
* The geofence callback needs to be triggered for the ENTERED and EXITED
|
||||
* transitions, when the GNSS system is confident that the user has entered
|
||||
* (Inside state) or exited (Outside state) the Geofence. An implementation
|
||||
* which uses a value of 95% as the confidence is recommended. The callback
|
||||
* must be triggered only for the transitions requested by the
|
||||
* addGeofenceArea method.
|
||||
*
|
||||
* Even though the diagram and explanation talks about states and transitions,
|
||||
* the callee is only interested in the transistions. The states are mentioned
|
||||
* here for illustrative purposes.
|
||||
*
|
||||
* Startup Scenario: When the device boots up, if an application adds geofences,
|
||||
* and then we get an accurate GNSS location fix, it needs to trigger the
|
||||
* appropriate (ENTERED or EXITED) transition for every Geofence it knows about.
|
||||
* By default, all the Geofences will be in the Unknown state.
|
||||
*
|
||||
* When the GNSS system is unavailable, gnssGeofenceStatusCb must be
|
||||
* called to inform the upper layers of the same. Similarly, when it becomes
|
||||
* available the callback must be called. This is a global state while the
|
||||
* UNKNOWN transition described above is per geofence.
|
||||
*
|
||||
* An important aspect to note is that users of this API (framework), will use
|
||||
* other subsystems like wifi, sensors, cell to handle Unknown case and
|
||||
* hopefully provide a definitive state transition to the third party
|
||||
* application. GNSS Geofence will just be a signal indicating what the GNSS
|
||||
* subsystem knows about the Geofence.
|
||||
*
|
||||
*/
|
||||
|
||||
interface IGnssGeofenceCallback {
|
||||
enum GeofenceTransition : int32_t {
|
||||
ENTERED = (1 << 0L),
|
||||
EXITED = (1 << 1L),
|
||||
UNCERTAIN = (1 << 2L),
|
||||
};
|
||||
|
||||
enum GeofenceAvailability : int32_t {
|
||||
UNAVAILABLE = (1 << 0L),
|
||||
AVAILABLE = (1 << 1L),
|
||||
};
|
||||
|
||||
enum GeofenceStatus : int32_t {
|
||||
OPERATION_SUCCESS = 0,
|
||||
ERROR_TOO_MANY_GEOFENCES = -100,
|
||||
ERROR_ID_EXISTS = -101,
|
||||
ERROR_ID_UNKNOWN = -102,
|
||||
ERROR_INVALID_TRANSITION = -103,
|
||||
ERROR_GENERIC = -149
|
||||
};
|
||||
|
||||
/*
|
||||
* The callback associated with the geofence transition.
|
||||
* The callback must only be called when the caller is interested in that
|
||||
* particular transition. For instance, if the caller is interested only in
|
||||
* ENTERED transition, then the callback must not be called with the EXITED
|
||||
* transition.
|
||||
*
|
||||
* IMPORTANT: If a transition is triggered resulting in this callback, the
|
||||
* GNSS subsystem will wake up the application processor, if its in suspend
|
||||
* state.
|
||||
*
|
||||
* @param geofenceId The id associated with the addGeofenceArea.
|
||||
* @param location The current GNSS location.
|
||||
* @param transition Can be one of ENTERED, EXITED or UNCERTAIN.
|
||||
* @param timestamp Timestamp when the transition was detected.
|
||||
*
|
||||
*/
|
||||
gnssGeofenceTransitionCb(int32_t geofenceId, GnssLocation location,
|
||||
GeofenceTransition transition, GnssUtcTime timestamp);
|
||||
|
||||
/*
|
||||
* The callback associated with the availability of the GNSS system for
|
||||
* geofencing monitoring. If the GNSS system determines that it cannot monitor
|
||||
* geofences because of lack of reliability or unavailability of the GNSS
|
||||
* signals, it will call this callback with UNAVAILABLE parameter.
|
||||
*
|
||||
* @param status - UNAVAILABLE or AVAILABLE.
|
||||
* @param lastLocation - Last known location.
|
||||
*/
|
||||
gnssGeofenceStatusCb(GeofenceAvailability status, GnssLocation lastLocation);
|
||||
|
||||
/*
|
||||
* The callback associated with the addGeofence call.
|
||||
*
|
||||
* @param geofenceId Id of the geofence.
|
||||
* @param status Will be OPERATION_SUCCESS if the geofence
|
||||
* add was successful. Will be ERROR_TOO_MANY_GEOFENCES if the
|
||||
* geofence limit has been reached.
|
||||
* Will be ERROR_ID_EXISTS if geofence with id already exists.
|
||||
* Will be ERROR_INVALID_TRANSITION if the monitorTransition contains an
|
||||
* invalid transition.
|
||||
* Will be ERROR_GENERIC for other errors.
|
||||
*/
|
||||
gnssGeofenceAddCb(int32_t geofenceId, GeofenceStatus status);
|
||||
|
||||
/*
|
||||
* The callback associated with the removeGeofence call.
|
||||
*
|
||||
* @param geofenceId Id of the geofence.
|
||||
* @param status Will return OPERATION_SUCCESS if successful.
|
||||
* Will be ERROR_ID_UNKNOWN for invalid id and
|
||||
* ERROR_GENERIC for others.
|
||||
*/
|
||||
gnssGeofenceRemoveCb(int32_t geofenceId, GeofenceStatus status);
|
||||
|
||||
/*
|
||||
* The callback associated with the pauseGeofence call.
|
||||
*
|
||||
* @param geofenceId Id of the geofence.
|
||||
* @param status Will be OPERATION_SUCCESS if success.
|
||||
* Will be ERROR_ID_UNKNOWN for invalid id. Will be
|
||||
* ERROR_INVALID_TRANSITION when monitorTransitions is invalid.
|
||||
* Will be ERROR_GENERIC for other err errors.
|
||||
*/
|
||||
gnssGeofencePauseCb(int32_t geofenceId, GeofenceStatus status);
|
||||
|
||||
/*
|
||||
* The callback associated with the resumeGeofence call.
|
||||
*
|
||||
* @param geofenceId - Id of the geofence.
|
||||
* @param status Will be OPERATION_SUCCESS if successful.
|
||||
* Will be ERROR_ID_UNKNOWN for invalid id and ERROR_GENERIC for others.
|
||||
*/
|
||||
gnssGeofenceResumeCb(int32_t geofenceId, GeofenceStatus status);
|
||||
};
|
86
gnss/1.0/IGnssGeofencing.hal
Normal file
86
gnss/1.0/IGnssGeofencing.hal
Normal file
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.gnss@1.0;
|
||||
|
||||
import IGnssGeofenceCallback;
|
||||
|
||||
/* Extended interface for GNSS Geofencing support */
|
||||
interface IGnssGeofencing {
|
||||
/*
|
||||
* Opens the geofence interface and provides the callback routines
|
||||
* to the HAL.
|
||||
*
|
||||
* @param callback Handle to the IGnssGeofenceCallback interface.
|
||||
*/
|
||||
setCallback(IGnssGeofenceCallback callback);
|
||||
|
||||
/*
|
||||
* Add a geofence area. This api currently supports circular geofences.
|
||||
*
|
||||
* @param geofenceId The id for the geofence. If a geofence with this id
|
||||
* already exists, an error value (ERROR_ID_EXISTS) must be returned.
|
||||
* @param latitudeDegrees The latitude(in degrees) for the geofence lastTransition.
|
||||
* @param longtitudeDegrees The longitude(in degrees) for the geofence lastTransition.
|
||||
* @param radiusMeters The radius(in meters) for the geofence lastTransition.
|
||||
* @param lastTransition The current state of the geofence. For example, if
|
||||
* the system already knows that the user is inside the geofence, this will
|
||||
* be set to ENTERED. In most cases, it will be UNCERTAIN.
|
||||
* @param monitorTransitions - Which transitions to monitor. Bitwise OR of
|
||||
* ENTERED, EXITED and UNCERTAIN.
|
||||
* @param notificationResponsivenessMs - Defines the best-effort description
|
||||
* of how soon must the callback be called when the transition associated
|
||||
* with the Geofence is triggered. For instance, if set to 1000 millseconds
|
||||
* with ENTERED, the callback must be called 1000 milliseconds within entering
|
||||
* the geofence. This parameter is defined in milliseconds.
|
||||
* NOTE: This is not to be confused with the rate that the GNSS is polled at.
|
||||
* It is acceptable to dynamically vary the rate of sampling the GNSS for
|
||||
* power-saving reasons; thus the rate of sampling may be faster or slower
|
||||
* than this.
|
||||
* @param unknownTimerMs - The time limit after which the UNCERTAIN transition
|
||||
* must be triggered. This parameter is defined in milliseconds.
|
||||
*/
|
||||
addGeofenceArea(int32_t geofenceId, double latitudeDegrees, double longitudeDegrees,
|
||||
double radiusMeters, GeofenceTransition lastTransition,
|
||||
int32_t monitorTransitions, uint32_t notificationResponsivenessMs,
|
||||
uint32_t unknownTimerMs);
|
||||
|
||||
/*
|
||||
* Pause monitoring a particular geofence.
|
||||
*
|
||||
* @param geofenceId The id for the geofence.
|
||||
*/
|
||||
pauseGeofence(int32_t geofenceId);
|
||||
|
||||
/*
|
||||
* Resume monitoring a particular geofence.
|
||||
*
|
||||
* @param geofenceId - The id for the geofence.
|
||||
* @param monitorTransitions Specifies which transitions to monitor.
|
||||
* It can be a bitwise OR of ENTERED, EXITED and
|
||||
* UNCERTAIN. This supersedes the value associated
|
||||
* provided in the addGeofenceArea call.
|
||||
*/
|
||||
resumeGeofence(int32_t geofenceId, int32_t monitorTransitions);
|
||||
|
||||
/*
|
||||
* Remove a geofence area. After the function returns, no notifications
|
||||
* must be sent.
|
||||
*
|
||||
* @param geofenceId The id of the geofence.
|
||||
*/
|
||||
removeGeofenceArea(int32_t geofenceId);
|
||||
};
|
57
gnss/1.0/IGnssMeasurement.hal
Normal file
57
gnss/1.0/IGnssMeasurement.hal
Normal file
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.gnss@1.0;
|
||||
|
||||
import IGnssMeasurementCallback;
|
||||
|
||||
/*
|
||||
* Extended interface for GNSS Measurements support.
|
||||
*/
|
||||
interface IGnssMeasurement {
|
||||
enum GnssMeasurementStatus : int32_t {
|
||||
SUCCESS = 0,
|
||||
ERROR_ALREADY_INIT = -100,
|
||||
ERROR_GENERIC = -101
|
||||
};
|
||||
|
||||
/*
|
||||
* Initializes the interface and registers the callback routines with the HAL.
|
||||
* After a successful call to 'setCallback' the HAL must begin to provide updates at
|
||||
* an average output rate of 1Hz (occasional
|
||||
* intra-measurement time offsets in the range from 0-2000msec can be
|
||||
* tolerated.)
|
||||
*
|
||||
* @param callback Handle to GnssMeasurement callback interface.
|
||||
*
|
||||
* @return initRet Returns SUCCESS if successful.
|
||||
* Returns ERROR_ALREADY_INIT if a callback has already been
|
||||
* registered without a corresponding call to 'close'.
|
||||
* Returns ERROR_GENERIC for any other error. The HAL must
|
||||
* not generate any other updates upon returning this error code.
|
||||
*/
|
||||
setCallback(IGnssMeasurementCallback callback) generates (int32_t initRet);
|
||||
|
||||
/*
|
||||
* Stops updates from the HAL, and unregisters the callback routines.
|
||||
* After a call to close(), the previously registered callbacks must be
|
||||
* considered invalid by the HAL.
|
||||
* If close() is invoked without a previous setCallback, this function must perform
|
||||
* no work.
|
||||
*/
|
||||
close();
|
||||
|
||||
};
|
554
gnss/1.0/IGnssMeasurementCallback.hal
Normal file
554
gnss/1.0/IGnssMeasurementCallback.hal
Normal file
|
@ -0,0 +1,554 @@
|
|||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.gnss@1.0;
|
||||
|
||||
/* The callback interface to report measurements from the HAL. */
|
||||
interface IGnssMeasurementCallback {
|
||||
/*
|
||||
* Flags to indicate what fields in GnssClock are valid.
|
||||
*/
|
||||
enum GnssClockFlags : uint16_t {
|
||||
/** A valid 'leap second' is stored in the data structure. */
|
||||
HAS_LEAP_SECOND = 1 << 0,
|
||||
/** A valid 'time uncertainty' is stored in the data structure. */
|
||||
HAS_TIME_UNCERTAINTY = 1 << 1,
|
||||
/** A valid 'full bias' is stored in the data structure. */
|
||||
HAS_FULL_BIAS = 1 << 2,
|
||||
/** A valid 'bias' is stored in the data structure. */
|
||||
HAS_BIAS = 1 << 3,
|
||||
/** A valid 'bias uncertainty' is stored in the data structure. */
|
||||
HAS_BIAS_UNCERTAINTY = 1 << 4,
|
||||
/** A valid 'drift' is stored in the data structure. */
|
||||
HAS_DRIFT = 1 << 5,
|
||||
/** A valid 'drift uncertainty' is stored in the data structure. */
|
||||
HAS_DRIFT_UNCERTAINTY = 1 << 6
|
||||
};
|
||||
|
||||
/*
|
||||
* Flags to indicate what fields in GnssMeasurement are valid.
|
||||
*/
|
||||
enum GnssMeasurementFlags : uint32_t {
|
||||
/** A valid 'snr' is stored in the data structure. */
|
||||
HAS_SNR = 1 << 0,
|
||||
/** A valid 'carrier frequency' is stored in the data structure. */
|
||||
HAS_CARRIER_FREQUENCY = 1 << 9,
|
||||
/** A valid 'carrier cycles' is stored in the data structure. */
|
||||
HAS_CARRIER_CYCLES = 1 << 10,
|
||||
/** A valid 'carrier phase' is stored in the data structure. */
|
||||
HAS_CARRIER_PHASE = 1 << 11,
|
||||
/** A valid 'carrier phase uncertainty' is stored in the data structure. */
|
||||
HAS_CARRIER_PHASE_UNCERTAINTY = 1 << 12
|
||||
};
|
||||
|
||||
/*
|
||||
* Enumeration of available values for the GNSS Measurement's multipath
|
||||
* indicator.
|
||||
*/
|
||||
enum GnssMultipathIndicator : uint8_t {
|
||||
/** The indicator is not available or unknown. */
|
||||
INDICATOR_UNKNOWN = 0,
|
||||
/** The measurement is indicated to be affected by multipath. */
|
||||
INDICATOR_PRESENT = 1,
|
||||
/** The measurement is indicated to be not affected by multipath. */
|
||||
INDICATIOR_NOT_PRESENT = 2
|
||||
};
|
||||
|
||||
/*
|
||||
* Flags indicating the GNSS measurement state.
|
||||
*
|
||||
* The expected behavior here is for GNSS HAL to set all the flags that applies.
|
||||
* For example, if the state for a satellite is only C/A code locked and bit
|
||||
* synchronized, and there is still millisecond ambiguity, the state must be
|
||||
* set as:
|
||||
*
|
||||
* STATE_CODE_LOCK | STATE_BIT_SYNC | STATE_MSEC_AMBIGUOUS
|
||||
*
|
||||
* If GNSS is still searching for a satellite, the corresponding state must be
|
||||
* set to STATE_UNKNOWN(0).
|
||||
*/
|
||||
enum GnssMeasurementState : uint32_t {
|
||||
STATE_UNKNOWN = 0,
|
||||
STATE_CODE_LOCK = 1 << 0,
|
||||
STATE_BIT_SYNC = 1 << 1,
|
||||
STATE_SUBFRAME_SYNC = 1 << 2,
|
||||
STATE_TOW_DECODED = 1 << 3,
|
||||
STATE_MSEC_AMBIGUOUS = 1 << 4,
|
||||
STATE_SYMBOL_SYNC = 1 << 5,
|
||||
STATE_GLO_STRING_SYNC = 1 << 6,
|
||||
STATE_GLO_TOD_DECODED = 1 << 7,
|
||||
STATE_BDS_D2_BIT_SYNC = 1 << 8,
|
||||
STATE_BDS_D2_SUBFRAME_SYNC = 1 << 9,
|
||||
STATE_GAL_E1BC_CODE_LOCK = 1 << 10,
|
||||
STATE_GAL_E1C_2ND_CODE_LOCK = 1 << 11,
|
||||
STATE_GAL_E1B_PAGE_SYNC = 1 << 12,
|
||||
STATE_SBAS_SYNC = 1 << 13
|
||||
};
|
||||
|
||||
/*
|
||||
* Flags indicating the Accumulated Delta Range's states.
|
||||
*/
|
||||
enum GnssAccumulatedDeltaRangeState : uint16_t {
|
||||
ADR_STATE_UNKNOWN = 0,
|
||||
ADR_STATE_VALID = 1 << 0,
|
||||
ADR_STATE_RESET = 1 << 1,
|
||||
ADR_STATE_CYCLE_SLIP = 1 << 2,
|
||||
};
|
||||
|
||||
/*
|
||||
* Represents an estimate of the GNSS clock time.
|
||||
*/
|
||||
struct GnssClock {
|
||||
/*
|
||||
* A set of flags indicating the validity of the fields in this data
|
||||
* structure.
|
||||
*/
|
||||
GnssClockFlags gnssClockFlags;
|
||||
|
||||
/*
|
||||
* Leap second data.
|
||||
* The sign of the value is defined by the following equation:
|
||||
* utcTimeNs = timeNs - (fullBiasNs + biasNs) - leapSecond *
|
||||
* 1,000,000,000
|
||||
*
|
||||
* If this data is available, gnssClockFlags must contain
|
||||
* HAS_LEAP_SECOND.
|
||||
*/
|
||||
int16_t leapSecond;
|
||||
|
||||
/*
|
||||
* The GNSS receiver internal clock value. This is the local hardware clock
|
||||
* value.
|
||||
*
|
||||
* For local hardware clock, this value is expected to be monotonically
|
||||
* increasing while the hardware clock remains powered on. (For the case of a
|
||||
* HW clock that is not continuously on, see the
|
||||
* hwClockDiscontinuityCount field). The receiver's estimate of GNSS time
|
||||
* can be derived by subtracting the sum of fullBiasNs and biasNs (when
|
||||
* available) from this value.
|
||||
*
|
||||
* This GNSS time must be the best estimate of current GNSS time
|
||||
* that GNSS receiver can achieve.
|
||||
*
|
||||
* Sub-nanosecond accuracy can be provided by means of the 'biasNs' field.
|
||||
* The value contains the timeUncertaintyNs in it.
|
||||
*
|
||||
* This field is mandatory.
|
||||
*/
|
||||
int64_t timeNs;
|
||||
|
||||
/*
|
||||
* 1-Sigma uncertainty associated with the clock's time in nanoseconds.
|
||||
* The uncertainty is represented as an absolute (single sided) value.
|
||||
*
|
||||
* If the data is available, gnssClockFlags must contain
|
||||
* HAS_TIME_UNCERTAINTY. Ths value is ideally zero, as the time
|
||||
* 'latched' by timeNs is defined as the reference clock vs. which all
|
||||
* other times (and corresponding uncertainties) are measured.
|
||||
*/
|
||||
double timeUncertaintyNs;
|
||||
|
||||
/*
|
||||
* The difference between hardware clock ('time' field) inside GNSS receiver
|
||||
* and the true GNSS time since 0000Z, January 6, 1980, in nanoseconds.
|
||||
*
|
||||
* The sign of the value is defined by the following equation:
|
||||
* local estimate of GNSS time = timeNs - (fullBiasNs + biasNs)
|
||||
*
|
||||
* This value is mandatory if the receiver has estimated GNSS time. If the
|
||||
* computed time is for a non-GNSS constellation, the time offset of that
|
||||
* constellation to GNSS has to be applied to fill this value. The error
|
||||
* estimate for the sum of this and the biasNs is the biasUncertaintyNs,
|
||||
* and the caller is responsible for using this uncertainty (it can be very
|
||||
* large before the GNSS time has been solved for.) If the data is available
|
||||
* gnssClockFlags must contain HAS_FULL_BIAS.
|
||||
*/
|
||||
int64_t fullBiasNs;
|
||||
|
||||
/*
|
||||
* Sub-nanosecond bias.
|
||||
* The error estimate for the sum of this and the fullBiasNs is the
|
||||
* biasUncertaintyNs.
|
||||
*
|
||||
* If the data is available gnssClockFlags must contain HAS_BIAS. If GNSS
|
||||
* has computed a position fix. This value is mandatory if the receiver has
|
||||
* estimated GNSS time.
|
||||
*/
|
||||
double biasNs;
|
||||
|
||||
/*
|
||||
* 1-Sigma uncertainty associated with the local estimate of GNSS time (clock
|
||||
* bias) in nanoseconds. The uncertainty is represented as an absolute
|
||||
* (single sided) value.
|
||||
*
|
||||
* If the data is available gnssClockFlags must contain
|
||||
* HAS_BIAS_UNCERTAINTY. This value is mandatory if the receiver
|
||||
* has estimated GNSS time.
|
||||
*/
|
||||
double biasUncertaintyNs;
|
||||
|
||||
/*
|
||||
* The clock's drift in nanoseconds (per second).
|
||||
*
|
||||
* A positive value means that the frequency is higher than the nominal
|
||||
* frequency, and that the (fullBiasNs + biasNs) is growing more positive
|
||||
* over time.
|
||||
*
|
||||
* The value contains the 'drift uncertainty' in it.
|
||||
* If the data is available gnssClockFlags must contain HAS_DRIFT.
|
||||
*
|
||||
* This value is mandatory if the receiver has estimated GNSS time.
|
||||
*/
|
||||
double driftNsps;
|
||||
|
||||
/*
|
||||
* 1-Sigma uncertainty associated with the clock's drift in nanoseconds (per
|
||||
* second).
|
||||
* The uncertainty is represented as an absolute (single sided) value.
|
||||
*
|
||||
* If the data is available gnssClockFlags must contain
|
||||
* HAS_DRIFT_UNCERTAINTY. If GNSS has computed a position fix this
|
||||
* field is mandatory and must be populated.
|
||||
*/
|
||||
double driftUncertaintyNsps;
|
||||
|
||||
/*
|
||||
* When there are any discontinuities in the HW clock, this field is
|
||||
* mandatory.
|
||||
*
|
||||
* A "discontinuity" is meant to cover the case of a switch from one source
|
||||
* of clock to another. A single free-running crystal oscillator (XO)
|
||||
* will generally not have any discontinuities, and this can be set and
|
||||
* left at 0.
|
||||
*
|
||||
* If, however, the timeNs value (HW clock) is derived from a composite of
|
||||
* sources, that is not as smooth as a typical XO, or is otherwise stopped &
|
||||
* restarted, then this value shall be incremented each time a discontinuity
|
||||
* occurs. (E.g. this value can start at zero at device boot-up and
|
||||
* increment each time there is a change in clock continuity. In the
|
||||
* unlikely event that this value reaches full scale, rollover (not
|
||||
* clamping) is required, such that this value continues to change, during
|
||||
* subsequent discontinuity events.)
|
||||
*
|
||||
* While this number stays the same, between GnssClock reports, it can be
|
||||
* safely assumed that the timeNs value has been running continuously, e.g.
|
||||
* derived from a single, high quality clock (XO like, or better, that is
|
||||
* typically used during continuous GNSS signal sampling.)
|
||||
*
|
||||
* It is expected, esp. during periods where there are few GNSS signals
|
||||
* available, that the HW clock be discontinuity-free as long as possible,
|
||||
* as this avoids the need to use (waste) a GNSS measurement to fully
|
||||
* re-solve for the GNSS clock bias and drift, when using the accompanying
|
||||
* measurements, from consecutive GnssData reports.
|
||||
*/
|
||||
uint32_t hwClockDiscontinuityCount;
|
||||
|
||||
};
|
||||
|
||||
/*
|
||||
* Represents a GNSS Measurement, it contains raw and computed information.
|
||||
*
|
||||
* All signal measurement information (e.g. svTime,
|
||||
* pseudorangeRate, multipathIndicator) reported in this struct must be
|
||||
* based on GNSS signal measurements only. You must not synthesize measurements
|
||||
* by calculating or reporting expected measurements based on known or estimated
|
||||
* position, velocity, or time.
|
||||
*/
|
||||
struct GnssMeasurement{
|
||||
/*
|
||||
* A set of flags indicating the validity of the fields in this data
|
||||
* structure.
|
||||
*/
|
||||
GnssMeasurementFlags flags;
|
||||
|
||||
/*
|
||||
* Satellite vehicle ID number, as defined in GnssSvInfo::svid
|
||||
* This is a mandatory value.
|
||||
*/
|
||||
int16_t svid;
|
||||
|
||||
/*
|
||||
* Defines the constellation of the given SV.
|
||||
*/
|
||||
GnssConstellationType constellation;
|
||||
|
||||
/*
|
||||
* Time offset at which the measurement was taken in nanoseconds.
|
||||
* The reference receiver's time is specified by GnssData::clock::timeNs.
|
||||
*
|
||||
* The sign of timeOffsetNs is given by the following equation:
|
||||
* measurement time = GnssClock::timeNs + timeOffsetNs
|
||||
*
|
||||
* It provides an individual time-stamp for the measurement, and allows
|
||||
* sub-nanosecond accuracy.
|
||||
* This is a mandatory value.
|
||||
*/
|
||||
double timeOffsetNs;
|
||||
|
||||
/*
|
||||
* Per satellite sync state. It represents the current sync state for the
|
||||
* associated satellite.
|
||||
* Based on the sync state, the 'received GNSS tow' field must be interpreted
|
||||
* accordingly.
|
||||
*
|
||||
* This is a mandatory value.
|
||||
*/
|
||||
GnssMeasurementState state;
|
||||
|
||||
/*
|
||||
* The received GNSS Time-of-Week at the measurement time, in nanoseconds.
|
||||
* For GNSS & QZSS, this is the received GNSS Time-of-Week at the
|
||||
* measurement time, in nanoseconds. The value is relative to the
|
||||
* beginning of the current GNSS week.
|
||||
*
|
||||
* Given the highest sync state that can be achieved, per each satellite,
|
||||
* valid range for this field can be:
|
||||
* Searching : [ 0 ] : STATE_UNKNOWN
|
||||
* C/A code lock : [ 0 1ms ] : STATE_CODE_LOCK set
|
||||
* Bit sync : [ 0 20ms ] : STATE_BIT_SYNC set
|
||||
* Subframe sync : [ 0 6s ] : STATE_SUBFRAME_SYNC set
|
||||
* TOW decoded : [ 0 1week ] : STATE_TOW_DECODED set
|
||||
*
|
||||
* Note: If there is any ambiguity in integer millisecond,
|
||||
* GNSS_MEASUREMENT_STATE_MSEC_AMBIGUOUS must be set accordingly, in the
|
||||
* 'state' field.
|
||||
*
|
||||
* This value must be populated if 'state' != STATE_UNKNOWN.
|
||||
*
|
||||
* For Glonass, this is the received Glonass time of day, at the
|
||||
* measurement time in nanoseconds.
|
||||
*
|
||||
* Given the highest sync state that can be achieved, per each satellite,
|
||||
* valid range for this field can be:
|
||||
* Searching : [ 0 ] : STATE_UNKNOWN set
|
||||
* C/A code lock : [ 0 1ms ] : STATE_CODE_LOCK set
|
||||
* Symbol sync : [ 0 10ms ] : STATE_SYMBOL_SYNC set
|
||||
* Bit sync : [ 0 20ms ] : STATE_BIT_SYNC set
|
||||
* String sync : [ 0 2s ] : STATE_GLO_STRING_SYNC set
|
||||
* Time of day : [ 0 1day ] : STATE_GLO_TOW_DECODED set
|
||||
*
|
||||
* For Beidou, this is the received Beidou time of week,
|
||||
* at the measurement time in nanoseconds.
|
||||
*
|
||||
* Given the highest sync state that can be achieved, per each satellite,
|
||||
* valid range for this field can be:
|
||||
* Searching : [ 0 ] : STATE_UNKNOWN set.
|
||||
* C/A code lock: [ 0 1ms ] : STATE_CODE_LOCK set.
|
||||
* Bit sync (D2): [ 0 2ms ] : STATE_BDS_D2_BIT_SYNC set.
|
||||
* Bit sync (D1): [ 0 20ms ] : STATE_BIT_SYNC set.
|
||||
* Subframe (D2): [ 0 0.6s ] : STATE_BDS_D2_SUBFRAME_SYNC set.
|
||||
* Subframe (D1): [ 0 6s ] : STATE_SUBFRAME_SYNC set.
|
||||
* Time of week : [ 0 1week ] : STATE_TOW_DECODED set.
|
||||
*
|
||||
* For Galileo, this is the received Galileo time of week,
|
||||
* at the measurement time in nanoseconds.
|
||||
*
|
||||
* E1BC code lock : [ 0 4ms ] : STATE_GAL_E1BC_CODE_LOCK set.
|
||||
* E1C 2nd code lock: [ 0 100ms] : STATE_GAL_E1C_2ND_CODE_LOCK set.
|
||||
* E1B page : [ 0 2s ] : STATE_GAL_E1B_PAGE_SYNC set.
|
||||
* Time of week : [ 0 1week] : STATE_TOW_DECODED is set.
|
||||
*
|
||||
* For SBAS, this is received SBAS time, at the measurement time in
|
||||
* nanoseconds.
|
||||
*
|
||||
* Given the highest sync state that can be achieved, per each satellite,
|
||||
* valid range for this field can be:
|
||||
* Searching : [ 0 ] : STATE_UNKNOWN
|
||||
* C/A code lock: [ 0 1ms ] : STATE_CODE_LOCK is set
|
||||
* Symbol sync : [ 0 2ms ] : STATE_SYMBOL_SYNC is set
|
||||
* Message : [ 0 1s ] : STATE_SBAS_SYNC is set
|
||||
*/
|
||||
int64_t receivedSvTimeInNs;
|
||||
|
||||
/*
|
||||
* 1-Sigma uncertainty of the Received GNSS Time-of-Week in nanoseconds.
|
||||
*
|
||||
* This value must be populated if 'state' != STATE_UNKNOWN.
|
||||
*/
|
||||
int64_t receivedSvTimeUncertaintyInNs;
|
||||
|
||||
/*
|
||||
* Carrier-to-noise density in dB-Hz, typically in the range [0, 63].
|
||||
* It contains the measured C/N0 value for the signal at the antenna port.
|
||||
*
|
||||
* This is a mandatory value.
|
||||
*/
|
||||
double cN0DbHz;
|
||||
|
||||
/*
|
||||
* Pseudorange rate at the timestamp in m/s. The correction of a given
|
||||
* Pseudorange Rate value includes corrections for receiver and satellite
|
||||
* clock frequency errors. Ensure that this field is independent (see
|
||||
* comment at top of GnssMeasurement struct.)
|
||||
*
|
||||
* It is mandatory to provide the 'uncorrected' 'pseudorange rate', and
|
||||
* provide GnssClock's 'drift' field as well. When providing the
|
||||
* uncorrected pseudorange rate, do not apply the corrections described above.)
|
||||
*
|
||||
* The value includes the 'pseudorange rate uncertainty' in it.
|
||||
* A positive 'uncorrected' value indicates that the SV is moving away from
|
||||
* the receiver.
|
||||
*
|
||||
* The sign of the 'uncorrected' 'pseudorange rate' and its relation to the
|
||||
* sign of 'doppler shift' is given by the equation:
|
||||
* pseudorange rate = -k * doppler shift (where k is a constant)
|
||||
*
|
||||
* This must be the most accurate pseudorange rate available, based on
|
||||
* fresh signal measurements from this channel.
|
||||
*
|
||||
* It is mandatory that this value be provided at typical carrier phase PRR
|
||||
* quality (few cm/sec per second of uncertainty, or better) - when signals
|
||||
* are sufficiently strong & stable, e.g. signals from a GNSS simulator at >=
|
||||
* 35 dB-Hz.
|
||||
*/
|
||||
double pseudorangeRateMps;
|
||||
|
||||
/*
|
||||
* 1-Sigma uncertainty of the pseudorangeRateMps.
|
||||
* The uncertainty is represented as an absolute (single sided) value.
|
||||
*
|
||||
* This is a mandatory value.
|
||||
*/
|
||||
double pseudorangeRateUncertaintyMps;
|
||||
|
||||
/*
|
||||
* Accumulated delta range's state. It indicates whether ADR is reset or
|
||||
* there is a cycle slip(indicating loss of lock).
|
||||
*
|
||||
* This is a mandatory value.
|
||||
*/
|
||||
GnssAccumulatedDeltaRangeState accumulatedDeltaRangeState;
|
||||
|
||||
/*
|
||||
* Accumulated delta range since the last channel reset in meters.
|
||||
* A positive value indicates that the SV is moving away from the receiver.
|
||||
*
|
||||
* The sign of the 'accumulated delta range' and its relation to the sign of
|
||||
* 'carrier phase' is given by the equation:
|
||||
* accumulated delta range = -k * carrier phase (where k is a constant)
|
||||
*
|
||||
* This value must be populated if 'accumulated delta range state' !=
|
||||
* ADR_STATE_UNKNOWN.
|
||||
* However, it is expected that the data is only accurate when:
|
||||
* 'accumulated delta range state' == ADR_STATE_VALID.
|
||||
*/
|
||||
double accumulatedDeltaRangeM;
|
||||
|
||||
/*
|
||||
* 1-Sigma uncertainty of the accumulated delta range in meters.
|
||||
* This value must be populated if 'accumulated delta range state' !=
|
||||
* ADR_STATE_UNKNOWN.
|
||||
*/
|
||||
double accumulatedDeltaRangeUncertaintyM;
|
||||
|
||||
/*
|
||||
* Carrier frequency at which codes and messages are modulated, it can
|
||||
* be L1 or L2. If the field is not set, the carrier frequency is
|
||||
* assumed to be L1.
|
||||
*
|
||||
* If the data is available, gnssClockFlags must contain
|
||||
* HAS_CARRIER_FREQUENCY.
|
||||
*/
|
||||
float carrierFrequencyHz;
|
||||
|
||||
/*
|
||||
* The number of full carrier cycles between the satellite and the
|
||||
* receiver. The reference frequency is given by the field
|
||||
* 'carrierFrequencyHz'. Indications of possible cycle slips and
|
||||
* resets in the accumulation of this value can be inferred from the
|
||||
* accumulatedDeltaRangeState flags.
|
||||
*
|
||||
* If the data is available, gnssClockFlags must contain
|
||||
* HAS_CARRIER_CYCLES.
|
||||
*/
|
||||
int64_t carrierCycles;
|
||||
|
||||
/*
|
||||
* The RF phase detected by the receiver, in the range [0.0, 1.0].
|
||||
* This is usually the fractional part of the complete carrier phase
|
||||
* measurement.
|
||||
*
|
||||
* The reference frequency is given by the field 'carrierFrequencyHz'.
|
||||
* The value contains the 'carrier-phase uncertainty' in it.
|
||||
*
|
||||
* If the data is available, gnssClockFlags must contain
|
||||
* HAS_CARRIER_PHASE.
|
||||
*/
|
||||
double carrierPhase;
|
||||
|
||||
/*
|
||||
* 1-Sigma uncertainty of the carrier-phase.
|
||||
* If the data is available, gnssClockFlags must contain
|
||||
* HAS_CARRIER_PHASE_UNCERTAINTY.
|
||||
*/
|
||||
double carrierPhaseUncertainty;
|
||||
|
||||
/*
|
||||
* An enumeration that indicates the 'multipath' state of the event.
|
||||
*
|
||||
* The multipath Indicator is intended to report the presence of overlapping
|
||||
* signals that manifest as distorted correlation peaks.
|
||||
*
|
||||
* - if there is a distorted correlation peak shape, report that multipath
|
||||
* is MULTIPATH_INDICATOR_PRESENT.
|
||||
* - if there is no distorted correlation peak shape, report
|
||||
* MULTIPATH_INDICATOR_NOT_PRESENT
|
||||
* - if signals are too weak to discern this information, report
|
||||
* MULTIPATH_INDICATOR_UNKNOWN
|
||||
*
|
||||
* Example: when doing the standardized overlapping Multipath Performance
|
||||
* test (3GPP TS 34.171) the Multipath indicator must report
|
||||
* MULTIPATH_INDICATOR_PRESENT for those signals that are tracked, and
|
||||
* contain multipath, and MULTIPATH_INDICATOR_NOT_PRESENT for those
|
||||
* signals that are tracked and do not contain multipath.
|
||||
*/
|
||||
GnssMultipathIndicator multipathIndicator;
|
||||
|
||||
/*
|
||||
* Signal-to-noise ratio at correlator output in dB.
|
||||
* If the data is available, gnssClockFlags must contain MEASUREMENT_HAS_SNR.
|
||||
* This is the power ratio of the "correlation peak height above the
|
||||
* observed noise floor" to "the noise RMS".
|
||||
*/
|
||||
double snrDb;
|
||||
};
|
||||
|
||||
/*
|
||||
* Represents a reading of GNSS measurements. For devices where GnssSystemInfo's
|
||||
* yearOfHw is set to 2016+, it is mandatory that these be provided, on
|
||||
* request, when the GNSS receiver is searching/tracking signals.
|
||||
*
|
||||
* - Reporting of GNSS constellation measurements is mandatory.
|
||||
* - Reporting of all tracked constellations are encouraged.
|
||||
*/
|
||||
struct GnssData {
|
||||
/* Number of GnssMeasurement elements. */
|
||||
uint32_t measurementCount;
|
||||
|
||||
/* The array of measurements. */
|
||||
GnssMeasurement[ConstS32:GNSS_MAX_MEASUREMENT] measurements;
|
||||
|
||||
/** The GNSS clock time reading. */
|
||||
GnssClock clock;
|
||||
};
|
||||
|
||||
/*
|
||||
* Callback for the hal to pass a GnssData structure back to the client.
|
||||
*
|
||||
* @param data Contains a reading of GNSS measurements.
|
||||
*/
|
||||
GnssMeasurementCb(GnssData data);
|
||||
};
|
55
gnss/1.0/IGnssNavigationMessage.hal
Normal file
55
gnss/1.0/IGnssNavigationMessage.hal
Normal file
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.gnss@1.0;
|
||||
|
||||
import IGnssNavigationMessageCallback;
|
||||
|
||||
/*
|
||||
* Extended interface for GNSS navigation message reporting support.
|
||||
*/
|
||||
interface IGnssNavigationMessage {
|
||||
enum GnssNavigationMessageStatus : int32_t {
|
||||
SUCCESS = 0,
|
||||
ERROR_ALREADY_INIT = -100,
|
||||
ERROR_GENERIC = -101
|
||||
};
|
||||
|
||||
/*
|
||||
* Initializes the interface and registers the callback routines with the HAL.
|
||||
* After a successful call to 'setCallback' the HAL must begin to provide updates as
|
||||
* they become available.
|
||||
* @param callback handle to IGnssNavigationMessageCallack interface.
|
||||
*
|
||||
* @return initRet Returns SUCCESS if the operation
|
||||
* is successful.
|
||||
* Returns ERROR_ALREADY_INIT if a callback has
|
||||
* already been registered without a corresponding call to close().
|
||||
* Returns ERROR_GENERIC if any other error occurred. It is
|
||||
* expected that the HAL will not generate any updates upon returning
|
||||
* this error code.
|
||||
*/
|
||||
setCallback(IGnssNavigationMessageCallback callback) generates (int32_t initRet);
|
||||
|
||||
/*
|
||||
* Stops updates from the HAL, and unregisters the callback routines.
|
||||
* After a call to close(), the previously registered callbacks must be
|
||||
* considered invalid by the HAL.
|
||||
* If close() is invoked without a previous setCallback, this function must perform
|
||||
* no work.
|
||||
*/
|
||||
close();
|
||||
};
|
166
gnss/1.0/IGnssNavigationMessageCallback.hal
Normal file
166
gnss/1.0/IGnssNavigationMessageCallback.hal
Normal file
|
@ -0,0 +1,166 @@
|
|||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.gnss@1.0;
|
||||
|
||||
/** Represents a GNSS navigation message (or a fragment of it). */
|
||||
interface IGnssNavigationMessageCallback {
|
||||
/*
|
||||
* Enumeration of available values to indicate the GNSS Navigation message
|
||||
* types.
|
||||
*
|
||||
* For convenience, first byte is the GnssConstellationType on which that signal
|
||||
* is typically transmitted.
|
||||
*/
|
||||
enum GnssNavigationMessageType : int16_t {
|
||||
TYPE_UNKNOWN = 0,
|
||||
/** GNSS L1 C/A message contained in the structure. */
|
||||
GNSS_L1CA = 0x0101,
|
||||
/** GNSS L2-CNAV message contained in the structure. */
|
||||
GNSS_L2CNAV = 0x0102,
|
||||
/** GNSS L5-CNAV message contained in the structure. */
|
||||
GNSS_L5CNAV = 0x0103,
|
||||
/** GNSS CNAV-2 message contained in the structure. */
|
||||
GNSS_CNAV2 = 0x0104,
|
||||
/** Glonass L1 CA message contained in the structure. */
|
||||
GLO_L1CA = 0x0301,
|
||||
/** Beidou D1 message contained in the structure. */
|
||||
BDS_D1 = 0x0501,
|
||||
/** Beidou D2 message contained in the structure. */
|
||||
BDS_D2 = 0x0502,
|
||||
/** Galileo I/NAV message contained in the structure. */
|
||||
GAL_I = 0x0601,
|
||||
/** Galileo F/NAV message contained in the structure. */
|
||||
GAL_F = 0x0602
|
||||
};
|
||||
|
||||
/*
|
||||
* Status of Navigation Message
|
||||
* When a message is received properly without any parity error in its
|
||||
* navigation words, the status must be set to PARITY_PASSED. But if a message is
|
||||
* received with words that failed parity check, but GNSS is able to correct
|
||||
* those words, the status must be set to PARITY_REBUILT.
|
||||
* No need to send any navigation message that contains words with parity error
|
||||
* and cannot be corrected.
|
||||
*/
|
||||
enum NavigationMessageStatus : uint16_t {
|
||||
PARITY_PASSED = (1 << 0),
|
||||
PARITY_REBUILT = (1 << 1),
|
||||
STATUS_UNKOWN = 0
|
||||
};
|
||||
|
||||
struct GnssNavigationMessage {
|
||||
/*
|
||||
* Satellite vehicle ID number, as defined in GnssSvInfo::svid
|
||||
* This is a mandatory value.
|
||||
*/
|
||||
int16_t svid;
|
||||
|
||||
/*
|
||||
* The type of message contained in the structure.
|
||||
* This is a mandatory value.
|
||||
*/
|
||||
GnssNavigationMessageType type;
|
||||
|
||||
/*
|
||||
* The status of the received navigation message.
|
||||
* No need to send any navigation message that contains words with parity
|
||||
* error and cannot be corrected.
|
||||
*/
|
||||
NavigationMessageStatus status;
|
||||
|
||||
/*
|
||||
* Message identifier. It provides an index so the complete Navigation
|
||||
* Message can be assembled.
|
||||
*
|
||||
* - For GNSS L1 C/A subframe 4 and 5, this value corresponds to the 'frame
|
||||
* id' of the navigation message, in the range of 1-25 (Subframe 1, 2, 3
|
||||
* does not contain a 'frame id' and this value can be set to -1.)
|
||||
*
|
||||
* - For Glonass L1 C/A, this refers to the frame ID, in the range of 1-5.
|
||||
*
|
||||
* - For BeiDou D1, this refers to the frame number in the range of 1-24
|
||||
*
|
||||
* - For Beidou D2, this refers to the frame number, in the range of 1-120
|
||||
*
|
||||
* - For Galileo F/NAV nominal frame structure, this refers to the subframe
|
||||
* number, in the range of 1-12
|
||||
*
|
||||
* - For Galileo I/NAV nominal frame structure, this refers to the subframe
|
||||
* number in the range of 1-24
|
||||
*/
|
||||
int16_t messageId;
|
||||
|
||||
/*
|
||||
* Sub-message identifier. If required by the message 'type', this value
|
||||
* contains a sub-index within the current message (or frame) that is being
|
||||
* transmitted.
|
||||
*
|
||||
* - For GNSS L1 C/A, BeiDou D1 & BeiDou D2, the submessage id corresponds to
|
||||
* the subframe number of the navigation message, in the range of 1-5.
|
||||
*
|
||||
* - For Glonass L1 C/A, this refers to the String number, in the range from
|
||||
* 1-15
|
||||
*
|
||||
* - For Galileo F/NAV, this refers to the page type in the range 1-6
|
||||
*
|
||||
* - For Galileo I/NAV, this refers to the word type in the range 1-10+
|
||||
*/
|
||||
int16_t submessageId;
|
||||
|
||||
/*
|
||||
* The data of the reported GNSS message. The bytes (or words) are specified
|
||||
* using big endian format (MSB first). The data is stored and decoded
|
||||
* in a server for research purposes.
|
||||
*
|
||||
* - For GNSS L1 C/A, Beidou D1 & Beidou D2, each subframe contains 10 30-bit
|
||||
* words. Each word (30 bits) must fit into the last 30 bits in a
|
||||
* 4-byte word (skip B31 and B32), with MSB first, for a total of 40
|
||||
* bytes, covering a time period of 6, 6, and 0.6 seconds, respectively.
|
||||
* The standard followed is 1995 SPS Signal specification.
|
||||
*
|
||||
* - For Glonass L1 C/A, each string contains 85 data bits, including the
|
||||
* checksum. These bits must fit into 11 bytes, with MSB first (skip
|
||||
* B86-B88), covering a time period of 2 seconds.
|
||||
* The standard followed is Glonass Interface Control Document Edition 5.1.
|
||||
*
|
||||
* - For Galileo F/NAV, each word consists of 238-bit (sync & tail symbols
|
||||
* excluded). Each word must fit into 30-bytes, with MSB first (skip
|
||||
* B239, B240), covering a time period of 10 seconds. The standard
|
||||
* followed is European GNSS(Galileo) Signal in Space Interface
|
||||
* Control Document Issue 1.2.
|
||||
*
|
||||
* - For Galileo I/NAV, each page contains 2 page parts, even and odd, with
|
||||
* a total of 2x114 = 228 bits, (sync & tail excluded) that must fit
|
||||
* into 29 bytes, with MSB first (skip B229-B232). The standard followed
|
||||
* is same as above.
|
||||
*
|
||||
* TODO(b/32022567): Describe this relationship with data to the VTS
|
||||
* via custom annotations and plug in a VTS test to verify that the data
|
||||
* correctly follows the standard.
|
||||
*
|
||||
*/
|
||||
vec<uint8_t> data;
|
||||
};
|
||||
|
||||
/*
|
||||
* The callback to report an available fragment of a GNSS navigation messages
|
||||
* from the HAL.
|
||||
*
|
||||
* @param message - The GNSS navigation submessage/subframe representation.
|
||||
*/
|
||||
gnssNavigationMessageCb(GnssNavigationMessage message);
|
||||
};
|
41
gnss/1.0/IGnssNi.hal
Normal file
41
gnss/1.0/IGnssNi.hal
Normal file
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.gnss@1.0;
|
||||
import IGnssNiCallback;
|
||||
|
||||
/*
|
||||
* Extended interface for Network-initiated (NI) support. This interface is used
|
||||
* to respond to NI notifications originating from the HAL.
|
||||
*/
|
||||
interface IGnssNi {
|
||||
/*
|
||||
* Registers the callbacks for HAL to use.
|
||||
*
|
||||
* @param callback handle to IGnssNiCallback interface.
|
||||
*/
|
||||
setCallback(IGnssNiCallback callback);
|
||||
|
||||
/*
|
||||
* Sends a response to HAL.
|
||||
*
|
||||
* @param notifId An ID generated by HAL to associate NI notifications and
|
||||
* framework responses.
|
||||
* @param userResponse A GNSS Ni response indicating if the notification was
|
||||
* accepted, denied or not responded to.
|
||||
*/
|
||||
respond(int32_t notifId, GnssUserResponseType userResponse);
|
||||
};
|
123
gnss/1.0/IGnssNiCallback.hal
Normal file
123
gnss/1.0/IGnssNiCallback.hal
Normal file
|
@ -0,0 +1,123 @@
|
|||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.gnss@1.0;
|
||||
|
||||
/* GNSS Network Initiated callback interface. */
|
||||
interface IGnssNiCallback {
|
||||
/*
|
||||
* GnssNiType constants
|
||||
*/
|
||||
enum GnssNiType : uint32_t {
|
||||
VOICE = 1,
|
||||
UMTS_SUPL = 2,
|
||||
UMTS_CTRL_PLANE = 3
|
||||
};
|
||||
|
||||
/*
|
||||
* GnssNiNotifyFlags constants
|
||||
*/
|
||||
enum GnssNiNotifyFlags : uint32_t {
|
||||
/** NI requires notification */
|
||||
NEED_NOTIFY = 0x0001,
|
||||
/** NI requires verification */
|
||||
NEED_VERIFY = 0x0002,
|
||||
/** NI requires privacy override, no notification/minimal trace */
|
||||
PRIVACY_OVERRIDE = 0x0004,
|
||||
};
|
||||
|
||||
/*
|
||||
* GNSS NI responses, used to define the response in
|
||||
* NI structures
|
||||
*/
|
||||
enum GnssUserResponseType : int32_t {
|
||||
RESPONSE_ACCEPT = 1,
|
||||
RESPONSE_DENY = 2,
|
||||
RESPONSE_NORESP = 3,
|
||||
};
|
||||
|
||||
/*
|
||||
* NI data encoding scheme
|
||||
*/
|
||||
enum GnssNiEncodingType : int32_t {
|
||||
ENC_NONE = 0,
|
||||
ENC_SUPL_GSM_DEFAULT = 1,
|
||||
ENC_SUPL_UTF8 = 2,
|
||||
ENC_SUPL_UCS2 = 3,
|
||||
ENC_UNKNOWN = -1,
|
||||
};
|
||||
|
||||
/** Represents an NI request */
|
||||
struct GnssNiNotification{
|
||||
/*
|
||||
* An ID generated by HAL to associate NI notifications and UI
|
||||
* responses.
|
||||
*/
|
||||
int32_t notificationId;
|
||||
|
||||
/*
|
||||
* A type used to distinguish different categories of NI
|
||||
* events, such as VOICE, UMTS_SUPL etc.
|
||||
*/
|
||||
GnssNiType niType;
|
||||
|
||||
/*
|
||||
* Notification/verification options, combinations of GnssNiNotifyFlags
|
||||
* constants.
|
||||
*/
|
||||
GnssNiNotifyFlags notifyFlags;
|
||||
|
||||
/*
|
||||
* Timeout period to wait for user response.
|
||||
* Set to 0 for no timeout limit. Specified in seconds.
|
||||
*/
|
||||
uint32_t timeoutSec;
|
||||
|
||||
/*
|
||||
* Default response when timeout.
|
||||
*/
|
||||
GnssUserResponseType defaultResponse;
|
||||
|
||||
/*
|
||||
* String representing the requester of the network inititated location
|
||||
* request.
|
||||
*/
|
||||
string requestorId;
|
||||
|
||||
/*
|
||||
* Notification message. String representing the service(for eg. SUPL-service)
|
||||
* who sent the network initiated location request.
|
||||
*/
|
||||
string notificationMessage;
|
||||
|
||||
/*
|
||||
* requestorId decoding scheme.
|
||||
*/
|
||||
GnssNiEncodingType requestorIdEncoding;
|
||||
|
||||
/*
|
||||
* notificationId decoding scheme
|
||||
*/
|
||||
GnssNiEncodingType notificationIdEncoding;
|
||||
};
|
||||
|
||||
/*
|
||||
* Callback with a network initiated request.
|
||||
*
|
||||
* @param notification network initiated request.
|
||||
*/
|
||||
niNotifyCb(GnssNiNotification notification);
|
||||
};
|
27
gnss/1.0/IGnssXtra.hal
Normal file
27
gnss/1.0/IGnssXtra.hal
Normal file
|
@ -0,0 +1,27 @@
|
|||
package android.hardware.gnss@1.0;
|
||||
import IGnssXtraCallback;
|
||||
|
||||
/*
|
||||
* This interface is used by the GNSS HAL to request the framework
|
||||
* to download XTRA data.
|
||||
*/
|
||||
interface IGnssXtra {
|
||||
/*
|
||||
* Opens the XTRA interface and provides the callback routines
|
||||
* to the implementation of this interface.
|
||||
*
|
||||
* @param callback Handle to the IGnssXtraCallback interface.
|
||||
*
|
||||
* @return success True if the operation is successful.
|
||||
*/
|
||||
setCallback(IGnssXtraCallback callback) generates (bool success);
|
||||
|
||||
/*
|
||||
* Inject the downloaded XTRA data into the GNSS receiver.
|
||||
*
|
||||
* @param xtraData GNSS XTRA data.
|
||||
*
|
||||
* @return success True if the operation is successful.
|
||||
*/
|
||||
injectXtraData(string xtraData) generates (bool success);
|
||||
};
|
12
gnss/1.0/IGnssXtraCallback.hal
Normal file
12
gnss/1.0/IGnssXtraCallback.hal
Normal file
|
@ -0,0 +1,12 @@
|
|||
package android.hardware.gnss@1.0;
|
||||
|
||||
/*
|
||||
* This interface is used by the GNSS HAL to request download of XTRA data.
|
||||
*/
|
||||
interface IGnssXtraCallback {
|
||||
/*
|
||||
* Callback to request the client to download XTRA data. The client should
|
||||
* download XTRA data and inject it by calling injectXtraData().
|
||||
*/
|
||||
downloadRequestCb();
|
||||
};
|
71
gnss/1.0/types.hal
Normal file
71
gnss/1.0/types.hal
Normal file
|
@ -0,0 +1,71 @@
|
|||
/*
|
||||
* Copyright (C) 2016 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.gnss@1.0;
|
||||
|
||||
enum ConstS32 : int32_t {
|
||||
/** Maximum number of SVs for gnssSvStatusCb(). */
|
||||
GNSS_MAX_SVS = 64,
|
||||
|
||||
/* Maximum number of Measurements in gnssMeasurementCb(). */
|
||||
GNSS_MAX_MEASUREMENT = 64,
|
||||
};
|
||||
|
||||
/* Milliseconds since January 1, 1970 */
|
||||
typedef int64_t GnssUtcTime;
|
||||
|
||||
/*
|
||||
* Constellation type of GnssSvInfo
|
||||
*/
|
||||
enum GnssConstellationType : uint8_t {
|
||||
UNKNOWN = 0,
|
||||
GNSS = 1,
|
||||
SBAS = 2,
|
||||
GLONASS = 3,
|
||||
QZSS = 4,
|
||||
BEIDOU = 5,
|
||||
GALILEO = 6,
|
||||
};
|
||||
|
||||
/* Represents a location. */
|
||||
struct GnssLocation {
|
||||
/* Contains GnssLocationFlags bits. */
|
||||
uint16_t gnssLocationFlags;
|
||||
|
||||
/* Represents latitude in degrees. */
|
||||
double latitude;
|
||||
|
||||
/* Represents longitude in degrees. */
|
||||
double longitude;
|
||||
|
||||
/*
|
||||
* Represents altitude in meters above the WGS 84 reference ellipsoid.
|
||||
*/
|
||||
double altitude;
|
||||
|
||||
/* Represents speed in meters per second. */
|
||||
float speedMetersperSec;
|
||||
|
||||
/* Represents heading in degrees. */
|
||||
float bearingDegrees;
|
||||
|
||||
/* Represents expected accuracy in meters. */
|
||||
float accuracyMeters;
|
||||
|
||||
/* Timestamp for the location fix. */
|
||||
GnssUtcTime timestamp;
|
||||
|
||||
};
|
Loading…
Reference in a new issue