mn80pub3.c
来自「phs 源代码 小灵通协议源代码 phs source code」· C语言 代码 · 共 1,553 行 · 第 1/3 页
C
1,553 行
SYS_WORK->msg_adr->msg[1] = MCALLRNG;
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)
m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr);
}
void Mn_PCCRspns(void)
{
if (ReCall)
{
RspnsRcv = ON;
TCHCngRssi = OFF;
if (!(DLEstab & FACCH))
{
Mn_TCHEndDsp();
}
}
else
{
if (!(DLEstab & FACCH))
{
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MRESPCOM;
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)
m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr);
if (!(DLEstab & FACCH))
{
*Mn_GetSpecState(phs_mode) = ST_PP_COMMUNCATING;
#ifdef SIMU_ON_PC
if(PHS_PUBLIC_STS == phs_mode)
SendUart2L1( SIMTSKDTW , MNSTATE , 0 , (BYTE*)&Mn_state.public_mod , 1);
#endif
RspnsRcv = OFF;
}
#ifdef EXT_IO
HisOut( 0x00, 0xee, 0x00, 0x01, &ResDspFlg ); // For arm debug
#endif
}
void Mn_PTchDLRrcv(void) //L3C->MN
{
if(Mn_InEvtCod[1] == 1)
{
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 (!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_PTchDLSrcv(void) // L3C->MN
{
DLEstab |= MN_IN_EVT(L3C_MN_EVT)->add_dat[1];
if (TC309PTim)
{
m_stptim(T1S , TITC309P , phs_mode);
TC309PTim = OFF;
}
Mn_DLDsp();
}
void Mn_PIncomDLSet(void) //L3C->MN
{
DLEstab |= MN_IN_EVT(L3C_MN_EVT)->add_dat[1];
#ifdef SIMU_ON_PC
ProtocolTrace(6,"Mn_PIncomDLSet!!! %d %d %d \n",DLEstab,MesSnd,DLEstab);
#endif
if (MesSnd)
{
if (TC309PTim)
{
m_stptim(T1S, TITC309P , phs_mode);
TC309PTim = OFF;
}
}
else
{
if (DLEstab == (SACCH | FACCH))
{
RetryCount = 0;
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 = PRINCRES;
MN_OUT_EVT(L3_MN_EVT)->buf_adr = (U1*)CallSetInfo;
MN_OUT_EVT(L3_MN_EVT)->inf_len = CallSetInfo->msg[2] - 2;
CallSetInfo->msg[5] = IPSNO;
MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)&CallSetInfo->msg[5];
m_excreq((WORD*)&SYS_WORK->tsk_id);
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_PIncomSet(void) //CC->MN
{
U1 SndCmp;
U1 uap_len;
RetryCount = 0;
SndCmp = 0x00;
if( MN_IN_EVT(L3_MN_EVT)->inf_adr[0] == J0_SNDCMP)
{
SndCmp |= BIT1;
}
if( pm_setup_set( (BYTE*)(MN_IN_EVT(L3_MN_EVT)->inf_adr+SndCmp) , (U2)(MN_IN_EVT(L3_MN_EVT)->inf_len-SndCmp)))
{
if( MN_IN_EVT(L3_MN_EVT)->buf_adr)
m_frebuf( MN_IN_EVT(L3_MN_EVT)->buf_adr);
Mn_Tch1RelReq(0x58, 0);
return;
}
MnBearerSet( MN_IN_EVT(L3_MN_EVT)->inf_adr+SndCmp ,
(U2)(MN_IN_EVT(L3_MN_EVT)->inf_len-SndCmp),
(BYTE*)bear_capa);
switch ( bear_capa[1] & 0x1F )
{
case 0x00 :
CallProt = 0x00;
break;
case 0x10 :
CallProt = 0x01;
break;
case 0x08 :
CallProt = 0x02;
break;
}
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MCALLSET;
SYS_WORK->msg_adr->msg[3] = 0x00;
uap_len = MN_IN_EVT(L3_MN_EVT)->inf_len - SndCmp;
move_up_b((U1*)&SYS_WORK->msg_adr->msg[4] ,
MN_IN_EVT(L3_MN_EVT)->inf_adr+SndCmp,
uap_len);
SYS_WORK->msg_adr->msg[2] = uap_len+1;
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);
CCSetup = ON;
CallSts |= ( MN_IN_EVT(L3_MN_EVT)->dmy3 + 1);
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 = PRCALREC;
if (ExLCH & 0x04)
{
MN_OUT_EVT(L3_MN_EVT)->add_dat = 1;
}
MN_OUT_EVT(L3_MN_EVT)->dmy3 = MN_IN_EVT(L3_MN_EVT)->dmy3;
m_excreq((WORD*)&SYS_WORK->tsk_id);
if (ExLCH & 0x04)
{
return;
}
Mn_PCallDefInfo();
}
void Mn_PFuncReqNG(void) //RT/MM -> MN
{
M_MSB *pBuf;
if(Mn_Rtdeffunc())
return;
ReaVal = 0xEF;
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;
MN_OUT_EVT(L3_MN_EVT)->buf_adr = m_hntbuf();
pBuf = (M_MSB*)MN_OUT_EVT(L3_MN_EVT)->buf_adr;
pBuf->msg[0] = IREASON0;
pBuf->msg[1] = 0x03;
if ( Sys_ccsinf[19] == 0x01 )
{
pBuf->msg[2] = 0x40;
}
else
{
pBuf->msg[2] = 0x00;
}
pBuf->msg[3] = 0x85;
pBuf->msg[4] = 0xEF;
MN_OUT_EVT(L3_MN_EVT)->inf_len = 0x05;
MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)pBuf->msg;
MN_OUT_EVT(L3_MN_EVT)->dmy3 = CallSts - 1;
m_excreq((WORD*)&SYS_WORK->tsk_id);
*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_PIncomAlertRq(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 = PRCALCON;
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];
m_excreq((WORD*)&SYS_WORK->tsk_id);
}
void Mn_PIncomRsRq(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 = PRCALPRC;
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)->dmy3 = (BYTE)MN_IN_EVT(PM_MN_EVT)->add_dat;
m_excreq((WORD*)&SYS_WORK->tsk_id);
Mn_BearCapaSet( MN_OUT_EVT(L3_MN_EVT)->inf_adr , (BYTE)MN_OUT_EVT(L3_MN_EVT)->inf_len);
pm_low_layer_capability_set(LLCInfo);
}
void Mn_PIncomRsDp(void) // CC->MN
{
ResDspFlg = ON;
if(((L3_MN_EVT*)SYS_WORK->in_evt)->buf_adr)
m_frebuf(((L3_MN_EVT*)SYS_WORK->in_evt)->buf_adr);
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MCONNACK;
SYS_WORK->msg_adr->msg[2] = 0;
exec_uap(SYS_WORK->msg_adr);
}
void Mn_PIncomDLF(void) // L3C->MN
{
DLEstab &= ~(MN_IN_EVT(L3C_MN_EVT)->add_dat[1]);
if (ResDspFlg)
{
if (!(DLEstab & FACCH))
{
if (ScrKey)
{
ResDspFlg = OFF;
Mn_SCHEstDsp();
MesSnd = OFF;
CCSetup = OFF;
*Mn_GetSpecState(phs_mode) = ST_PP_COMMUNCATING;
#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_PFacReq(void) //PM->MN
{
M_MSB* pMsg;
pMsg = MN_IN_EVT(PM_MN_EVT)->msg_adr;
if(!pMsg->msg[2])
{
ReaVal = PRIERR;
err_dsp(pMsg);
return;
}
// InfTblPtr = &CHKTBL[11];
if (Mn_InfChk(&CHKTBL[11] , (U1*)&pMsg->msg[3], pMsg->msg[2]))
{
ReaVal = PRIERR;
err_dsp(pMsg);
return;
}
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 = PRFCLTY;
MN_OUT_EVT(L3_MN_EVT)->buf_adr = (U1*)pMsg;
MN_OUT_EVT(L3_MN_EVT)->inf_len = pMsg->msg[2];
MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)&pMsg->msg[3];
MN_OUT_EVT(L3_MN_EVT)->dmy3 = (U1)MN_IN_EVT(PM_MN_EVT)->add_dat;
m_excreq((WORD*)&SYS_WORK->tsk_id);
}
void Mn_PFacDsp(void) //CC->MN
{
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MFACILIT;
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);
}
/*MN任务的拨号请求*/
void Mn_PDialReq(void)
{
M_MSB *pMsg;
pMsg = MN_IN_EVT(PM_MN_EVT)->msg_adr;
if(pMsg->msg[2] == 0)
{
ReaVal = PRIERR;
err_dsp(pMsg);
return;
}
if(Mn_InfChk(&CHKTBL[6] , (U1*)&pMsg->msg[3] , pMsg->msg[2]))
{
ReaVal = PRIERR;
err_dsp(pMsg);
return;
}
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 = PRCALDAL;
MN_OUT_EVT(L3_MN_EVT)->buf_adr = (U1*)pMsg;
MN_OUT_EVT(L3_MN_EVT)->inf_len = pMsg->msg[2];
MN_OUT_EVT(L3_MN_EVT)->inf_adr = (U1*)&pMsg->msg[3];
MN_OUT_EVT(L3_MN_EVT)->dmy3 = (U1)MN_IN_EVT(PM_MN_EVT)->add_dat;
/*发送消息到CC任务中*/
m_excreq((WORD*)&SYS_WORK->tsk_id);
}
void Mn_PCCValDsp(void) //CC->MN
{
SYS_WORK->msg_adr = (M_MSB*)m_hntbuf();
SYS_WORK->msg_adr->msg[0] = NONE;
SYS_WORK->msg_adr->msg[1] = MTCHDAT;
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_PRTOptReq(void) //It is not called from other module ?
{
if( !MN_IN_EVT(PM_MN_EVT)->msg_adr->msg[2])
{
ReaVal = PRIERR;
err_dsp( MN_IN_EVT(PM_MN_EVT)->msg_adr);
return;
}
set_up_b((BYTE*)SYS_WORK->out_evt , 0 , sizeof(SYS_WORK->out_evt));
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?