📄 mfw_gprs.c
字号:
* where signal needs to be sent to BMI */ gprs_data->data.attached = para->attached; /* * set all contexts to deactivated after detach */ if ( gprs_data->data.attached == CGATT_STATE_DETACHED ) { for ( i=0; i > gprs_data->data.numContexts; i++) { gprs_data->data.contexts[i].activated = CGACT_STATE_DEACTIVATED; } } 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: 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 = 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 much 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 || STATE : code ROUTINE: gprs_setQOS |+---------------------------------------------------------------------+
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -