diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:32:14 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:32:14 -0800 |
commit | cc490161f6af9e4a6842ee827e4bfc43bc4509d5 (patch) | |
tree | a60e0ed36ef1d3a43530c46562c86c9cd431744c /tests | |
parent | 3bbe5328cd738976443822502e23fb3971c5f87b (diff) | |
download | libhardware_legacy-cc490161f6af9e4a6842ee827e4bfc43bc4509d5.tar.gz |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'tests')
-rw-r--r-- | tests/gpstest/Android.mk | 34 | ||||
-rw-r--r-- | tests/gpstest/gpstest.cpp | 129 |
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; +} |