FreeCalypso > hg > leo2moko-debug
diff g23m/condat/ms/src/mfw/mfw_nma.c @ 0:509db1a7b7b8
initial import: leo2moko-r1
author | Space Falcon <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 01 Jun 2015 03:24:05 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/condat/ms/src/mfw/mfw_nma.c Mon Jun 01 03:24:05 2015 +0000 @@ -0,0 +1,647 @@ +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) $Workfile:: mfw_nma.c $| +| $Author:: Es $Revision:: 1 $| +| CREATED: 13.10.98 $Modtime:: 2.03.00 16:26 $| +| STATE : code | ++--------------------------------------------------------------------+ + + MODULE : MFW_NMA + + PURPOSE : This modul contains the functions for network management. + + + $History:: mfw_nma.c $ + * + * ***************** Version 17 ***************** + * User: Es Date: 2.03.00 Time: 16:31 + * Updated in $/GSM/Condat/MS/SRC/MFW + * use 'aci_delete()' to clear the primitive routing for mfw_nm. + * + * ***************** Version 16 ***************** + * User: Vo Date: 10.01.00 Time: 14:41 + * Updated in $/GSM/Condat/MS/SRC/MFW + * Bug fix: search operator list for long name, short name and numeric + * name + * + * ***************** Version 15 ***************** + * User: Vo Date: 2.07.99 Time: 17:55 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 14 ***************** + * User: Vo Date: 20.05.99 Time: 17:40 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 13 ***************** + * User: Es Date: 15.03.99 Time: 18:22 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 12 ***************** + * User: Vo Date: 11.03.99 Time: 14:38 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 11 ***************** + * User: Vo Date: 17.02.99 Time: 19:03 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 10 ***************** + * User: Vo Date: 12.02.99 Time: 18:59 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 9 ***************** + * User: Vo Date: 9.02.99 Time: 14:54 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 8 ***************** + * User: Es Date: 8.12.98 Time: 16:53 + * Updated in $/GSM/DEV/MS/SRC/MFW + * + * ***************** Version 7 ***************** + * User: Vo Date: 24.11.98 Time: 21:40 + * Updated in $/GSM/DEV/MS/SRC/MFW + * first successful compilation of MFW +| +| ***************** Version 6 ***************** +| User: Le Date: 11.11.98 Time: 13:35 +| Updated in $/GSM/DEV/MS/SRC/MFW +| +| ***************** Version 5 ***************** +| User: Le Date: 10.11.98 Time: 16:07 +| Updated in $/GSM/DEV/MS/SRC/MFW +| +| ***************** Version 4 ***************** +| User: Le Date: 10.11.98 Time: 11:08 +| Updated in $/GSM/DEV/MS/SRC/MFW +| +| ***************** Version 3 ***************** +| User: Le Date: 27.10.98 Time: 15:59 +| Updated in $/GSM/DEV/MS/SRC/MFW +| +| ***************** Version 2 ***************** +| User: Le Date: 21.10.98 Time: 16:20 +| Updated in $/GSM/DEV/MS/SRC/MFW +*/ + +#define ENTITY_MFW + +#include "mfw_sys.h" + +#if defined (NEW_FRAME) + +#include "typedefs.h" +#include "vsi.h" +#include "custom.h" +#include "gsm.h" + +#else + +#include "STDDEFS.H" +#include "custom.h" +#include "gsm.h" +#include "vsi.h" + +#endif + +#include "message.h" +#include "prim.h" +#include "aci_cmh.h" +#include "cus_aci.h" +#include "mfw_mfw.h" +#include "mfw_nm.h" +#include "mfw_sima.h" +#include "mfw_nmi.h" +#include "mfw_sim.h" +#include "mfw_simi.h" +#include "mfw_nma.h" + +#include "mfw_phb.h" +#include "mfw_cm.h" + +#include "ksd.h" + +#include "mfw_ss.h" + +#include <string.h> + +#define hCommMM _ENTITY_PREFIXED(hCommMM) +#if defined (NEW_FRAME) +EXTERN T_HANDLE hCommMM; /* MM Communication */ +#else +EXTERN T_VSI_CHANDLE hCommMM; /* MM Communication */ +#endif +#ifndef NEPTUNE_BOARD +EXTERN BOOL cmhMM_FindNumeric ( T_OPER_ENTRY * plmnDesc, /* Side access into cmh_mmf.c */ + const CHAR *numStr ); +EXTERN BOOL cmhMM_FindName ( T_OPER_ENTRY * plmnDesc, /* Side access into cmh_mmf.c */ + const CHAR *string, T_ACI_CPOL_FRMT format ); +#else +EXTERN T_OPER_NTRY * cmhMM_FindNumeric ( CHAR * numStr ); +//EXTERN T_OPER_NTRY * cmhMM_FindLongName( CHAR * longStr ); +//EXTERN T_OPER_NTRY * cmhMM_FindShrtName( CHAR * shrtStr ); +EXTERN T_OPER_NTRY * cmhMM_FindName( const CHAR *string, T_ACI_CPOL_FRMT format); +#endif + +EXTERN void aci_create (BOOL (*r_cb)(ULONG opc, void * data), + BOOL (*cmd)(char *)); + + +typedef struct +{ +#ifdef FF_2TO1_PS + T_CAUSE_ps_cause nreg_cause; +#else + USHORT nreg_cause; /* nreg cause from MMR_NREG_IND */ +#endif + UBYTE forbidden_id[30]; /* forbidden indicator from MMR_PLMN_IND */ + UBYTE fieldstrength [30]; /* fieldstrength from MMR_PLMN_IND */ +} T_NM_ACI_DATA; + +T_NM_ACI_DATA nm_aci_data; + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_NMA | +| STATE : code ROUTINE: nma_response_cb | ++--------------------------------------------------------------------+ + + PURPOSE : Response Callback Handler. + +*/ + +#ifdef FF_2TO1_PS +GLOBAL BOOL nma_response_cb (ULONG opc, void * data) +{ +/* BEGIN ADD: Neptune alignment*/ +#ifdef NEPTUNE_BOARD + TRACE_FUNCTION ("nma_response_cb()"); + + if (opc EQ MMREG_INFO_IND) + { + /* + * send this NITZ information to MMI + */ + nm_nitz_info_ind((T_MMREG_INFO_IND *)data); + return FALSE; /* normal processing of ACI */ + } + +#else +/* END ADD: Neptune Alignment*/ + T_MMREG_DETACH_IND * nreg_ind; + + TRACE_FUNCTION ("nma_response_cb()"); + + switch (opc) + { + case MMREG_PLMN_IND: + /* + * available PLMN list, store fieldstrength + * and forbidden indicator (not yet included) + */ + return FALSE; /* normal processing of ACI */ + + case MMREG_DETACH_IND: + /* + * store the nreg cause + */ + nreg_ind = (T_MMREG_DETACH_IND *)data; + nm_aci_data.nreg_cause = nreg_ind->ps_cause; + return FALSE; /* normal processing of ACI */ + + case MMREG_INFO_IND: + /* + * send this NITZ information to MMI + */ + nm_nitz_info_ind((T_MMREG_INFO_IND *)data); + return FALSE; /* normal processing of ACI */ + } + +/* BEGIN ADD: Neptune alignment*/ +#endif +/* END ADD: Neptune alignment*/ + return FALSE; /* not processed by extension */ +} +#else +GLOBAL BOOL nma_response_cb (ULONG opc, void * data) +{ + T_MMR_NREG_IND * nreg_ind; + + TRACE_FUNCTION ("nma_response_cb()"); + + switch (opc) + { + case MMR_PLMN_IND: + /* + * available PLMN list, store fieldstrength + * and forbidden indicator (not yet included) + */ + return FALSE; /* normal processing of ACI */ + + case MMR_NREG_IND: + /* + * store the nreg cause + */ + nreg_ind = (T_MMR_NREG_IND *)data; + nm_aci_data.nreg_cause = nreg_ind->cause; + return FALSE; /* normal processing of ACI */ + + case MMR_INFO_IND: + /* + * send this NITZ information to MMI + */ + nm_nitz_info_ind((T_MMR_INFO_IND *)data); + return FALSE; /* normal processing of ACI */ + } + + return FALSE; /* not processed by extension */ +} +#endif + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_NMA | +| STATE : code ROUTINE: nma_init | ++--------------------------------------------------------------------+ + + PURPOSE : Install AT-Command Extension. + +*/ + +GLOBAL void nma_init () +{ + TRACE_FUNCTION ("nma_init()"); +} + + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_NMA | +| STATE : code ROUTINE: sAT_PlusCOPSE | ++--------------------------------------------------------------------+ + + PURPOSE : Converts a given PLMN indication into the two other formats. + +*/ +#ifdef NO_ASCIIZ +GLOBAL void sAT_PlusCOPSE(UBYTE *oper, UBYTE format, + T_MFW_LNAME *long_name, + T_MFW_SNAME *short_name, + UBYTE *numeric_name) +{ +#ifndef NEPTUNE_BOARD + T_OPER_ENTRY plmnDesc; + BOOL found; +#else +T_OPER_NTRY * network_entry; +#endif + + TRACE_FUNCTION ("sAT_PlusCOPSE()"); + + long_name->len = 0; + short_name->len = 0; + strcpy ((char *)numeric_name, ""); + + switch (format) + { + case COPS_FRMT_Numeric: +#ifndef NEPTUNE_BOARD + strcpy ((char *)numeric_name, (char *)oper); + found = cmhMM_FindNumeric (&plmnDesc, (char *)oper); + if (found) + { + long_name->len = MINIMUM(LONG_NAME-1, strlen(plmnDesc.longName)); + memcpy (long_name->data, plmnDesc.longName, long_name->len); + long_name->data[long_name->len] = '\0'; + long_name->dcs = MFW_ASCII; + + short_name->len = MINIMUM(SHORT_NAME-1, strlen(plmnDesc.shrtName)); + memcpy (short_name->data, plmnDesc.shrtName, short_name->len); + short_name->data[short_name->len] = '\0'; + short_name->dcs = MFW_ASCII; + } +#else + strcpy ((char *)numeric_name, (char *)oper); + network_entry = cmhMM_FindNumeric ((char *)oper); + if (network_entry NEQ NULL) + { + if (network_entry->longName) + { + long_name->len = MINIMUM(LONG_NAME-1, strlen((char *)network_entry->longName)); + memcpy (long_name->data, network_entry->longName, long_name->len); + long_name->data[long_name->len] = '\0'; + long_name->dcs = MFW_ASCII; + } + if (network_entry->shrtName) + { + short_name->len = MINIMUM(SHORT_NAME-1, strlen((char *)network_entry->shrtName)); + memcpy (short_name->data, network_entry->shrtName, short_name->len); + short_name->data[short_name->len] = '\0'; + short_name->dcs = MFW_ASCII; + } + } +#endif + break; + + case COPS_FRMT_Long: + if (oper) + { + long_name->len = MINIMUM(LONG_NAME-1, strlen((char *)oper)); + memcpy (long_name->data, oper, long_name->len); + long_name->data[long_name->len] = '\0'; + long_name->dcs = MFW_ASCII; + } +#ifndef NEPTUNE_BOARD + found = cmhMM_FindName (&plmnDesc, (char *)oper, COPS_FRMT_Long); + if (found) + { + numeric_name[0] = ((plmnDesc.mcc >> 8) & 0xf) + '0'; + numeric_name[1] = ((plmnDesc.mcc >> 4) & 0xf) + '0'; + numeric_name[2] = ( plmnDesc.mcc & 0xf) + '0'; + numeric_name[3] = ((plmnDesc.mnc >> 8) & 0xf) + '0'; + numeric_name[4] = ((plmnDesc.mnc >> 4) & 0xf) + '0'; + if ((plmnDesc.mnc & 0xf) EQ 0xf) + numeric_name[5] = '\0'; /* 2-digit-MNC */ + else + numeric_name[5] = ( plmnDesc.mnc & 0xf) + '0'; + numeric_name[6] = '\0'; + + short_name->len = MINIMUM(SHORT_NAME-1, strlen(plmnDesc.shrtName)); + memcpy (short_name->data, plmnDesc.shrtName, short_name->len); + short_name->data[short_name->len] = '\0'; + short_name->dcs = MFW_ASCII; + } +#else + + network_entry = cmhMM_FindName ((char *)oper, (T_ACI_CPOL_FRMT) COPS_FRMT_Long); + if (network_entry NEQ NULL) + { + numeric_name[0] = ((network_entry->mcc >> 8) & 0xf) + '0'; + numeric_name[1] = ((network_entry->mcc >> 4) & 0xf) + '0'; + numeric_name[2] = ( network_entry->mcc & 0xf) + '0'; + numeric_name[3] = ((network_entry->mnc >> 8) & 0xf) + '0'; + numeric_name[4] = ((network_entry->mnc >> 4) & 0xf) + '0'; + if ((network_entry->mnc & 0xf) EQ 0xf) + numeric_name[5] = '\0'; /* 2-digit-MNC */ + else + numeric_name[5] = ( network_entry->mnc & 0xf) + '0'; + numeric_name[6] = '\0'; + + if (network_entry->shrtName) + { + short_name->len = MINIMUM(SHORT_NAME-1, strlen((char *)network_entry->shrtName)); + memcpy (short_name->data, network_entry->shrtName, short_name->len); + short_name->data[short_name->len] = '\0'; + short_name->dcs = MFW_ASCII; + } + } +#endif + break; + + case COPS_FRMT_Short: + if (oper) + { + short_name->len = MINIMUM(SHORT_NAME-1, strlen((char *)oper)); + memcpy (short_name->data, oper, short_name->len); + short_name->data[short_name->len] = '\0'; + short_name->dcs = MFW_ASCII; + } +#ifndef NEPTUNE_BOARD + found = cmhMM_FindName (&plmnDesc, (char *)oper, COPS_FRMT_Short); + if (found) + { + numeric_name[0] = ((plmnDesc.mcc >> 8) & 0xf) + '0'; + numeric_name[1] = ((plmnDesc.mcc >> 4) & 0xf) + '0'; + numeric_name[2] = ( plmnDesc.mcc & 0xf) + '0'; + numeric_name[3] = ((plmnDesc.mnc >> 8) & 0xf) + '0'; + numeric_name[4] = ((plmnDesc.mnc >> 4) & 0xf) + '0'; + if ((plmnDesc.mnc & 0xf) EQ 0xf) + numeric_name[5] = '\0'; /* 2-digit-MNC */ + else + numeric_name[5] = ( plmnDesc.mnc & 0xf) + '0'; + numeric_name[6] = '\0'; /* 3-digit-MNC */ + + long_name->len = MINIMUM(LONG_NAME-1, strlen(plmnDesc.longName)); + memcpy (long_name->data, plmnDesc.longName, long_name->len); + long_name->data[long_name->len] = '\0'; + long_name->dcs = MFW_ASCII; + } +#else +network_entry = cmhMM_FindName ((char *)oper, (T_ACI_CPOL_FRMT)COPS_FRMT_Short); + if (network_entry NEQ NULL) + { + numeric_name[0] = ((network_entry->mcc >> 8) & 0xf) + '0'; + numeric_name[1] = ((network_entry->mcc >> 4) & 0xf) + '0'; + numeric_name[2] = ( network_entry->mcc & 0xf) + '0'; + numeric_name[3] = ((network_entry->mnc >> 8) & 0xf) + '0'; + numeric_name[4] = ((network_entry->mnc >> 4) & 0xf) + '0'; + if ((network_entry->mnc & 0xf) EQ 0xf) + numeric_name[5] = '\0'; /* 2-digit-MNC */ + else + numeric_name[5] = ( network_entry->mnc & 0xf) + '0'; + numeric_name[6] = '\0'; /* 3-digit-MNC */ + + if (network_entry->longName) + { + long_name->len = MINIMUM(LONG_NAME-1, strlen((char *)network_entry->longName)); + memcpy (long_name->data, network_entry->longName, long_name->len); + long_name->data[long_name->len] = '\0'; + long_name->dcs = MFW_ASCII; + } + } +#endif + break; + } +} +#else +GLOBAL void sAT_PlusCOPSE(UBYTE *oper, UBYTE format, UBYTE *long_name, + UBYTE *short_name, UBYTE *numeric_name) +{ +#ifndef NEPTUNE_BOARD + T_OPER_ENTRY plmnDesc; + BOOL found; +#else + T_OPER_NTRY * network_entry; +#endif + + TRACE_FUNCTION ("sAT_PlusCOPSE()"); + + strcpy ((char *)long_name, ""); + strcpy ((char *)short_name, ""); + strcpy ((char *)numeric_name, ""); + + switch (format) + { + case COPS_FRMT_Numeric: +#ifndef NEPTUNE_BOARD + strcpy ((char *)numeric_name, (char *)oper); + found = cmhMM_FindNumeric (&plmnDesc, (char *)oper); + if (found) + { + strncpy ((char *)long_name, plmnDesc.longName, LONG_NAME-1); + long_name[LONG_NAME-1] = '\0'; + + strncpy ((char *)short_name, plmnDesc.shrtName, SHORT_NAME-1); + short_name[SHORT_NAME-1] = '\0'; + } +#else + strcpy ((char *)numeric_name, (char *)oper); + network_entry = cmhMM_FindNumeric ((char *)oper); + if (network_entry NEQ NULL) + { + if (network_entry->longName) + { + strncpy ((char *)long_name, (char *)network_entry->longName, LONG_NAME-1); + long_name[LONG_NAME-1] = '\0'; + } + if (network_entry->shrtName) + { + strncpy ((char *)short_name, (char *)network_entry->shrtName, SHORT_NAME-1); + short_name[SHORT_NAME-1] = '\0'; + } + } +#endif + break; + + case COPS_FRMT_Long: + if (oper) + { + strncpy ((char *)long_name, (char *)oper, LONG_NAME-1); + long_name[LONG_NAME-1] = '\0'; + } +#ifndef NEPTUNE_BOARD + found = cmhMM_FindName (&plmnDesc, (char *)oper, COPS_FRMT_Long); + if (found) + { + numeric_name[0] = ((plmnDesc.mcc >> 8) & 0xf) + '0'; + numeric_name[1] = ((plmnDesc.mcc >> 4) & 0xf) + '0'; + numeric_name[2] = ( plmnDesc.mcc & 0xf) + '0'; + numeric_name[3] = ((plmnDesc.mnc >> 8) & 0xf) + '0'; + numeric_name[4] = ((plmnDesc.mnc >> 4) & 0xf) + '0'; + if ((plmnDesc.mnc & 0xf) EQ 0xf) + numeric_name[5] = '\0'; /* 2-digit-MNC */ + else + numeric_name[5] = ( plmnDesc.mnc & 0xf) + '0'; + numeric_name[6] = '\0'; /* 3-digit-MNC */ + + strncpy ((char *)short_name, plmnDesc.shrtName, SHORT_NAME-1); + short_name[SHORT_NAME-1] = '\0'; + } +#else + network_entry = cmhMM_FindName ((char *)oper, COPS_FRMT_Long); + if (network_entry NEQ NULL) + { + numeric_name[0] = ((network_entry->mcc >> 8) & 0xf) + '0'; + numeric_name[1] = ((network_entry->mcc >> 4) & 0xf) + '0'; + numeric_name[2] = ( network_entry->mcc & 0xf) + '0'; + numeric_name[3] = ((network_entry->mnc >> 8) & 0xf) + '0'; + numeric_name[4] = ((network_entry->mnc >> 4) & 0xf) + '0'; + if ((network_entry->mnc & 0xf) EQ 0xf) + numeric_name[5] = '\0'; /* 2-digit-MNC */ + else + numeric_name[5] = ( network_entry->mnc & 0xf) + '0'; + numeric_name[6] = '\0'; /* 3-digit-MNC */ + + if (network_entry->shrtName) + { + strncpy ((char *)short_name, (char *)network_entry->shrtName, SHORT_NAME-1); + short_name[SHORT_NAME-1] = '\0'; + } + } +#endif + break; + + case COPS_FRMT_Short: + if (oper) + { + strncpy ((char *)short_name, (char *)oper, SHORT_NAME-1); + short_name[SHORT_NAME-1] = '\0'; + } +#ifndef NEPTUNE_BOARD + found = cmhMM_FindName (&plmnDesc, (char *)oper, COPS_FRMT_Short); + if (found) + { + numeric_name[0] = ((plmnDesc.mcc >> 8) & 0xf) + '0'; + numeric_name[1] = ((plmnDesc.mcc >> 4) & 0xf) + '0'; + numeric_name[2] = ( plmnDesc.mcc & 0xf) + '0'; + numeric_name[3] = ((plmnDesc.mnc >> 8) & 0xf) + '0'; + numeric_name[4] = ((plmnDesc.mnc >> 4) & 0xf) + '0'; + if ((plmnDesc.mnc & 0xf) EQ 0xf) + numeric_name[5] = '\0'; /* 2-digit-MNC */ + else + numeric_name[5] = ( plmnDesc.mnc & 0xf) + '0'; + numeric_name[6] = '\0'; /* 3-digit-MNC */ + + strncpy ((char *)long_name, plmnDesc.longName, LONG_NAME-1); + long_name[LONG_NAME-1] = '\0'; + } +#else + network_entry = cmhMM_FindName ((char *)oper, COPS_FRMT_Short); + if (network_entry NEQ NULL) + { + numeric_name[0] = ((network_entry->mcc >> 8) & 0xf) + '0'; + numeric_name[1] = ((network_entry->mcc >> 4) & 0xf) + '0'; + numeric_name[2] = ( network_entry->mcc & 0xf) + '0'; + numeric_name[3] = ((network_entry->mnc >> 8) & 0xf) + '0'; + numeric_name[4] = ((network_entry->mnc >> 4) & 0xf) + '0'; + if ((network_entry->mnc & 0xf) EQ 0xf) + numeric_name[5] = '\0'; /* 2-digit-MNC */ + else + numeric_name[5] = ( network_entry->mnc & 0xf) + '0'; + numeric_name[6] = '\0'; /* 3-digit-MNC */ + + if (network_entry->longName) + { + strncpy ((char *)long_name, (char *)network_entry->longName, LONG_NAME-1); + long_name[LONG_NAME-1] = '\0'; + } + } +#endif + break; + } +} +#endif + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_NMA | +| STATE : code ROUTINE: sAT_PlusCREGE | ++--------------------------------------------------------------------+ + + PURPOSE : Request NREG cause. + +*/ + +#ifdef FF_2TO1_PS +GLOBAL T_CAUSE_ps_cause sAT_PlusCREGE () +{ + TRACE_FUNCTION ("sAT_PlusCREGE()"); + + return nm_aci_data.nreg_cause; +} +#else +GLOBAL USHORT sAT_PlusCREGE () +{ + TRACE_FUNCTION ("sAT_PlusCREGE()"); + + return nm_aci_data.nreg_cause; +} +#endif + +/* ++--------------------------------------------------------------------+ +| PROJECT: MMI-Framework (8417) MODULE: MFW_NMA | +| STATE : code ROUTINE: sAT_PlusCOPSF | ++--------------------------------------------------------------------+ + + PURPOSE : Request fieldstrength and forbidden indicator for + PLMN list. + +*/ + +GLOBAL void sAT_PlusCOPSF(UBYTE ** forbidden_id, UBYTE ** fieldstrength) +{ + TRACE_FUNCTION ("sAT_PlusCOPSF()"); + + *forbidden_id = nm_aci_data.forbidden_id; + *fieldstrength = nm_aci_data.fieldstrength; +} +