1bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/* Copyright (c) 2011,2014, The Linux Foundation. All rights reserved. 2bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * 3bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * Redistribution and use in source and binary forms, with or without 4bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * modification, are permitted provided that the following conditions are 5bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * met: 6bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * * Redistributions of source code must retain the above copyright 7bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * notice, this list of conditions and the following disclaimer. 8bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * * Redistributions in binary form must reproduce the above 9bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * copyright notice, this list of conditions and the following 10bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * disclaimer in the documentation and/or other materials provided 11bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * with the distribution. 12bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * * Neither the name of The Linux Foundation nor the names of its 13bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * contributors may be used to endorse or promote products derived 14bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * from this software without specific prior written permission. 15bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * 16bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * 28bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo */ 29bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#ifndef LOC_API_RPC_H 30bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#define LOC_API_RPC_H 31bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 32bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <rpc/rpc.h> 33bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <loc_api_rpcgen_common_rpc.h> 34bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <loc_api_rpc_glue.h> 35bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <LocApiBase.h> 36bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <loc_log.h> 37bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 38bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russousing namespace loc_core; 39bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 40bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoclass LocApiRpc : public LocApiBase { 41bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoprotected: 42bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo // RPC communication establishment 43bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo rpc_loc_client_handle_type client_handle; 44bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 45bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoprivate: 46bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int dataEnableLastSet; 47bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo char apnLastSet[MAX_APN_LEN]; 48bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 49bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo static const LOC_API_ADAPTER_EVENT_MASK_T maskAll; 50bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo static const rpc_loc_event_mask_type locBits[]; 51bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo static rpc_loc_event_mask_type convertMask(LOC_API_ADAPTER_EVENT_MASK_T mask); 52bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo static rpc_loc_lock_e_type convertGpsLockMask(LOC_GPS_LOCK_MASK lockMask); 53bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo static enum loc_api_adapter_err convertErr(int rpcErr); 54bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo static GpsNiEncodingType convertNiEncodingType(int loc_encoding); 55bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo static int NIEventFillVerfiyType(GpsNiNotification ¬if, 56bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo rpc_loc_ni_notify_verify_e_type notif_priv); 57bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 58bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo void reportPosition(const rpc_loc_parsed_position_s_type *location_report_ptr); 59bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo void reportSv(const rpc_loc_gnss_info_s_type *gnss_report_ptr); 60bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo void reportStatus(const rpc_loc_status_event_s_type *status_report_ptr); 61bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo void reportNmea(const rpc_loc_nmea_report_s_type *nmea_report_ptr); 62bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo void ATLEvent(const rpc_loc_server_request_s_type *server_request_ptr); 63bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo void NIEvent(const rpc_loc_ni_event_s_type *ni_req_ptr); 64bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 65bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoprotected: 66bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 67bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo open(LOC_API_ADAPTER_EVENT_MASK_T mask); 68bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 69bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo close(); 70bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 71bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russopublic: 72bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LocApiRpc(const MsgTask* msgTask, 73bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_API_ADAPTER_EVENT_MASK_T exMask); 74bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ~LocApiRpc(); 75bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 76bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual int locEventCB(rpc_loc_client_handle_type client_handle, 77bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo rpc_loc_event_mask_type loc_event, 78bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo const rpc_loc_event_payload_u_type* loc_event_payload); 79bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 80bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo void locRpcGlobalCB(CLIENT* clnt, enum rpc_reset_event event); 81bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 82bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo // RPC adapter interface implementations 83bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 84bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo startFix(const LocPosMode& posMode); 85bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 86bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo stopFix(); 87bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 88bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo setPositionMode(const LocPosMode& mode); 89bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo inline virtual enum loc_api_adapter_err 90bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo enableData(int enable) { return enableData(enable, false); } 91bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 92bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo enableData(int enable, boolean force); 93bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 94bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo setTime(GpsUtcTime time, int64_t timeReference, int uncertainty); 95bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 96bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo injectPosition(double latitude, double longitude, float accuracy); 97bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 98bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo deleteAidingData(GpsAidingData f); 99bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 100bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo informNiResponse(GpsUserResponseType userResponse, const void* passThroughData); 101bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo inline virtual enum loc_api_adapter_err 102bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo setAPN(char* apn, int len) { return setAPN(apn, len, false); } 103bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 104bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo setAPN(char* apn, int len, boolean force); 105bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 106bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo setServer(const char* url, int len); 107bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 108bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo setServer(unsigned int ip, int port, LocServerType type); 109bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 110bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo setXtraData(char* data, int length); 111bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 112bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo requestXtraServer(); 113bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 114bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo atlOpenStatus(int handle, int is_succ, char* apn, AGpsBearerType bear, AGpsType agpsType); 115bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 116bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo atlCloseStatus(int handle, int is_succ); 117bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual enum loc_api_adapter_err 118bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo setSUPLVersion(uint32_t version); 119bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual void setInSession(bool inSession); 120bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 121bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo /*Values for lock 122bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 1 = Do not lock any position sessions 123bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 2 = Lock MI position sessions 124bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 3 = Lock MT position sessions 125bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 4 = Lock all position sessions 126bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo */ 127bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual int setGpsLock(LOC_GPS_LOCK_MASK lock); 128bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo /* 129bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Returns 130bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Current value of GPS Lock on success 131bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo -1 on failure 132bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo */ 133bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo virtual int getGpsLock(void); 134bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo}; 135bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 136bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoextern "C" LocApiBase* getLocApi(const MsgTask* msgTask, 137bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_API_ADAPTER_EVENT_MASK_T exMask, 138bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ContextBase *context); 139bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 140bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#endif //LOC_API_RPC_H 141