⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mm32ev.c

📁 phs 源代码 小灵通协议源代码 phs source code
💻 C
📖 第 1 页 / 共 2 页
字号:


/*************************************************************************************
FUNCTION: mm_LocReg_rej

DESCRIPTION:
	MM Location registration reject , DOWNLINK
	Triggered by MNMM_LOCATION_REGISTRATION_REJ primitive
ARGUMENTS PASSED:
	None.

RETURN VALUE:
	None

Revision History:
                            Modification     Tracking
Modifier                          Date          Number     Description of Changes
-------------------------   ------------    ----------   ------------------------------
Chen Xiangli					08/06/2003					Initial version.

**************************************************************************************/
void mm_LocReg_rej( void )
{
	_BOOL ret;

	OUT_PRIEVT->buf_adr = m_hntbuf();
	ret = mm_unpack_dld(mm_loc_reg_rej_msgtype ,sizeof(mm_loc_reg_rej_msgtype)/sizeof(MM_INFOELE));
	m_frebuf( (U1 *)IN_DLDEVT->msg_adr );

	if (ret)
	{
		OUT_PRIEVT->add_dat = IN_MSGDAT->dat[3] & ~BIT8;	//dat[0]:	protocol ID
															//dat[1]:	message type
															//dat[2]:	information element type ID ,CAUSE :0x08
															//dat[3]:	cause content
		if(OUT_PRIEVT->add_dat > 1)
		{
			m_frebuf(OUT_PRIEVT->buf_adr);
			return;
		}
	}
	else
	{
		m_frebuf( OUT_PRIEVT->buf_adr );
		return;
	}

	m_frebuf( OUT_PRIEVT->buf_adr );		//not uesed at the following , so free the buffer.
	OUT_PRIEVT->buf_adr = ZERO;

	OUT_PRIEVT->inf_len = ZERO_WORD;
	OUT_PRIEVT->inf_adr = ZERO;

	mm_pri_req(MMMN_LOCATION_REGISTRATION_REJ);

	mm_stop_time( TM303PON );		/*
										60s , Start at: location registration request
											  Stop at:  1.Location  registration ack
											  			2.Location  registration reject
									*/
	Mm_bLocReg = FALSE;

	switch ( OUT_PRIEVT->add_dat )				/* Cause*/
	{
		case	0	:							/* Location registration retry possible*/
			mm_set_time( TM304PON );			/*
													100s ,  start at: Location registrtion reject reception ,adn retry possible
															stop at: N/A
												*/
			Mm_sts = ST_LOCREG_R;
			break;
		case	1	:							/* Location regstration retry impossible*/
			Mm_sts = ST_NULL;
			break;
	}
}


/*
	Function:	MM Function request response , DOWNLINK

	Modifier		Date
	Chenxl			2003/8/6
*/

