mirror of git://git.sysmocom.de/ofono
sim: Add special callback for reading ICCID value
This commit is contained in:
parent
10297b153a
commit
1960dbbc79
|
@ -94,6 +94,9 @@ typedef void (*ofono_sim_read_cb_t)(const struct ofono_error *error,
|
||||||
typedef void (*ofono_sim_write_cb_t)(const struct ofono_error *error,
|
typedef void (*ofono_sim_write_cb_t)(const struct ofono_error *error,
|
||||||
void *data);
|
void *data);
|
||||||
|
|
||||||
|
typedef void (*ofono_sim_iccid_cb_t)(const struct ofono_error *error,
|
||||||
|
const char *iccid, void *data);
|
||||||
|
|
||||||
typedef void (*ofono_sim_imsi_cb_t)(const struct ofono_error *error,
|
typedef void (*ofono_sim_imsi_cb_t)(const struct ofono_error *error,
|
||||||
const char *imsi, void *data);
|
const char *imsi, void *data);
|
||||||
|
|
||||||
|
@ -144,6 +147,8 @@ struct ofono_sim_driver {
|
||||||
void (*write_file_cyclic)(struct ofono_sim *sim, int fileid,
|
void (*write_file_cyclic)(struct ofono_sim *sim, int fileid,
|
||||||
int length, const unsigned char *value,
|
int length, const unsigned char *value,
|
||||||
ofono_sim_write_cb_t cb, void *data);
|
ofono_sim_write_cb_t cb, void *data);
|
||||||
|
void (*read_iccid)(struct ofono_sim *sim,
|
||||||
|
ofono_sim_iccid_cb_t cb, void *data);
|
||||||
void (*read_imsi)(struct ofono_sim *sim,
|
void (*read_imsi)(struct ofono_sim *sim,
|
||||||
ofono_sim_imsi_cb_t cb, void *data);
|
ofono_sim_imsi_cb_t cb, void *data);
|
||||||
void (*query_passwd_state)(struct ofono_sim *sim,
|
void (*query_passwd_state)(struct ofono_sim *sim,
|
||||||
|
|
27
src/sim.c
27
src/sim.c
|
@ -1965,6 +1965,25 @@ skip_efpl:
|
||||||
sim->language_prefs_update = FALSE;
|
sim->language_prefs_update = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void sim_iccid_cb(const struct ofono_error *error, const char *iccid,
|
||||||
|
void *userdata)
|
||||||
|
{
|
||||||
|
struct ofono_sim *sim = userdata;
|
||||||
|
const char *path = __ofono_atom_get_path(sim->atom);
|
||||||
|
DBusConnection *conn = ofono_dbus_get_connection();
|
||||||
|
|
||||||
|
if (error->type != OFONO_ERROR_TYPE_NO_ERROR)
|
||||||
|
return;
|
||||||
|
|
||||||
|
sim->iccid = g_strdup(iccid);
|
||||||
|
|
||||||
|
ofono_dbus_signal_property_changed(conn, path,
|
||||||
|
OFONO_SIM_MANAGER_INTERFACE,
|
||||||
|
"CardIdentifier",
|
||||||
|
DBUS_TYPE_STRING,
|
||||||
|
&sim->iccid);
|
||||||
|
}
|
||||||
|
|
||||||
static void sim_iccid_read_cb(int ok, int length, int record,
|
static void sim_iccid_read_cb(int ok, int length, int record,
|
||||||
const unsigned char *data,
|
const unsigned char *data,
|
||||||
int record_length, void *userdata)
|
int record_length, void *userdata)
|
||||||
|
@ -1974,7 +1993,13 @@ static void sim_iccid_read_cb(int ok, int length, int record,
|
||||||
DBusConnection *conn = ofono_dbus_get_connection();
|
DBusConnection *conn = ofono_dbus_get_connection();
|
||||||
char iccid[21]; /* ICCID max length is 20 + 1 for NULL */
|
char iccid[21]; /* ICCID max length is 20 + 1 for NULL */
|
||||||
|
|
||||||
if (!ok || length < 10)
|
if (!ok) {
|
||||||
|
if (sim->driver->read_iccid)
|
||||||
|
sim->driver->read_iccid(sim, sim_iccid_cb, sim);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (length < 10)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
extract_bcd_number(data, length, iccid);
|
extract_bcd_number(data, length, iccid);
|
||||||
|
|
Loading…
Reference in New Issue