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 &notif,
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