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