summaryrefslogtreecommitdiffstats
path: root/qmi-ril.h
diff options
context:
space:
mode:
Diffstat (limited to 'qmi-ril.h')
-rw-r--r--qmi-ril.h253
1 files changed, 253 insertions, 0 deletions
diff --git a/qmi-ril.h b/qmi-ril.h
new file mode 100644
index 0000000..b32705a
--- /dev/null
+++ b/qmi-ril.h
@@ -0,0 +1,253 @@
+/*
+ * This file is part of QMI-RIL.
+ *
+ * Copyright (C) 2010-2011 Joerie de Gram <j.de.gram@gmail.com>
+ * Copyright (C) 2011-2014 Paul Kocialkowski <contact@paulk.fr>
+ * Copyright (C) 2017 Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de>
+ *
+ * QMI-RIL is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * QMI-RIL 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 QMI-RIL. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _QMI_RIL_H_
+#define _QMI_RIL_H_
+
+#include <stdlib.h>
+#include <string.h>
+#include <pthread.h>
+
+#include <glib.h>
+#include <libqmi-glib.h>
+
+#include <telephony/ril.h>
+
+#include <utils.h>
+
+/*
+ * Values
+ */
+
+#define RIL_VERSION_STRING "QMI-RIL"
+
+/*
+ * Macros
+ */
+
+#ifdef ALOGI
+#define RIL_LOGI ALOGI
+#else
+#define RIL_LOGI LOGI
+#endif
+
+#ifdef ALOGD
+#define RIL_LOGD ALOGD
+#else
+#define RIL_LOGD LOGD
+#endif
+
+#ifdef ALOGE
+#define RIL_LOGE ALOGE
+#else
+#define RIL_LOGE LOGE
+#endif
+
+#define RIL_REQUEST_LOCK() pthread_mutex_lock(&ril_data->request_mutex)
+#define RIL_REQUEST_UNLOCK() pthread_mutex_unlock(&ril_data->request_mutex)
+
+/*
+ * RIL request
+ */
+
+enum {
+ RIL_REQUEST_PENDING,
+ RIL_REQUEST_HANDLED,
+ RIL_REQUEST_UNHANDLED,
+ RIL_REQUEST_COMPLETED,
+};
+
+struct ril_request_handler {
+ int request;
+ int (*handler)(void *data, size_t size, RIL_Token token);
+};
+
+struct ril_request {
+ int request;
+ void *data;
+ size_t size;
+ RIL_Token token;
+
+ int status;
+};
+
+extern struct ril_request_handler ril_request_handlers[];
+extern unsigned int ril_request_handlers_count;
+
+int ril_request_register(int request, void *data, size_t size, RIL_Token token);
+int ril_request_unregister(struct ril_request *request);
+int ril_request_flush(void);
+struct ril_request *ril_request_find(void);
+struct ril_request *ril_request_find_request_status(int request, int status);
+struct ril_request *ril_request_find_request(int request);
+struct ril_request *ril_request_find_token(RIL_Token token);
+struct ril_request *ril_request_find_status(int status);
+int ril_request_complete(RIL_Token token, RIL_Errno error, void *data,
+ size_t size);
+int ril_request_unsolicited(int request, void *data, size_t size);
+int ril_request_timed_callback(RIL_TimedCallback callback, void *data,
+ const struct timeval *time);
+
+/*
+ * RIL request data
+ */
+
+struct ril_request_data {
+ int request;
+ void *data;
+ size_t size;
+};
+
+int ril_request_data_register(int request, void *data, size_t size);
+int ril_request_data_unregister(struct ril_request_data *request_data);
+int ril_request_data_flush(void);
+struct ril_request_data *ril_request_data_find_request(int request);
+int ril_request_data_free(int request);
+int ril_request_data_set(int request, void *data, size_t size);
+int ril_request_data_set_uniq(int request, void *data, size_t size);
+size_t ril_request_data_size_get(int request);
+void *ril_request_data_get(int request);
+
+/*
+ * RIL radio state
+ */
+
+int ril_radio_state_update(RIL_RadioState radio_state);
+int ril_radio_state_check(RIL_RadioState radio_state);
+
+/*
+ * RIL data
+ */
+
+struct ril_data_connection {
+ guint32 packet_data_handle;
+
+ gboolean raw_ip_mode;
+ int status;
+ int active;
+
+ const char *iface;
+ char *type;
+ char *ip_addr;
+ char *subnet_mask;
+ char *gateway;
+ char *dns1;
+ char *dns2;
+};
+
+struct ril_data {
+ const struct RIL_Env *env;
+
+ RIL_RadioState radio_state;
+ char *sim_pin;
+
+ struct list_head *requests;
+ struct list_head *requests_data;
+
+ struct ril_data_connection data_connection;
+
+ pthread_t request_thread;
+ pthread_mutex_t request_mutex;
+};
+
+extern struct ril_data *ril_data;
+
+int ril_data_create(void);
+int ril_data_destroy(void);
+
+/* Context */
+typedef struct {
+ GFile *file;
+ QmiDevice *device;
+ QmiClientDms *DmsClient;
+ QmiClientNas *NasClient;
+ QmiClientUim *UimClient;
+ QmiClientWds *WdsClient;
+ QmiClientWda *WdaClient;
+ GCancellable *cancellable;
+
+ guint dms_event_report_indication_id;
+ guint serving_system_indication_id;
+ guint nas_event_report_indication_id;
+ guint packet_status_timeout_id;
+} Context;
+Context *ctx;
+
+int create_qmi_clients(void);
+int all_clients_running(void);
+
+/*
+ * Power
+ */
+
+void dms_event_report_indication_cb(QmiClientDms *client,
+ QmiIndicationDmsEventReportOutput *output);
+int ril_request_radio_power(void *data, size_t size, RIL_Token token);
+
+/*
+ * Call
+ */
+
+int ril_request_get_current_calls(void *data, size_t size, RIL_Token token);
+
+/*
+ * SIM
+ */
+
+int ril_request_get_sim_status(void *data, size_t size, RIL_Token token);
+int ril_request_query_facility_lock(void *data, size_t size, RIL_Token token);
+int ril_request_sim_io(void *data, size_t size, RIL_Token token);
+
+/*
+ * Network
+ */
+
+void serving_system_indication_cb(QmiClientNas *client,
+ QmiIndicationNasServingSystemOutput *output);
+void nas_event_report_indication_cb(QmiClientNas *client,
+ QmiIndicationNasEventReportOutput *output);
+int ril_request_signal_strength(void *data, size_t size, RIL_Token token);
+int ril_request_query_network_selection_mode(void *data, size_t size,
+ RIL_Token token);
+int ril_request_operator(void *data, size_t size, RIL_Token token);
+int ril_request_registration_state(void *data, size_t size,
+ RIL_Token token);
+int ril_request_set_preferred_network_type(void *data, size_t size,
+ RIL_Token token);
+void qmi_set_raw_ip_mode(void);
+
+/*
+ * Misc
+ */
+
+int ril_request_baseband_version(void *data, size_t size, RIL_Token token);
+int ril_request_get_imsi(void *data, size_t size, RIL_Token token);
+int ril_request_get_imei(void *data, size_t size, RIL_Token token);
+int ril_request_get_imeisv(void *data, size_t size, RIL_Token token);
+int ril_request_screen_state(void *data, size_t size, RIL_Token token);
+
+/*
+ * Data
+ */
+
+int ril_request_setup_data_call(void *data, size_t size, RIL_Token token);
+
+#endif