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

📄 ttp.c

📁 MTK平台绝密核心代码之 外设管理(红外线)
💻 C
📖 第 1 页 / 共 3 页
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. 
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/

/*****************************************************************************
 *
 * Filename:
 * ---------
 *    TTP.c
 *
 * Project:
 * --------
 *   Maui_Software
 *
 * Description:
 * ------------
 *   This file contains the Tiny Transport Protocol of IrDA 
 *
 * Author:
 * -------
 * -------
 *****************************************************************************/
 
#include "kal_release.h"      /* Basic data type */
#include "stack_common.h"
#include "stack_msgs.h"
#include "app_ltlcom.h"       /* Task message communiction */
#include "stack_timer.h"      /* Stack timer */
#include "irda_enums.h"       /* irda enum */                                   
#include "gprs_flc_kal.h"   
#include "gprs_flc_common_data_types.h"
#include "flc_tunable_para.h"
#include "irconfig.h"	      /* IrPro system configuration */
#include "lap.h"	            /* LAP source header file */
#include "lmp.h"	            /* LMP source header file */
#include "ttp.h"
#include "iap_p.h"	         /* IAP primary stack header file */
#include "iap_s.h"	         /* IAP secondary stack header file */
#include "iastab.h"	         /* IAS table configuraton header file */
#include "support.h"	         /* system support functions */
#include "externs.h"	         /* system external definitions */
#include "irda.h"
#include "irframer_sw.h"      
#include "stack_config.h"
#include "kal_trace.h"                     
#include "irda_trace.h"

                                                                  
kal_uint16 irda_ttp_flag;        /*set by LMP*/
kal_uint16 ctrl_buff_cnt=0;      /*record unfree control buff*/
kal_uint16 dbg_ctrl_buff_count=0;/*dbg use*/

kal_uint16 irda_ttp_disconnect_req=0;
kal_uint16 irda_ttp_disconnect_ind=0;

struct  REC_CTRL_BUFF_Q rec_ctrl_buff_q;
/*************************************************************************
* FUNCTION
*	init_irda_ttp
*
* DESCRIPTION
*	Initial all TTP correlated global variables and queue 
*
* PARAMETERS
*  
* RETURNS
*  None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void init_irda_ttp(void)
{ 
	kal_uint8 i;
		
	irda_ttp_flag=NULL_IRDA_TTP_MSG;

	for ( i=0;i<MAX_SEL;i++) 
	{
	    if (lm_con[i].control&TTP_MASK)
	    {
	      	QUEUE_FLUSH(lm_con[i].ttp_txq,MAX_TTP_FRAMES);
		 	   QUEUE_FLUSH(lm_con[i].ttp_rxq,MAX_TTP_FRAMES);	
		 	   /*initialize TX/RX Queue*/
            INIT_Q(lm_con[i].ttp_txq,MAX_TTP_FRAMES);/*8*/
            INIT_Q(lm_con[i].ttp_rxq,MAX_TTP_FRAMES);
			   lm_con[i].ttp_dat.ttp_connected=0;
			   lm_con[i].ttp_dat.sendcredit=0;
			   lm_con[i].ttp_dat.remotecredit=0;
	    }
	}	
	irda_ttp_disconnect_req=0;
   irda_ttp_disconnect_ind=0;
}	/* init_irda_ttp() */
 
/*Reset all ttp releated connection*/
void IrTTP_Disconnect_Reset(kal_uint8 local)
{
   #ifdef IRDA_KAL_TRACE  
     kal_trace(TRACE_FUNC, IRDA_MSG75); 
   #endif
    QUEUE_FLUSH(lm_con[local].ttp_txq,MAX_TTP_FRAMES);
    QUEUE_FLUSH(lm_con[local].ttp_rxq,MAX_TTP_FRAMES);	
    /*initialize TX/RX Queue*/
    INIT_Q(lm_con[local].ttp_txq,MAX_TTP_FRAMES);/*8*/
    INIT_Q(lm_con[local].ttp_rxq,MAX_TTP_FRAMES);
    lm_con[local].ttp_dat.ttp_connected=0;
    lm_con[local].ttp_dat.sendcredit=0;
    lm_con[local].ttp_dat.remotecredit=0;
    /*free all control buffer in Q*/
    flush_ctrl_buff_q();
}   

void ttp_link_disconnect_indiaction(kal_uint8 local)
{
	ilm_struct *ttp_ilm;
	irda_local_para_struct *tmp_local_para;
	
	#ifdef IRDA_KAL_TRACE  
     kal_trace(TRACE_FUNC, IRDA_MSG76); 
   #endif
	
	ttp_ilm=allocate_ilm(MOD_TTP);/*MOD_TTP*/
	ttp_ilm->src_mod_id=MOD_TTP; /*MOD_TTP*/
	
   if(local==OBEX_LSAP_SEL||local==OBEX_IRXFER_LSAP_SEL)
   {
	   ttp_ilm->dest_mod_id=MOD_OBEX;	/*@@@@MOD_OBEX*/	
	   ttp_ilm->sap_id=IRDA_OBEX_SAP;
	}
	else if (local==COMMX_LSAP_SEL)
	{
	   ttp_ilm->dest_mod_id=MOD_IRCOMM;	/*@@@@MOD_IRCOMM*/	
	   ttp_ilm->sap_id=IRDA_IRCOMM_SAP;	   
	}
	ttp_ilm->msg_id=MSG_ID_LMP_LINK_DISCONNECT_INDICATION;
	tmp_local_para=(irda_local_para_struct *)construct_local_para(sizeof(irda_local_para_struct),TD_UL);
	tmp_local_para->local_lsap_sel=local;	
	tmp_local_para->disconnect_reason=lm_con[local].discon_code;
	tmp_local_para->return_code=0;
	  
	ttp_ilm->local_para_ptr=(local_para_struct *)tmp_local_para; 
	msg_send_ext_queue(ttp_ilm);

}	/* ttp_send_msg_to_upper_layer() */

