mirror of git://git.sysmocom.de/ofono
gril: Remove g_ril_request_sim_write_record
This commit is contained in:
parent
c128fbf1e1
commit
acc9af8d40
|
@ -57,16 +57,6 @@
|
||||||
/* SETUP_DATA_CALL_PARAMS reply parameters */
|
/* SETUP_DATA_CALL_PARAMS reply parameters */
|
||||||
#define MIN_DATA_CALL_REPLY_SIZE 36
|
#define MIN_DATA_CALL_REPLY_SIZE 36
|
||||||
|
|
||||||
/* Commands defined for TS 27.007 +CRSM */
|
|
||||||
#define CMD_UPDATE_RECORD 220 /* 0xDC */
|
|
||||||
#define CMD_STATUS 242 /* 0xF2 */
|
|
||||||
#define CMD_RETRIEVE_DATA 203 /* 0xCB */
|
|
||||||
#define CMD_SET_DATA 219 /* 0xDB */
|
|
||||||
|
|
||||||
/* FID/path of SIM/USIM root directory */
|
|
||||||
#define ROOTMF ((char[]) {'\x3F', '\x00'})
|
|
||||||
#define ROOTMF_SZ sizeof(ROOTMF)
|
|
||||||
|
|
||||||
/* Call ID should not really be a big number */
|
/* Call ID should not really be a big number */
|
||||||
#define MAX_CID_DIGITS 3
|
#define MAX_CID_DIGITS 3
|
||||||
|
|
||||||
|
@ -80,86 +70,6 @@
|
||||||
error->error = 0; \
|
error->error = 0; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/*
|
|
||||||
* TODO:
|
|
||||||
*
|
|
||||||
* A potential future change here is to create a driver
|
|
||||||
* abstraction for each request/reply/event method, and a
|
|
||||||
* corresponding method to allow new per-message implementations
|
|
||||||
* to be registered. This would allow PES to easily add code
|
|
||||||
* to quirk a particular RIL implementation.
|
|
||||||
*
|
|
||||||
* struct g_ril_messages_driver {
|
|
||||||
* const char *name;
|
|
||||||
* };
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
static gboolean set_path(GRil *ril, guint app_type,
|
|
||||||
struct parcel *rilp,
|
|
||||||
const int fileid, const guchar *path,
|
|
||||||
const guint path_len)
|
|
||||||
{
|
|
||||||
unsigned char db_path[6] = { 0x00 };
|
|
||||||
unsigned char *comm_path = db_path;
|
|
||||||
char *hex_path = NULL;
|
|
||||||
int len = 0;
|
|
||||||
|
|
||||||
if (path_len > 0 && path_len < 7) {
|
|
||||||
memcpy(db_path, path, path_len);
|
|
||||||
len = path_len;
|
|
||||||
} else if (app_type == RIL_APPTYPE_USIM) {
|
|
||||||
len = sim_ef_db_get_path_3g(fileid, db_path);
|
|
||||||
} else if (app_type == RIL_APPTYPE_SIM) {
|
|
||||||
len = sim_ef_db_get_path_2g(fileid, db_path);
|
|
||||||
} else {
|
|
||||||
ofono_error("Unsupported app_type: 0%x", app_type);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* db_path contains the ID of the MF, but MediaTek modems return an
|
|
||||||
* error if we do not remove it. Other devices work the other way
|
|
||||||
* around: they need the MF in the path. In fact MTK behaviour seem to
|
|
||||||
* be the right one: to have the MF in the file is forbidden following
|
|
||||||
* ETSI TS 102 221, section 8.4.2 (we are accessing the card in mode
|
|
||||||
* "select by path from MF", see 3gpp 27.007, +CRSM).
|
|
||||||
*/
|
|
||||||
if (g_ril_vendor(ril) == OFONO_RIL_VENDOR_MTK && len >= (int) ROOTMF_SZ
|
|
||||||
&& memcmp(db_path, ROOTMF, ROOTMF_SZ) == 0) {
|
|
||||||
comm_path = db_path + ROOTMF_SZ;
|
|
||||||
len -= ROOTMF_SZ;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (len > 0) {
|
|
||||||
hex_path = encode_hex(comm_path, len, 0);
|
|
||||||
parcel_w_string(rilp, hex_path);
|
|
||||||
|
|
||||||
g_ril_append_print_buf(ril,
|
|
||||||
"%spath=%s,",
|
|
||||||
print_buf,
|
|
||||||
hex_path);
|
|
||||||
|
|
||||||
g_free(hex_path);
|
|
||||||
} else {
|
|
||||||
/*
|
|
||||||
* The only known case of this is EFPHASE_FILED (0x6FAE).
|
|
||||||
* The ef_db table ( see /src/simutil.c ) entry for
|
|
||||||
* EFPHASE contains a value of 0x0000 for it's
|
|
||||||
* 'parent3g' member. This causes a NULL path to
|
|
||||||
* be returned.
|
|
||||||
* (EF_PHASE does not exist for USIM)
|
|
||||||
*/
|
|
||||||
parcel_w_string(rilp, NULL);
|
|
||||||
|
|
||||||
g_ril_append_print_buf(ril,
|
|
||||||
"%spath=(null),",
|
|
||||||
print_buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean g_ril_request_deactivate_data_call(GRil *gril,
|
gboolean g_ril_request_deactivate_data_call(GRil *gril,
|
||||||
const struct req_deactivate_data_call *req,
|
const struct req_deactivate_data_call *req,
|
||||||
struct parcel *rilp,
|
struct parcel *rilp,
|
||||||
|
@ -336,71 +246,6 @@ error:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_sim_record_access_p2(enum req_record_access_mode mode)
|
|
||||||
{
|
|
||||||
switch (mode) {
|
|
||||||
case GRIL_REC_ACCESS_MODE_CURRENT:
|
|
||||||
return 4;
|
|
||||||
case GRIL_REC_ACCESS_MODE_ABSOLUTE:
|
|
||||||
return 4;
|
|
||||||
case GRIL_REC_ACCESS_MODE_NEXT:
|
|
||||||
return 2;
|
|
||||||
case GRIL_REC_ACCESS_MODE_PREVIOUS:
|
|
||||||
return 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
gboolean g_ril_request_sim_write_record(GRil *gril,
|
|
||||||
const struct req_sim_write_record *req,
|
|
||||||
struct parcel *rilp)
|
|
||||||
{
|
|
||||||
char *hex_data;
|
|
||||||
int p2;
|
|
||||||
|
|
||||||
parcel_init(rilp);
|
|
||||||
parcel_w_int32(rilp, CMD_UPDATE_RECORD);
|
|
||||||
parcel_w_int32(rilp, req->fileid);
|
|
||||||
|
|
||||||
g_ril_append_print_buf(gril, "(cmd=0x%02X,efid=0x%04X,",
|
|
||||||
CMD_UPDATE_RECORD, req->fileid);
|
|
||||||
|
|
||||||
if (set_path(gril, req->app_type, rilp, req->fileid,
|
|
||||||
req->path, req->path_len) == FALSE)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
p2 = get_sim_record_access_p2(req->mode);
|
|
||||||
hex_data = encode_hex(req->data, req->length, 0);
|
|
||||||
|
|
||||||
parcel_w_int32(rilp, req->record); /* P1 */
|
|
||||||
parcel_w_int32(rilp, p2); /* P2 (access mode) */
|
|
||||||
parcel_w_int32(rilp, req->length); /* P3 (Lc) */
|
|
||||||
parcel_w_string(rilp, hex_data); /* data */
|
|
||||||
parcel_w_string(rilp, NULL); /* pin2; only for FDN/BDN */
|
|
||||||
parcel_w_string(rilp, req->aid_str); /* AID (Application ID) */
|
|
||||||
|
|
||||||
/* sessionId, specific to latest MTK modems (harmless for older ones) */
|
|
||||||
if (g_ril_vendor(gril) == OFONO_RIL_VENDOR_MTK)
|
|
||||||
parcel_w_int32(rilp, 0);
|
|
||||||
|
|
||||||
g_ril_append_print_buf(gril,
|
|
||||||
"%s%d,%d,%d,%s,pin2=(null),aid=%s)",
|
|
||||||
print_buf,
|
|
||||||
req->record,
|
|
||||||
p2,
|
|
||||||
req->length,
|
|
||||||
hex_data,
|
|
||||||
req->aid_str);
|
|
||||||
|
|
||||||
g_free(hex_data);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
error:
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void g_ril_request_oem_hook_raw(GRil *gril, const void *payload, size_t length,
|
void g_ril_request_oem_hook_raw(GRil *gril, const void *payload, size_t length,
|
||||||
struct parcel *rilp)
|
struct parcel *rilp)
|
||||||
{
|
{
|
||||||
|
|
|
@ -50,26 +50,6 @@ struct req_setup_data_call {
|
||||||
unsigned req_cid;
|
unsigned req_cid;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
enum req_record_access_mode {
|
|
||||||
GRIL_REC_ACCESS_MODE_CURRENT,
|
|
||||||
GRIL_REC_ACCESS_MODE_ABSOLUTE,
|
|
||||||
GRIL_REC_ACCESS_MODE_NEXT,
|
|
||||||
GRIL_REC_ACCESS_MODE_PREVIOUS,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct req_sim_write_record {
|
|
||||||
guint app_type;
|
|
||||||
gchar *aid_str;
|
|
||||||
int fileid;
|
|
||||||
const unsigned char *path;
|
|
||||||
unsigned int path_len;
|
|
||||||
enum req_record_access_mode mode;
|
|
||||||
int record;
|
|
||||||
int length;
|
|
||||||
const unsigned char *data;
|
|
||||||
};
|
|
||||||
|
|
||||||
gboolean g_ril_request_deactivate_data_call(GRil *gril,
|
gboolean g_ril_request_deactivate_data_call(GRil *gril,
|
||||||
const struct req_deactivate_data_call *req,
|
const struct req_deactivate_data_call *req,
|
||||||
struct parcel *rilp,
|
struct parcel *rilp,
|
||||||
|
@ -84,10 +64,6 @@ gboolean g_ril_request_setup_data_call(GRil *gril,
|
||||||
struct parcel *rilp,
|
struct parcel *rilp,
|
||||||
struct ofono_error *error);
|
struct ofono_error *error);
|
||||||
|
|
||||||
gboolean g_ril_request_sim_write_record(GRil *gril,
|
|
||||||
const struct req_sim_write_record *req,
|
|
||||||
struct parcel *rilp);
|
|
||||||
|
|
||||||
void g_ril_request_oem_hook_raw(GRil *gril, const void *payload, size_t length,
|
void g_ril_request_oem_hook_raw(GRil *gril, const void *payload, size_t length,
|
||||||
struct parcel *rilp);
|
struct parcel *rilp);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue