1 /*
2 * Copyright 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "hal_gps.h"
18
19 #include <pthread.h>
20 #include <stdlib.h>
21
22 #include <hardware/gps.h>
23
24 #include "vts_datatype.h"
25
26 namespace android {
27 namespace vts {
28
29 // Callbacks {
vts_gps_location_callback(GpsLocation *)30 static void vts_gps_location_callback(GpsLocation* /*location*/) {}
vts_gps_status_callback(GpsStatus *)31 static void vts_gps_status_callback(GpsStatus* /*status*/) {}
vts_gps_sv_status_callback(GpsSvStatus *)32 static void vts_gps_sv_status_callback(GpsSvStatus* /*sv_info*/) {}
vts_gps_nmea_callback(GpsUtcTime,const char *,int)33 static void vts_gps_nmea_callback(
34 GpsUtcTime /*timestamp*/, const char* /*nmea*/, int /*length*/) {}
vts_gps_set_capabilities(uint32_t)35 static void vts_gps_set_capabilities(uint32_t /*capabilities*/) {}
vts_gps_acquire_wakelock()36 static void vts_gps_acquire_wakelock() {}
vts_gps_release_wakelock()37 static void vts_gps_release_wakelock() {}
vts_gps_request_utc_time()38 static void vts_gps_request_utc_time() {}
39
vts_gps_create_thread(const char *,void (*)(void *),void *)40 static pthread_t vts_gps_create_thread(
41 const char* /*name*/, void (*/*start*/)(void*), void* /*arg*/) {
42 return (pthread_t)NULL;
43 }
44 // } Callbacks
45
GenerateGpsCallbacks()46 GpsCallbacks* GenerateGpsCallbacks() {
47 if (RandomBool()) {
48 return NULL;
49 } else {
50 GpsCallbacks* cbs = (GpsCallbacks*)malloc(sizeof(GpsCallbacks));
51 cbs->size = sizeof(GpsCallbacks);
52 cbs->location_cb = vts_gps_location_callback;
53 cbs->status_cb = vts_gps_status_callback;
54 cbs->sv_status_cb = vts_gps_sv_status_callback;
55 cbs->nmea_cb = vts_gps_nmea_callback;
56 cbs->set_capabilities_cb = vts_gps_set_capabilities;
57 cbs->acquire_wakelock_cb = vts_gps_acquire_wakelock;
58 cbs->release_wakelock_cb = vts_gps_release_wakelock;
59 cbs->create_thread_cb = vts_gps_create_thread;
60 cbs->request_utc_time_cb = vts_gps_request_utc_time;
61
62 return cbs;
63 }
64 }
65
GenerateGpsUtcTime()66 GpsUtcTime /*int64_t*/ GenerateGpsUtcTime() {
67 // TOOD: consider returning the current time + a random number.
68 return RandomInt64();
69 }
70
GenerateLatitude()71 double GenerateLatitude() { return 10.0; }
72
GenerateLongitude()73 double GenerateLongitude() { return 20.0; }
74
GenerateGpsAccuracy()75 float GenerateGpsAccuracy() { return 5.0; }
76
GenerateGpsFlagsUint16()77 uint16_t GenerateGpsFlagsUint16() { return 1; }
78
GenerateGpsPositionMode()79 GpsPositionMode /*uint32_t*/ GenerateGpsPositionMode() {
80 if (RandomBool()) {
81 return RandomUint32();
82 } else {
83 if (RandomBool()) {
84 return GPS_POSITION_MODE_STANDALONE;
85 } else if (RandomBool()) {
86 return GPS_POSITION_MODE_MS_BASED;
87 } else {
88 return GPS_POSITION_MODE_MS_ASSISTED;
89 }
90 }
91 return RandomUint32();
92 }
93
GenerateGpsPositionRecurrence()94 GpsPositionRecurrence /*uint32_t*/ GenerateGpsPositionRecurrence() {
95 if (RandomBool()) {
96 return RandomUint32();
97 } else {
98 if (RandomBool()) {
99 return GPS_POSITION_RECURRENCE_PERIODIC;
100 } else {
101 return GPS_POSITION_RECURRENCE_SINGLE;
102 }
103 }
104 }
105
106 // TODO: add generators for min_interval, preferred_accuracy, and preferred_time
107 // all uint32_t.
108
109 } // namespace vts
110 } // namespace android
111