/*************************************************************************
* FUNCTION
*	irda_lmp_to_ttp_msg
*
* DESCRIPTION
*	Process all the message send from LMP to TTP 
*
* PARAMETERS
*  
* RETURNS
*  None
*
* GLOBALS AFFECTED
*
*************************************************************************/
void irda_lmp_to_ttp_msg(void)
{
	FBUF  *frame;
	kal_uint8 *tmpptr;
	kal_uint16 old_ttp_flag;
	
   #ifdef IRDA_KAL_TRACE  
     kal_trace(TRACE_FUNC, IRDA_MSG77); 
   #endif
	
	frame = irda_data_buffer;
	tmpptr= (kal_uint8 *) (irda_data_buffer)+I_RX_PACKET_OFFSET;
	irda_data_buffer=0;

	old_ttp_flag=irda_ttp_flag;
	switch (irda_ttp_flag)
	{
		case MSG_ID_LMP_DATA_INDICATION:
	      if (lm_con[local_lsap_sel].cc_state==IRDA_LMP_CC_ACTIVE)
			{	
		      /* add delta credit */
			   lm_con[local_lsap_sel].ttp_dat.sendcredit+=(tmpptr[2]&0x7f); 
			   process_ttp_tx_queue(local_lsap_sel);
			   kal_prompt_trace(MOD_TTP,"RX data size %d",frame->size);
			   if (frame->size<=(I_RX_PACKET_HEAD+3))/*2 for AC 2 for LMP 1 for TTP*/
			   {	/* zero frame */ /*2*/
			   	Freebuf(frame);
			   }
			   else
			   {	/* not zero frame */
			   	lm_con[local_lsap_sel].ttp_dat.remotecredit-=1;
               /*to upper layer*/
               process_rx_ctrl_q(local_lsap_sel);/*process rx_ctrl_q first*/
			   	ttp_send_msg_to_upper_layer(MSG_ID_TTP_DATA_INDICATION,frame,IRDA_SUCCESS);			  
			   }
			   /*send data or dataless TTP_DATA*/
	
			}
			else/*Wrong CC state*/
			{
			   ASSERT(0);
			   Freebuf(frame);
		   }      
		   break;
		case MSG_ID_LMP_CONNECT_INDICATION:
         if (lm_con[local_lsap_sel].cc_state==IRDA_LMP_CC_INCOMING)
			{   		
			   ttp_send_msg_to_upper_layer(MSG_ID_TTP_CONNECT_INDICATION, NULL, IRDA_SUCCESS);
			}   
			else
			   ASSERT(0);
		   break;
		case MSG_ID_LMP_CONNECT_CONFIRM:/*????*/
			ttp_send_msg_to_upper_layer(MSG_ID_TTP_CONNECT_CONFIRM, NULL, irda_error_code);
			if (!irda_error_code)
			{
				lm_con[local_lsap_sel].ttp_dat.ttp_connected=1;
				lm_con[local_lsap_sel].ttp_dat.sendcredit=tmpptr[LMP_OP_HEAD];	/*4*/
				Freebuf(frame);                          /*2 sels, 1 opcode 1 parameters*/
			}                                                   
		   break;
		case MSG_ID_LMP_LSAP_DISCONNECT_INDICATION:
		   if((!FRAME_IN_QUEUE(lm_con[local_lsap_sel].ttp_rxq))||
		      (lm_con[local_lsap_sel].cc_state!=IRDA_LMP_CC_ACTIVE))
		   {            
				ttp_send_msg_to_upper_layer(MSG_ID_TTP_LSAP_DISCONNECT_INDICATION,NULL,IRDA_SUCCESS);
			   IrTTP_Disconnect_Reset(local_lsap_sel);
			   irda_ttp_disconnect_ind=0;	
			}  
			else
			   irda_ttp_disconnect_ind=1;	 
		   break;
		case MSG_ID_LMP_LINK_DISCONNECT_INDICATION:
         init_irda_ttp();
         ttp_link_disconnect_indiaction(OBEX_LSAP_SEL);		
         ttp_link_disconnect_indiaction(COMMX_LSAP_SEL);		  
          break;
		default:
		   break;
	}
	if (old_ttp_flag==irda_ttp_flag)
		irda_ttp_flag = NULL_IRDA_TTP_MSG;
}
 

/*************************************************************************
* FUNCTION
*	irda_ttp_process_external_msg
*
* DESCRIPTION
*	irda_ttp_process_external_msg
*
* PARAMETERS
*  rx_msg -> inter layer message from upper layer 
* RETURNS
*  None
*
* GLOBALS AFFECTED
*  Process all the message send from upper layer to TTP 
*************************************************************************/
kal_uint16 init_buff_count=0;
void irda_ttp_process_external_msg(ilm_struct rx_msg)
{
	FBUF *tmpbuf=0;
	kal_uint8 *tmpptr, tmp;
	irda_local_para_struct *tmp_local_para;
	// peer_buff_struct* tmp_peer_buf_ptr;	
	kal_uint8* pdu_ptr;
	kal_uint16 pdu_length;
   gprs_flc_pool_presence_enum is_pool_presence;

⌨️ 快捷键说明

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