📄 mn80pub4.c
字号:
pSts = Mn_GetSpecState(phs_mode);
if(NULL == pSts)
return;
switch(*pSts)
{
case ST_PP_DISC_COMM:
m_frebuf((U1 *)pMsg);
return;
case ST_PP_TCH_EST_O:
case ST_PP_TCH_EST_T:
case ST_PP_HANDOVER:
if (!CCSetup)
{
Mn_PRadioRelease();
*pSts = 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
m_frebuf((U1 *)pMsg);
return;
}
if (DLEstab == (SACCH | FACCH))
{
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 = EL3FRERQ;
MN_OUT_EVT(L3C_MN_EVT)->add_dat[1] = FACCH ;
m_excreq((WORD*)&SYS_WORK->tsk_id);
}
break;
default :
break;
}
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 = PRCALDIS; //CC disc req
MN_OUT_EVT(L3_MN_EVT)->buf_adr = (BYTE*)pMsg;
MN_OUT_EVT(L3_MN_EVT)->inf_len = pMsg->msg[2];
MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)&pMsg->msg[3];
if(1 == p_mail_flg)
MN_OUT_EVT(L3_MN_EVT)->add_dat = 1;
MN_OUT_EVT(L3_MN_EVT)->dmy3 = (U1)MN_IN_EVT(PM_MN_EVT)->add_dat;
m_excreq((WORD*)&SYS_WORK->tsk_id);
if (CallSts == ((U1)MN_IN_EVT(PM_MN_EVT)->add_dat + 1))
{
*pSts = 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
}
}
void Mn_PRadCutReq(void) //PM->MN
{
if(MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[2])
{
ReaVal = PRIERR;
err_dsp(MN_IN_EVT(PM_MN_EVT)->msg_adr);
return;
}
m_frebuf((U1*)MN_IN_EVT(PM_MN_EVT)->msg_adr);
ReaVal = 0xF0;
RetryCount = 0;
if(ST_PP_DISC_COMM == *Mn_GetSpecState(phs_mode))
{
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 = EINITL3;
MN_OUT_EVT(L3C_MN_EVT)->dl_typ = 0;
MN_OUT_EVT(L3C_MN_EVT)->dl_id = 1;
m_excreq((WORD*)&SYS_WORK->tsk_id);
}
Mn_PRadioRelease();
*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
}
void Mn_PCutDsp(void) //CC->MN
{
if(0 == MN_IN_EVT(L3_MN_EVT)->add_dat)
{
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MDISCCOM;
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);
}
else
{
Source = 0x65;
ReaVal = 0xff;
}
if(MN_IN_EVT(L3_MN_EVT)->buf_adr)
m_frebuf(MN_IN_EVT(L3_MN_EVT)->buf_adr);
if(ST_PP_DISC_COMM == *Mn_GetSpecState(phs_mode))
{
return;
}
if(CallSts == (MN_IN_EVT(L3_MN_EVT)->dmy3 + 1))
{
*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
}
}
void Mn_PReleaseDsp(void)//CC->MN
{
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MFREECOM;
SYS_WORK->msg_adr->msg[2] = (BYTE)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)
{
if((MN_IN_EVT(L3_MN_EVT)->inf_adr[0] == IREASON0) &&
((ReaVal==0) || (ReaVal == SEQERR)))
{
Source = 0x62;
ReaVal = MN_IN_EVT(L3_MN_EVT)->inf_adr[1+MN_IN_EVT(L3_MN_EVT)->inf_adr[1]];
}
m_frebuf(MN_IN_EVT(L3_MN_EVT)->buf_adr);
}
if(CallSts == (MN_IN_EVT(L3_MN_EVT)->dmy3 + 1))
{
*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
}
}
void Mn_PReleaseReq(void) //PM->MN
{
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 = PRCALFRE;
MN_OUT_EVT(L3_MN_EVT)->buf_adr = (U1*)MN_IN_EVT(PM_MN_EVT)->msg_adr;
MN_OUT_EVT(L3_MN_EVT)->inf_len = MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[2];
MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)MN_IN_EVT(PM_MN_EVT)->msg_adr->msg + 3;
MN_OUT_EVT(L3_MN_EVT)->add_dat = 0;
MN_OUT_EVT(L3_MN_EVT)->dmy3 = (BYTE)MN_IN_EVT(PM_MN_EVT)->add_dat;
m_excreq((WORD*)&SYS_WORK->tsk_id);
}
void Mn_PReleaseEnd(void) //CC->MN
{
if( (MN_IN_EVT(L3_MN_EVT)->add_dat == 1) && (ReCall == ON))
{
;
}
else
{
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MFADLCOM;
SYS_WORK->msg_adr->msg[2] = (BYTE)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)->add_dat == 1)
{
Source = 0x66;
ReaVal = 0xff;
}
else if( MN_IN_EVT(L3_MN_EVT)->add_dat == 1)
{
Source = 0x67;
ReaVal = 0xff;
}
if(MN_IN_EVT(L3_MN_EVT)->buf_adr)
{
if( (MN_IN_EVT(L3_MN_EVT)->inf_adr[0] == IREASON0) &&
( (ReaVal == 0)||(ReaVal==SEQERR) ) )
{
Source = 0x63;
ReaVal = MN_IN_EVT(L3_MN_EVT)->inf_adr[1+MN_IN_EVT(L3_MN_EVT)->inf_adr[1]];
}
m_frebuf(MN_IN_EVT(L3_MN_EVT)->buf_adr);
}
if(CallSts == (MN_IN_EVT(L3_MN_EVT)->dmy3+1))
{
*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
}
CallSts &= ~(MN_IN_EVT(L3_MN_EVT)->dmy3 + 1);
}
void Mn_PLinkCut(void) //L3C->MN
{
DLEstab &= ~(MN_IN_EVT(L3C_MN_EVT)->add_dat[1]);
if(!DLEstab)
{
Mn_settim(TITCHFRE);
}
}
void Mn_PRadioCut(void)
{
if(ST_PP_DISC_COMM == *Mn_GetSpecState(phs_mode))
{
if (RchDis)
{
m_stptim(T100MS, TITCHFRE, phs_mode);
RchDis = OFF;
}
}
else
{
}
Mn_PRadioInit();
}
void Mn_PRadioEnd(void)
{
Mn_PRadioInit();
}
void Mn_PRadioRelease(void)
{
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 = PRRCHDSC;
MN_OUT_EVT(L3_MN_EVT)->dmy3 = TCH1;
m_excreq((WORD*)&SYS_WORK->tsk_id);
}
void Mn_PTC309PTo(void)
{
TC309PTim = OFF;
Mn_PRadioRelease();
*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
}
void Mn_PRadioInit(void)
{
U1 n;
U1 fmode;
U1 retry_enable = OFF;
#ifdef EXT_IO
U1 mnghis[6];
#endif
U1 pm_cutreq = OFF;
U1 len;
Short_chakko = 0;
fmode = !phs_mode;
if( (EMDLERRDSP == Mn_InEvtCod[0]) &&
(ST_PP_TCH_EST_O == Mn_state.public_mod) &&
(ON == ReCall) )
{
return;
}
if( EL3FRERS == Mn_InEvtCod[0] && ST_PP_TCH_SWT == Mn_state.public_mod )
{
if(1 == (U1)SYS_WORK->in_evt[2])
{
if (Sys_hodat[6])
{
if(!HndOvrReg)
Mn_PHOTimOut();
return;
}
}
}
if(EL3FRERS == Mn_InEvtCod[0] && ST_PP_HANDOVER == Mn_state.public_mod)
{
if(1 == (U1)SYS_WORK->in_evt[2] &&
Sys_hodat[6] &&
!HndOvrReg)
{
rt_tm_stop( (U2)0x0008 ); //The timer is in RT
rt_rdbak();
Mn_PHOTimOut();
return;
}
}
if( (EL3FRERS == Mn_InEvtCod[0]) &&
(ST_PP_HANDOVER == Mn_state.public_mod) &&
(1 == (U1)SYS_WORK->in_evt[2]) &&
Sys_hodat[6] &&
TCHflg)
{
if(HndOvrReg && !TCHCngReg)
{
Mn_state.public_mod = ST_PP_TCH_SWT;
#ifdef SIMU_ON_PC
SendUart2L1(SIMTSKDTW , MNSTATE , 0 , (BYTE*)&Mn_state.public_mod , 1);
#endif
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 = PRTCHCNG; //TCH switch request
MN_OUT_EVT(L3_MN_EVT)->dmy3 = TCH1;
MN_OUT_EVT(L3_MN_EVT)->add_dat = 0x29; //CAUSE
m_excreq((WORD*)&SYS_WORK->tsk_id);
return;
}
}
if(PM_MNG == Mn_InEvtCod[0] &&
PMMN_COMM_DIS == Mn_InEvtCod[1])
{
if(!MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[2])
{
ReaVal = PRIERR;
err_dsp(MN_IN_EVT(PM_MN_EVT)->msg_adr);
return;
}
if(Mn_InfChk(&CHKTBL[4] ,
(U1*)&MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[3],
MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[2]))
{
ReaVal = PRIERR;
err_dsp(MN_IN_EVT(PM_MN_EVT)->msg_adr);
return;
}
m_frebuf((U1*)MN_IN_EVT(PM_MN_EVT)->msg_adr);
RetryCount = 0;
pm_cutreq = ON;
}
if(CCHFact[PHS_PUBLIC_STS] == 0xFF &&
ST_PP_WAIT == Mn_state.public_mod)
{
return;
}
if (( ReaVal == 0 ) || ( ReaVal == SEQERR ))
{
switch(Mn_InEvtCod[0])
{
case TICSYNC:
ReaVal = 0x02;
break;
case TICCHEST:
ReaVal = 0x06;
retry_enable = ON;
break;
case EMDLERRDSP:
case EL3FRERS:
ReaVal = 0x3A;
break;
case EL1_STAT:
ReaVal = 0x83;
break;
case ERT:
switch(Mn_InEvtCod[1])
{
case PSRCHDIS:
Source = 0x41;
ReaVal = (BIT8 | MN_IN_EVT(L3_MN_EVT)->add_dat);
break;
case PSLCHREF:
if( MN_IN_EVT(RT_MN_LCHEVT)->msg_dat[0] <= 0x07 )//msg_dat[0] ~ [3] == rx_cac[1] ....[4]
ReaVal = 0x20 + MN_IN_EVT(RT_MN_LCHEVT)->msg_dat[0] ; //refuse cause
else if((MN_IN_EVT(RT_MN_LCHEVT)->msg_dat[0]>=0x09) && (MN_IN_EVT(RT_MN_LCHEVT)->msg_dat[0]<=0x0B))
ReaVal = 0x20 + MN_IN_EVT(RT_MN_LCHEVT)->msg_dat[0] ;
else
ReaVal = 0x2C;
break;
case PSLCHNG:
// Here the incoming event struct is RT_LCHEVT
switch(SYS_WORK->in_evt[8])
{
case 1:
ReaVal = 0x2F;
break;
case 2:
ReaVal = 0x31;
break;
case 3:
ReaVal = 0x32;
break;
case 4:
ReaVal = 0x33;
break;
default:
ReaVal = 0x1F;
break;
}
break;
case PSSYNNG:
ReaVal = 0x3A;
break;
default :
ReaVal = 0xFA;
}
break; //end case ERT
default :
ReaVal = 0x1F;
}
}
WReMonTimN |= BIT8;
Mn_PCCHTimStp(phs_mode);
Mn_PCCHTimStp(fmode);
WReMonTimN &= ~BIT8;
set_up_b( (BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
SYS_WORK->tsk_id = TASKL3;
MN_OUT_EVT(L3_MN_EVT)->evt_cod = EINITL3;
MN_OUT_EVT(L3_MN_EVT)->pri_cod = 0;
m_excreq((WORD*)&SYS_WORK->tsk_id);
if(Mn_RInitCallLoc(pm_cutreq))
return;
slp_t_req(0xffff,0);
ph_ini_req();
#ifdef EXT_IO
mnghis[0] = phs_mode;
mnghis[1] = Mn_state.common_mod;
mnghis[2] = Mn_state.public_mod;
mnghis[3] = Mn_state.private_mod;
mnghis[4] = Mn_state.ps2ps_mod;
mnghis[5] = ReaVal;
HisOut(6 , 0x4e , Mn_InEvtCod[0] , Mn_InEvtCod[1] , mnghis);
#endif
if (RchDis)
{
m_stptim(T100MS, TITCHFRE, phs_mode);
RchDis = OFF;
}
if ((phs_mode == PHS_PUBLIC_STS) && RetryCount)
{
RetryCount --;
if(RetryCount)
{
if (RetryTim)
{
m_stptim(T20MS, TIRETRY, PHS_PUBLIC_STS );
}
Mn_settim(TIRETRY);
CallChanel = PHS_PUBLIC_STS;
if(CCHFact[PHS_PUBLIC_STS] == 0xff)
{
if(Mn_state.public_mod <= ST_PP_TCH_EST_O)
{
CCHFact[PHS_PUBLIC_STS ] = CCHCAL;
}
else if(Mn_state.public_mod <= ST_PP_TCH_EST_T)
{
CCHFact[PHS_PUBLIC_STS ] = CCHINC;
if (ti_page)
return;
if (retry_enable == OFF)
{
goto retry_disenable;
}
}
}
return;
}
}
retry_disenable:
In_AreaMonitor = ON;
if (RetryTim)
{
m_stptim(T20MS, TIRETRY, PHS_PUBLIC_STS);
RetryTim = OFF;
}
if (ti_page)
{
if(phs_mode == PHS_PUBLIC_STS)
m_stptim(T100MS , TIPAGE , PHS_PUBLIC_STS);
ti_page = OFF;
}
n = 0;
SYS_WORK->msg_adr = (M_MSB *)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MFREETCH; //Free TCH resource
SYS_WORK->msg_adr->msg[3] = IAREAINF;
move_up_b((U1*)&SYS_WORK->msg_adr->msg[4], SYS_AREA_P, 7);
if (phs_mode == PHS_PUBLIC_STS)
{
n = 3;
SYS_WORK->msg_adr->msg[11] = IMONTHRE;
move_up_b((U1*)&SYS_WORK->msg_adr->msg[12], Sys_thresh, 2);
}
SYS_WORK->msg_adr->msg[11+n] = IREASON;
if ((Source == 0x03) || (Source == 0)) /* Source: MNG */
{
SYS_WORK->msg_adr->msg[12+n] = 0x02;
SYS_WORK->msg_adr->msg[13+n] = 0x03;
SYS_WORK->msg_adr->msg[14+n] = ReaVal;
SYS_WORK->msg_adr->msg[2] = 0x0C + n;
len = 15;
}
else
{
SYS_WORK->msg_adr->msg[12+n] = 0x03;
SYS_WORK->msg_adr->msg[13+n] = Source >> 4;
SYS_WORK->msg_adr->msg[14+n] = Source & 0x0f;
SYS_WORK->msg_adr->msg[15+n] = ReaVal;
SYS_WORK->msg_adr->msg[2] = 0x0D + n;
len = 16;
}
if(CallMode == CALLMODE_LOCREG && phs_mode == PHS_PUBLIC_STS)
{
if(Ich_end_monF)
reg_fail = ON;
SYS_WORK->msg_adr->msg[len+n] = 0x77;
SYS_WORK->msg_adr->msg[len+n+1] = 0x01;
SYS_WORK->msg_adr->msg[len+n+2] = BIT3;
Ich_end_monF = BIT8;
}
exec_uap(SYS_WORK->msg_adr);
Mn_InitData();
Sleep_Control(BSLPFORV);
#ifdef PROT_TEST
HisOut(0x00,0xfe,0x0e,0x00,0x00);
#endif
}
void Mn_Bst_Ho(void)
{
if(TCH2 == MN_IN_EVT(L3_MN_EVT)->dmy3)
{
;
}
set_up_b( (BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
if ( !(Sys_rtfunc[4] & BIT3)
&& !(Sys_rtfunc[4] & BIT5))
{
return;
}
if (!HndOvrReg && Sys_hodat[6] && phs_mode == PHS_PUBLIC_STS )
{
Mn_PHOTimOut();
}
}
void Mn_PowerSearch(void)
{
if(Mn_state.public_mod != ST_PP_COMMUNCATING)
{
m_frebuf((U1*)MN_IN_EVT(PM_MN_EVT)->msg_adr);
return;
}
m_frebuf((U1*)MN_IN_EVT(PM_MN_EVT)->msg_adr);
if (!(Sys_rtfunc[4] & BIT3) && !(Sys_rtfunc[4] & BIT5))
{
Mn_TCHEndDsp();
return;
}
if (!HndOvrReg && Sys_hodat[6] && phs_mode == PHS_PUBLIC_STS)
{
Mn_PHOTimOut();
}
else
{
Mn_TCHEndDsp();
}
}
void Mn_HTCHDatReq(void)//PM->MN
{
if(!MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[2])
{
ReaVal = PRIERR;
err_dsp(MN_IN_EVT(PM_MN_EVT)->msg_adr);
return;
}
if (DLEstab && !InfSFlg)
{
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 = PRADDINF;
MN_OUT_EVT(L3_MN_EVT)->buf_adr = (U1*)MN_IN_EVT(PM_MN_EVT)->msg_adr;
MN_OUT_EVT(L3_MN_EVT)->inf_len = MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[2];
MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)MN_IN_EVT(PM_MN_EVT)->msg_adr->msg + 3;
MN_OUT_EVT(L3_MN_EVT)->add_dat = 1;
MN_OUT_EVT(L3_MN_EVT)->dmy3 = (U1)MN_IN_EVT(PM_MN_EVT)->add_dat;
m_excreq((WORD*)&SYS_WORK->tsk_id);
InfSFlg = ON;
}
else
{
ReaVal = SEQERR;
err_dsp(MN_IN_EVT(PM_MN_EVT)->msg_adr);
}
}
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -