---
 include/agps.h |  157 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 157 insertions(+), 0 deletions(-)
 create mode 100644 include/agps.h

diff --git a/include/agps.h b/include/agps.h
new file mode 100644
index 0000000..54f9b53
--- /dev/null
+++ b/include/agps.h
@@ -0,0 +1,157 @@
+/*
+ *
+ *  oFono - Open Source Telephony
+ *
+ *  Copyright (C) 2008-2010  Intel Corporation. All rights reserved.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License version 2 as
+ *  published by the Free Software Foundation.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#ifndef __OFONO_AGPS_H_
+#define __OFONO_AGPS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <ofono/types.h>
+
+enum ofono_lcs_frame_type {
+       RRLP_ASSISTANCE_DATA = 0,               /* from modem */
+       /* Position request can include assistance data as well */
+       RRLP_MEASURE_POSITION_REQUEST = 1,      /* from modem */
+       RRLP_MEASURE_POSITION_RESPONSE = 2,     /* from GPS */
+       RRC_ASSISTANCE_DATA_DELIVERY = 3,       /* from modem */
+       /* Measurement control can include assistance data as well */
+       RRC_MEASUREMENT_CONTROL = 4,            /* from modem */
+       RRC_MEASUREMENT_REPORT = 5,             /* from GPS */
+};
+
+enum ofono_access_technology {
+       RADIO_ACCESS_TECHNOLOGY_GSM = 0,                /* GSM */
+       RADIO_ACCESS_TECHNOLOGY_UMTS = 1,               /* UMTS */
+};
+
+enum ofono_rrc_state {
+       RRC_CELL_PCH = 0,
+       RRC_CELL_FACH = 1,
+       RRC_CELL_DCH = 2,
+       RRC_URA_PCH = 3,
+};
+
+struct ofono_lcs_frame {
+       enum ofono_lcs_frame_type lcs_frame_type;
+       int frame_length;       /* size of raw_frame in bytes */
+       unsigned char  *raw_frame;
+};
+
+struct ofono_lcs_gsm_fn {
+       int TDMA_frame_number;  /* range 0 - 2715647 (2048*26*51) */
+       int TDMA_timeslot;              /* range 0 - 7 */
+       int timeslot_bit;               /* range 0 - 156 */
+       int timing_advance;             /* range 0 - 63 */
+       int bcch_arfcn;                 /* range 0 - 1023 */
+       int bsic;                               /* range 0 - 64 */
+};
+
+struct ofono_lcs_utran_fn {
+       int sfn;                                /* range 0 - 4095 */
+       int rrc_state;                  /* enum ofono_rrc_state */
+       int round_trip_time;    /* range 0 - 32766 */
+};
+
+struct ofono_lcs_radio_fn {
+       int radio_access_technology; /* enum access_technology */
+       union {
+               struct ofono_lcs_gsm_fn         gsm_frame_number;
+               struct ofono_lcs_utran_fn       utran_frame_number;
+       };
+};
+
+struct ofono_agps;
+
+typedef void (*ofono_agps_send_lcs_frame_cb_t)(const struct ofono_error *error,
+                               void *data);
+typedef void (*ofono_agps_receive_lcs_frame_cb_t)(
+                               const struct ofono_error *error,
+                               void *data);
+typedef void (*ofono_agps_inject_time_cb_t)(const struct ofono_error *error,
+                               struct ofono_lcs_radio_fn *radio_frame_number,
+                               void *data);
+
+       /*
+        * AGPS related functions, including LCS frame forwarding and
+        * fine time injection
+        */
+struct ofono_agps_driver {
+       const char *name;
+       int (*probe)(struct ofono_agps *agps, unsigned int vendor,
+                       void *data);
+       void (*remove)(struct ofono_agps *agps);
+
+       /* The GPS manager can configure the modem to notify Assistance Data and
+        * Position Requests from the Mobile Network by setting the LcsEnabled
+        * status to true. If false, no notifications are sent from modem.
+        */
+       void (*receive_lcs_frames)(struct ofono_agps *agps, int enabled,
+                       ofono_agps_receive_lcs_frame_cb_t cb, void *data);
+
+       /* Assistance Data and Position Requests from the Mobile Network are
+        * signalled via the ofono_agps_lcs_frame_notify function and the
+        * oFono core to an external GPS manager. This GPS manager can reply
+        * to Position Requests with one or more Position Responses which
+        * are then send back to the modem via the send_lcs_frame function.
+        */
+       void (*send_lcs_frame)(struct ofono_agps *agps,
+                       struct ofono_lcs_frame *frame,
+                       ofono_agps_send_lcs_frame_cb_t cb, void *data);
+
+       /* The GPS manager can ask the modem to generate a HW pulse (time
+        * stamp) with a defined length and the modem replies indicates when
+        * it generates the pulse. But as the modem has no precise idea of
+        * Universal Time, it indicates at which radio frame number it
+        * generated the pulse. The GPS manager which knows the link between
+        * Universal Time and the Radio Frame number knows very precisely at
+        * what time the pulse was generated and its duration.
+        *
+        * Timing accuracy is typically a few microseconds.
+        */
+       void (*inject_time)(struct ofono_agps *agps,
+       int radio_access_technology, /* enum access_technology */
+       int pulse_length, /* duration of pulse in radio slots */
+       ofono_agps_inject_time_cb_t cb, void *data);
+};
+
+int ofono_agps_driver_register(const struct ofono_agps_driver *d);
+void ofono_agps_driver_unregister(const struct ofono_agps_driver *d);
+
+struct ofono_agps *ofono_agps_create(struct ofono_modem *modem,
+                                       unsigned int vendor, const char *driver,
+                                       void *data);
+
+void ofono_agps_register(struct ofono_agps *agps);
+void ofono_agps_remove(struct ofono_agps *agps);
+
+void ofono_agps_set_data(struct ofono_agps *agps, void *data);
+void *ofono_agps_get_data(struct ofono_agps *agps);
+
+void ofono_agps_lcs_frame_notify(struct ofono_agps *agps,
+                       struct ofono_lcs_frame frame);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __OFONO_AGPS_H */
-- 
1.7.0.4

_______________________________________________
ofono mailing list
ofono@ofono.org
http://lists.ofono.org/listinfo/ofono

Reply via email to