📄 mfw_sat.c
字号:
{
trmResponse[ti++] = rlen; /* dito */
while (rlen--)
trmResponse[ti++] = *res++; /* result data */
}
else /* result ok no additional resultcode attached*/
{
trmResponse[ti++] = 0x01;
trmResponse[ti++] = *res;
}
trmResponse[ti++] = 0x90; /* item identifier tag + CR */
trmResponse[ti++] = 1; /* length */
trmResponse[ti++] = itemId; /* selected item id */
TRACE_EVENT("SATR:satItem");
sAT_PercentSATR(CMD_SRC_LCL,ti,trmResponse);
/* Deallocate memory used for Terminal Response buffer */
if (trmResponse != NULL)
{
mfwFree(trmResponse, TRM_RSP_LEN);
trmResponse = NULL;
}
return MfwResOk;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SAT |
| STATE : code ROUTINE : satMenuItem |
+--------------------------------------------------------------------+
PURPOSE : user selected menu item to SIM
SPR#2121 - DS - Dynamically allocate memory for Terminal Response.
*/
MfwRes satMenuItem (U8 itemId, U8 help)
{
S16 ti = 0;
U8* trmResponse = NULL;
TRACE_FUNCTION("satMenuItem()");
/* Allocate memory for Terminal Response buffer */
trmResponse = (U8*)mfwAlloc(TRM_RSP_LEN);
if (trmResponse == NULL)
{
/* Memory allocation failed */
TRACE_ERROR("ERROR: Failed to allocate memory for TR buffer");
return MfwResNoMem;
}
trmResponse[ti++] = 0xD3; /* menu selection tag */
trmResponse[ti++] = 0; /* length (filled later) */
trmResponse[ti++] = 0x82; /* --device identities-- */
trmResponse[ti++] = 0x02; /* length */
trmResponse[ti++] = 0x01; /* source: Keypad */
trmResponse[ti++] = 0x81; /* destination: SIM */
trmResponse[ti++] = 0x90; /* --item identifier-- */
trmResponse[ti++] = 0x01; /* length */
trmResponse[ti++] = itemId; /* item id */
if (help)
{
trmResponse[ti++] = 0x95; /* --help request-- */
trmResponse[ti++] = 0x00; /* length */
}
trmResponse[1] = ti - 2; /* length of menu selection */
sAT_PercentSATE(CMD_SRC_LCL,ti,trmResponse);
/* Deallocate memory used for Terminal Response buffer */
if (trmResponse != NULL)
{
mfwFree(trmResponse, TRM_RSP_LEN);
trmResponse = NULL;
}
return MfwResOk;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SAT |
| STATE : code ROUTINE : satEvtDownload |
+--------------------------------------------------------------------+
PURPOSE : download actual event to SAT (User activity and Idle Screen available)
SPR#2121 - DS - Dynamically allocate memory for Terminal Response.
*/
MfwRes satEvtDownload (U8 evt)
{
S16 ti = 0;
U8 src;
U8 evtFlags=0;
U8* trmResponse = NULL;
TRACE_FUNCTION("satEvtDownload()");
/* Allocate memory for Terminal Response buffer */
trmResponse = (U8*)mfwAlloc(TRM_RSP_LEN);
if (trmResponse == NULL)
{
/* Memory allocation failed */
TRACE_ERROR("ERROR: Failed to allocate memory for TR buffer");
return MfwResNoMem;
}
switch (evt)
{
case SatEvtUserAction: /* user activity */
evtFlags = SatEvtUserActionActivated; /* source of event */
break;
case SatEvtIdleScreen: /* idle screen available */
evtFlags = SatEvtIdleScreenActivated; /* source of event */
break;
default:
TRACE_ERROR("ERROR: Unrecognised evt");
/* Deallocate memory used for Terminal Response buffer */
if (trmResponse != NULL)
{
mfwFree(trmResponse, TRM_RSP_LEN);
trmResponse = NULL;
}
return MfwResErr; /* illegal event */
}
if (!(eventList&evtFlags)) /*Only send registered events */
{
TRACE_ERROR("ERROR: evtFlags not registered in eventList");
/* Deallocate memory used for Terminal Response buffer */
if (trmResponse != NULL)
{
mfwFree(trmResponse, TRM_RSP_LEN);
trmResponse = NULL;
}
return MfwResErr;
}
switch (evt)
{
case SatEvtUserAction: /* user activity */
src = SatDevME; /* source of event */
break;
case SatEvtIdleScreen: /* idle screen available */
src = SatDevDisplay; /* source of event */
break;
default:
TRACE_ERROR("ERROR: Unrecognised evt");
/* Deallocate memory used for Terminal Response buffer */
if (trmResponse != NULL)
{
mfwFree(trmResponse, TRM_RSP_LEN);
trmResponse = NULL;
}
return MfwResErr; /* illegal event */
}
eventList&=(~evtFlags); /* Deregister event */
trmResponse[ti++] = 0xD6; /* event download tag */
trmResponse[ti++] = 0; /* length (filled later) */
trmResponse[ti++] = 0x99; /* --event list-- */
trmResponse[ti++] = 0x01; /* length */
trmResponse[ti++] = evt; /* actual event */
trmResponse[ti++] = 0x82; /* --device identities-- */
trmResponse[ti++] = 0x02; /* length */
trmResponse[ti++] = src; /* source */
trmResponse[ti++] = 0x81; /* destination: SIM */
trmResponse[1] = ti - 2; /* length of event download */
sAT_PercentSATE(CMD_SRC_LCL,ti,trmResponse);
/* Deallocate memory used for Terminal Response buffer */
if (trmResponse != NULL)
{
mfwFree(trmResponse, TRM_RSP_LEN);
trmResponse = NULL;
}
return MfwResOk;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SAT |
| STATE : code ROUTINE : satEvtRegistered |
+--------------------------------------------------------------------+
PURPOSE : Check if evt (User activity and Idle Screen available) has been
registered by previous SAT Setup Event List command.
SPR#2121 - DS - Created function.
*/
int satEvtRegistered (int evt)
{
TRACE_FUNCTION("satEvtRegistered()");
if (eventList & evt)
{
return TRUE;
}
else
{
return FALSE;
}
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SAT |
| STATE : code ROUTINE : satDone |
+--------------------------------------------------------------------+
PURPOSE : SIM toolkit command confirmation
SPR#2121 - DS - Dynamically allocate memory for Terminal Response.
*/
MfwRes satDone (SatCmd *cmd, U8 *res, int rlen)
{
S16 ti;
U8 response = *res;
U8* trmResponse = NULL;
if (satNoResponse) /* no response, if ... */
{
TRACE_EVENT("satDone: no response. Handled by ACI");
return MfwResOk; /* ... notified by ACI */
}
/* Allocate memory for Terminal Response buffer */
trmResponse = (U8*)mfwAlloc(TRM_RSP_LEN);
if (trmResponse == NULL)
{
/* Memory allocation failed */
TRACE_ERROR("ERROR: Failed to allocate memory for TR buffer");
return MfwResNoMem;
}
/*SPR#2121 - DS - Set up terminal response with default values */
lenResponse = sizeof(defResponse); /* prep. terminal response */
memcpy(trmResponse,defResponse,lenResponse);
trmResponse[2] = cmd->number; /* command number */
trmResponse[3] = cmd->type; /* command type */
trmResponse[4] = cmd->qual; /* command qualifier */
ti = sizeof(defResponse) - 2; /* result length */
if(res[1] != SatResAiNoCause) /* only attach additional information if existent*/
{
trmResponse[ti++] = rlen; /* dito */
while (rlen--)
trmResponse[ti++] = *res++; /* result data */
}
else /* result ok no additional resultcode attached*/
{
trmResponse[ti++] = 0x01;
trmResponse[ti++] = *res;
}
switch (response)
{
case SatResSuccess: /* performed successsfully */
case SatResPartial: /* ok,partial comprehension */
case SatResMissing: /* ok,missing information */
case SatResAdditional: /* ok,additional EFs read */
case SatResNoIcon: /* ok,no icon displayed */
case SatResModified: /* ok,modified by SIM */
case SatResUserAbort: /* terminated by user */
case SatResUserBack: /* backward move by user */
case SatResUserNoResp: /* no response from user */
case SatResUserHelp: /* help request from user */
case SatResUserAbortUSSD: /* USSD terminated by user */
case SatResBusyME: /* ME temporary failure */
case SatResBusyNet: /* Net temporary failure */
case SatResReject: /* user reject call setup */
case SatResCleared: /* call cleared (user/net) */
case SatResTimerConflict: /* conflict on timer state */
case SatResCCTemp: /* CC by SIM: temp failure */
case SatResImpossible: /* ME cannot do it */
case SatResUnknownType: /* type not understood */
case SatResUnknownData: /* data not understood */
case SatResUnknownNumber: /* number not understood */
case SatResSSerror: /* SS return error */
case SatResSMSerror: /* SMS-RP error */
case SatResNoValues: /* missing required values */
case SatResUSSDerror: /* USSD return error */
case SatResMultiCard: /* Multiple card error */
case SatResCCPermanent: /* CC by SIM: perm. failure */
break;
default:
TRACE_ERROR("ill response code");
break;
}
TRACE_EVENT_P1("SATR:satdone. Response: %x", response);
sAT_PercentSATR(CMD_SRC_LCL,ti,trmResponse);
/* Deallocate memory used for Terminal Response buffer */
if (trmResponse != NULL)
{
mfwFree(trmResponse, TRM_RSP_LEN);
trmResponse = NULL;
}
return MfwResOk;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SAT |
| STATE : code ROUTINE : sigExec |
+--------------------------------------------------------------------+
PURPOSE : execute SAT signal
*/
static int sigExec (MfwHdr *curElem, U32 evt, void *data)
{
MfwSat *sc;
while (curElem)
{
if (curElem->type == MfwTypSat)
{
sc = curElem->data;
if (sc->map & evt)
{ /* events match */
if (sc->handler) /* handler valid */
{
current_mfw_elem = curElem; /* LE 06.06.00 */
sc->evt = evt;
if (sc->cmd)
memcpy(sc->cmd,(U8 *)data,sizeof(SatCmd));
if ((*(sc->handler))(evt,sc))
return 1; /* event consumed */
}
}
}
curElem = curElem->next;
}
return 0;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SAT |
| STATE : code ROUTINE : satSignal |
+--------------------------------------------------------------------+
PURPOSE : SAT event
*/
void satSignal (U32 evt, void *data)
{
UBYTE temp = dspl_Enable(0);
TRACE_FUNCTION("satSignal event");
TRACE_EVENT_P1("satSignal event %d",evt);
if (mfwSignallingMethod EQ 0)
{
if (mfwFocus)
if (sigExec(mfwFocus,evt,data))
{
dspl_Enable(temp);
return;
}
if (mfwRoot)
sigExec(mfwRoot,evt,data);
}
else
{
MfwHdr* h = 0;
if (mfwFocus)
h = mfwFocus;
if (!h)
h = mfwRoot;
while (h)
{
if (sigExec(h,evt,data))
{
dspl_Enable(temp);
return;
}
if (h == mfwRoot)
{
dspl_Enable(temp);
return;
}
h = mfwParent(mfwParent(h));
if (h)
h = ((MfwWin *)(h->data))->elems;
}
sigExec (mfwRoot,evt,data);
}
dspl_Enable(temp);
return;
}
/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417) MODULE : MFW_SAT |
| STATE : code ROUTINE : satCommand |
+--------------------------------------------------------------------+
PURPOSE : handle mfw windows command
*/
static int satCommand (U32 cmd, void *h)
{
switch (cmd)
{
case MfwCmdDelete: /* delete me */
if (!h)
return 0;
satDelete(h);
return 1;
default:
break;
}
return 0;
}
/*
+--------------------------------------------------------------------+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -