stk: Use envelope encoding utility from stkutil.c

This commit is contained in:
Andrzej Zaborowski 2010-06-07 12:08:27 +02:00 committed by Denis Kenzior
parent f989541161
commit 7e5ef25c5a
3 changed files with 17 additions and 16 deletions

View File

@ -197,7 +197,7 @@ void ofono_cbs_notify(struct ofono_cbs *cbs, const unsigned char *pdu,
if (cbs_topic_in_range(c.message_identifier, cbs->efcbmid_contents)) { if (cbs_topic_in_range(c.message_identifier, cbs->efcbmid_contents)) {
if (cbs->stk) if (cbs->stk)
__ofono_cbs_sim_download(cbs->stk, pdu, pdu_len); __ofono_cbs_sim_download(cbs->stk, &c);
return; return;
} }

View File

@ -177,8 +177,8 @@ void __ofono_atom_free(struct ofono_atom *atom);
#include <ofono/sim.h> #include <ofono/sim.h>
#include <ofono/stk.h> #include <ofono/stk.h>
void __ofono_cbs_sim_download(struct ofono_stk *stk, struct cbs;
const guint8 *pdu, int pdu_len); void __ofono_cbs_sim_download(struct ofono_stk *stk, const struct cbs *msg);
#include <ofono/ssn.h> #include <ofono/ssn.h>

View File

@ -49,32 +49,33 @@ static void stk_cbs_download_cb(const struct ofono_error *error,
{ {
if (error->type != OFONO_ERROR_TYPE_NO_ERROR) { if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
ofono_error("CellBroadcast download to UICC failed"); ofono_error("CellBroadcast download to UICC failed");
/* "The ME may retry to deliver the same Cell Broadcast
* page." */
return; return;
} }
DBG("CellBroadcast download to UICC reported no error"); DBG("CellBroadcast download to UICC reported no error");
} }
void __ofono_cbs_sim_download(struct ofono_stk *stk, void __ofono_cbs_sim_download(struct ofono_stk *stk, const struct cbs *msg)
const guint8 *pdu, int pdu_len)
{ {
guint8 tlv[pdu_len + 8]; const guint8 *tlv;
unsigned int tlv_len;
struct stk_envelope e;
if (stk->driver->envelope == NULL) if (stk->driver->envelope == NULL)
return; return;
tlv[0] = STK_ENVELOPE_TYPE_CBS_PP_DOWNLOAD; e.type = STK_ENVELOPE_TYPE_CBS_PP_DOWNLOAD;
tlv[1] = 6 + pdu_len; e.src = STK_DEVICE_IDENTITY_TYPE_NETWORK;
tlv[2] = 0x80 | STK_DATA_OBJECT_TYPE_DEVICE_IDENTITIES; e.dst = STK_DEVICE_IDENTITY_TYPE_UICC;
tlv[3] = 0x02; /* Device Identities length */ memcpy(&e.cbs_pp_download.page, msg, sizeof(msg));
tlv[4] = STK_DEVICE_IDENTITY_TYPE_NETWORK;
tlv[5] = STK_DEVICE_IDENTITY_TYPE_UICC;
tlv[6] = 0x80 | STK_DATA_OBJECT_TYPE_CBS_PAGE;
tlv[7] = pdu_len;
memcpy(tlv + 8, pdu, pdu_len); tlv = stk_pdu_from_envelope(&e, &tlv_len);
if (!tlv)
return;
stk->driver->envelope(stk, pdu_len + 8, tlv, stk_cbs_download_cb, stk); stk->driver->envelope(stk, tlv_len, tlv, stk_cbs_download_cb, stk);
} }
void ofono_stk_proactive_command_notify(struct ofono_stk *stk, void ofono_stk_proactive_command_notify(struct ofono_stk *stk,