summaryrefslogtreecommitdiff
path: root/gril/gril.h
diff options
context:
space:
mode:
authorTony Espy <espy@canonical.com>2015-10-13 18:07:52 +0200
committerDenis Kenzior <denkenz@gmail.com>2015-10-13 16:02:11 -0500
commit9c2af753c0ca7e344019e33911bc590f35f81b12 (patch)
tree25611b0d70fedde1397eb3002c32e7d26f77ab6f /gril/gril.h
parentab9fedc6ef3bde5855b2776acfae59aaae3e787a (diff)
downloadofono-9c2af753c0ca7e344019e33911bc590f35f81b12.tar.gz
gril: Library to communicate with rild
gril is a library used to communicate with rild, the Android telephony daemon. Communication happens using a named socket over which binder parcels are transmitted. Co-authored-by: Tony Espy <espy@canonical.com> Co-authored-by: Ricardo Salveti de Araujo <ricardo.salveti@canonical.com> Co-authored-by: Alfonso Sanchez-Beato <alfonso.sanchez-beato@canonical.com> Co-authored-by: Mikko Hurskainen <mikko.hurskainen@nomovok.com> Co-authored-by: You-Sheng Yang <vicamo.yang@canonical.com> Co-authored-by: Ratchanan Srirattanamet <peathot@hotmail.com>
Diffstat (limited to 'gril/gril.h')
-rw-r--r--gril/gril.h172
1 files changed, 172 insertions, 0 deletions
diff --git a/gril/gril.h b/gril/gril.h
new file mode 100644
index 00000000..7d64e7ea
--- /dev/null
+++ b/gril/gril.h
@@ -0,0 +1,172 @@
+/*
+ *
+ * RIL library with GLib integration
+ *
+ * Copyright (C) 2008-2011 Intel Corporation. All rights reserved.
+ * Copyright (C) 2012 Canonical Ltd.
+ *
+ * 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 __GRIL_H
+#define __GRIL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "grilio.h"
+#include "grilutil.h"
+#include "parcel.h"
+#include "ril_constants.h"
+#include "drivers/rilmodem/vendor.h"
+
+#define RIL_MAX_NUM_ACTIVE_DATA_CALLS 2
+
+struct _GRil;
+
+typedef struct _GRil GRil;
+
+/*
+ * This struct represents an entire RIL message read
+ * from the command socket. It can hold responses or
+ * unsolicited requests from RILD.
+ */
+struct ril_msg {
+ gchar *buf;
+ gsize buf_len;
+ gboolean unsolicited;
+ int req;
+ int serial_no;
+ int error;
+};
+
+typedef void (*GRilResponseFunc)(struct ril_msg *message, gpointer user_data);
+
+typedef void (*GRilNotifyFunc)(struct ril_msg *message, gpointer user_data);
+
+typedef const char *(*GRilMsgIdToStrFunc)(int msg_id);
+
+/**
+ * TRACE:
+ * @fmt: format string
+ * @arg...: list of arguments
+ *
+ * Simple macro around ofono_debug() used for tracing RIL messages
+ * name it is called in.
+ */
+#define G_RIL_TRACE(gril, fmt, arg...) do { \
+ if (gril && g_ril_get_trace(gril)) \
+ ofono_debug(fmt, ## arg); \
+} while (0)
+
+extern char print_buf[];
+
+#define g_ril_print_request(gril, token, req) \
+ G_RIL_TRACE(gril, "[%d,%04d]> %s %s", \
+ g_ril_get_slot(gril), token, \
+ g_ril_request_id_to_string(gril, req), print_buf)
+#define g_ril_print_request_no_args(gril, token, req) \
+ G_RIL_TRACE(gril, "[%d,%04d]> %s", \
+ g_ril_get_slot(gril), token, \
+ g_ril_request_id_to_string(gril, req))
+#define g_ril_print_response(gril, message) \
+ G_RIL_TRACE(gril, "[%d,%04d]< %s %s", \
+ g_ril_get_slot(gril), \
+ message->serial_no, \
+ g_ril_request_id_to_string(gril, message->req), \
+ print_buf)
+#define g_ril_print_response_no_args(gril, message) \
+ G_RIL_TRACE(gril, "[%d,%04d]< %s", \
+ g_ril_get_slot(gril), message->serial_no, \
+ g_ril_request_id_to_string(gril, message->req))
+
+#define g_ril_append_print_buf(gril, x...) do { \
+ if (gril && g_ril_get_trace(gril)) \
+ sprintf(print_buf, x); \
+} while (0)
+
+#define g_ril_print_unsol(gril, message) \
+ G_RIL_TRACE(gril, "[%d,UNSOL]< %s %s", \
+ g_ril_get_slot(gril), \
+ g_ril_unsol_request_to_string(gril, \
+ message->req), \
+ print_buf)
+#define g_ril_print_unsol_no_args(gril, message) \
+ G_RIL_TRACE(gril, "[%d,UNSOL]< %s", g_ril_get_slot(gril), \
+ g_ril_unsol_request_to_string(gril, message->req))
+
+void g_ril_init_parcel(const struct ril_msg *message, struct parcel *rilp);
+
+GRil *g_ril_new(const char *sock_path, enum ofono_ril_vendor vendor);
+
+GIOChannel *g_ril_get_channel(GRil *ril);
+GRilIO *g_ril_get_io(GRil *ril);
+
+GRil *g_ril_ref(GRil *ril);
+void g_ril_unref(GRil *ril);
+
+GRil *g_ril_clone(GRil *ril);
+
+void g_ril_set_disconnect_function(GRil *ril, GRilDisconnectFunc disconnect,
+ gpointer user_data);
+
+gboolean g_ril_get_trace(GRil *ril);
+gboolean g_ril_set_trace(GRil *ril, gboolean trace);
+
+int g_ril_get_slot(GRil *ril);
+gboolean g_ril_set_slot(GRil *ril, int slot);
+
+/*!
+ * If the function is not NULL, then on every read/write from the GIOChannel
+ * provided to GRil the logging function will be called with the
+ * input/output string and user data
+ */
+gboolean g_ril_set_debugf(GRil *ril, GRilDebugFunc func, gpointer user_data);
+
+gboolean g_ril_set_vendor_print_msg_id_funcs(GRil *ril,
+ GRilMsgIdToStrFunc req_to_string,
+ GRilMsgIdToStrFunc unsol_to_string);
+
+
+/*!
+ * Queue an RIL request for execution. The request contents are given
+ * in data. Once the command executes, the callback function given by
+ * func is called with user provided data in user_data.
+ *
+ * Returns an id of the queued command which can be canceled using
+ * g_ril_cancel. If an error occurred, an id of 0 is returned.
+ *
+ */
+gint g_ril_send(GRil *ril, const gint reqid, struct parcel *rilp,
+ GRilResponseFunc func, gpointer user_data,
+ GDestroyNotify notify);
+
+guint g_ril_register(GRil *ril, const int req,
+ GRilNotifyFunc func, gpointer user_data);
+
+gboolean g_ril_unregister(GRil *ril, guint id);
+gboolean g_ril_unregister_all(GRil *ril);
+
+enum ofono_ril_vendor g_ril_vendor(GRil *ril);
+
+const char *g_ril_request_id_to_string(GRil *ril, int req);
+const char *g_ril_unsol_request_to_string(GRil *ril, int req);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __GRIL_H */