📄 mn80pub3.c
字号:
#ifndef PM_ONPC
#ifdef __cplusplus
extern "C"{
#endif
#include "phs_def.h"
#include "mn80.h"
#include "mn80ext.h"
#include "stephi.h"
void Mn_PCallDLSet(void)
{
RetryCount = 0;
DLEstab |= (U1)MN_IN_EVT(L3C_MN_EVT)->add_dat[1];
#ifdef SIMU_ON_PC
ProtocolTrace(2,"!!!PCall set %d %d %d\n",DLEstab,MesSnd,(U1)MN_IN_EVT(L3C_MN_EVT)->add_dat[1]);
#endif
if (MesSnd)
{
if (TC309PTim)
{
m_stptim(T1S, TITC309P, phs_mode);
TC309PTim = OFF;
}
}
else
{
if (DLEstab == (SACCH | FACCH))
{
set_up_b( (BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt) );
SYS_WORK->tsk_id = TASKCC;
MN_OUT_EVT(L3_MN_EVT)->evt_cod = ECC;
MN_OUT_EVT(L3_MN_EVT)->pri_cod = PRCALSET;
MN_OUT_EVT(L3_MN_EVT)->buf_adr = (U1*)CallSetInfo;
MN_OUT_EVT(L3_MN_EVT)->inf_len = CallSetInfo->msg[2] - 1;
MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)&CallSetInfo->msg[4];
MN_OUT_EVT(L3_MN_EVT)->add_dat = CallProt;
MN_OUT_EVT(L3_MN_EVT)->dmy3 = CallSts-1;
m_excreq((WORD*)&SYS_WORK->tsk_id);
CCSetup = MesSnd = ON;
CallSetInfo = (M_MSB *)0;
ScrKey = OFF;
Certify = OFF;
if (!cmp_up_b(SYS_AREA_P, CLSAREA, 7))
{
move_up_b(SYS_AREA_P, &Sys_pbsid[7], 7);
}
move_up_b(Sys_rtfunc, RTFUNCDEF, sizeof(RTFUNCDEF));
move_up_b(Sys_mmfunc, MMFUNCDEF, sizeof(MMFUNCDEF));
}
}
}
void Mn_PCallSetAcp(void) //CC -> MN
{
RetryCount = 0;
if (!ReCall)
{
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MCALLREC;
SYS_WORK->msg_adr->msg[2] = (U1)MN_IN_EVT(L3_MN_EVT)->inf_len;
move_up_b((U1*)&SYS_WORK->msg_adr->msg[3] ,
MN_IN_EVT(L3_MN_EVT)->inf_adr ,
MN_IN_EVT(L3_MN_EVT)->inf_len);
exec_uap(SYS_WORK->msg_adr);
}
if( MN_IN_EVT(L3_MN_EVT)->buf_adr )
{
m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr );
}
if(*Mn_GetSpecState(phs_mode) != ST_PP_TCH_EST_O)
{
return;
}
if (ExLCH & 0x04)
{
set_up_b( (BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
SYS_WORK->tsk_id = TASKRT;
MN_OUT_EVT(L3_MN_EVT)->evt_cod = ERT;
MN_OUT_EVT(L3_MN_EVT)->pri_cod = PRDEFINF;
MN_OUT_EVT(L3_MN_EVT)->add_dat = 0x01;
m_excreq((WORD*)&SYS_WORK->tsk_id);
DefInfo_Rcvf = OFF;
return;
}
Mn_PCallDefInfo();
}
void Mn_PCallDefInfo(void)
{
#ifdef SIMU_ON_PC
ProtocolTrace(6,"!!!mn received rt definition response %d %d %d \n",DefInfo_Rcvf,ExLCH,ExLCH);
#endif
if(DefInfo_Rcvf == ON)
return;
if(Mn_InEvtCod[0] == ERT && Mn_InEvtCod[1] == PSDEFINF)
{
if( MN_IN_EVT(L3_MN_EVT)->inf_len == 8 )
{
/*Marked by Meteor*/
#if 0
/*MN_IINFP [1]Selection Level[2]Hold Level[3][4]handover[5]TCH Swich*/
/* We need to lower the mal-network parameters*/
if((Sys_initdl1[30]>0)&&(MN_IINFP[2]>Sys_initdl1[30])) /*16dBu J21 Sensitivity. If hold level>16dbu, then lower all the levels*/
{
tmp=MN_IINFP[2] - Sys_initdl1[30]; /* TX_BIAS current debug usage*/
MN_IINFP[1] =MN_IINFP[1]-tmp;
MN_IINFP[2] =MN_IINFP[2]-tmp;
MN_IINFP[3] =MN_IINFP[3]-tmp;
MN_IINFP[4] =MN_IINFP[4]-tmp;
MN_IINFP[5] =MN_IINFP[5]-tmp;
}
#endif
/*Marked by Meteor End*/
if( MN_IN_EVT(L3_MN_EVT)->inf_adr[1] <= MONITOR_LEAST )
MN_IN_EVT(L3_MN_EVT)->inf_adr[1] = MONITOR_LEAST;
if( MN_IN_EVT(L3_MN_EVT)->inf_adr[2] <= MONITOR_LEAST )
MN_IN_EVT(L3_MN_EVT)->inf_adr[2] = MONITOR_LEAST;
Sys_ccsinf[12] = MN_IN_EVT(L3_MN_EVT)->inf_adr[1];
move_up_b(&Sys_ccsinf[13] , &MN_IN_EVT(L3_MN_EVT)->inf_adr[2] , 6);
#ifdef SIMU_ON_PC
SendUart2L1(SIMTSKDTW , SYSCCSINF , 12 , &Sys_ccsinf[12] , 7);
#endif
Sys_thresh[0] = MN_IN_EVT(L3_MN_EVT)->inf_adr[1];
Sys_thresh[1] = MN_IN_EVT(L3_MN_EVT)->inf_adr[2];
#ifdef SIMU_ON_PC
SendUart2L1( SIMTSKDTW , SYSTHRESH , 0, Sys_thresh , 2);
#endif
Sys_pbsid[7] = MN_IN_EVT(L3_MN_EVT)->inf_adr[1];
move_up_b( &Sys_pbsid[8] , &MN_IN_EVT(L3_MN_EVT)->inf_adr[2] , 6); //zch0221
Areainfbak[0] = MN_IN_EVT(L3_MN_EVT)->inf_adr[1];
Areainfbak[1] = MN_IN_EVT(L3_MN_EVT)->inf_adr[2];
Areainfbak[2] = MN_IN_EVT(L3_MN_EVT)->inf_adr[3];
Areainfbak[3] = MN_IN_EVT(L3_MN_EVT)->inf_adr[4];
#ifdef EXT_IO
HisOut(5,0x44,0x55 , Sys_initdl1[30] , &Sys_pbsid[7]); /* Current Area information*/
#endif
}
if( MN_IN_EVT(L3_MN_EVT)->buf_adr )
m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr );
}
if (ExLCH & 0x02)
{
set_up_b( (BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
SYS_WORK->tsk_id = TASKRT;
MN_OUT_EVT(L3_MN_EVT)->evt_cod = ERT;
MN_OUT_EVT(L3_MN_EVT)->pri_cod = PRRTFUNC;
m_excreq((WORD*)&SYS_WORK->tsk_id);
RTFncRes_Rcvf = OFF;
}
else
{
Mn_PCallRTFncRes();
}
}
void Mn_PCallRTFncRes(void)
{
#ifdef SIMU_ON_PC
ProtocolTrace(6,"!!!mn received rt function response %d %d %d \n",RTFncRes_Rcvf,CallMode,ExLCH);
#endif
if(RTFncRes_Rcvf == ON)
return;
if(Mn_InEvtCod[0] == ERT && Mn_InEvtCod[1] == PSRTFUNC)
{
Mn_RTFncSet();
if( MN_IN_EVT(L3_MN_EVT)->buf_adr )
m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr );
}
if(CallMode != CALLMODE_LOCREG)
{
set_up_b( (BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
SYS_WORK->tsk_id = TASKRT;
MN_OUT_EVT(L3_MN_EVT)->evt_cod = ERT;
MN_OUT_EVT(L3_MN_EVT)->pri_cod = PRSECSET;
m_excreq((WORD*)&SYS_WORK->tsk_id);
ScrKey = ON;
}
if (ExLCH & 0x01)
{
set_up_b((BYTE*)SYS_WORK->out_evt , 0 ,sizeof(SYS_WORK->out_evt));
SYS_WORK->tsk_id = TASKMM;
MN_OUT_EVT(L3_MN_EVT)->evt_cod = EMM;
MN_OUT_EVT(L3_MN_EVT)->pri_cod = MNMM_FUNCTION_REQ;
if ((Sys_initdl1[9] == 0x04) && (Sys_initdl1[10] == 0x4A))
{
MN_OUT_EVT(L3_MN_EVT)->add_dat = BIT1;
}
else
{
MN_OUT_EVT(L3_MN_EVT)->add_dat = 0x03;;
}
m_excreq((WORD*)&SYS_WORK->tsk_id);
}
else
{
Mn_PCallMMFncRes();
}
}
void Mn_PCallMMFncRes(void)
{
U1 n, m;
if(Mn_InEvtCod[0] == EMM && Mn_InEvtCod[1] == MMMN_FUNCTION_RES)
{
for(n=0 ; n<MN_IN_EVT(L3_MN_EVT)->inf_len ; )
{
if( MN_IN_EVT(L3_MN_EVT)->inf_adr[n] & 0x80 ) //single octet
{
Sys_mmfunc[1] = MN_IN_EVT(L3_MN_EVT)->inf_adr[n] & 0x01;
n++;
}
else
{
m = 0;
switch( MN_IN_EVT(L3_MN_EVT)->inf_adr[n] )
{
case IANSTYP:
Sys_mmfunc[0] = MN_IN_EVT(L3_MN_EVT)->inf_adr[n+1];
m = 2;
break;
case IPAGARA:
Sys_mmfunc[2] = MN_IN_EVT(L3_MN_EVT)->inf_adr[n+1];
m = 2;
break;
default:
break;
}
n += m;
}
}
if( MN_IN_EVT(L3_MN_EVT)->buf_adr )
m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr );
}
switch (CallMode)
{
case CALLMODE_OUT:
if (Sys_mmfunc[0] == 0x00
|| ReCall == ON)
{
Certify = ON;
}
break;
case CALLMODE_IN:
if (Sys_mmfunc[0] == 0x00) //No Authentication type
{
/* #dcm1-MNG07,#J01-MN26*/
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MCALLRNG;
SYS_WORK->msg_adr->msg[2] = 0x00;
exec_uap(SYS_WORK->msg_adr);
*Mn_GetSpecState(phs_mode) = ST_PP_CALL_T;
#ifdef SIMU_ON_PC
if(PHS_PUBLIC_STS == phs_mode)
SendUart2L1( SIMTSKDTW , MNSTATE , 0 ,(BYTE*)&Mn_state.public_mod , 1);
#endif
}
break;
case CALLMODE_LOCREG:
default:
break;
}
}
void Mn_PCallMMCtf(void)
{
U1 n;
U1 Encryption_Algorithm_Select; /*Encryption Algorithm Select Flag */
Encryption_Algorithm_Select = Sys_initdl1[37]; /*Get Encryption Algorithm Select Flag from EEPROM*/
n = MN_IN_EVT(L3_MN_EVT)->inf_adr[3];
if (n == 8)
{
if(Encryption_Algorithm_Select)
{
//lingli modify for can't get the old authentic for ARM platform
//Mm_FEALNenc(Sys_pin, &MN_IINFP[4], AnsRslt);
Mm_STEPHIenc(Sys_pin , &MN_IN_EVT(L3_MN_EVT)->inf_adr[4] , AnsRslt);
}
else /* FEAL32 */
{
//Add by Qian Aidong for supporting FEAL32 Encryption Algorithm. 2001-11-26
Mm_FEAL32enc(Sys_pin , &MN_IN_EVT(L3_MN_EVT)->inf_adr[4] , AnsRslt);
}
}
set_up_b((BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
SYS_WORK->tsk_id = TASKMM;
MN_OUT_EVT(L3_MN_EVT)->evt_cod = EMM;
MN_OUT_EVT(L3_MN_EVT)->pri_cod = 0x82;// MNMM_AUTHENICATION_REP;
MN_OUT_EVT(L3_MN_EVT)->buf_adr = ((L3_MN_EVT*)SYS_WORK->in_evt)->buf_adr;
MN_OUT_EVT(L3_MN_EVT)->inf_len = n+2;
MN_OUT_EVT(L3_MN_EVT)->inf_adr = MN_IN_EVT(L3_MN_EVT)->inf_adr;
MN_OUT_EVT(L3_MN_EVT)->inf_adr[0] = IANSRSLT;
MN_OUT_EVT(L3_MN_EVT)->inf_adr[1] = n;
move_up_b( &MN_OUT_EVT(L3_MN_EVT)->inf_adr[2] , AnsRslt , n );
m_excreq( (WORD*)&SYS_WORK->tsk_id );
switch (CallMode)
{
case CALLMODE_OUT:
Certify = ON;
break;
case CALLMODE_IN:
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MCALLRNG;
SYS_WORK->msg_adr->msg[2] = 0x00;
exec_uap(SYS_WORK->msg_adr);
*Mn_GetSpecState(phs_mode) = ST_PP_CALL_T;
#ifdef SIMU_ON_PC
if(PHS_PUBLIC_STS == phs_mode)
SendUart2L1( SIMTSKDTW , MNSTATE , 0 , (BYTE*)&Mn_state.public_mod , 1);
#endif
break;
case CALLMODE_LOCREG:
Ich_end_monF = BIT4;
default:
break;
}
}
void Mn_PProgress(void)
{
if ((ReCall == 0) && (DLEstab & FACCH))
{
if( MN_IN_EVT(L3_MN_EVT)->buf_adr)
m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr );
return;
}
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MDEVEL;
SYS_WORK->msg_adr->msg[2] = (BYTE)((L3_MN_EVT*)SYS_WORK->in_evt)->inf_len;
move_up_b((U1*)&SYS_WORK->msg_adr->msg[3] ,
MN_IN_EVT(L3_MN_EVT)->inf_adr ,
MN_IN_EVT(L3_MN_EVT)->inf_len);
exec_uap(SYS_WORK->msg_adr);
if( MN_IN_EVT(L3_MN_EVT)->buf_adr )
m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr);
}
void Mn_PCallDLF(void) //L3C -> MN
{
if(Mn_InEvtCod[1] == 1) //It must be 0 , which is set in L3c_dlfrrs . 'dl_typ'
{
Mn_PLinkCut();
Mn_DLDsp();
*Mn_GetSpecState(phs_mode) = ST_PP_DISC_COMM;
#ifdef SIMU_ON_PC
if(PHS_PUBLIC_STS == phs_mode)
SendUart2L1( SIMTSKDTW , MNSTATE , 0 ,(BYTE*)&Mn_state.public_mod , 1);
#endif
return;
}
DLEstab &= ~(MN_IN_EVT(L3C_MN_EVT)->add_dat[1]);
if (Certify)
{
if (!(DLEstab & FACCH))
{
if (ScrKey)
{
if (ReCall)
{
if ( RspnsRcv == ON ) /* #ALG0903 */
{
Mn_TCHEndDsp();
}
}
else
{
Mn_SCHEstDsp();
}
MesSnd = OFF;
CCSetup = OFF;
if ( RspnsRcv == ON )
{
*Mn_GetSpecState(phs_mode) = ST_PP_COMMUNCATING;
RspnsRcv = OFF;
}
else
{
*Mn_GetSpecState(phs_mode) = ST_PP_TCH_ALR_O;
}
#ifdef SIMU_ON_PC
if(PHS_PUBLIC_STS == phs_mode)
SendUart2L1( SIMTSKDTW , MNSTATE , 0 , (BYTE*)&Mn_state.public_mod , 1);
#endif
return;
}
}
}
if (!TC309PTim)
{
Mn_settim(TITC309P);
}
set_up_b((BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
SYS_WORK->tsk_id = TASKL3;
MN_OUT_EVT(L3C_MN_EVT)->evt_cod = EL3SETRQ;
MN_OUT_EVT(L3C_MN_EVT)->add_dat[1] = MN_IN_EVT(L3C_MN_EVT)->add_dat[1];
m_excreq((WORD*)&SYS_WORK->tsk_id);
Mn_DLDsp();
}
void Mn_PCCCall(void)
{
if ((ReCall == 0) && (DLEstab & FACCH))
{
if( MN_IN_EVT(L3_MN_EVT)->buf_adr )
m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr );
return;
}
#ifdef EXT_IO
HisOut( 0x00, 0xee, 0x00, 0x00, &ResDspFlg ); // For arm debug
#endif
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -