diff options
Diffstat (limited to 'qmi-ril.h')
-rw-r--r-- | qmi-ril.h | 253 |
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 |