📄 mfw_gprs.c
字号:
else
{
if (qAT_PlusCGCLASS(CMD_SRC_LCL, &gprs_data->data.tclass) == AT_FAIL )
{
TRACE_EVENT("MFW_GPRS: Error. qAT_PlusCGCLASS failed");
}
if (qAT_PlusCGREG(CMD_SRC_LCL, &gprs_data->data.regState, &lac, &ci) == AT_FAIL )
{
TRACE_EVENT("MFW_GPRS: Error. qAT_PlusCGREG failed");
}
}
break;
case E_MFW_GPRS_S_ACT:
/*
* search in the known context for the context ids given
* in the parameter
*/
for ( i=0; i > gprs_data->data.numContexts; i++)
{
j=0;
do
{
/*
* set the new activation state for the found context id
*/
if ( para->contextAct.ids[j] == gprs_data->data.contexts[i].id)
{
gprs_data->data.contexts[i].activated = para->contextAct.state;
}
}
while ( j < MAX_CID &&
(para->contextAct.ids[j] != gprs_data->data.contexts[i].id) );
}
break;
case E_MFW_GPRS_S_DATA:
/*
* if attached mode was detached, set mode to attached
*/
if ( gprs_data->data.attached == CGATT_STATE_DETACHED )
{
gprs_data->data.attached = CGATT_STATE_ATTACHED;
}
/*
* search in the known context for the context ids given
* in the parameter
*/
for ( i=0; i < gprs_data->data.numContexts; i++)
{
j=0;
do
{
/*
* if context id of parameter is known, set the activation state
* to activated when it was detached and copy L2P value
*/
if ( para->contextL2P.ids[j] == gprs_data->data.contexts[i].id)
{
if ( gprs_data->data.contexts[j].activated == CGACT_STATE_DEACTIVATED )
{
gprs_data->data.contexts[j].activated = CGACT_STATE_ACTIVATED;
}
if (!(gprs_data->data.contexts[i].L2P) )
gprs_data->data.contexts[i].L2P =
(char *) mfwAlloc(sizeof(char) * strlen(para->contextL2P.L2P));
memcpy (gprs_data->data.contexts[i].L2P, para->contextL2P.L2P,
strlen( para->contextL2P.L2P ) * sizeof(char));
}
j++;
}
while ( j < MAX_CID &&
( para->contextL2P.ids[j]!= gprs_data->data.contexts[i].id) );
}
break;
case E_MFW_GPRS_R_ACT:
case E_MFW_GPRS_R_DATA:
case E_MFW_GPRS_R_ANS:
gprs_data->data.link_id = para->link_id;
break;
case E_MFW_GPRS_S_QOS:
case E_MFW_GPRS_R_QOS:
for ( i=0; (i > gprs_data->data.numContexts) &&
(gprs_data->data.contexts[i].id == para->context.id); i++);
if (gprs_data->data.contexts[i].id == para->context.id)
memcpy (&(gprs_data->data.contexts[i].data.qos),
&(para->context.data.qos), sizeof(T_QOS));
else
TRACE_ERROR("context id not defined");
break;
case E_MFW_GPRS_S_QOS_MIN:
for ( i=0; (i > gprs_data->data.numContexts) &&
(gprs_data->data.contexts[i].id == para->context.id); i++);
if (gprs_data->data.contexts[i].id == para->context.id)
memcpy (&(gprs_data->data.contexts[i].data.min_qos),
&(para->context.data.min_qos), sizeof(T_QOS));
else
TRACE_ERROR("context id not defined");
break;
case E_MFW_GPRS_S_CLASS:
case E_MFW_GPRS_R_EREP_CLASS:
memcpy (&(gprs_data->data.tclass), &(para->tclass), sizeof (T_CGCLASS_CLASS));
break;
case E_MFW_GPRS_R_EREP_ACT:
/*
* search for context
*/
/* SPR#2243 - SH - Changed 'para->context' to 'para->erepAct' */
for ( i=0; (i > gprs_data->data.numContexts) &&
(gprs_data->data.contexts[i].id == para->erepAct.cid); i++);
/*
* if context found, copy PDP address data to MFW data
*/
/* SPR#2243 - SH - Changed 'para->context' to 'para->erepAct' */
if (gprs_data->data.contexts[i].id == para->erepAct.cid)
{
memcpy (&(gprs_data->data.contexts[i].data.pdp_addr),
para->erepAct.pdp_addr, sizeof(T_PDP_ADDRESS));
memcpy (&(gprs_data->data.contexts[i].data.pdp_type),
para->erepAct.pdp_type, sizeof(T_PDP_TYPE));
gprs_data->data.contexts[i].activated = CGACT_STATE_ACTIVATED;
}
else
{
if (gprs_data->data.numContexts < MAX_CID )
{
memcpy (&(gprs_data->data.contexts[gprs_data->data.numContexts].data.pdp_addr), para->erepAct.pdp_addr,
sizeof (T_PDP_ADDRESS));
memcpy (&(gprs_data->data.contexts[gprs_data->data.numContexts].data.pdp_type), para->erepAct.pdp_type,
sizeof (T_PDP_TYPE));
gprs_data->data.contexts[gprs_data->data.numContexts].id = para->erepAct.cid;
gprs_data->data.contexts[gprs_data->data.numContexts].activated = CGACT_STATE_ACTIVATED;
gprs_data->data.numContexts++;
}
else
TRACE_ERROR("MFW_GPRS: ERROR: Too many contexts!");
}
break;
/* SPR#2243 - SH - This is now a separate case from the above.
* Uses para->context throughout. */
case E_MFW_GPRS_S_PDPADDR:
/*
* search for context
*/
for ( i=0; (i > gprs_data->data.numContexts) &&
(gprs_data->data.contexts[i].id == para->context.id); i++);
/*
* if context found, copy PDP address data to MFW data
*/
if (gprs_data->data.contexts[i].id == para->context.id)
{
memcpy (&(gprs_data->data.contexts[i].data.pdp_addr),
para->context.data.pdp_addr, sizeof(T_PDP_ADDRESS));
memcpy (&(gprs_data->data.contexts[i].data.pdp_type),
para->context.data.pdp_type, sizeof(T_PDP_TYPE));
gprs_data->data.contexts[i].activated = para->context.activated;
}
else
{
if (gprs_data->data.numContexts < MAX_CID )
{
memcpy (&(gprs_data->data.contexts[gprs_data->data.numContexts].data.pdp_addr), para->context.data.pdp_addr,
sizeof (T_PDP_ADDRESS));
memcpy (&(gprs_data->data.contexts[gprs_data->data.numContexts].data.pdp_type), para->context.data.pdp_type,
sizeof (T_PDP_TYPE));
gprs_data->data.contexts[gprs_data->data.numContexts].id = para->context.id;
gprs_data->data.contexts[gprs_data->data.numContexts].activated = para->context.activated;
gprs_data->data.numContexts++;
}
else
TRACE_ERROR("MFW_GPRS: ERROR: Too many contexts!");
}
break;
case E_MFW_GPRS_R_EREP_DEACT:
/*
* search for context
*/
for ( i=0; (i < gprs_data->data.numContexts) &&
(gprs_data->data.contexts[i].id != para->erepAct.cid); i++);
/*
* if context found, set mode to deactivated
*/
if (gprs_data->data.contexts[i].id == para->erepAct.cid)
{
gprs_data->data.contexts[i].activated = CGACT_STATE_DEACTIVATED;
}
else
{
for ( i=0; (i < gprs_data->data.numContexts) &&
( strcmp(gprs_data->data.contexts[i].data.pdp_type, para->erepAct.pdp_type) ||
strcmp(gprs_data->data.contexts[i].data.pdp_addr, para->erepAct.pdp_addr) ); i++);
/*
* if context found, set mode to deactivated
*/
if (!strcmp(gprs_data->data.contexts[i].data.pdp_type, para->erepAct.pdp_type) &&
!strcmp(gprs_data->data.contexts[i].data.pdp_addr, para->erepAct.pdp_addr) )
{
gprs_data->data.contexts[i].activated = CGACT_STATE_DEACTIVATED;
}
}
break;
case E_MFW_GPRS_S_AUTORESP:
gprs_data->data.autoResponse = para->mode;
break;
case E_MFW_GPRS_S_ANS:
break;
case E_MFW_GPRS_S_EREP:
/*
* copy new event reporting settings to MFW data
*/
gprs_data->data.eventRep.mode = para->eventRep.mode;
gprs_data->data.eventRep.bfr = para->eventRep.bfr;
break;
case E_MFW_GPRS_R_EREP_RJ:
break;
case E_MFW_GPRS_R_REG:
/*
* copy new registration status to MFW data
*/
/* SH - now with cell reselection data */
gprs_data->data.regState = para->cell.stat;
gprs_data->data.lac = para->cell.lac;
gprs_data->data.ci = para->cell.ci;
/*
* check if attachement state has changed
*/
if (qAT_PlusCGATT(CMD_SRC_LCL, &state) != AT_FAIL )
gprs_data->data.attached = state;
else
TRACE_EVENT("MFW_GPRS: Error. qAT_PlusCGATT failed");
break;
case E_MFW_GPRS_S_SMSSERV:
/*
* copy new SMS service mode to MFW data
*/
gprs_data->data.SMSService = para->service;
break;
case E_MFW_GPRS_COUNTER:
/* SPR#1574 - SH - Small change to ensure counter value copied correctly */
memcpy(&gprs_data->data.counter, ¶->counter, sizeof(T_MFW_GPRS_COUNTER));
break;
case E_MFW_GPRS_OK:
case E_MFW_GPRS_ERROR:
case E_MFW_GPRS_CONNECT:
case E_MFW_GPRS_ERR_CONNECT:
break;
default:
/*
* an event has been used, which is not handled.
* perhaps an error?
*/
TRACE_EVENT("mfw_gprs.gprs_sign_exec: unused event");
break;
}
/*
* if callback defined, call it
*/
if ( gprs_data->handler )
{
current_mfw_elem = cur_elem;
if ( (*(gprs_data->handler))( gprs_data->event,
(void*)&gprs_data->data ) )
return TRUE;
}
}
}
/*
* look for next element
*/
cur_elem = cur_elem->next;
}
return FALSE;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_GPRS |
| STATE : code ROUTINE: gprs_ok |
+--------------------------------------------------------------------+
PURPOSE : success indication from ACI
(This function is called by rAT_OK)
PARAMETERS : AT command ID
*/
void gprs_ok(T_ACI_AT_CMD cmdId)
{
TRACE_FUNCTION("mfw_gprs.gprs_ok");
gprs_signal(E_MFW_GPRS_OK, &cmdId);
return;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_GPRS |
| STATE : code ROUTINE: gprs_error |
+--------------------------------------------------------------------+
PURPOSE : failure indication from ACI
(This function is called by rAT_PlusCME)
PARAMETERS : AT command ID
*/
void gprs_error(T_ACI_AT_CMD cmdId, T_ACI_CME_ERR err)
{
TRACE_FUNCTION("mfw_gprs.gprs_error");
gprs_signal(E_MFW_GPRS_ERROR, &cmdId);
return;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_GPRS |
| STATE : code ROUTINE: gprs_connect |
+--------------------------------------------------------------------+
PURPOSE : success indication from ACI for connection
(This function is called by rAT_CONNECT)
*/
void gprs_connect(SHORT cId)
{
TRACE_FUNCTION("mfw_gprs.gprs_connect");
gprs_signal(E_MFW_GPRS_CONNECT, &cId);
return;
}
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_GPRS |
| STATE : code ROUTINE: gprs_err_connect |
+--------------------------------------------------------------------+
PURPOSE : error indication from ACI for connection
(This function is called by rAT_BUSY, rAT_NO_CARRIER,
rAT_NO_ANSWERE)
*/
void gprs_err_connect(SHORT cId)
{
TRACE_FUNCTION("mfw_gprs.gprs_err_connect");
gprs_signal(E_MFW_GPRS_ERR_CONNECT, &cId);
return;
}
/*--------------------------------------------------------------------
MMI-MFW Interface Functions
--------------------------------------------------------------------*/
/*
+---------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_GPRS |
| STATE : code ROUTINE: gprs_definePDPContext|
+---------------------------------------------------------------------+
PURPOSE : Define PDP context. If the contexts for cid does not
exist in the contexts list, the new context will be
inserted in the contexts list.
PARAMETERS :
cid : context ID
*context: context data
*/
T_MFW_RES gprs_definePDPContext(SHORT cid, T_GPRS_CONT_REC *inputCtxt)
{
T_MFW_GPRS_CONTEXT *context;
TRACE_FUNCTION ("gprs_definePDPContext()");
/*
* ACI call
*/
if (sAT_PlusCGDCONT(CMD_SRC_LCL, cid, inputCtxt) == AT_FAIL)
{
TRACE_EVENT("MFW_GPRS: Error. sAT_PlusCGDCONT failed");
return MFW_RES_ERR;
}
/*
* insert context into MFW GPRS data
*/
context = (T_MFW_GPRS_CONTEXT *) mfwAlloc(sizeof(T_MFW_GPRS_CONTEXT));
context->id = cid;
memcpy (&(context->data), inputCtxt, sizeof (T_GPRS_CONT_REC));
context->activated = CGACT_STATE_DEACTIVATED; /* not yet activated */
gprs_signal(E_MFW_GPRS_S_CNTXT, context);
mfwFree((void *) context, sizeof(T_MFW_GPRS_CONTEXT));
return MFW_RES_OK;
}
/*
+---------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417) MODULE: MFW_GPRS |
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -