147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo/* Copyright (c) 2011,2014, The Linux Foundation. All rights reserved. 234ee09551764b045fdc02df754157473125edf60Kevin Tang * 334ee09551764b045fdc02df754157473125edf60Kevin Tang * Redistribution and use in source and binary forms, with or without 434ee09551764b045fdc02df754157473125edf60Kevin Tang * modification, are permitted provided that the following conditions are 534ee09551764b045fdc02df754157473125edf60Kevin Tang * met: 634ee09551764b045fdc02df754157473125edf60Kevin Tang * * Redistributions of source code must retain the above copyright 734ee09551764b045fdc02df754157473125edf60Kevin Tang * notice, this list of conditions and the following disclaimer. 834ee09551764b045fdc02df754157473125edf60Kevin Tang * * Redistributions in binary form must reproduce the above 934ee09551764b045fdc02df754157473125edf60Kevin Tang * copyright notice, this list of conditions and the following 1034ee09551764b045fdc02df754157473125edf60Kevin Tang * disclaimer in the documentation and/or other materials provided 1134ee09551764b045fdc02df754157473125edf60Kevin Tang * with the distribution. 12e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo * * Neither the name of The Linux Foundation nor the names of its 1334ee09551764b045fdc02df754157473125edf60Kevin Tang * contributors may be used to endorse or promote products derived 1434ee09551764b045fdc02df754157473125edf60Kevin Tang * from this software without specific prior written permission. 1534ee09551764b045fdc02df754157473125edf60Kevin Tang * 1634ee09551764b045fdc02df754157473125edf60Kevin Tang * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 1734ee09551764b045fdc02df754157473125edf60Kevin Tang * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1834ee09551764b045fdc02df754157473125edf60Kevin Tang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 1934ee09551764b045fdc02df754157473125edf60Kevin Tang * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 2034ee09551764b045fdc02df754157473125edf60Kevin Tang * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2134ee09551764b045fdc02df754157473125edf60Kevin Tang * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2234ee09551764b045fdc02df754157473125edf60Kevin Tang * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2334ee09551764b045fdc02df754157473125edf60Kevin Tang * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2434ee09551764b045fdc02df754157473125edf60Kevin Tang * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 2534ee09551764b045fdc02df754157473125edf60Kevin Tang * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 2634ee09551764b045fdc02df754157473125edf60Kevin Tang * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2734ee09551764b045fdc02df754157473125edf60Kevin Tang * 2834ee09551764b045fdc02df754157473125edf60Kevin Tang */ 29e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#ifndef LOC_API_RPC_H 30e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#define LOC_API_RPC_H 3134ee09551764b045fdc02df754157473125edf60Kevin Tang 3234ee09551764b045fdc02df754157473125edf60Kevin Tang#include <rpc/rpc.h> 33e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#include <loc_api_rpcgen_common_rpc.h> 3434ee09551764b045fdc02df754157473125edf60Kevin Tang#include <loc_api_rpc_glue.h> 35e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#include <LocApiBase.h> 36e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#include <loc_log.h> 3734ee09551764b045fdc02df754157473125edf60Kevin Tang 38e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russousing namespace loc_core; 3934ee09551764b045fdc02df754157473125edf60Kevin Tang 40e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoclass LocApiRpc : public LocApiBase { 41e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoprotected: 4234ee09551764b045fdc02df754157473125edf60Kevin Tang // RPC communication establishment 4334ee09551764b045fdc02df754157473125edf60Kevin Tang rpc_loc_client_handle_type client_handle; 4434ee09551764b045fdc02df754157473125edf60Kevin Tang 45e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoprivate: 46e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo int dataEnableLastSet; 47e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo char apnLastSet[MAX_APN_LEN]; 48e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 49e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo static const LOC_API_ADAPTER_EVENT_MASK_T maskAll; 5034ee09551764b045fdc02df754157473125edf60Kevin Tang static const rpc_loc_event_mask_type locBits[]; 5134ee09551764b045fdc02df754157473125edf60Kevin Tang static rpc_loc_event_mask_type convertMask(LOC_API_ADAPTER_EVENT_MASK_T mask); 528aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang static rpc_loc_lock_e_type convertGpsLockMask(LOC_GPS_LOCK_MASK lockMask); 5334ee09551764b045fdc02df754157473125edf60Kevin Tang static enum loc_api_adapter_err convertErr(int rpcErr); 54e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo static GpsNiEncodingType convertNiEncodingType(int loc_encoding); 55e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo static int NIEventFillVerfiyType(GpsNiNotification ¬if, 56e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo rpc_loc_ni_notify_verify_e_type notif_priv); 5734ee09551764b045fdc02df754157473125edf60Kevin Tang 5834ee09551764b045fdc02df754157473125edf60Kevin Tang void reportPosition(const rpc_loc_parsed_position_s_type *location_report_ptr); 5934ee09551764b045fdc02df754157473125edf60Kevin Tang void reportSv(const rpc_loc_gnss_info_s_type *gnss_report_ptr); 6034ee09551764b045fdc02df754157473125edf60Kevin Tang void reportStatus(const rpc_loc_status_event_s_type *status_report_ptr); 6134ee09551764b045fdc02df754157473125edf60Kevin Tang void reportNmea(const rpc_loc_nmea_report_s_type *nmea_report_ptr); 6234ee09551764b045fdc02df754157473125edf60Kevin Tang void ATLEvent(const rpc_loc_server_request_s_type *server_request_ptr); 6334ee09551764b045fdc02df754157473125edf60Kevin Tang void NIEvent(const rpc_loc_ni_event_s_type *ni_req_ptr); 64e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 65e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoprotected: 66e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo virtual enum loc_api_adapter_err 67e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo open(LOC_API_ADAPTER_EVENT_MASK_T mask); 68e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo virtual enum loc_api_adapter_err 69e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo close(); 7034ee09551764b045fdc02df754157473125edf60Kevin Tang 7134ee09551764b045fdc02df754157473125edf60Kevin Tangpublic: 72e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LocApiRpc(const MsgTask* msgTask, 73e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo LOC_API_ADAPTER_EVENT_MASK_T exMask); 74e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo ~LocApiRpc(); 7534ee09551764b045fdc02df754157473125edf60Kevin Tang 76e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo virtual int locEventCB(rpc_loc_client_handle_type client_handle, 7734ee09551764b045fdc02df754157473125edf60Kevin Tang rpc_loc_event_mask_type loc_event, 7834ee09551764b045fdc02df754157473125edf60Kevin Tang const rpc_loc_event_payload_u_type* loc_event_payload); 7934ee09551764b045fdc02df754157473125edf60Kevin Tang 8034ee09551764b045fdc02df754157473125edf60Kevin Tang void locRpcGlobalCB(CLIENT* clnt, enum rpc_reset_event event); 8134ee09551764b045fdc02df754157473125edf60Kevin Tang 8234ee09551764b045fdc02df754157473125edf60Kevin Tang // RPC adapter interface implementations 8334ee09551764b045fdc02df754157473125edf60Kevin Tang virtual enum loc_api_adapter_err 84e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo startFix(const LocPosMode& posMode); 8534ee09551764b045fdc02df754157473125edf60Kevin Tang virtual enum loc_api_adapter_err 8634ee09551764b045fdc02df754157473125edf60Kevin Tang stopFix(); 8734ee09551764b045fdc02df754157473125edf60Kevin Tang virtual enum loc_api_adapter_err 88e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo setPositionMode(const LocPosMode& mode); 89e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo inline virtual enum loc_api_adapter_err 90e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo enableData(int enable) { return enableData(enable, false); } 9134ee09551764b045fdc02df754157473125edf60Kevin Tang virtual enum loc_api_adapter_err 92e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo enableData(int enable, boolean force); 9334ee09551764b045fdc02df754157473125edf60Kevin Tang virtual enum loc_api_adapter_err 9434ee09551764b045fdc02df754157473125edf60Kevin Tang setTime(GpsUtcTime time, int64_t timeReference, int uncertainty); 9534ee09551764b045fdc02df754157473125edf60Kevin Tang virtual enum loc_api_adapter_err 9634ee09551764b045fdc02df754157473125edf60Kevin Tang injectPosition(double latitude, double longitude, float accuracy); 9734ee09551764b045fdc02df754157473125edf60Kevin Tang virtual enum loc_api_adapter_err 9834ee09551764b045fdc02df754157473125edf60Kevin Tang deleteAidingData(GpsAidingData f); 9934ee09551764b045fdc02df754157473125edf60Kevin Tang virtual enum loc_api_adapter_err 10034ee09551764b045fdc02df754157473125edf60Kevin Tang informNiResponse(GpsUserResponseType userResponse, const void* passThroughData); 101e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo inline virtual enum loc_api_adapter_err 102e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo setAPN(char* apn, int len) { return setAPN(apn, len, false); } 10334ee09551764b045fdc02df754157473125edf60Kevin Tang virtual enum loc_api_adapter_err 104e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo setAPN(char* apn, int len, boolean force); 10534ee09551764b045fdc02df754157473125edf60Kevin Tang virtual enum loc_api_adapter_err 10634ee09551764b045fdc02df754157473125edf60Kevin Tang setServer(const char* url, int len); 10734ee09551764b045fdc02df754157473125edf60Kevin Tang virtual enum loc_api_adapter_err 10834ee09551764b045fdc02df754157473125edf60Kevin Tang setServer(unsigned int ip, int port, LocServerType type); 10934ee09551764b045fdc02df754157473125edf60Kevin Tang virtual enum loc_api_adapter_err 11034ee09551764b045fdc02df754157473125edf60Kevin Tang setXtraData(char* data, int length); 11134ee09551764b045fdc02df754157473125edf60Kevin Tang virtual enum loc_api_adapter_err 112e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo requestXtraServer(); 113e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo virtual enum loc_api_adapter_err 11434ee09551764b045fdc02df754157473125edf60Kevin Tang atlOpenStatus(int handle, int is_succ, char* apn, AGpsBearerType bear, AGpsType agpsType); 11534ee09551764b045fdc02df754157473125edf60Kevin Tang virtual enum loc_api_adapter_err 11634ee09551764b045fdc02df754157473125edf60Kevin Tang atlCloseStatus(int handle, int is_succ); 11734ee09551764b045fdc02df754157473125edf60Kevin Tang virtual enum loc_api_adapter_err 11834ee09551764b045fdc02df754157473125edf60Kevin Tang setSUPLVersion(uint32_t version); 1190ed9ab19618e840907e343877bf91bd30aba8be9Vineeta Srivastava virtual void setInSession(bool inSession); 12047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 12147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo /*Values for lock 12247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 1 = Do not lock any position sessions 12347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 2 = Lock MI position sessions 12447ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 3 = Lock MT position sessions 12547ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo 4 = Lock all position sessions 12647ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo */ 1278aa503a872e8c8cf241061f6ffed4e9fba125ffeKevin Tang virtual int setGpsLock(LOC_GPS_LOCK_MASK lock); 12847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo /* 12947ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo Returns 13047ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo Current value of GPS Lock on success 13147ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo -1 on failure 13247ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo */ 13347ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo virtual int getGpsLock(void); 13434ee09551764b045fdc02df754157473125edf60Kevin Tang}; 13534ee09551764b045fdc02df754157473125edf60Kevin Tang 136e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russoextern "C" LocApiBase* getLocApi(const MsgTask* msgTask, 13747ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo LOC_API_ADAPTER_EVENT_MASK_T exMask, 13847ad5e4cf2f6810db3c0e7ec79696496a94b6f0dDante Russo ContextBase *context); 139e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo 140e14a6c846df2ce4bb1847e4250991f7c52fd793dDante Russo#endif //LOC_API_RPC_H 141