blob: f435ad86e2ee50e65746d3f3e82bec68a0ce1d53 [file] [log] [blame]
/*
* Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/*
* qmidev: External interface to libqmi.
*
* Sources used in writing this file (see README for links):
* [Gobi]/GobiConnectionMgmtAPI.h
* [Gobi]/GobiConnectionMgmtAPIEnums.h
* [Gobi]/GobiConnectionMgmtAPIStructs.h
*/
#ifndef LIBQMI_INCLUDE_QMIDEV_H
#define LIBQMI_INCLUDE_QMIDEV_H
#include <stddef.h>
#include <stdint.h>
typedef unsigned char byte;
/*
* Type of a QMI device. May be created with qmidev_new_file and destroyed
* with qmidev_destroy.
*/
typedef struct qmidev qmidev;
/* GENERIC RESPONSE FUNCTIONS */
/*
* Callback type for a method that returns no data besides the status of the
* method call. dev is the device on which the method was called; context is
* the context passed to the method, and status is the status of the call.
*
* If the call made it to the device and the device returned success, status
* will be QMIDEV_ERR_NONE (0). If the call made it to the device but failed,
* the status will be the sum of QMIDEV_ERR_QMI_OFFSET and the QMI error (a
* QMIDEV_QMI_ERR_* constant). If the call failed without the device
* returning a response, the status will be a QMIDEV_ERR_* constant.
*/
typedef void (*qmidev_response_fn)(
qmidev *dev,
void *context,
int status);
/*
* Callback type for a method that returns a single int value.
*
* result is the result of the method call, if it succeeded.
*
* See qmidev_response_fn for more details.
*/
typedef void (*qmidev_int_response_fn)(
qmidev *dev,
void *context,
int status,
int result);
/*
* Callback type for a method that returns a single string value.
*
* result is the result of the method call, if it succeeded. OWnership of the
* string is retained by the library, not transferred to the callback, so the
* callback must make a copy if it needs to preserve the value after returning.
*
* See qmidev_response_fn for more details.
*/
typedef void (*qmidev_string_response_fn)(
qmidev *dev,
void *context,
int status,
const char *result);
/* TODO */
int qmidev_init(void);
/*
* Creates a new QMI device backed by a file (to which the QMI messages will
* be written to and read from). (This is likely to be a device file, such as
* /dev/TODO.)
*
* Returns the allocated QMI device, or NULL if it could not be created.
*/
qmidev *qmidev_new_file(const char *path);
/*
* Sets the "private data" pointer for a QMI device. This pointer is solely
* for use by the caller, perhaps to tie the QMI device to an associated object
* of its own.
*/
void qmidev_set_priv(qmidev *dev, void *priv);
/*
* Returns the "private data" pointer for a QMI device.
*
* See qmidev_set_priv for more details.
*/
void *qmidev_priv(qmidev *dev);
/*
* Returns the file descriptor upon which the caller should wait to determine
* when there is activity on the QMI device that needs to be processed. The
* caller should add this fd to a select or epoll loop, and call qmidev_process
* with the QMI device when select or epoll indicates the fd is ready.
*
* This function may be called any time after creating the QMI device.
*/
int qmidev_fd(qmidev *dev);
/*
* Processes activity on the QMI device. This function should be called when
* select or epoll reveals that there is activity on the file descriptor
* returned by qmidev_fd.
*/
int qmidev_process(qmidev *dev);
/*
* Connects to the device. This may involve several method calls to initialize
* various aspects of the connection to the device. The provided callback will
* be called with the provided context when the library has finished connecting
* to the device (or failed to connect).
*/
int qmidev_connect(qmidev *dev, qmidev_response_fn callback, void *context);
/*
* Disconnects from the device. This may involve several method calls to tear
* down various aspects of the connection to the device. The provided callback
* will be called with the provided context when the library has finished
* disconnecting to the device (or failed to disconnect).
*/
int qmidev_disconnect(qmidev *dev, qmidev_response_fn callback, void *context);
/* ENUMS */
/* TODO: Some of these make no sense, and others will need to be added. */
enum {
QMIDEV_ERR_NONE = 0, // 00 Success
QMIDEV_ERR_GENERAL, // 01 General error
QMIDEV_ERR_INTERNAL, // 02 Internal error
QMIDEV_ERR_MEMORY, // 03 Memory error
QMIDEV_ERR_INVALID_ARG, // 04 Invalid argument
QMIDEV_ERR_BUFFER_SZ, // 05 Buffer too small
QMIDEV_ERR_NO_DEVICE, // 06 Unable to detect device
QMIDEV_ERR_INVALID_DEVID, // 07 Invalid device ID
QMIDEV_ERR_NO_CONNECTION, // 08 No connection to device
QMIDEV_ERR_IFACE, // 09 Unable to obtain required interace
QMIDEV_ERR_CONNECT, // 10 Unable to connect to interface
QMIDEV_ERR_REQ_SCHEDULE, // 11 Unable to schedule request
QMIDEV_ERR_REQUEST, // 12 Error sending request
QMIDEV_ERR_RESPONSE, // 13 Error receiving response
QMIDEV_ERR_REQUEST_TO, // 14 Timeout while sending request
QMIDEV_ERR_RESPONSE_TO, // 15 Timeout while receiving response
QMIDEV_ERR_MALFORMED_RSP, // 16 Malformed response received
QMIDEV_ERR_INVALID_RSP, // 17 Invalid/error response received
QMIDEV_ERR_INVALID_FILE, // 18 Invalid file path
QMIDEV_ERR_FILE_OPEN, // 19 Unable to open file
QMIDEV_ERR_FILE_COPY, // 20 Unable to copy file
QMIDEV_ERR_QDL_SCM, // 21 Unable to open service control mgr
QMIDEV_ERR_NO_QDL_SVC, // 22 Unable to detect QDL service
QMIDEV_ERR_NO_QDL_SVC_INFO, // 23 Unable to obtain QDL service info
QMIDEV_ERR_NO_QDL_SVC_PATH, // 24 Unable to locate QSL service
QMIDEV_ERR_QDL_SVC_CFG, // 25 Unable to reconfigure QDL service
QMIDEV_ERR_QDL_SVC_IFACE, // 26 Unable to interface to QDL service
QMIDEV_ERR_OFFLINE, // 27 Unable to set device offline
QMIDEV_ERR_RESET, // 28 Unable to reset device
QMIDEV_ERR_NO_SIGNAL, // 29 No available signal
QMIDEV_ERR_MULTIPLE_DEVICES, // 30 Multiple devices detected
QMIDEV_ERR_DRIVER, // 31 Error interfacing to driver
QMIDEV_ERR_NO_CANCELABLE_OP, // 32 No cancelable operation is pending
QMIDEV_ERR_CANCEL_OP, // 33 Error canceling outstanding operation
QMIDEV_ERR_QDL_CRC, // 34 QDL image data CRC error
QMIDEV_ERR_QDL_PARSING, // 35 QDL image data parsing error
QMIDEV_ERR_QDL_AUTH, // 36 QDL image authentication error
QMIDEV_ERR_QDL_WRITE, // 37 QDL image write error
QMIDEV_ERR_QDL_OPEN_SIZE, // 38 QDL image size error
QMIDEV_ERR_QDL_OPEN_TYPE, // 39 QDL image type error
QMIDEV_ERR_QDL_OPEN_PROT, // 40 QDL memory protection error
QMIDEV_ERR_QDL_OPEN_SKIP, // 41 QDL image not required
QMIDEV_ERR_QDL_ERR_GENERAL, // 42 QDL general error
QMIDEV_ERR_QDL_BAR_MODE, // 43 QDL BAR mode error
};
/* TODO: This should really be in libqmi, not libqmidev. */
enum {
QMIDEV_QMI_ERR_None = 0,
QMIDEV_QMI_ERR_MalformedMessage = 1,
QMIDEV_QMI_ERR_NoMemory = 2,
QMIDEV_QMI_ERR_Internal = 3,
QMIDEV_QMI_ERR_Aborted = 4,
QMIDEV_QMI_ERR_ClientIDsExhausted = 5,
QMIDEV_QMI_ERR_UnabortableTransaction = 6,
QMIDEV_QMI_ERR_InvalidClientID = 7,
QMIDEV_QMI_ERR_NoThresholdsProvided = 8,
QMIDEV_QMI_ERR_InvalidHandle = 9,
QMIDEV_QMI_ERR_InvalidProfile = 10,
QMIDEV_QMI_ERR_InvalidPINID = 11,
QMIDEV_QMI_ERR_IncorrectPIN = 12,
QMIDEV_QMI_ERR_NoNetworkFound = 13,
QMIDEV_QMI_ERR_CallFailed = 14,
QMIDEV_QMI_ERR_OutOfCall = 15,
QMIDEV_QMI_ERR_NotProvisioned = 16,
QMIDEV_QMI_ERR_MissingArgument = 17,
QMIDEV_QMI_ERR_ArgumentTooLong = 19,
QMIDEV_QMI_ERR_InvalidTransactionID = 22,
QMIDEV_QMI_ERR_DeviceInUse = 23,
QMIDEV_QMI_ERR_NetworkUnsupported = 24,
QMIDEV_QMI_ERR_DeviceUnsupported = 25,
QMIDEV_QMI_ERR_NoEffect = 26,
QMIDEV_QMI_ERR_NoFreeProfile = 27,
QMIDEV_QMI_ERR_InvalidPDPType = 28,
QMIDEV_QMI_ERR_InvalidTechnologyPreference = 29,
QMIDEV_QMI_ERR_InvalidProfileType = 30,
QMIDEV_QMI_ERR_InvalidServiceType = 31,
QMIDEV_QMI_ERR_InvalidRegisterAction = 32,
QMIDEV_QMI_ERR_InvalidPSAttachAction = 33,
QMIDEV_QMI_ERR_AuthenticationFailed = 34,
QMIDEV_QMI_ERR_PINBlocked = 35,
QMIDEV_QMI_ERR_PINAlwaysBlocked = 36,
QMIDEV_QMI_ERR_UIMUninitialized = 37,
QMIDEV_QMI_ERR_MaximumQoSRequestsInUse = 38,
QMIDEV_QMI_ERR_IncorrectFlowFilter = 39,
QMIDEV_QMI_ERR_NetworkQoSUnaware = 40,
QMIDEV_QMI_ERR_InvalidQoSID = 41,
QMIDEV_QMI_ERR_QoSUnavailable = 42,
QMIDEV_QMI_ERR_FlowSuspended = 43,
QMIDEV_QMI_ERR_GeneralError = 46,
QMIDEV_QMI_ERR_UnknownError = 47,
QMIDEV_QMI_ERR_InvalidArgument = 48,
QMIDEV_QMI_ERR_InvalidIndex = 49,
QMIDEV_QMI_ERR_NoEntry = 50,
QMIDEV_QMI_ERR_DeviceStorageFull = 51,
QMIDEV_QMI_ERR_DeviceNotReady = 52,
QMIDEV_QMI_ERR_NetworkNotReady = 53,
QMIDEV_QMI_ERR_WMSCauseCode = 54,
QMIDEV_QMI_ERR_WMSMessageNotSent = 55,
QMIDEV_QMI_ERR_WMSMessageDeliveryFailure = 56,
QMIDEV_QMI_ERR_WMSInvalidMessageID = 57,
QMIDEV_QMI_ERR_WMSEncoding = 58,
QMIDEV_QMI_ERR_AuthenticationLock = 59,
QMIDEV_QMI_ERR_InvalidTransition = 60,
QMIDEV_QMI_ERR_SessionInactive = 65,
QMIDEV_QMI_ERR_SessionInvalid = 66,
QMIDEV_QMI_ERR_SessionOwnership = 67,
QMIDEV_QMI_ERR_InsufficientResources = 68,
QMIDEV_QMI_ERR_Disabled = 69,
QMIDEV_QMI_ERR_InvalidOperation = 70,
QMIDEV_QMI_ERR_InvalidQMICommand = 71,
QMIDEV_QMI_ERR_WMSTPDUType = 72,
QMIDEV_QMI_ERR_WMSSMSCAddress = 73,
QMIDEV_QMI_ERR_InformationUnavailable = 74,
QMIDEV_QMI_ERR_SegmentTooLong = 75,
QMIDEV_QMI_ERR_SegmentOrder = 76,
QMIDEV_QMI_ERR_BundlingNotSupported = 77,
QMIDEV_QMI_ERR_SIMFileNotFound = 80,
QMIDEV_QMI_ERR_AccessDenied = 82,
QMIDEV_QMI_ERR_HardwareRestricted = 83,
QMIDEV_QMI_ERR_CATEventRegistrationFailed = 61441,
QMIDEV_QMI_ERR_CATInvalidTerminalResponse = 61442,
QMIDEV_QMI_ERR_CATInvalidEnvelopeCommand = 61443,
QMIDEV_QMI_ERR_CATEnvelopeCommandBusy = 61444,
QMIDEV_QMI_ERR_CATEnvelopeCommandFailed = 61445
};
/* TODO: These should be generated with dcbw's script. */
typedef enum {
QMIDEV_ACT_STATE_NOT_ACTIVATED = 0,
QMIDEV_ACT_STATE_ACTIVATED,
QMIDEV_ACT_STATE_CONNECTING,
QMIDEV_ACT_STATE_IN_PROGRESS,
QMIDEV_ACT_STATE_OTASP_SECURITY_AUTHENTICATED,
QMIDEV_ACT_STATE_OTASP_NAM_DOWNLOADED,
QMIDEV_ACT_STATE_OTASP_MDN_DOWNLOADED,
QMIDEV_ACT_STATE_OTASP_IMSI_DOWNLOADED,
QMIDEV_ACT_STATE_OTASP_PRL_DOWNLOADED,
QMIDEV_ACT_STATE_OTASP_SPC_DOWNLOADED,
QMIDEV_ACT_STATE_OTASP_SETTINGS_COMMITTED
} qmidev_activation_state;
typedef enum {
QMIDEV_POWER_ONLINE = 0,
QMIDEV_POWER_LOW_POWER,
QMIDEV_POWER_FACTORY_TEST,
QMIDEV_POWER_OFFLINE,
QMIDEV_POWER_RESET,
QMIDEV_POWER_SHUTDOWN,
QMIDEV_POWER_PERSISTENT_LOW_POWER,
QMIDEV_POWER_MODE_ONLY_LOW_POWER
} qmidev_power_state;
typedef enum {
QMIDEV_SESSION_DISCONNECTED = 1,
QMIDEV_SESSION_CONNECTED,
QMIDEV_SESSION_SUSPENDED,
QMIDEV_SESSION_AUTHENTICATING
} qmidev_session_state;
typedef enum {
QMIDEV_BEARER_CDMA2000 = 1,
QMIDEV_BEARER_EVDO_REV0,
QMIDEV_BEARER_GPRS,
QMIDEV_BEARER_WCDMA,
QMIDEV_BEARER_EVDO_REVA,
QMIDEV_BEARER_EGPRS,
QMIDEV_BEARER_HSDPA,
QMIDEV_BEARER_HSUPA,
QMIDEV_BEARER_HSPA,
QMIDEV_BEARER_LTE,
QMIDEV_BEARER_EHRPD,
QMIDEV_BEARER_HSDPA_PLUS,
QMIDEV_BEARER_HSPA_PLUS,
QMIDEV_BEARER_HSDPA_PLUS_DUAL,
QMIDEV_BEARER_HSPA_PLUS_DUAL,
QMIDEV_BEARER_UNKNOWN = 255
} qmidev_data_bearer;
typedef enum {
QMIDEV_STORAGE_UIM = 0,
QMIDEV_STORAGE_NV,
QMIDEV_STORAGE_UNKNOWN = 2
} qmidev_sms_storage;
typedef enum {
QMIDEV_TAG_MT_READ = 0,
QMIDEV_TAG_MT_UNREAD,
QMIDEV_TAG_MO_SENT,
QMIDEV_TAG_MO_UNSENT
} qmidev_sms_tag;
typedef struct qmidev_signal_strength qmidev_signal_strength;
typedef enum {
QMIDEV_INTERFACE_NONE = 0,
QMIDEV_INTERFACE_CDMA_1X,
QMIDEV_INTERFACE_CDMA_HRPD,
QMIDEV_INTERFACE_AMPS,
QMIDEV_INTERFACE_GSM,
QMIDEV_INTERFACE_UMTS,
QMIDEV_INTERFACE_LTE = 8
} qmidev_radio_interface;
typedef enum {
QMIDEV_BAND_CLASS_CDMABandClass0 = 0,
QMIDEV_BAND_CLASS_CDMABandClass1 = 1,
QMIDEV_BAND_CLASS_CDMABandClass3 = 3,
QMIDEV_BAND_CLASS_CDMABandClass4 = 4,
QMIDEV_BAND_CLASS_CDMABandClass5 = 5,
QMIDEV_BAND_CLASS_CDMABandClass6 = 6,
QMIDEV_BAND_CLASS_CDMABandClass7 = 7,
QMIDEV_BAND_CLASS_CDMABandClass8 = 8,
QMIDEV_BAND_CLASS_CDMABandClass9 = 9,
QMIDEV_BAND_CLASS_CDMABandClass10 = 10,
QMIDEV_BAND_CLASS_CDMABandClass11 = 11,
QMIDEV_BAND_CLASS_CDMABandClass12 = 12,
QMIDEV_BAND_CLASS_CDMABandClass13 = 13,
QMIDEV_BAND_CLASS_CDMABandClass14 = 14,
QMIDEV_BAND_CLASS_CDMABandClass15 = 15,
QMIDEV_BAND_CLASS_CDMABandClass16 = 16,
QMIDEV_BAND_CLASS_CDMABandClass17 = 17,
QMIDEV_BAND_CLASS_CDMABandClass18 = 18,
QMIDEV_BAND_CLASS_CDMABandClass19 = 19,
QMIDEV_BAND_CLASS_GSM450 = 40,
QMIDEV_BAND_CLASS_GSM480 = 41,
QMIDEV_BAND_CLASS_GSM750 = 42,
QMIDEV_BAND_CLASS_GSM850 = 43,
QMIDEV_BAND_CLASS_GSM900Extended = 44,
QMIDEV_BAND_CLASS_GSM900Primary = 45,
QMIDEV_BAND_CLASS_GSM900Railways = 46,
QMIDEV_BAND_CLASS_GSM1800 = 47,
QMIDEV_BAND_CLASS_GSM1900 = 48,
QMIDEV_BAND_CLASS_WCDMA2100 = 80,
QMIDEV_BAND_CLASS_WCDMAPCS1900 = 81,
QMIDEV_BAND_CLASS_WCDMADCS1800 = 82,
QMIDEV_BAND_CLASS_WCDMA1700US = 83,
QMIDEV_BAND_CLASS_WCDMA850 = 84,
QMIDEV_BAND_CLASS_WCDMA800 = 85,
QMIDEV_BAND_CLASS_WCDMA2600 = 86,
QMIDEV_BAND_CLASS_WCDMA900 = 87,
QMIDEV_BAND_CLASS_WCDMA1700Japan = 88,
QMIDEV_BAND_CLASS_WCDMA1500Japan = 90,
QMIDEV_BAND_CLASS_WCDMA850Japan = 91,
QMIDEV_BAND_CLASS_EUTRABand1 = 120,
QMIDEV_BAND_CLASS_EUTRABand2 = 121,
QMIDEV_BAND_CLASS_EUTRABand3 = 122,
QMIDEV_BAND_CLASS_EUTRABand4 = 123,
QMIDEV_BAND_CLASS_EUTRABand5 = 124,
QMIDEV_BAND_CLASS_EUTRABand6 = 125,
QMIDEV_BAND_CLASS_EUTRABand7 = 126,
QMIDEV_BAND_CLASS_EUTRABand8 = 127,
QMIDEV_BAND_CLASS_EUTRABand9 = 128,
QMIDEV_BAND_CLASS_EUTRABand10 = 129,
QMIDEV_BAND_CLASS_EUTRABand11 = 130,
QMIDEV_BAND_CLASS_EUTRABand12 = 131,
QMIDEV_BAND_CLASS_EUTRABand13 = 132,
QMIDEV_BAND_CLASS_EUTRABand14 = 133,
QMIDEV_BAND_CLASS_EUTRABand17 = 134,
QMIDEV_BAND_CLASS_EUTRABand33 = 135,
QMIDEV_BAND_CLASS_EUTRABand34 = 136,
QMIDEV_BAND_CLASS_EUTRABand35 = 137,
QMIDEV_BAND_CLASS_EUTRABand36 = 138,
QMIDEV_BAND_CLASS_EUTRABand37 = 139,
QMIDEV_BAND_CLASS_EUTRABand38 = 140,
QMIDEV_BAND_CLASS_EUTRABand39 = 141,
QMIDEV_BAND_CLASS_EUTRABand40 = 142,
QMIDEV_BAND_CLASS_EUTRABand18 = 143,
QMIDEV_BAND_CLASS_EUTRABand19 = 144,
QMIDEV_BAND_CLASS_EUTRABand20 = 145,
QMIDEV_BAND_CLASS_EUTRABand21 = 146,
} qmidev_band_class;
struct qmidev_signal_strength {
qmidev_radio_interface radio_interface;
int8_t signal_strength;
};
typedef struct {
uint8_t idx;
qmidev_sms_tag tag;
} qmidev_sms_list_entry;
typedef struct {
qmidev_radio_interface radio_interface;
qmidev_band_class active_band_class;
int active_channel;
} qmidev_rf_info;
typedef enum {
QMIDEV_DORMANCY_DORMANT = 1,
QMIDEV_DORMANCY_ACTIVE
} qmidev_dormancy_status;
/* TODO: enums */
typedef int qmidev_lu_domain;
typedef int qmidev_lu_cause;
typedef int qmidev_mobile_ip_status;
typedef int qmidev_sms_format;
typedef enum {
QMIDEV_OMADM_STATE_COMPLETE_UPDATED = 0,
QMIDEV_OMADM_STATE_COMPLETE_UNAVAILABLE,
QMIDEV_OMADM_STATE_FAILED,
QMIDEV_OMADM_STATE_RETRYING,
QMIDEV_OMADM_STATE_CONNECTING,
QMIDEV_OMADM_STATE_CONNECTED,
QMIDEV_OMADM_STATE_AUTHENTICATED,
QMIDEV_OMADM_STATE_MDN_DOWNLOADED,
QMIDEV_OMADM_STATE_MSID_DOWNLOADED,
QMIDEV_OMADM_STATE_PRL_DOWNLOADED,
QMIDEV_OMADM_STATE_MIP_PROFILE_DOWNLOADED
} qmidev_omadm_state;
typedef enum {
QMIDEV_ROAMIND_ROAMING = 0,
QMIDEV_ROAMIND_HOME,
QMIDEV_ROAMIND_ROAMING_PARTNER
} qmidev_roaming_indicator;
typedef enum {
QMIDEV_SESSION_TECH_UMTS = 1,
QMIDEV_SESSION_TECH_CDMA = 2
} qmidev_session_tech;
typedef enum {
QMIDEV_SESSION_AUTH_PAP = 1,
QMIDEV_SESSION_AUTH_CHAP = 2
} qmidev_session_auth;
typedef enum {
QMIDEV_DATA_CAP_NONE = 0,
QMIDEV_DATA_CAP_CS = 1,
QMIDEV_DATA_CAP_PS = 2,
QMIDEV_DATA_CAP_SIMUL_CS_PS = 3,
QMIDEV_DATA_CAP_NONSIMUL_CS_PS = 4
} qmidev_data_cap;
typedef struct {
uint32_t max_tx_rate;
uint32_t max_rx_rate;
uint8_t data_caps; /* qmidev_data_service_caps */
int8_t sim_supported;
uint8_t num_interfaces;
uint8_t interfaces[]; /* qmidev_radio_interface */
} qmidev_device_caps;
typedef enum {
QMIDEV_REG_TYPE_AUTOMATIC = 1,
QMIDEV_REG_TYPE_MANUAL = 2
} qmidev_reg_type;
typedef enum {
QMIDEV_RADIO_ACCESS_TECH_GSM = 4,
QMIDEV_RADIO_ACCESS_TECH_UMTS = 5,
QMIDEV_RADIO_ACCESS_TECH_LTE = 8
} qmidev_radio_access_tech;
typedef enum {
QMIDEV_OMA_FAILURE_REASON_UNKNOWN = 0,
QMIDEV_OMA_FAILURE_REASON_NETWORK_UNAVAILABLE,
QMIDEV_OMA_FAILURE_REASON_SERVER_UNAVAILABLE,
QMIDEV_OMA_FAILURE_REASON_AUTHENTICATION_FAILED,
QMIDEV_OMA_FAILURE_REASON_MAX_RETRY_EXCEEDED,
QMIDEV_OMA_FAILURE_REASON_SESSION_CANCELLED
} qmidev_oma_failure_reason;
typedef enum {
QMIDEV_PIN_ID_PIN1 = 1,
QMIDEV_PIN_ID_PIN2,
QMIDEV_PIN_ID_UNIVERSAL_PIN,
QMIDEV_PIN_HIDDEN_KEY
} qmidev_pin_id;
typedef enum {
QMIDEV_PIN_STATUS_UNKNOWN = 0,
QMIDEV_PIN_STATUS_ENABLED_UNVERIFIED,
QMIDEV_PIN_STATUS_ENABLED_VERIFIED,
QMIDEV_PIN_STATUS_DISABLED,
QMIDEV_PIN_STATUS_BLOCKED,
QMIDEV_PIN_STATUS_PERM_BLOCKED
} qmidev_pin_status;
/* METHODS */
/* Performs automatic service activation. */
int qmidev_activate_automatic(
qmidev *dev,
const char *activation_code,
qmidev_response_fn callback,
void *context);
/**
* Performs manual service activation and then resets the device.
* @spc: Service Programming Code (six digit string)
* @sid: System identification number
* @mdn: Mobile Directory Number (string or NULL)
* @min: Mobile Identification Number (string or NULL)
* @prl: PRL file (byte array or NULL),
* @prl_len: length of PRL file, if provided
* @mnha: MN-HA (string or NULL)
* @mnaaa: MN-AAA (string or NULL)
*/
int qmidev_activate_manual(
qmidev *dev,
const char *spc,
int sid,
const char *mdn,
const char *min,
const char *prl,
size_t prl_len,
const char *mnha,
const char *mnaaa,
qmidev_response_fn callback,
void *context);
/*
* Deletes one or more SMS messages from the device.
* storage_type is the storage type of the messages to delete.
*
* If idx and tag are both NULL, all the messages in the given storage
* location are deleted.
*
* If idx is NULL but tag is not, all the messages in the given storage
* location with the given tag are deleted.
*
* If idx is not NULL buttag is, the message with the given index in
* the given storage location is deleted.
*
* If idx and tag are both non-NULL, an error is returned.
*/
int qmidev_sms_delete(
qmidev *dev,
qmidev_sms_storage storage_type,
uint8_t *idx,
qmidev_sms_tag *tag,
qmidev_response_fn callback,
void *context);
/*
* Callback type for qmidev_get_activation_state. state is the activation
* state of the device.
*/
typedef void (*qmidev_activation_state_response_fn)(
qmidev *dev,
void *context,
int status,
qmidev_activation_state state);
/* Gets the activation state of the device. */
int qmidev_get_activation_state(
qmidev *dev,
qmidev_activation_state_response_fn callback,
void *context);
/* Gets the active mobile IP profile of the device. */
int qmidev_get_active_mobile_ip_profile(
qmidev *dev,
qmidev_int_response_fn callback,
void *context);
/*
* Callback type for qmidev_get_data_bearer_technology. tech is the data
* bearer technology.
*/
typedef void (*qmidev_data_bearer_response_fn)(
qmidev *dev,
void *context,
int status,
qmidev_data_bearer tech);
/*
* Gets the current data bearer technology of the device. Only valid when
* connected to a network.
*/
int qmidev_get_data_bearer_technology(
qmidev *dev,
qmidev_data_bearer_response_fn callback,
void *context);
/* Callback type for qmidev_get_device_capabilities. */
typedef void (*qmidev_device_capabilities_response_fn)(
qmidev *dev,
void *context,
int status,
const qmidev_device_caps *caps);
/* Gets the device capabilities. TODO. */
int qmidev_get_device_capabilities(
qmidev *dev,
qmidev_device_capabilities_response_fn callback,
void *context);
/* TODO: enums */
/* Callback type for qmidev_get_firmware_info. */
typedef void (*qmidev_firmware_info_response_fn)(
qmidev *dev,
void *context,
int status,
int firmware_id,
int technology,
int carrier,
int region,
int gps_capability);
/* Gets information about the current device firmware. */
int qmidev_get_firmware_info(
qmidev *dev,
qmidev_firmware_info_response_fn callback,
void *context);
/* Gets the device firmware revision. */
int qmidev_get_firmware_revision(
qmidev *dev,
qmidev_string_response_fn callback,
void *context);
/* Callback type for qmidev_get_firmware_revisions. */
typedef void (*qmidev_firmware_revisions_response_fn)(
qmidev *dev,
void *context,
int status,
const char *amss_version,
const char *boot_version,
const char *pri_version);
/* Gets the revisions of the current device AMSS, boot, and PRI firmware. */
int qmidev_get_firmware_revisions(
qmidev *dev,
qmidev_firmware_revisions_response_fn callback,
void *context);
/* Gets the hardware revision of the device. */
int qmidev_get_hardware_revision(
qmidev *dev,
qmidev_string_response_fn callback,
void *context);
/**
* Callback type for qmidev_get_home_network.
* @mcc: Mobile Country Code
* @mnc: Mobile Network Code
* @name: network name
* @sid: System ID (of home network)
* @nid: Network ID (of home network)
*/
typedef void (*qmidev_home_network_response_fn)(
qmidev *dev,
void *context,
int status,
int mcc,
int mnc,
const char *name,
int sid,
int nid);
/* Gets information about the home network of the device. */
int qmidev_get_home_network(
qmidev *dev,
qmidev_home_network_response_fn callback,
void *context);
/* Gets the IMSI of the device. */
int qmidev_get_imsi(
qmidev *dev,
qmidev_string_response_fn callback,
void *context);
/* Gets the manufacturer of the device. */
int qmidev_get_manufacturer(
qmidev *dev,
qmidev_string_response_fn callback,
void *context);
/* Gets the model ID of the device. */
int qmidev_get_model_id(
qmidev *dev,
qmidev_string_response_fn callback,
void *context);
/**
* Callback type for qmidev_get_plmn_name.
* @name_is_ucs2: 1 if the name is in UCS-2, 0 if TODO
* @name_len: the length of name in bytes.
* @name: the name itself
*/
typedef void (*qmidev_plmn_name_response_fn)(
qmidev *dev,
void *context,
int status,
char name_is_ucs2,
size_t name_len,
const char *name);
/**
* Gets PLMN information for a given network.
* @mcc: Mobile Country Code
* @mnc: Mobile Network Code
*/
int qmidev_get_plmn_name(
qmidev *dev,
int mcc,
int mnc,
qmidev_plmn_name_response_fn callback,
void *context);
/* Callback type for qmidev_get_power. state is the power state. */
typedef void (*qmidev_power_state_response_fn)(
qmidev *dev,
void *context,
int status,
qmidev_power_state state);
/* Gets the power state of the device. */
int qmidev_get_power(
qmidev *dev,
qmidev_power_state_response_fn callback,
void *context);
/* Gets the PRL version on the device. */
int qmidev_get_prl_version(
qmidev *dev,
qmidev_int_response_fn callback,
void *context);
/* Callback type for qmidev_get_rf_info. info is the info structure. */
typedef void (*qmidev_rf_info_response_fn)(
qmidev *dev,
void *context,
int status,
const qmidev_rf_info info);
/* Gets the current RF information from the device. */
int qmidev_get_rf_info(
qmidev *dev,
qmidev_rf_info_response_fn callback,
void *context);
/**
* Callback type for qmidev_get_serial_numbers.
* @esn: Electronic Serial Number,
* @imei: International Mobile Equipment Identifier
* @meid: Mobile Equipment Identifier
*/
typedef void (*qmidev_serial_numbers_response_fn)(
qmidev *dev,
void *context,
int status,
const char *esn,
const char *imei,
const char *meid);
/* Gets the serial numbers of the device. */
int qmidev_get_serial_numbers(
qmidev *dev,
qmidev_serial_numbers_response_fn callback,
void *context);
/* TODO: enums */
/* Callback type for qmidev_get_serving_network. */
typedef void (*qmidev_serving_network_response_fn)(
qmidev *dev,
void *context,
int status,
int reg_state,
int cs_status,
int ps_status,
int radio_access_network,
size_t num_interfaces,
const qmidev_radio_interface *interfaces,
int roaming,
int mcc,
int mnc,
size_t name_len,
const char *name);
/* Gets information about the serving network. */
int qmidev_get_serving_network(
qmidev *dev,
qmidev_serving_network_response_fn callback,
void *context);
/* Callback type for qmidev_get_serving_network_caps. */
typedef void (*qmidev_serving_network_caps_response_fn)(
qmidev *dev,
void *context,
int status,
size_t caps_len,
const qmidev_data_cap *caps);
/* Gets the capabilities of the serving network. */
int qmidev_get_serving_network_caps(
qmidev *dev,
qmidev_serving_network_caps_response_fn callback,
void *context);
/*
* Callback type for qmidev_get_signal_strengths. num_strengths is the number
* of signal strengths; strengths is an array of num_strengths items, each
* containing the strength for one radio interface.
*/
typedef void (*qmidev_signal_strengths_response_fn)(
qmidev *dev,
void *context,
int status,
int num_strengths,
qmidev_signal_strength strengths[]);
/* Gets the signal strength(s) of the device. */
int qmidev_get_signal_strengths(
qmidev *dev,
qmidev_signal_strengths_response_fn callback,
void *context);
/* Callback type for qmidev_get_sms. */
typedef void (*qmidev_sms_response_fn)(
qmidev *dev,
void *context,
int status,
qmidev_sms_tag tag,
qmidev_sms_format format,
size_t message_len,
const byte *message);
/* Gets an SMS from the device, given the storage location and idx. */
int qmidev_get_sms(
qmidev *dev,
qmidev_sms_storage storage,
uint8_t idx,
qmidev_sms_response_fn callback,
void *context);
/* Callback type for qmidev_get_smsc_address. */
typedef void (*qmidev_smsc_response_fn)(
qmidev *dev,
void *context,
int status,
const char *smsc_address,
const char *smsc_type);
/* Gets the SMSC address (and type). */
int qmidev_get_smsc_address(
qmidev *dev,
qmidev_smsc_response_fn callback,
void *context);
/*
* Callback type for qmidev_get_sms_list. num_entries is the number of entries
* in the SMS list, and entries is an array of num_entries entries.
*/
typedef void (*qmidev_sms_list_response_fn)(
qmidev *dev,
void *context,
int status,
size_t num_entries,
const qmidev_sms_list_entry *entries);
/* Gets a list of SMS messages, given a storage location and (optional) tag. */
int qmidev_get_sms_list(
qmidev *dev,
qmidev_sms_storage storage,
qmidev_sms_tag *tag,
qmidev_sms_list_response_fn callback,
void *context);
/**
* Callback type for qmidev_get_voice_number.
*
* @voice_number: the device's voice number,
* @min: the device's Mobile Identification Number
*/
typedef void (*qmidev_voice_number_response_fn)(
qmidev *dev,
void *context,
int status,
const char *voice_number,
const char *min);
/* Gets the voice number (and MIN) of the device. */
int qmidev_get_voice_number(
qmidev *dev,
qmidev_voice_number_response_fn callback,
void *context);
/* Initiates network registration. */
int qmidev_initiate_network_registration(
qmidev *dev,
qmidev_reg_type registration_type,
int mcc,
int mnc,
qmidev_radio_access_tech radio_access_type,
qmidev_response_fn callback,
void *context);
/* Callback type for qmidev_omadm_get_session_info. TODO. */
typedef void (*qmidev_omadm_session_info_response_fn)(
qmidev *dev,
void *context,
int status,
/* TODO: enums */
int state,
int type,
int failure_reason,
int retry_count,
int session_pause,
int time_remaining);
/*
* Gets information related to the current (or previous, if no session is
* active) OMA-DM session.
*/
int qmidev_omadm_get_session_info(
qmidev *dev,
qmidev_omadm_session_info_response_fn callback,
void *context);
/* Starts an OMA-DM session. type is the type of session to initiate. */
int qmidev_omadm_start_session(
qmidev *dev,
/* TODO: enum */
int type,
qmidev_response_fn callback,
void *context);
typedef struct qmidev_network_info qmidev_network_info;
struct qmidev_network_info {
int mcc;
int mnc;
/* flags */
char in_use;
char roaming;
char forbidden;
char preferred;
};
/*
* Callback type for qmidev_perform_network_scan. num_networks is the number
* of networks found; networks is an array of num_networks network info
* structures.
*/
typedef void (*qmidev_network_scan_response_fn)(
qmidev *dev,
void *context,
int status,
size_t num_networks;
qmidev_network_info *networks;
);
/* Performs a scan for available networks. */
int qmidev_perform_network_scan(
qmidev *dev,
qmidev_network_scan_response_fn *callback,
void *context);
/**
* Resets the device's configuration to factory defaults and then resets the
* device.
* @spc: Service Programming Code.
*/
int qmidev_reset_to_factory_defaults(
qmidev *dev,
const char *spc,
qmidev_response_fn callback,
void *context);
/* Enables or disables port automatic tracking for the NMEA port. */
int qmidev_set_port_automatic_tracking(
qmidev *dev,
int enabled,
qmidev_response_fn callback,
void *context);
/* Sets the operating mode of the device. */
int qmidev_set_power(
qmidev *dev,
qmidev_power_state state,
qmidev_response_fn callback,
void *context);
/* Enables or disables service automatic tracking. */
int qmidev_set_service_automatic_tracking(
qmidev *dev,
int enabled,
qmidev_response_fn callback,
void *context);
/* Sets the SMSC address (and type). */
int qmidev_set_smsc_address(
qmidev *dev,
const char *smsc_address,
const char *smsc_type,
qmidev_response_fn callback,
void *context);
/*
* Callback type for qmidev_start_data_session. If successful, session_id
* is the id of the newly-started session. If unsuccessful, failure_reason
* is the reason the session did not start.
*/
typedef void (*qmidev_start_data_session_response_fn)(
qmidev *dev,
void *context,
int status,
int session_id, /* TODO: Really int? */
qmidev_oma_failure_reason failure_reason);
/* Starts a packet data session. TODO: Document absurd arguments. */
int qmidev_start_data_session(
qmidev *dev,
qmidev_session_tech *tech,
uint32_t *pri_dns,
uint32_t *sec_dns,
uint32_t *pri_nbns,
uint32_t *sec_nbns,
const char *apn_name,
uint32_t *ip_addr,
qmidev_session_auth *auth,
const char *username,
const char *password,
qmidev_start_data_session_response_fn callback,
void *context);
/*
* Stops a packet data session. session_id is the session id, as passed to
* the callback for qmidev_start_data_session when the session started.
*/
int qmidev_stop_data_session(
qmidev *dev,
int session_id,
qmidev_response_fn callback,
void *context);
/*
* Callback type for qmidev_uim_change_pin. If unsuccessful,
* verify_retries_left and unblock_retries_left will contain the number of
* retries available to verify the PIN and unblock the PIN, respectively.
*/
typedef void (*qmidev_uim_change_pin_response_fn)(
qmidev *dev,
void *context,
int status,
int verify_retries_left,
int unblock_retries_left);
/*
* Changes a PIN on the UIM. pin_id is which pin (1 for PIN, 2 for PIN2);
* old_value and new_value are the old and new values for the PIN.
*/
int qmidev_uim_change_pin(
qmidev *dev,
qmidev_pin_id pin_id,
const char *old_value,
const char *new_value,
qmidev_uim_change_pin_response_fn callback,
void *context);
/*
* Callback type for qmidev_uim_get_pin_status. pin_status is the PIN status;
* verify_retries_left and unblock_retries_left are the number of retries
* available to verify the PIN and unblock the PIN, respectively.
*/
typedef void (*qmidev_uim_get_pin_status_response_fn)(
qmidev *dev,
void *context,
int status,
qmidev_pin_status pin_status,
int verify_retries_left,
int unblock_retries_left);
/*
* Gets the status of one of the PINs on the UIM. pin_id is which pin (1 for
* PIN, 2 for PIN2).
*/
int qmidev_uim_get_pin_status(
qmidev *dev,
qmidev_pin_id pin_id,
qmidev_uim_get_pin_status_response_fn callback,
void *context);
/*
* Callback type for qmidev_uim_set_pin_protection. If unsuccessful,
* verify_retries_left is the number of retries available to verify the PIN.
*/
typedef void (*qmidev_uim_set_pin_protection_response_fn)(
qmidev *dev,
void *context,
int status,
int verify_retries_left);
/**
* Enables or disables PIN protection for one of the PINs on the UIM.
* @pin_id: which pin (1 for PIN, 2 for PIN2)
* @enabled: whether to enable (1) or disable (0) the PIN protection
* @value: the value of the PIN.
*/
int qmidev_uim_set_pin_protection(
qmidev *dev,
qmidev_pin_id pin_id,
int enabled,
const char *value,
qmidev_uim_set_pin_protection_response_fn callback,
void *context);
/*
* Callback type for qmidev_uim_unblock_pin. If unsuccessful,
* verify_retries_left and unblock_retries_left are the number of retries
* available to verify the PIN and unblock the PIN, respectively.
*/
typedef void (*qmidev_uim_unblock_pin_response_fn)(
qmidev *dev,
void *context,
int status,
int verify_retries_left,
int unblock_retries_left);
/*
* Unblocks one of the PINs on the UIM. pin_id is which pin (1 = PIN, 2 =
* PIN2), puk_value is the value of the corresponding PUK (PUK or PUK2), and
* new_value is the value to which to reset the PIN to.
*/
int qmidev_uim_unblock_pin(
qmidev *dev,
qmidev_pin_id pin_id,
const char *puk_value,
const char *new_value,
qmidev_uim_unblock_pin_response_fn callback,
void *context);
/*
* Callback type for qmidev_uim_verify_pin. If unsuccessful,
* verify_retries_left is the number of retries available to verify the PIN.
*/
typedef void (*qmidev_uim_verify_pin_response_fn)(
qmidev *dev,
void *context,
int status,
int verify_retries_left);
/*
* Verifies one of the PINs on the UIM. pin_id is which pin (1 = PIN, 2 =
* PIN2). value is the value of that PIN.
*/
int qmidev_uim_verify_pin(
qmidev *dev,
qmidev_pin_id pin_id,
const char *value,
qmidev_uim_verify_pin_response_fn callback,
void *context);
/* CALLBACKS */
/*
* A general note on qmidev_set_*_callback functions:
*
* QMI devices offer a set of asynchronous messages (callbacks) that the host
* can register for. These functions allow the caller to register a callback
* function (with a context) to be called when one of these messages is
* received.
*
* Since registering or unregistering for one of these messages requires
* talking to the device, these functions are asynchronous, and can fail.
* Each takes two sets of callbacks and contexts: callback and context are the
* callback and context to call when the associated message is received, and
* set_callback and set_context are the callback and context to call when the
* callback-setting process itself has succeeded or failed.
*
* If callback is non-NULL, the library will replace an existing callback, if
* any, or register for the message and set the callback if not.
*
* If callback is NULL, the library will remove any existing callback and
* unregister for the message if registered.
*
* The callback types contain a status parameter; if a message from the device
* is intended for the callback, but is malformed, the callback will be called
* with an appropriate failure code.
*/
/* Activation status callback type. state is the activation state. */
typedef void (*qmidev_activation_status_callback_fn)(
qmidev *dev,
void *context,
int status,
qmidev_activation_state state);
/* Sets the activation status callback. */
int qmidev_set_activation_status_changed_callback(
qmidev *dev,
qmidev_activation_status_callback_fn callback,
void *context,
qmidev_response_fn set_callback,
void *set_context);
/* Byte totals callback type. */
typedef void (*qmidev_byte_totals_callback_fn)(
qmidev *dev,
void *context,
int status,
uint64_t tx_bytes,
uint64_t rx_bytes);
/* Sets the byte totals callback. */
int qmidev_set_byte_totals_callback(
qmidev *dev,
qmidev_byte_totals_callback_fn callback,
void *context,
qmidev_response_fn set_callback,
void *set_context);
/* Data bearer callback type. tech is the new data bearer technology. */
typedef void (*qmidev_data_bearer_callback_fn)(
qmidev *dev,
void *context,
int status,
qmidev_data_bearer tech);
/* Sets the data bearer callback. */
int qmidev_set_data_bearer_callback(
qmidev *dev,
qmidev_data_bearer_callback_fn callback,
void *context,
qmidev_response_fn set_callback,
void *set_context);
/* Data capabilities callback type. TODO. */
typedef void (*qmidev_data_capabilities_callback_fn)(
qmidev *dev,
void *context,
int status,
size_t num_caps,
qmidev_data_cap *caps);
/* Sets the data capabilities callback. */
int qmidev_set_data_capabilities_callback(
qmidev *dev,
qmidev_data_capabilities_callback_fn callback,
void *context,
qmidev_response_fn set_callback,
void *set_context);
/* Dormancy status callback type. dormancy is the dormancy status. */
typedef void (*qmidev_dormancy_status_callback_fn)(
qmidev *dev,
void *context,
int status,
qmidev_dormancy_status dormancy);
/* Sets the dormancy status callback. */
int qmidev_set_dormancy_status_callback(
qmidev *dev,
qmidev_dormancy_status_callback_fn callback,
void *context,
qmidev_response_fn set_callback,
void *set_context);
/*
* LU reject callback type. domain and cause are the LU domain and the cause
* for rejection.
*/
typedef void (*qmidev_lu_reject_callback_fn)(
qmidev *dev,
void *context,
int status,
qmidev_lu_domain domain,
qmidev_lu_cause cause);
/* Sets the LU reject callback. */
int qmidev_set_lu_reject_callback(
qmidev *dev,
qmidev_lu_reject_callback_fn callback,
void *context,
qmidev_response_fn set_callback,
void *set_context);
/* Mobile IP status callback type. ip_status is the new status. */
typedef void (*qmidev_mobile_ip_status_callback_fn)(
qmidev *dev,
void *context,
int status,
qmidev_mobile_ip_status ip_status);
/* Sets the mobile IP status callback. */
int qmidev_set_mobile_ip_status_callback(
qmidev *dev,
qmidev_mobile_ip_status_callback_fn callback,
void *context,
qmidev_response_fn set_callback,
void *set_context);
/*
* New SMS callback type. storage is the storage location of the new message;
* idx is the message index within that storage location.
*/
typedef void (*qmidev_new_sms_callback_fn)(
qmidev *dev,
void *context,
int status,
qmidev_sms_storage storage,
uint8_t idx);
/* Sets the new SMS callback. */
int qmidev_set_new_sms_callback(
qmidev *dev,
qmidev_new_sms_callback_fn callback,
void *context,
qmidev_response_fn set_callback,
void *set_context);
/* We just log this callback? */
/* TODO: Better types for type and id? */
/*
* OMA-DM alert callback type. type and id are the type and ID of the
* alert.
*/
typedef void (*qmidev_omadm_alert_callback_fn)(
qmidev *dev,
void *context,
int status,
int type,
int id);
/* Sets the OMA-DM alert callback. */
int qmidev_set_omadm_alert_callback(
qmidev *dev,
qmidev_omadm_alert_callback_fn callback,
void *context,
qmidev_response_fn set_callback,
void *set_context);
/* OMA-DM state callback type. state is the new OMA-DM state. */
typedef void (*qmidev_omadm_state_callback_fn)(
qmidev *dev,
void *context,
int status,
qmidev_omadm_state state);
/* Sets the OMA-DM state callback. */
int qmidev_set_omadm_state_callback(
qmidev *dev,
qmidev_omadm_state_callback_fn callback,
void *context,
qmidev_response_fn set_callback,
void *set_context);
/* TODO: enums? */
/*
* PDS (position determination service) state callback type. state is the new
* state.
*/
typedef void (*qmidev_pds_state_callback_fn)(
qmidev *dev,
void *context,
int status,
int enabled,
int tracking);
/* Sets the PDS state callback. */
int qmidev_set_pds_state_callback(
qmidev *dev,
qmidev_pds_state_callback_fn callback,
void *context,
qmidev_response_fn set_callback,
void *set_context);
/* Power state callback type. state is the new power state of the device. */
typedef void (*qmidev_power_callback_fn)(
qmidev *dev,
void *context,
int status,
qmidev_power_state state);
/* Sets the power state callback. */
int qmidev_set_power_callback(
qmidev *dev,
qmidev_power_callback_fn callback,
void *context,
qmidev_response_fn set_callback,
void *set_context);
/* RF info callback type. info is the RF info. */
typedef void (*qmidev_rf_info_callback_fn)(
qmidev *dev,
void *context,
int status,
const qmidev_rf_info info);
/* Sets the RF info callback. */
int qmidev_set_rf_info_callback(
qmidev *dev,
qmidev_rf_info_callback_fn callback,
void *context,
qmidev_response_fn set_callback,
void *set_context);
/*
* Roaming indicator callback type. indicator is the new state for the
* indicator.
*/
typedef void (*qmidev_roaming_indicator_callback_fn)(
qmidev *dev,
void *context,
int status,
qmidev_roaming_indicator indicator);
/* Sets the roaming indicator callback. */
int qmidev_set_roaming_indicator_callback(
qmidev *dev,
qmidev_roaming_indicator_callback_fn callback,
void *context,
qmidev_response_fn set_callback,
void *set_context);
/* (Packet data) session state callback type. state is the new state. */
typedef void (*qmidev_session_state_callback_fn)(
qmidev *dev,
void *context,
int status,
qmidev_session_state state);
/* Sets the session state callback. */
int qmidev_set_session_state_callback(
qmidev *dev,
qmidev_session_state_callback_fn callback,
void *context,
qmidev_response_fn set_callback,
void *set_context);
/*
* Signal strength callback type. interface is the radio interface whose
* strength has changed, and strength is the new strength.
*/
typedef void (*qmidev_signal_strength_callback_fn)(
qmidev *dev,
void *context,
int status,
qmidev_radio_interface interface,
int8_t strength);
/*
* Sets the signal strength callback and the thresholds at which to call it.
* num_thresholds is the number of thresholds; thresholds is an array of
* num_thresholds signal strength thresholds.
*/
int qmidev_set_signal_strength_callback(
qmidev *dev,
qmidev_signal_strength_callback_fn callback,
void *context,
size_t num_thresholds,
int8_t *thresholds,
qmidev_response_fn set_callback,
void *set_context);
#endif /* LIBQMI_INCLUDE_QMIDEV_H */