/*************************************************************************************
FUNCTION: mm_fnc_rep

DESCRIPTION:
	MM Function request response , DOWNLINK
	Triggered by MNMM_FUNCTION_REP primitive
ARGUMENTS PASSED:
	None.

RETURN VALUE:
	None

Revision History:
                            Modification     Tracking
Author                          Date          Number     Description of Changes
-------------------------   ------------    ----------   ------------------------------
Chen Xiangli					08/06/2003					Initial version.

**************************************************************************************/
void mm_fnc_rep( void )
{
	_BOOL 	ret;
	U1 		chk = 0;
	U1		*p;
	const MM_INFOELE* pInfoEle;

	if (!( Mm_tim & TM301PON ))					/* Timer TM301P has been time out ,or it's something wrong */
	{
		m_frebuf( (U1 *)IN_DLDEVT->msg_adr );
		return;
	}
	mm_stop_time( TM301PON );		/*
										1s , start at: MM function request  transmission
											 stop at:  MM function request response reception
									*/
	OUT_PRIEVT->buf_adr = m_hntbuf();
	ret = mm_unpack_dld(mm_fnc_rep_msgtype , sizeof(mm_fnc_rep_msgtype)/sizeof(MM_INFOELE));
	m_frebuf( (U1 *)IN_DLDEVT->msg_adr );

	if ( !ret )
	{
		m_frebuf( OUT_PRIEVT->buf_adr );

		mm_pri_req(MMMN_FUNCTION_REQ_FAIL);
		return;
	}

	p = OUT_PRIEVT->inf_adr;

	while(p < (OUT_PRIEVT->inf_adr + OUT_PRIEVT->inf_len))
	{
		if(p[0] & 0x80)		//single octet
		{
			if ((p[0] & 0xF0) == (MMINFOELE_ACTIVE_AUTH & 0xF0))	// active authentication,
			{	//which is used to identify whether or not authentication is performed during communication
				chk |= BIT2;
				p++;

			}
		}
		else		/* multiple octet */
		{
			switch ( p[0] )
			{
			case MMINFOELE_AUTHTYPE:
				chk |= BIT1;
			break;
			case MMINFOELE_PAGING_AREA:
				chk |= BIT3;
			break;
			}
			pInfoEle = (MM_INFOELE*)mm_search_info_ele(p[0] ,mm_fnc_rep_msgtype , sizeof(mm_fnc_rep_msgtype)/sizeof(MM_INFOELE));
			if(NULL == pInfoEle)	//must something wrong
			{
				m_frebuf( OUT_PRIEVT->buf_adr );
				return;
			}
			if(pInfoEle->binfo_len_fixed)
				p = (U1*)pInfoEle->info_len;
			else
				p += p[1]+2;
		}
	}

	if (( Mm_fncrq & chk ) != Mm_fncrq )		/*Function Request Response is not equal to the request content*/
	{
		m_frebuf(OUT_PRIEVT->buf_adr);

		mm_pri_req(MMMN_FUNCTION_REQ_FAIL);
		return;
	}

	mm_pri_req(MMMN_FUNCTION_RES);
}


/*************************************************************************************
FUNCTION: mm_tm_301p

DESCRIPTION:
	MM Timer 301P Time out procedure

ARGUMENTS PASSED:
	None.

RETURN VALUE:
	None

Revision History:
                            Modification     Tracking
Author                          Date          Number     Description of Changes
-------------------------   ------------    ----------   ------------------------------
Chen Xiangli					08/06/2003					Initial version.

**************************************************************************************/

void mm_tm_301p( void )
{
	Mm_tim &= ~TM301PON;

	OUT_PRIEVT->buf_adr = ZERO;
	OUT_PRIEVT->inf_len = ZERO_WORD;
	OUT_PRIEVT->inf_adr = ZERO;

	mm_pri_req(MMMN_FUNCTION_REQ_FAIL);
}

/*************************************************************************************
FUNCTION: mm_tm_303p

DESCRIPTION:
	MM Timer 303p time out procedure

ARGUMENTS PASSED:
	None.

RETURN VALUE:
	None

Revision History:
                            Modification     Tracking
Author                          Date          Number     Description of Changes
-------------------------   ------------    ----------   ------------------------------
Chen Xiangli					08/06/2003					Initial version.

**************************************************************************************/

void mm_tm_303p( void )
{
	Mm_tim &= ~TM303PON;

	OUT_PRIEVT->buf_adr = ZERO;
	OUT_PRIEVT->inf_len = ZERO_WORD;
	OUT_PRIEVT->inf_adr = ZERO;

	mm_pri_req(MMMN_LOCATION_REGISTRATION_FAIL);
}

/*************************************************************************************
FUNCTION: mm_tm_304p

DESCRIPTION:
	MM Timer 304p time out procedure

ARGUMENTS PASSED:
	None.

RETURN VALUE:
	None

Revision History:
                            Modification     Tracking
Author                          Date          Number     Description of Changes
-------------------------   ------------    ----------   ------------------------------
Chen Xiangli					08/06/2003					Initial version.

**************************************************************************************/
void mm_tm_304p( void )
{
	Mm_tim &= ~TM304PON;

	mm_LocReg_req();
}


/*************************************************************************************
FUNCTION: mm_init

DESCRIPTION:
	MM Initialization
	Triggered by EINITL3 event
ARGUMENTS PASSED:
	None.

RETURN VALUE:
	None

Revision History:
                            Modification     Tracking
Author                          Date          Number     Description of Changes
-------------------------   ------------    ----------   ------------------------------
Chen Xiangli					08/06/2003					Initial version.

**************************************************************************************/

void mm_init( void )
{
	mm_stop_time( 0xff );

	Mm_bLocReg = FALSE;

}

#ifdef __cplusplus
}
#endif

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -