📄 mn80main.c
字号:
void Mn_SReset(void)
{
;
}
void Mn_InitData(void)
{
U1 i, j;
#ifdef SIMU_ON_PC
U1 buf[70];
#endif
CallMode = 0xFF;
CallChanel = 0xFF;
CCHFact[PHS_PUBLIC_STS] = 0xFF;
CCHInfo.Moni = 0xFF;
CCHInfo.Main = 0xFF;
SLEEP_STS[PHS_PUBLIC_STS] = ON;
if (CallSetInfo != (M_MSB *)0)
{
m_frebuf((U1 *)CallSetInfo);
CallSetInfo = (M_MSB *)0;
}
WReMonTimN |= BIT8;
Mn_PCCHTimStp(PHS_PUBLIC_STS);
WReMonTimN &= ~BIT8;
InitData = 0;
DLEstab = 0;
CallSts = 0;
InfSFlg = OFF;
CCSetup = OFF;
MesSnd = OFF;
ResDspFlg = OFF;
ReCall = OFF;
IncFlg[PHS_PUBLIC_STS] = OFF;
TCHCngRssi = OFF;
TCHCngReg = OFF;
HndOvrReg = OFF;
TCHflg = OFF;
RspnsRcv = OFF;
Mn_state.public_mod = ST_PP_IDLE;
#ifdef SIMU_ON_PC
SendUart2L1(SIMTSKDTW , MNSTATE , 0 , (BYTE*)&Mn_state.public_mod , 1);
#endif
Mn_state.private_mod = ST_PP_IDLE;
Mn_state.ps2ps_mod = ST_PP_IDLE;
/* #J01-MNG04 */
for (i = 0; i < 4; i++)
{
for (j = 0; j < 2; j++)
{
if ( i == 1 )
{
move_up_b(Sys_bcch[i][j], SYSIFDF[j], 8);
}
else
{
set_up_b(Sys_bcch[i][j] , 0 , 8);
}
}
}
#ifdef SIMU_ON_PC
SendUart2L1( SIMTSKDTW , SYSBCCH , 0 , (BYTE*)Sys_bcch , sizeof(Sys_bcch) );
#endif
RetryCount = 0;
move_up_b(TriedPBSid, CLSCSID, 6);
ReaVal = 0;
Source = 0x03;
Call_Loc_flg = 0;
Call_Loc_NG = 0;
Call_Loc_Cnt = 0;
Loc_LnkNG = 0;
Short_chakko = 0;
HakLoc_Cut = 0;
A_short = OFF;
DefInfo_Rcvf = OFF;
RTFncRes_Rcvf = OFF;
set_up_b(LLCInfo, 0, 17);
}
void Mn_InitL3L2(void)
{
Mn_state.common_mod = ST_CMN_WAIT;
set_up_b((BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
SYS_WORK->tsk_id = TASKL3;
SYS_WORK->out_evt[0] = EINITL3;
SYS_WORK->out_evt[1] = 0;
m_excreq((WORD*)&SYS_WORK->tsk_id);
}
U1 Mn_InfChk(MN_INFTBL* pInfoTbl , U1 *msg_ptr, U1 length)
{
U1 cnt;
U1 i, n;
for (cnt = 0, n = 0; n < length; )
{
for (i = 0; i < pInfoTbl->infCnt; i++)
{
if (pInfoTbl->id[i] == msg_ptr[n])
{
if (pInfoTbl->om[i] == MJ)
{
cnt++;
}
if (pInfoTbl->id[i] == ISODATA)
{
if (So_MsgChk(&msg_ptr[n], (U1)(length-8)) == NG_FF)
{
return NG_FF;
}
}
break;
}
}
if (pInfoTbl->infCnt == i)
{
return NG_FF;
}
if (pInfoTbl->mCnt == cnt)
{
return OK;
}
if (pInfoTbl->len[i] == 0)
{
n += (*(msg_ptr + n + 1) + 2);
}
else
{
n += pInfoTbl->len[i];
}
}
return NG_FF;
}
U1 So_MsgChk(U1 *msg_ptr, U1 length)
{
U1 cnt;
U1 i, n;
/* #dcm1-MNG31 ---------------------------------------------------------*/
MN_INFTBL *inf_ptr;
if( MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[1] == USORDER )
{
inf_ptr = &DTINFTBL[phs_mode];
}
else
{
inf_ptr = &DTINFTBL[0];
}
/*----------------------------------------------------------------------*/
for (cnt = 0, n = 0; n < length; )
{
for (i = 0; i < inf_ptr->infCnt; i++)
{
if (inf_ptr->id[i] == msg_ptr[n])
{
if (inf_ptr->om[i] == MJ)
cnt++;
break;
}
}
if (inf_ptr->infCnt == i)
return NG_FF;
if (inf_ptr->mCnt == cnt)
return OK;
if (inf_ptr->len[i] == 0)
n += (*(msg_ptr + n + 1) + 2);
else
n += inf_ptr->len[i];
}
return NG_FF;
}
void err_dsp(M_MSB *bufp)
{
#ifdef EXT_IO
BYTE mnghis[6];
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 , 0x4f , Mn_InEvtCod[0] , Mn_InEvtCod[1] , mnghis);
#endif
switch (Mn_InEvtCod[0])
{
case PM_MNG: /* UAP(PM) */
if( MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[1] == UCCOMDAT && bufp->nxt )
{
m_frebuf(bufp->nxt);
}
break;
case ERT: /* RT */
switch(Mn_InEvtCod[1])
{
case PSLCHASG :
case PSLCHREF :
case PSSYNC :
case PSLCHNG :
case PSDWBRMV :
case PSSYNNG :
goto no_buf;
break;
default:
if( MN_IN_EVT(L3_MN_EVT)->buf_adr)
{
m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr );
}
}
break;
case EMM: /* MM */
case ECC: /* CC */
if( MN_IN_EVT(L3_MN_EVT)->buf_adr)
{
m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr );
}
break;
case EDLDTDSP: /*L2 ->L3(L3C)->MNG , Is it only under PS2PS sts ,MN can received this EVENT from L2 ? */
case EDLUDTDSP:
if( MN_IN_EVT(L2_MN_EVT)->msg_adr )
{
/* #J80-02 -> */
if( ((M_MSB_L2*)MN_IN_EVT(L2_MN_EVT)->msg_adr)->next_po )
{
m_frebuf( ((M_MSB_L2*)MN_IN_EVT(L2_MN_EVT)->msg_adr)->next_po );
}
/* #J80-02 <- */
m_frebuf( MN_IN_EVT(L2_MN_EVT)->msg_adr );
}
break;
case EL1_STAT:
break;
}
no_buf :
if(Mn_InEvtCod[0] != PM_MNG)
{
return;
}
if (bufp == (M_MSB *)0)
{
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
}
else
{
SYS_WORK->msg_adr = bufp;
}
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MERROR;
SYS_WORK->msg_adr->msg[2] = 4;
SYS_WORK->msg_adr->msg[3] = IREASON;
SYS_WORK->msg_adr->msg[4] = 2;
SYS_WORK->msg_adr->msg[5] = 0x03;
SYS_WORK->msg_adr->msg[6] = ReaVal;
SYS_WORK->msg_adr->msg[2] += 2;
SYS_WORK->msg_adr->msg[4] += 2;
SYS_WORK->msg_adr->msg[7] = SYS_WORK->msg_adr->msg[1];
SYS_WORK->msg_adr->msg[8] = SYS_WORK->msg_adr->msg[2];
exec_uap(SYS_WORK->msg_adr);
}
void exec_uap(M_MSB *evt)
{
switch (evt->msg[1])
{
case MCCHMIS :
A_short = OFF;
case MFREETCH :
case MERROR :
ReaVal = 0;
Source = 0x03;
}
set_up_b((U1 *)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
SYS_WORK->tsk_id = TASKPM;
MN_OUT_EVT(PM_MN_EVT)->evt_cod = MNG_PM;
if (evt->msg[0] == NONE)
{ /* #dcm1-MNG01 */
evt->msg[0] = 0x00;
}
MN_OUT_EVT(PM_MN_EVT)->msg_adr = evt;
if (((evt->msg[1] >= MCALLSET) && (evt->msg[1] <= MFADLCOM)) ||
(evt->msg[1] == MCONNACK) || (evt->msg[1] == MTCHDAT ) ||
(evt->msg[1] == MDATCNF ) || (evt->msg[1] == MCCOPMES) )
{
if(ECC == Mn_InEvtCod[0])
{
MN_OUT_EVT(PM_MN_EVT)->add_dat = MN_IN_EVT(L3_MN_EVT)->dmy3;
}
else
{
MN_OUT_EVT(PM_MN_EVT)->add_dat = CallSts-1;
}
}
m_excreq((WORD*)&SYS_WORK->tsk_id);
}
void Mn_settim(U2 tmid)
{
SYS_WORK->tim_inf.t_evt[0] = phs_mode;
switch ( tmid )
{
case TIWMONIT1 :
SYS_WORK->tim_inf.t_kind = T1S;
SYS_WORK->tim_inf.t_cnt = 250;
WReMonTim = BIT1;
WReMonTimN = BIT1;
break;
case TICCHMON :
SYS_WORK->tim_inf.t_kind = T20MS;
SYS_WORK->tim_inf.t_cnt = Sys_montim[0] * Sys_hodat[1]; //stored in flash ROM
break;
case TICSYNC :
SYS_WORK->tim_inf.t_kind = T100MS;
if(Sys_prinfo[1])
{
SYS_WORK->tim_inf.t_cnt =
(WORD)((WORD)Sys_csynctim[PHS_PUBLIC_STS]
* NSUB(PHS_PUBLIC_STS) * NGROUP(PHS_PUBLIC_STS) /* #139 */
* (WORD)Sys_prinfo[1] * 5 / 100)+1;
}
else
{
SYS_WORK->tim_inf.t_cnt =
(WORD)((WORD)Sys_csynctim[PHS_PUBLIC_STS]
* 3 * 4 * SON * 5 /100)+1; /* #139 */
}
//Debug By Chenwei
// ProtocolTrace(2,">>>Start timer cnt =%d\n",SYS_WORK->tim_inf.t_cnt);
HisOut(0,0xd6,0x01,0,0);
CsyncTim[phs_mode] = ON;
break;
case TIACCALL :
SYS_WORK->tim_inf.t_kind = T100MS;
SYS_WORK->tim_inf.t_cnt =
(WORD)(NSUB(PHS_PUBLIC_STS)*NGROUP(PHS_PUBLIC_STS)*ACCYCINT(PHS_PUBLIC_STS));
AccTimCall[phs_mode] = ON;
break;
case TIACLOC :
SYS_WORK->tim_inf.t_kind = T100MS;
SYS_WORK->tim_inf.t_cnt =
(WORD)(NSUB(PHS_PUBLIC_STS)*NGROUP(PHS_PUBLIC_STS)*ACCYCINT(PHS_PUBLIC_STS));
AccTimLoc[phs_mode] = ON;
break;
case TITC309P :
SYS_WORK->tim_inf.t_kind = T1S;
SYS_WORK->tim_inf.t_cnt = TOTC309P;
TC309PTim = ON;
break;
case TITCHFRE :
SYS_WORK->tim_inf.t_kind = T100MS;
SYS_WORK->tim_inf.t_cnt = TORCHDIS;
RchDis = ON;
break;
case TIHANDOV :
SYS_WORK->tim_inf.t_kind = T1S;
SYS_WORK->tim_inf.t_cnt = Sys_hodat[2];
HoTim = ON;
break;
case TICCHEST :
SYS_WORK->tim_inf.t_kind = T100MS;
#ifdef SIMU_ON_PC /* zch for protocol simulator */
SYS_WORK->tim_inf.t_cnt = Sys_cchtim[phs_mode]+50;
#else
SYS_WORK->tim_inf.t_cnt = Sys_cchtim[phs_mode];
#endif
CCHEstTim[phs_mode] = ON;
break;
case TICCHSHT :
SYS_WORK->tim_inf.t_kind = T1S;
SYS_WORK->tim_inf.t_cnt = TOCCHSHT;
CCHShortTim[phs_mode] = ON;
break;
case TIRETRY :
SYS_WORK->tim_inf.t_kind = T20MS;
SYS_WORK->tim_inf.t_cnt = TORETRY;
RetryTim = ON;
SYS_WORK->tim_inf.t_evt[0] = PHS_PUBLIC_STS;
break;
case TIPAGE:
SYS_WORK->tim_inf.t_kind = T100MS;
SYS_WORK->tim_inf.t_cnt = 100;
ti_page = ON;
break;
}
SYS_WORK->tim_inf.p_num = TASKMNG;
SYS_WORK->tim_inf.tim_id = tmid;
m_settim((U2*)&SYS_WORK->tim_inf);
}
void PubAreaNoMake(BYTE *src,BYTE *dst,BYTE len)
{
U1 bit_sz,
byte_sz;
U1 Np[16] = {0,
4,6,8,10,12,14,16,17,18,19,20,21,22,23,24};
set_up_b(dst, 0, 3);
bit_sz = Np[len];
byte_sz = (Np[len] + 7) / 8;
switch ( byte_sz )
{
case 3 :
*(dst + 2) = (*(src + 3) << 1) + (*(src + 4) >> 7);
*(dst + 2) &= CSId_msk[bit_sz % 8];
bit_sz -= (bit_sz % 8);
/* No Break */
case 2 :
*(dst + 1) = (*(src + 2) << 1) + (*(src + 3) >> 7);
*(dst + 1) &= CSId_msk[bit_sz % 8];
bit_sz -= (bit_sz % 8);
/* No Break */
case 1 :
*dst = (*(src + 1) << 1) + (*(src + 2) >> 7);
*dst &= CSId_msk[bit_sz % 8];
break;
}
}
BYTE PubNgAreaChk(BYTE *src)
{
U1 loop;
U1 Area[3];
for(loop = 0;loop < NG_AREA_NUM; loop ++)
{
if(!(PubNgArea[loop][0] & 0xf0))
return(1);
PubAreaNoMake(src,Area,(BYTE)(PubNgArea[loop][0] & 0x0f));
if(PubNgArea[loop][1] == ((*src << 1) + (*(src + 1) >> 7) ))
{
if(!cmp_up_b(Area,&PubNgArea[loop][2],3))
return(0);
}
}
return(1);
}
void PubNgAreaSet(BYTE *src,BYTE len)
{
U1 loop;
U1 Area[4];
Area[0] = (*src << 1) + (*(src + 1) >> 7);
PubAreaNoMake(src,&Area[1],len);
for(loop = 0;loop < NG_AREA_NUM; loop ++)
{
if(!(PubNgArea[loop][0] & 0xf0))
{
move_up_b(&PubNgArea[loop][1],Area,4);
PubNgArea[loop][0] = 0x10 + (len & 0x0f);
return;
}
else
{
PubNgArea[loop][0] += 0x10;
if(PubNgArea[loop][0] >= 0x40)
{
move_up_b(&PubNgArea[loop][1],Area,4);
PubNgArea[loop][0] = 0x10 + (len & 0x0f);
}
}
}
}
void PubNgAreaClr(void)
{
U1 loop;
for(loop = 0;loop < NG_AREA_NUM; loop ++)
{
PubNgArea[loop][0] = 0;
PubNgArea[loop][1] = 0;
}
}
void Mn_HakDLRrcv(void) //Direction : L3C -> MNG
{
U1* p;
if(Mn_InEvtCod[1] == 1) //Data link est req failed
{
Mn_PLinkCut();
Mn_DLDsp();
p = Mn_GetSpecState(phs_mode);
if(NULL == p)
return ;
*p = 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 &= ~((U1)MN_IN_EVT(L3C_MN_EVT)->add_dat[1]);
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();
}
U1 Mn_Rtdeffunc(void)
{
if(ERT == Mn_InEvtCod[0])
{
if(PSDEFING == Mn_InEvtCod[1])
{
if(ExLCH & 0x02) //RT Function request
{
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();
}
DefInfo_Rcvf = ON;
return(1);
}
if(PSRTFUNG == Mn_InEvtCod[1])
{
Mn_PCallRTFncRes();
RTFncRes_Rcvf = ON;
return(1);
}
}
else
{
if( EMM == Mn_InEvtCod[0] &&
MMMN_FUNCTION_REQ_FAIL == Mn_InEvtCod[1])
{
Mn_PCallMMFncRes();
return(1);
}
}
return(0);
}
/*
Function : Get the corresponding Mn State based by input parameter
Author Date
Chenxl 2003/8/10
*/
U1* Mn_GetSpecState(U1 mod)
{
switch(mod)
{
case PHS_PUBLIC_STS:
return (U1*)&Mn_state.public_mod;
break;
case PHS_PRIVATE_STS:
return (U1*)&Mn_state.private_mod;
break;
case PHS_PS2PS_STS:
return (U1*)&Mn_state.ps2ps_mod;
break;
case PHS_COMMON_STS:
return (U1*)&Mn_state.common_mod;
break;
}
return NULL;
}
//Simulator of L1
#ifdef SIMU_ON_PC
void ph_ini_req(void)
{
SendUart2L1(SIMTSKL1 , PHINIREQ , 0xFF, NULL , 0);
}
/*
void cch_m_req(BYTE kind, BYTE freq, BYTE thresh, BYTE gain, BYTE flg)
{
BYTE buf[6];
buf[0] = kind;
buf[1] = freq;
buf[2] = thresh;
buf[3] = gain;
buf[4] = flg;
SendUart2L1(SIMTSKL1 , CCHMREQ , buf , 5);
}
*/
void cch_m_req2(BYTE kind, BYTE freq, BYTE thresh, BYTE gain, BYTE flg)
{
BYTE buf[6];
buf[0] = kind;
buf[1] = freq;
buf[2] = thresh;
buf[3] = gain;
buf[4] = flg;
SendUart2L1(SIMTSKL1 , CCHMREQ2 , 0xFF , buf , 5);
}
/*
void cch_m_stp(void)
{
SendUart2L1(SIMTSKL1 , CCHMSTP , NULL , 0);
}
*/
void cch_m_stp2(void)
{
SendUart2L1(SIMTSKL1 , CCHMSTP2 , 0xFF , NULL , 0);
}
/*
void slp_t_req( WORD xtal_cnt, BYTE id )
{
BYTE buf[4];
buf[0] = (BYTE)xtal_cnt;
buf[1] = (BYTE)(xtal_cnt>>8);
buf[2] = id;
SendUart2L1(SIMTSKL1 , SLPTREQ , buf , 3);
}
*/
void cch_est_req(BYTE freq, BYTE *cs_id, BYTE gain)
{
BYTE buf[9];
BYTE csidLen;
csidLen =6;// strlen(cs_id);
buf[0] = freq;
move_up_b( (BYTE*)&buf[1] , cs_id , csidLen );
// buf[1+csidLen] = '\0';
buf[1+csidLen] = gain;
SendUart2L1( SIMTSKL1 , CCHESTREQ , 0xff,buf , (BYTE)(2+csidLen));
}
void slp_c_req( BYTE cmd )
{
SendUart2L1(SIMTSKL1 , SLPCREQ , 0xFF , &cmd , 1);
}
void own_pch_req( BYTE frame_cnt)
{
/* 奜晹棜楌 */
HisOut(0, 0x12, 0x0c, frame_cnt, 0);
SendUart2L1(SIMTSKL1 , OWNPCH , 0xFF , &frame_cnt , 1);
}
void another_cch_get(void)
{
SendUart2L1(SIMTSKL1 , ANOTHERCCH , 0xFF , NULL , 0);
}
/*
void RfInit(void)
{
SendUart2L1(SIMTSKL1 , RFINIT , NULL , 0);
}
*/
#endif //End of SIMU_ON_PC
#ifdef __cplusplus
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -