summaryrefslogtreecommitdiffstats
path: root/gps/libloc_api_50001/loc_eng_msg.h
diff options
context:
space:
mode:
authorcodeworkx <codeworkx@cyanogenmod.org>2013-03-25 10:43:40 +0000
committercodeworkx <codeworkx@cyanogenmod.org>2013-03-25 10:45:16 +0000
commitfa20a7d4fd99a7201e6f7a4269d4ceaa949320fa (patch)
treec3cafd4e94f166cad7aea8ed764ceab4fa74c3ed /gps/libloc_api_50001/loc_eng_msg.h
downloaddevice_samsung_smdk4412-qcom-common-fa20a7d4fd99a7201e6f7a4269d4ceaa949320fa.tar.gz
device_samsung_smdk4412-qcom-common-fa20a7d4fd99a7201e6f7a4269d4ceaa949320fa.tar.bz2
device_samsung_smdk4412-qcom-common-fa20a7d4fd99a7201e6f7a4269d4ceaa949320fa.zip
import qcom gps hal used on d2 devices
Steve Kondik <shade@chemlab.org> - setPrivacy() changed to a no-op, as it does not seem to be implemented
Diffstat (limited to 'gps/libloc_api_50001/loc_eng_msg.h')
-rw-r--r--gps/libloc_api_50001/loc_eng_msg.h861
1 files changed, 861 insertions, 0 deletions
diff --git a/gps/libloc_api_50001/loc_eng_msg.h b/gps/libloc_api_50001/loc_eng_msg.h
new file mode 100644
index 0000000..d1f4011
--- /dev/null
+++ b/gps/libloc_api_50001/loc_eng_msg.h
@@ -0,0 +1,861 @@
+/* Copyright (c) 2011,2012 Code Aurora Forum. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of Code Aurora Forum, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+#ifndef LOC_ENG_MSG_H
+#define LOC_ENG_MSG_H
+
+
+#include <hardware/gps.h>
+#include <stdlib.h>
+#include <string.h>
+#include "log_util.h"
+#include "loc.h"
+#include <loc_eng_log.h>
+#include "loc_eng_msg_id.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+struct LocPosMode
+{
+ LocPositionMode mode;
+ GpsPositionRecurrence recurrence;
+ uint32_t min_interval;
+ uint32_t preferred_accuracy;
+ uint32_t preferred_time;
+ char credentials[14];
+ char provider[8];
+ LocPosMode(LocPositionMode m, GpsPositionRecurrence recr,
+ uint32_t gap, uint32_t accu, uint32_t time,
+ const char* cred, const char* prov) :
+ mode(m), recurrence(recr),
+ min_interval(gap < MIN_POSSIBLE_FIX_INTERVAL ? MIN_POSSIBLE_FIX_INTERVAL : gap),
+ preferred_accuracy(accu), preferred_time(time) {
+ memset(credentials, 0, sizeof(credentials));
+ memset(provider, 0, sizeof(provider));
+ if (NULL != cred) {
+ memcpy(credentials, cred, sizeof(credentials)-1);
+ }
+ if (NULL != prov) {
+ memcpy(provider, prov, sizeof(provider)-1);
+ }
+ }
+
+ LocPosMode() :
+ mode(LOC_POSITION_MODE_MS_BASED), recurrence(GPS_POSITION_RECURRENCE_PERIODIC),
+ min_interval(MIN_POSSIBLE_FIX_INTERVAL), preferred_accuracy(50), preferred_time(120000) {
+ memset(credentials, 0, sizeof(credentials));
+ memset(provider, 0, sizeof(provider));
+ }
+
+ inline bool equals(const LocPosMode &anotherMode) const
+ {
+ return anotherMode.mode == mode &&
+ anotherMode.recurrence == recurrence &&
+ anotherMode.min_interval == min_interval &&
+ anotherMode.preferred_accuracy == preferred_accuracy &&
+ anotherMode.preferred_time == preferred_time &&
+ !strncmp(anotherMode.credentials, credentials, sizeof(credentials)-1) &&
+ !strncmp(anotherMode.provider, provider, sizeof(provider)-1);
+ }
+
+ inline void logv() const
+ {
+ LOC_LOGV ("Position mode: %s\n Position recurrence: %s\n min interval: %d\n preferred accuracy: %d\n preferred time: %d\n credentials: %s provider: %s",
+ loc_get_position_mode_name(mode),
+ loc_get_position_recurrence_name(recurrence),
+ min_interval,
+ preferred_accuracy,
+ preferred_time,
+ credentials,
+ provider);
+ }
+};
+
+typedef enum {
+ LOC_ENG_IF_REQUEST_TYPE_SUPL = 0,
+ LOC_ENG_IF_REQUEST_TYPE_WIFI,
+ LOC_ENG_IF_REQUEST_TYPE_ANY
+} loc_if_req_type_e_type;
+
+typedef enum {
+ LOC_ENG_IF_REQUEST_SENDER_ID_QUIPC = 0,
+ LOC_ENG_IF_REQUEST_SENDER_ID_MSAPM,
+ LOC_ENG_IF_REQUEST_SENDER_ID_GPSONE_DAEMON,
+ LOC_ENG_IF_REQUEST_SENDER_ID_MODEM,
+ LOC_ENG_IF_REQUEST_SENDER_ID_UNKNOWN
+} loc_if_req_sender_id_e_type;
+
+struct loc_eng_msg {
+ const void* owner;
+ const int msgid;
+ inline loc_eng_msg(void* instance, int id) :
+ owner(instance), msgid(id)
+ {
+ LOC_LOGV("creating msg %s", loc_get_msg_name(msgid));
+ LOC_LOGV("creating msg ox%x", msgid);
+ }
+ virtual ~loc_eng_msg()
+ {
+ LOC_LOGV("deleting msg %s", loc_get_msg_name(msgid));
+ LOC_LOGV("deleting msg ox%x", msgid);
+ }
+};
+
+struct loc_eng_msg_suple_version : public loc_eng_msg {
+ const int supl_version;
+ inline loc_eng_msg_suple_version(void* instance, int version) :
+ loc_eng_msg(instance, LOC_ENG_MSG_SUPL_VERSION),
+ supl_version(version)
+ {
+ LOC_LOGV("SUPL Version: %d", version);
+ }
+};
+
+struct loc_eng_msg_lpp_config : public loc_eng_msg {
+ const int lpp_config;
+ inline loc_eng_msg_lpp_config(void *instance, int profile) :
+ loc_eng_msg(instance, LOC_ENG_MSG_LPP_CONFIG),
+ lpp_config(profile)
+ {
+ LOC_LOGV("lpp profile: %d", profile);
+ }
+};
+
+struct loc_eng_msg_ext_power_config : public loc_eng_msg {
+ const int isBatteryCharging;
+ inline loc_eng_msg_ext_power_config(void* instance, int isBattCharging) :
+ loc_eng_msg(instance, LOC_ENG_MSG_EXT_POWER_CONFIG),
+ isBatteryCharging(isBattCharging)
+ {
+ LOC_LOGV("isBatteryCharging: %d", isBatteryCharging);
+ }
+};
+
+struct loc_eng_msg_sensor_control_config : public loc_eng_msg {
+ const int sensorsDisabled;
+ inline loc_eng_msg_sensor_control_config(void* instance, int disabled) :
+ loc_eng_msg(instance, LOC_ENG_MSG_SET_SENSOR_CONTROL_CONFIG),
+ sensorsDisabled(disabled)
+ {
+ LOC_LOGV("Sensors Disabled: %d", disabled);
+ }
+};
+
+struct loc_eng_msg_sensor_properties : public loc_eng_msg {
+ const bool gyroBiasVarianceRandomWalk_valid;
+ const float gyroBiasVarianceRandomWalk;
+ const bool accelRandomWalk_valid;
+ const float accelRandomWalk;
+ const bool angleRandomWalk_valid;
+ const float angleRandomWalk;
+ const bool rateRandomWalk_valid;
+ const float rateRandomWalk;
+ const bool velocityRandomWalk_valid;
+ const float velocityRandomWalk;
+ inline loc_eng_msg_sensor_properties(void* instance, bool gyroBiasRandomWalk_valid, float gyroBiasRandomWalk,
+ bool accelRandomWalk_valid, float accelRandomWalk,
+ bool angleRandomWalk_valid, float angleRandomWalk,
+ bool rateRandomWalk_valid, float rateRandomWalk,
+ bool velocityRandomWalk_valid, float velocityRandomWalk) :
+ loc_eng_msg(instance, LOC_ENG_MSG_SET_SENSOR_PROPERTIES),
+ gyroBiasVarianceRandomWalk_valid(gyroBiasRandomWalk_valid),
+ gyroBiasVarianceRandomWalk(gyroBiasRandomWalk),
+ accelRandomWalk_valid(accelRandomWalk_valid),
+ accelRandomWalk(accelRandomWalk),
+ angleRandomWalk_valid(angleRandomWalk_valid),
+ angleRandomWalk(angleRandomWalk),
+ rateRandomWalk_valid(rateRandomWalk_valid),
+ rateRandomWalk(rateRandomWalk),
+ velocityRandomWalk_valid(velocityRandomWalk_valid),
+ velocityRandomWalk(velocityRandomWalk)
+ {
+ LOC_LOGV("Sensor properties validity, Gyro Random walk: %d Accel Random Walk: %d "
+ "Angle Random Walk: %d Rate Random Walk: %d "
+ "Velocity Random Walk: %d",
+ gyroBiasRandomWalk_valid,
+ accelRandomWalk_valid,
+ angleRandomWalk_valid,
+ rateRandomWalk_valid,
+ velocityRandomWalk_valid
+ );
+ LOC_LOGV("Sensor properties, Gyro Random walk: %f Accel Random Walk: %f "
+ "Angle Random Walk: %f Rate Random Walk: %f "
+ "Velocity Random Walk: %f",
+ gyroBiasRandomWalk,
+ accelRandomWalk,
+ angleRandomWalk,
+ rateRandomWalk,
+ velocityRandomWalk
+ );
+ }
+};
+
+struct loc_eng_msg_sensor_perf_control_config : public loc_eng_msg {
+ const int controlMode;
+ const int accelSamplesPerBatch;
+ const int accelBatchesPerSec;
+ const int gyroSamplesPerBatch;
+ const int gyroBatchesPerSec;
+ const int accelSamplesPerBatchHigh;
+ const int accelBatchesPerSecHigh;
+ const int gyroSamplesPerBatchHigh;
+ const int gyroBatchesPerSecHigh;
+ const int algorithmConfig;
+ inline loc_eng_msg_sensor_perf_control_config(void* instance, int controlMode,
+ int accelSamplesPerBatch, int accelBatchesPerSec,
+ int gyroSamplesPerBatch, int gyroBatchesPerSec,
+ int accelSamplesPerBatchHigh, int accelBatchesPerSecHigh,
+ int gyroSamplesPerBatchHigh, int gyroBatchesPerSecHigh,
+ int algorithmConfig) :
+ loc_eng_msg(instance, LOC_ENG_MSG_SET_SENSOR_PERF_CONTROL_CONFIG),
+ controlMode(controlMode),
+ accelSamplesPerBatch(accelSamplesPerBatch),
+ accelBatchesPerSec(accelBatchesPerSec),
+ gyroSamplesPerBatch(gyroSamplesPerBatch),
+ gyroBatchesPerSec(gyroBatchesPerSec),
+ accelSamplesPerBatchHigh(accelSamplesPerBatchHigh),
+ accelBatchesPerSecHigh(accelBatchesPerSecHigh),
+ gyroSamplesPerBatchHigh(gyroSamplesPerBatchHigh),
+ gyroBatchesPerSecHigh(gyroBatchesPerSecHigh),
+ algorithmConfig(algorithmConfig)
+ {
+ LOC_LOGV("Sensor Perf Control Config (performanceControlMode)(%u) "
+ "accel(#smp,#batches) (%u,%u) gyro(#smp,#batches) (%u,%u), "
+ "accel_high(#smp,#batches) (%u,%u) gyro_high(#smp,#batches) (%u,%u), "
+ "algorithmConfig(%u)\n",
+ controlMode,
+ accelSamplesPerBatch,
+ accelBatchesPerSec,
+ gyroSamplesPerBatch,
+ gyroBatchesPerSec,
+ accelSamplesPerBatchHigh,
+ accelBatchesPerSecHigh,
+ gyroSamplesPerBatchHigh,
+ gyroBatchesPerSecHigh,
+ algorithmConfig
+ );
+ }
+};
+
+
+struct loc_eng_msg_position_mode : public loc_eng_msg {
+ const LocPosMode pMode;
+ inline loc_eng_msg_position_mode(void* instance,
+ LocPosMode &mode) :
+ loc_eng_msg(instance, LOC_ENG_MSG_SET_POSITION_MODE),
+ pMode(mode)
+ {
+ pMode.logv();
+ }
+};
+
+struct loc_eng_msg_set_time : public loc_eng_msg {
+ const GpsUtcTime time;
+ const int64_t timeReference;
+ const int uncertainty;
+ inline loc_eng_msg_set_time(void* instance,
+ GpsUtcTime t,
+ int64_t tf,
+ int unc) :
+ loc_eng_msg(instance, LOC_ENG_MSG_SET_TIME),
+ time(t), timeReference(tf), uncertainty(unc)
+ {
+ LOC_LOGV("time: %lld\n timeReference: %lld\n uncertainty: %d",
+ time, timeReference, uncertainty);
+ }
+};
+
+struct loc_eng_msg_inject_location : public loc_eng_msg {
+ const double latitude;
+ const double longitude;
+ const float accuracy;
+ inline loc_eng_msg_inject_location(void* instance, double lat,
+ double longi, float accur) :
+ loc_eng_msg(instance, LOC_ENG_MSG_INJECT_LOCATION),
+ latitude(lat), longitude(longi), accuracy(accur)
+ {
+ LOC_LOGV("latitude: %f\n longitude: %f\n accuracy: %f",
+ latitude, longitude, accuracy);
+ }
+};
+
+struct loc_eng_msg_delete_aiding_data : public loc_eng_msg {
+ const GpsAidingData type;
+ inline loc_eng_msg_delete_aiding_data(void* instance, GpsAidingData data) :
+ loc_eng_msg(instance, LOC_ENG_MSG_DELETE_AIDING_DATA), type(data)
+ {
+ LOC_LOGV("aiding data msak %d", type);
+ }
+};
+
+struct loc_eng_msg_report_position : public loc_eng_msg {
+ const GpsLocation location;
+ const void* locationExt;
+ const enum loc_sess_status status;
+ inline loc_eng_msg_report_position(void* instance, GpsLocation &loc, void* locExt,
+ enum loc_sess_status st) :
+ loc_eng_msg(instance, LOC_ENG_MSG_REPORT_POSITION),
+ location(loc), locationExt(locExt), status(st)
+ {
+ LOC_LOGV("flags: %d\n source: %d\n latitude: %f\n longitude: %f\n altitude: %f\n speed: %f\n bearing: %f\n accuracy: %f\n timestamp: %lld\n rawDataSize: %d\n rawData: %p\n Session status: %d",
+ location.flags, location.position_source, location.latitude, location.longitude,
+ location.altitude, location.speed, location.bearing, location.accuracy,
+ location.timestamp, location.rawDataSize, location.rawData,status);
+ }
+};
+
+struct loc_eng_msg_report_sv : public loc_eng_msg {
+ const GpsSvStatus svStatus;
+ const void* svExt;
+ inline loc_eng_msg_report_sv(void* instance, GpsSvStatus &sv, void* ext) :
+ loc_eng_msg(instance, LOC_ENG_MSG_REPORT_SV), svStatus(sv), svExt(ext)
+ {
+ LOC_LOGV("num sv: %d\n ephemeris mask: %dxn almanac mask: %x\n used in fix mask: %x\n sv: prn snr elevation azimuth",
+ svStatus.num_svs, svStatus.ephemeris_mask, svStatus.almanac_mask, svStatus.used_in_fix_mask);
+ for (int i = 0; i < svStatus.num_svs && i < GPS_MAX_SVS; i++) {
+ LOC_LOGV(" %d: %d %f %f %f\n ",
+ i,
+ svStatus.sv_list[i].prn,
+ svStatus.sv_list[i].snr,
+ svStatus.sv_list[i].elevation,
+ svStatus.sv_list[i].azimuth);
+ }
+ }
+};
+
+struct loc_eng_msg_report_status : public loc_eng_msg {
+ const GpsStatusValue status;
+ inline loc_eng_msg_report_status(void* instance, GpsStatusValue engineStatus) :
+ loc_eng_msg(instance, LOC_ENG_MSG_REPORT_STATUS), status(engineStatus)
+ {
+ LOC_LOGV("status: %s", loc_get_gps_status_name(status));
+ }
+};
+
+struct loc_eng_msg_report_nmea : public loc_eng_msg {
+ char* const nmea;
+ const int length;
+ inline loc_eng_msg_report_nmea(void* instance,
+ const char* data,
+ int len) :
+ loc_eng_msg(instance, LOC_ENG_MSG_REPORT_NMEA),
+ nmea(new char[len]), length(len)
+ {
+ memcpy((void*)nmea, (void*)data, len);
+ LOC_LOGV("length: %d\n nmea: %p - %c%c%c",
+ length, nmea, nmea[3], nmea[4], nmea[5]);
+ }
+ inline ~loc_eng_msg_report_nmea()
+ {
+ delete[] nmea;
+ }
+};
+
+struct loc_eng_msg_request_bit : public loc_eng_msg {
+ const loc_if_req_type_e_type ifType;
+ const int ipv4Addr;
+ char* const ipv6Addr;
+ inline loc_eng_msg_request_bit(void* instance,
+ loc_if_req_type_e_type type,
+ int ipv4,
+ char* ipv6) :
+ loc_eng_msg(instance, LOC_ENG_MSG_REQUEST_BIT),
+ ifType(type), ipv4Addr(ipv4),
+ ipv6Addr(NULL == ipv6 ? NULL : new char[16])
+ {
+ if (NULL != ipv6Addr)
+ memcpy(ipv6Addr, ipv6, 16);
+ LOC_LOGV("ifType: %d, ipv4: %d.%d.%d.%d, ipv6: %s", ifType,
+ (unsigned char)(ipv4>>24),
+ (unsigned char)(ipv4>>16),
+ (unsigned char)(ipv4>>8),
+ (unsigned char)ipv4,
+ NULL != ipv6Addr ? ipv6Addr : "");
+ }
+
+ inline ~loc_eng_msg_request_bit()
+ {
+ if (NULL != ipv6Addr) {
+ delete[] ipv6Addr;
+ }
+ }
+};
+
+struct loc_eng_msg_request_wifi : public loc_eng_msg {
+ const loc_if_req_type_e_type ifType;
+ const loc_if_req_sender_id_e_type senderId;
+ char* const ssid;
+ char* const password;
+ inline loc_eng_msg_request_wifi(void* instance,
+ loc_if_req_type_e_type type,
+ loc_if_req_sender_id_e_type sender_id,
+ char* s,
+ char* p) :
+ loc_eng_msg(instance, LOC_ENG_MSG_REQUEST_WIFI),
+ ifType(type), senderId(sender_id),
+ ssid(NULL == s ? NULL : new char[SSID_BUF_SIZE]),
+ password(NULL == p ? NULL : new char[SSID_BUF_SIZE])
+ {
+ if (NULL != ssid)
+ strlcpy(ssid, s, SSID_BUF_SIZE);
+ if (NULL != password)
+ strlcpy(password, p, SSID_BUF_SIZE);
+ LOC_LOGV("ifType: %d, senderId: %d, ssid: %s, password: %s",
+ ifType,
+ senderId,
+ NULL != ssid ? ssid : "",
+ NULL != password ? password : "");
+ }
+
+ inline ~loc_eng_msg_request_wifi()
+ {
+ if (NULL != ssid) {
+ delete[] ssid;
+ }
+ if (NULL != password) {
+ delete[] password;
+ }
+ }
+};
+
+struct loc_eng_msg_release_bit : public loc_eng_msg {
+ const loc_if_req_type_e_type ifType;
+ const int ipv4Addr;
+ char* const ipv6Addr;
+ inline loc_eng_msg_release_bit(void* instance,
+ loc_if_req_type_e_type type,
+ int ipv4,
+ char* ipv6) :
+ loc_eng_msg(instance, LOC_ENG_MSG_RELEASE_BIT),
+ ifType(type), ipv4Addr(ipv4),
+ ipv6Addr(NULL == ipv6 ? NULL : new char[16])
+ {
+ if (NULL != ipv6Addr)
+ memcpy(ipv6Addr, ipv6, 16);
+ LOC_LOGV("ifType: %d, ipv4: %d.%d.%d.%d, ipv6: %s", ifType,
+ (unsigned char)(ipv4>>24),
+ (unsigned char)(ipv4>>16),
+ (unsigned char)(ipv4>>8),
+ (unsigned char)ipv4,
+ NULL != ipv6Addr ? ipv6Addr : "");
+ }
+
+ inline ~loc_eng_msg_release_bit()
+ {
+ if (NULL != ipv6Addr) {
+ delete[] ipv6Addr;
+ }
+ }
+};
+
+struct loc_eng_msg_release_wifi : public loc_eng_msg {
+ const loc_if_req_type_e_type ifType;
+ const loc_if_req_sender_id_e_type senderId;
+ char* const ssid;
+ char* const password;
+ inline loc_eng_msg_release_wifi(void* instance,
+ loc_if_req_type_e_type type,
+ loc_if_req_sender_id_e_type sender_id,
+ char* s,
+ char* p) :
+ loc_eng_msg(instance, LOC_ENG_MSG_RELEASE_WIFI),
+ ifType(type), senderId(sender_id),
+ ssid(NULL == s ? NULL : new char[SSID_BUF_SIZE]),
+ password(NULL == p ? NULL : new char[SSID_BUF_SIZE])
+ {
+ if (NULL != s)
+ strlcpy(ssid, s, SSID_BUF_SIZE);
+ if (NULL != p)
+ strlcpy(password, p, SSID_BUF_SIZE);
+ LOC_LOGV("ifType: %d, senderId: %d, ssid: %s, password: %s",
+ ifType,
+ senderId,
+ NULL != ssid ? ssid : "",
+ NULL != password ? password : "");
+ }
+
+ inline ~loc_eng_msg_release_wifi()
+ {
+ if (NULL != ssid) {
+ delete[] ssid;
+ }
+ if (NULL != password) {
+ delete[] password;
+ }
+ }
+};
+
+
+struct loc_eng_msg_request_atl : public loc_eng_msg {
+ const int handle;
+ const AGpsType type;
+ inline loc_eng_msg_request_atl(void* instance, int hndl,
+ AGpsType agps_type) :
+ loc_eng_msg(instance, LOC_ENG_MSG_REQUEST_ATL),
+ handle(hndl), type(agps_type)
+ {
+ LOC_LOGV("handle: %d\n agps type: %s",
+ handle,
+ loc_get_agps_type_name(type));
+ }
+};
+
+struct loc_eng_msg_release_atl : public loc_eng_msg {
+ const int handle;
+ inline loc_eng_msg_release_atl(void* instance, int hndl) :
+ loc_eng_msg(instance, LOC_ENG_MSG_RELEASE_ATL), handle(hndl)
+ {
+ LOC_LOGV("handle: %d", handle);
+ }
+};
+
+struct loc_eng_msg_request_ni : public loc_eng_msg {
+ const GpsNiNotification notify;
+ const void *passThroughData;
+ inline loc_eng_msg_request_ni(void* instance,
+ GpsNiNotification &notif, const void* data) :
+ loc_eng_msg(instance, LOC_ENG_MSG_REQUEST_NI),
+ notify(notif), passThroughData(data)
+ {
+ LOC_LOGV("id: %d\n type: %s\n flags: %d\n time out: %d\n default response: %s\n requestor id encoding: %s\n text encoding: %s\n passThroughData: %p",
+ notify.notification_id,
+ loc_get_ni_type_name(notify.ni_type),
+ notify.notify_flags,
+ notify.timeout,
+ loc_get_ni_response_name(notify.default_response),
+ loc_get_ni_encoding_name(notify.requestor_id_encoding),
+ loc_get_ni_encoding_name(notify.text_encoding),
+ passThroughData);
+ }
+};
+
+struct loc_eng_msg_inform_ni_response : public loc_eng_msg {
+ const GpsUserResponseType response;
+ const void *passThroughData;
+ inline loc_eng_msg_inform_ni_response(void* instance,
+ GpsUserResponseType resp,
+ const void* data) :
+ loc_eng_msg(instance, LOC_ENG_MSG_INFORM_NI_RESPONSE),
+ response(resp), passThroughData(data)
+ {
+ LOC_LOGV("response: %s\n passThroughData: %p",
+ loc_get_ni_response_name(response),
+ passThroughData);
+ }
+ inline ~loc_eng_msg_inform_ni_response()
+ {
+ // this is a bit weird since passThroughData is not
+ // allocated by this class. But there is no better way.
+ // passThroughData actually won't be NULL here.
+ // But better safer than sorry.
+ if (NULL != passThroughData) {
+ free((void*)passThroughData);
+ }
+ }
+};
+
+struct loc_eng_msg_set_apn : public loc_eng_msg {
+ char* const apn;
+ inline loc_eng_msg_set_apn(void* instance, const char* name, int len) :
+ loc_eng_msg(instance, LOC_ENG_MSG_SET_APN),
+ apn(new char[len+1])
+ {
+ memcpy((void*)apn, (void*)name, len);
+ apn[len] = 0;
+ LOC_LOGV("apn: %s", apn);
+ }
+ inline ~loc_eng_msg_set_apn()
+ {
+ delete[] apn;
+ }
+};
+
+
+
+struct loc_eng_msg_set_server_ipv4 : public loc_eng_msg {
+ const unsigned int nl_addr;
+ const int port;
+ const LocServerType serverType;
+ inline loc_eng_msg_set_server_ipv4(void* instance,
+ unsigned int ip,
+ int p,
+ LocServerType type) :
+ loc_eng_msg(instance, LOC_ENG_MSG_SET_SERVER_IPV4),
+ nl_addr(ip), port(p), serverType(type)
+ {
+ LOC_LOGV("addr: %x\n , port: %d\n type: %s", nl_addr, port, loc_get_server_type_name(serverType));
+ }
+};
+
+
+struct loc_eng_msg_set_server_url : public loc_eng_msg {
+ const int len;
+ char* const url;
+ inline loc_eng_msg_set_server_url(void* instance,
+ const char* urlString,
+ int url_len) :
+ loc_eng_msg(instance, LOC_ENG_MSG_SET_SERVER_URL),
+ len(url_len), url(new char[len+1])
+ {
+ memcpy((void*)url, (void*)urlString, url_len);
+ url[len] = 0;
+ LOC_LOGV("url: %s", url);
+ }
+ inline ~loc_eng_msg_set_server_url()
+ {
+ delete[] url;
+ }
+};
+
+struct loc_eng_msg_inject_xtra_data : public loc_eng_msg {
+ char* const data;
+ const int length;
+ inline loc_eng_msg_inject_xtra_data(void* instance, char* d, int l) :
+ loc_eng_msg(instance, LOC_ENG_MSG_INJECT_XTRA_DATA),
+ data(new char[l]), length(l)
+ {
+ memcpy((void*)data, (void*)d, l);
+ LOC_LOGV("length: %d\n data: %p", length, data);
+ }
+ inline ~loc_eng_msg_inject_xtra_data()
+ {
+ delete[] data;
+ }
+};
+
+struct loc_eng_msg_atl_open_success : public loc_eng_msg {
+ const AGpsStatusValue agpsType;
+ const int length;
+ char* const apn;
+ const AGpsBearerType bearerType;
+ inline loc_eng_msg_atl_open_success(void* instance,
+ AGpsStatusValue atype,
+ const char* name,
+ int len,
+ AGpsBearerType btype) :
+ loc_eng_msg(instance, LOC_ENG_MSG_ATL_OPEN_SUCCESS),
+ agpsType(atype), length(len),
+ apn(new char[len+1]), bearerType(btype)
+ {
+ memcpy((void*)apn, (void*)name, len);
+ apn[len] = 0;
+ LOC_LOGV("agps type: %s\n apn: %s\n bearer type: %s",
+ loc_get_agps_type_name(agpsType),
+ apn,
+ loc_get_agps_bear_name(bearerType));
+ }
+ inline ~loc_eng_msg_atl_open_success()
+ {
+ delete[] apn;
+ }
+};
+
+struct loc_eng_msg_atl_open_failed : public loc_eng_msg {
+ const AGpsStatusValue agpsType;
+ inline loc_eng_msg_atl_open_failed(void* instance,
+ AGpsStatusValue atype) :
+ loc_eng_msg(instance, LOC_ENG_MSG_ATL_OPEN_FAILED),
+ agpsType(atype)
+ {
+ LOC_LOGV("agps type %s",
+ loc_get_agps_type_name(agpsType));
+ }
+};
+
+struct loc_eng_msg_atl_closed : public loc_eng_msg {
+ const AGpsStatusValue agpsType;
+ inline loc_eng_msg_atl_closed(void* instance,
+ AGpsStatusValue atype) :
+ loc_eng_msg(instance, LOC_ENG_MSG_ATL_CLOSED),
+ agpsType(atype)
+ {
+ LOC_LOGV("agps type %s",
+ loc_get_agps_type_name(agpsType));
+ }
+};
+
+struct loc_eng_msg_set_data_enable : public loc_eng_msg {
+ const int enable;
+ char* const apn;
+ const int length;
+ inline loc_eng_msg_set_data_enable(void* instance,
+ const char* name,
+ int len,
+ int yes) :
+ loc_eng_msg(instance, LOC_ENG_MSG_ENABLE_DATA),
+ enable(yes), apn(new char[len+1]), length(len)
+ {
+ memcpy((void*)apn, (void*)name, len);
+ apn[len] = 0;
+ LOC_LOGV("apn: %s\n enable: %d", apn, enable);
+ }
+ inline ~loc_eng_msg_set_data_enable()
+ {
+ delete[] apn;
+ }
+};
+
+struct loc_eng_msg_request_network_position : public loc_eng_msg {
+ const UlpNetworkRequestPos networkPosRequest;
+ inline loc_eng_msg_request_network_position (void* instance, UlpNetworkRequestPos networkPosReq) :
+ loc_eng_msg(instance, LOC_ENG_MSG_REQUEST_NETWORK_POSIITON),
+ networkPosRequest(networkPosReq)
+ {
+ LOC_LOGV("network position request: desired pos source %d\n request type: %d\n interval ms: %d ",
+ networkPosReq.desired_position_source,
+ networkPosReq.request_type,
+ networkPosReq.interval_ms);
+ }
+};
+
+struct loc_eng_msg_request_phone_context : public loc_eng_msg {
+ const UlpPhoneContextRequest contextRequest;
+ inline loc_eng_msg_request_phone_context (void* instance, UlpPhoneContextRequest contextReq) :
+ loc_eng_msg(instance, LOC_ENG_MSG_REQUEST_PHONE_CONTEXT),
+ contextRequest(contextReq)
+ {
+ LOC_LOGV("phone context request: request type 0x%x context type: 0x%x ",
+ contextRequest.request_type,
+ contextRequest.context_type);
+ }
+};
+
+struct ulp_msg_update_criteria : public loc_eng_msg {
+ const UlpLocationCriteria locationCriteria;
+ inline ulp_msg_update_criteria (void* instance, UlpLocationCriteria criteria) :
+ loc_eng_msg(instance, ULP_MSG_UPDATE_CRITERIA),
+ locationCriteria(criteria)
+ {
+ LOC_LOGV("location criteria: aciton %d\n valid mask: %d\n provider source: %d\n accuracy %d\n recurrence type %d\n min interval %d\n power consumption %d\n intermediate pos %d ",
+ locationCriteria.action,
+ locationCriteria.valid_mask,
+ locationCriteria.provider_source,
+ locationCriteria.preferred_horizontal_accuracy,
+ locationCriteria.recurrence_type,
+ locationCriteria.min_interval,
+ locationCriteria.preferred_power_consumption,
+ locationCriteria.intermediate_pos_report_enabled);
+ }
+};
+
+struct ulp_msg_inject_raw_command : public loc_eng_msg {
+ const char* rawCommand;
+ const int rawCommandLength;
+ inline ulp_msg_inject_raw_command (void* instance, char* command, int length) :
+ loc_eng_msg(instance, ULP_MSG_INJECT_RAW_COMMAND),
+ rawCommand(new char[length]),
+ rawCommandLength(length)
+ {
+ memcpy((void*)rawCommand, (void*)command, length);
+ LOC_LOGV("inject raw command: command %s\n command length: %d\n ",
+ rawCommand,
+ rawCommandLength);
+ }
+
+ inline ~ulp_msg_inject_raw_command()
+ {
+ delete[] rawCommand;
+ }
+};
+
+struct ulp_msg_inject_phone_context_settings : public loc_eng_msg {
+ const UlpPhoneContextSettings phoneSetting;
+ inline ulp_msg_inject_phone_context_settings(void* instance, UlpPhoneContextSettings setting) :
+ loc_eng_msg(instance, ULP_MSG_INJECT_PHONE_CONTEXT_SETTINGS),
+ phoneSetting(setting)
+ {
+ LOC_LOGV("context type: %d\n gps enabled: %d\n network position available %d\n wifi setting enabled %d\n battery charging %d"
+ "is_agps_setting_enabled %d, is_enh_location_services_enabled %d\n",
+ phoneSetting.context_type,
+ phoneSetting.is_gps_enabled,
+ phoneSetting.is_network_position_available,
+ phoneSetting.is_wifi_setting_enabled,
+ phoneSetting.is_battery_charging,
+ phoneSetting.is_agps_enabled,
+ phoneSetting.is_enh_location_services_enabled);
+ }
+};
+
+struct ulp_msg_inject_network_position : public loc_eng_msg {
+ const UlpNetworkPositionReport networkPosition;
+ inline ulp_msg_inject_network_position(void* instance, UlpNetworkPositionReport networkPos) :
+ loc_eng_msg(instance, ULP_MSG_INJECT_NETWORK_POSITION),
+ networkPosition(networkPos)
+ {
+ LOC_LOGV("flags: %d\n source: %d\n latitude: %f\n longitude: %f\n accuracy %d",
+ networkPosition.valid_flag,
+ networkPosition.position.pos_source,
+ networkPosition.position.latitude,
+ networkPosition.position.longitude,
+ networkPosition.position.HEPE);
+ }
+};
+
+struct ulp_msg_report_quipc_position : public loc_eng_msg {
+ const GpsLocation location;
+ const int quipc_error_code;
+ inline ulp_msg_report_quipc_position(void* instance, GpsLocation &loc,
+ int quipc_err) :
+ loc_eng_msg(instance, ULP_MSG_REPORT_QUIPC_POSITION),
+ location(loc), quipc_error_code(quipc_err)
+ {
+ LOC_LOGV("flags: %d\n source: %d\n latitude: %f\n longitude: %f\n altitude: %f\n speed: %f\n bearing: %f\n accuracy: %f\n timestamp: %lld\n rawDataSize: %d\n rawData: %p\n Quipc error: %d",
+ location.flags, location.position_source, location.latitude, location.longitude,
+ location.altitude, location.speed, location.bearing, location.accuracy,
+ location.timestamp, location.rawDataSize, location.rawData,
+ quipc_error_code);
+ }
+};
+
+struct loc_eng_msg_privacy : public loc_eng_msg {
+ const int8_t privacy_setting;
+ inline loc_eng_msg_privacy(void* instance, int8_t privacy_setting) :
+ loc_eng_msg(instance, LOC_ENG_MSG_PRIVACY),
+ privacy_setting(privacy_setting)
+ {
+ LOC_LOGV("privacy_setting: %d", privacy_setting);
+ }
+};
+
+void loc_eng_msg_sender(void* loc_eng_data_p, void* msg);
+int loc_eng_msgget(int * p_req_msgq);
+int loc_eng_msgremove(int req_msgq);
+int loc_eng_msgsnd(int msgqid, void * msgp);
+int loc_eng_msgrcv(int msgqid, void ** msgp);
+int loc_eng_msgsnd_raw(int msgqid, void * msgp, unsigned int msgsz);
+int loc_eng_msgrcv_raw(int msgqid, void *msgp, unsigned int msgsz);
+int loc_eng_msgflush(int msgqid);
+int loc_eng_msgunblock(int msgqid);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* LOC_ENG_MSG_H */