summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-03 19:32:14 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-03 19:32:14 -0800
commitcc490161f6af9e4a6842ee827e4bfc43bc4509d5 (patch)
treea60e0ed36ef1d3a43530c46562c86c9cd431744c /tests
parent3bbe5328cd738976443822502e23fb3971c5f87b (diff)
downloadlibhardware_legacy-cc490161f6af9e4a6842ee827e4bfc43bc4509d5.tar.gz
auto import from //depot/cupcake/@135843
Diffstat (limited to 'tests')
-rw-r--r--tests/gpstest/Android.mk34
-rw-r--r--tests/gpstest/gpstest.cpp129
2 files changed, 163 insertions, 0 deletions
diff --git a/tests/gpstest/Android.mk b/tests/gpstest/Android.mk
new file mode 100644
index 0000000..36ada0a
--- /dev/null
+++ b/tests/gpstest/Android.mk
@@ -0,0 +1,34 @@
+# Copyright (C) 2008 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.
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+
+LOCAL_SRC_FILES:= gpstest.cpp
+
+LOCAL_CFLAGS:= -fno-short-enums
+
+LOCAL_SHARED_LIBRARIES:= libhardware_legacy
+
+LOCAL_C_INCLUDES:= \
+ include/hardware_legacy
+
+LOCAL_MODULE:= gpstest
+
+LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
+
+LOCAL_MODULE_TAGS:= tests development
+
+include $(BUILD_EXECUTABLE)
diff --git a/tests/gpstest/gpstest.cpp b/tests/gpstest/gpstest.cpp
new file mode 100644
index 0000000..27cbd17
--- /dev/null
+++ b/tests/gpstest/gpstest.cpp
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2008 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.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+extern "C" size_t dlmalloc_footprint();
+
+#include "hardware_legacy/gps.h"
+
+static const GpsInterface* sGpsInterface = NULL;
+
+static bool sDone = false;
+static int sFixes = 0;
+static int sMaxFixes = 0;
+static int sStatus = GPS_STATUS_ENGINE_OFF;
+
+static void location_callback(GpsLocation* location)
+{
+ printf("Got Fix: latitude: %lf longitude: %lf altitude: %.1lf\n",
+ location->latitude, location->longitude, location->altitude);
+ sFixes++;
+ if (sMaxFixes > 0 && sFixes >= sMaxFixes) {
+ sDone = true;
+ }
+}
+
+static void status_callback(GpsStatus* status)
+{
+ switch (status->status) {
+ case GPS_STATUS_NONE:
+ printf("status: GPS_STATUS_NONE\n");
+ break;
+ case GPS_STATUS_SESSION_BEGIN:
+ printf("status: GPS_STATUS_SESSION_BEGIN\n");
+ break;
+ case GPS_STATUS_SESSION_END:
+ printf("status: GPS_STATUS_SESSION_END\n");
+ break;
+ case GPS_STATUS_ENGINE_ON:
+ printf("status: GPS_STATUS_ENGINE_ON\n");
+ break;
+ case GPS_STATUS_ENGINE_OFF:
+ printf("status: GPS_STATUS_ENGINE_OFF\n");
+ break;
+ default:
+ printf("unknown status: %d\n", status->status);
+ break;
+ }
+
+ sStatus = status->status;
+}
+
+static void sv_status_callback(GpsSvStatus* sv_status)
+{
+ if (sv_status->num_svs > 0) {
+ for (int i = 0; i < sv_status->num_svs; i++) {
+ printf("SV: %2d SNR: %.1f Elev: %.1f Azim: %.1f %s %s\n", sv_status->sv_list[i].prn,
+ sv_status->sv_list[i].snr, sv_status->sv_list[i].elevation,
+ sv_status->sv_list[i].azimuth,
+ ((sv_status->ephemeris_mask & (1 << (sv_status->sv_list[i].prn - 1))) ? "E" : " "),
+ ((sv_status->almanac_mask & (1 << (sv_status->sv_list[i].prn - 1))) ? "A" : " ")
+ );
+ }
+ printf("\n");
+ }
+}
+
+GpsCallbacks sCallbacks = {
+ location_callback,
+ status_callback,
+ sv_status_callback,
+};
+
+int main(int argc, char *argv[])
+{
+ size_t initial = dlmalloc_footprint();
+
+ if (argc >= 2) {
+ sMaxFixes = atoi(argv[1]);
+ printf("max fixes: %d\n", sMaxFixes);
+ }
+
+ sGpsInterface = gps_get_interface();
+ if (!sGpsInterface) {
+ fprintf(stderr, "could not get gps interface\n");
+ return -1;
+ }
+
+ int err = sGpsInterface->init(&sCallbacks);
+ if (err) {
+ fprintf(stderr, "gps_init failed %d\n", err);
+ return err;
+ }
+
+ sGpsInterface->start();
+
+ while (!sDone) {
+ sleep(1);
+ }
+
+ sGpsInterface->stop();
+
+ printf("waiting for GPS to shut down\n");
+ while (sStatus != GPS_STATUS_ENGINE_OFF) {
+ sleep(1);
+ }
+
+ sGpsInterface->cleanup();
+
+ size_t final = dlmalloc_footprint();
+ fprintf(stderr, "KO: initial == %d, final == %d\n", initial, final );
+
+ return 0;
+}