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

📄 lmp.h

📁 MTK平台绝密核心代码之 外设管理(红外线)
💻 H
字号:
/*****************************************************************************
*  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:
 * ---------
 *    LMP.h   
 *
 * Project:
 * --------
 *   Maui_Software
 *
 * Description:
 * ------------
 *   This file contains the include file for Link Management Protocol of IrDA 
 *
 * Author:
 * -------
 * -------
 *
 *****************************************************************************/


/* LMP header file */
#ifndef _IRDA_LMP_H_
#define _IRDA_LMP_H_


#include "irda.h"

#define DISCOVER_RETRY_COUNT  3

#define TOTAL_SELECTORS 				   16 		/* total possible selectors */  
#define LM_CONNECT_REQUEST_OPCODE 		1 	/* pg 31 of IrDA LMP spec */
#define LM_CONNECT_CONFIRM_OPCODE 		0x81
#define LM_CONNECT_INDICATION_OPCODE 	1 	/* pg 31 of IrDA LMP spec */
#define LM_ACCESS_OPCODE 				   3
#define LM_DISCONNECT_OPCODE			   2
#define LMP_HEAD						      2	/* [byte:dsel][byte:ssel] */
#define LMP_OP_HEAD						   4	/* [byte:dsel][byte:ssel][byte:opcode][byte:options=0] */
#define LMP_OVERHEAD			   (LAP_HEAD+LMP_HEAD+LAP_CRC)
#define LMP_OP_OVERHEAD			(LAP_HEAD+LMP_OP_HEAD+LAP_CRC)
#define MAX_LMP_OP_USER_DATA 	 max_frame_size-LMP_OP_OVERHEAD
#define MAX_LMP_USER_DATA    	 max_frame_size-LMP_OVERHEAD
#define LMP_USER_DATA_OFFSET 	 I_TX_DATA_PACKET_OFFSET



typedef struct ttp_q{	
	FBUF *frame[MAX_TTP_FRAMES];
	kal_uint8  head;
	kal_uint8  tail;
}TTP_Q;

typedef struct rxsdu {
	kal_int16 size;
	kal_uint8 ttp_busy;
	kal_uint8 ap_busy;
}RXSDU;
typedef struct ttp_dat {
	kal_uint8 availcredit;		/* credit available to advance to TTP peer */
	kal_uint8 remotecredit;		/* credit held by TTP peer */
	kal_uint8 sendcredit;		/* credit held by TTP local */
	kal_uint8 ttp_connected;	/* state of LM-MUX connection */
	kal_uint8 maxsegsize;		/* max size for outbound data TTP-PDU */
	kal_uint8 txmaxsdusize;		/* received from peer, screens tx PDUs */
	kal_uint8 rxmaxsdusize;		/* transmitted to peer, screens inbound PDUs */
}TTP_DAT;

typedef struct cdat {
	kal_uint8 discon_code;  /* typically used to hold the disconnect reason for the connecton */
	kal_uint8 sel;  	    /* remote lsap sel */
	kal_uint8 stat;  	    /* status of connection */
	kal_uint8 cc_state;     /* connection control state */	
	kal_uint8 *buf;        	/* pointer to data in working frame */
	FBUF  *fbuf;       		/* pointer to working frame, usually used
				   			   to pass data to callback functions */	
	kal_uint8 control;	    /* bit field configuration control */ 
						         /* b0=1: queue received lmp data */
						         /* b1=1: flag as ttp connection	*/
						         /* b2=1: flag as ttp comm connection */
			    			      /* b3=1: flag as ttp obex connection */

 	TTP_DAT ttp_dat;  				/* pointer to TTP data */
	TTP_Q ttp_txq;	  			  	   /* TTP transmit queue */
	TTP_Q ttp_rxq;	    			   /* TTP receive queue */		
	RXSDU Rxsdu; 	    			   /* Rx SDU control */	
	kal_uint8 disconnect_flag;		/* disconnect request from upper layer, 1, or disconnect
	 								      indication from peer device, 2, */

}CDAT;

struct LMP_RX_Q{		
	FBUF *frame[MAX_LMP_RX];
	kal_uint8  head;
	kal_uint8  tail;
};

/* IRLMP Station control states */

#define IRDA_LMP_SC_DISC    	   1
#define IRDA_LMP_SC_SETUP    	   2
#define IRDA_LMP_SC_DISCOVER 	   3
#define IRDA_LMP_SC_ACTIVE   	   4

/* IRLMP Connection control states */
#define IRDA_LMP_CC_NOT_READY    5
#define IRDA_LMP_CC_READY     	6
#define IRDA_LMP_CC_SETUP     	7
#define IRDA_LMP_CC_INCOMING     8
#define IRDA_LMP_CC_ACTIVE     	9

/* definition for IRLMP status */
#define LM_CONNECTION_IDLE 		0
#define LM_WAIT_CC_READY		   1	/* wait for CC_READY to send LSAP connect request */
#define LM_WAIT_CC_ACTIVE		   2	/* wait fro LSAP connect confirm */
/* IRLMP error codes */
#define TIMEOUT_FAILURE 1 

/* LMP macros */
#define DEST_LSAP(sel) lm_con[sel].sel
#define LM_DISCONNECT_INDICATION()  	   LM_LINKDISCONNECT_INDICATION()
#define LM_LINKDISCONNECT_INDICATION() 	IRLAP_DISCONNECT_INDICATION ()
#define LM_LINKCONNECT_INDICATION() 	   IRLAP_CONNECT_INDICATION()

/* ensure that opcode and src LSAP are the same to confirm connection */
#define LM_CONNECT_CONFIRM(service,dest_lsap)  lm_con[service].sel == dest_lsap 


#define NULL_DEVICE_ADDRESS			0x00000000


#define IRDA_LMP_IDLE_FLOW				   0
#define IRDA_LMP_LSAP_CONNECT_FLOW		IRDA_LMP_IDLE_FLOW+1
#define IRDA_LMP_DATA_FLOW				   IRDA_LMP_LSAP_CONNECT_FLOW+1
#define IRDA_LMP_LSAP_DISCONNECT_FLOW	IRDA_LMP_DATA_FLOW+1

/* the definition for irda_lmp_flag */
#define NULL_IRDA_LMP_MSG							      0x0000
#define IRDA_LAP_DISCOVERY_MEDIA_BUSY_ERROR_MSG		0x0100
#define IRDA_LAP_DISCOVERY_NO_DEVICE_ERROR_MSG		0x0200

/* definition of LM-PDU */
#define DATA_LM_PDU								      0x04
#define CONNECT_REQUEST_INDICATION_LM_PDU		   0x01
#define CONNECT_RESPONSE_CONFIRM_LM_PDU			0x81
#define DISCONNECT_LM_PDU						      0x02
#define ACCESS_MODE_REQUEST_INDICATION_LM_PDU	0x03
#define ACCESS_MODE_RESPONSE_CONFIRM_LM_PDU		0x83
#define BAD_LOCAL_LSAP_SEL_LM_PDU				   0x11
#define BAD_LM_PDU								      0x12


/* definition of return value for LMP and TTP function */
#define IRDA_SUCCESS								      0
#define IRDA_WRONG_SC_STATE						   IRDA_SUCCESS+1
#define IRDA_WRONG_CC_STATE						   IRDA_WRONG_SC_STATE+1
#define IRDA_DISCOVERY_NO_DEVICE				      IRDA_WRONG_CC_STATE+1
#define IRDA_DISCOVERY_ADDRESS_CONFLICT			IRDA_DISCOVERY_NO_DEVICE+1
#define IRDA_DISCOVERY_ADDRESS_CONFLICT_RETRY	IRDA_DISCOVERY_ADDRESS_CONFLICT+1
#define IRDA_LSAP_CONNECT_IN_PROGRESS			   IRDA_DISCOVERY_ADDRESS_CONFLICT_RETRY+1

/* declaration of global variables */
extern CDAT lm_con[MAX_SEL];  
extern kal_uint8 sc_state;       	/* station control state machine */
extern kal_uint8 conflict_flag; 	/* used during discovery resolution */
extern kal_uint8 genaddrbit;		/* for address conflicts, if set, the XID_CMD frame 
							   		   will ask remote devices to generate device address again */
extern kal_uint8 discovery_retry_counter;		/* number of retry to send discovery request */
extern LOG *lmp_discovery_log;        	/* pointer to the discovery log */
extern FBUF *irda_data_buffer, *current_data_buffer;
extern kal_uint8 local_lsap_sel, remote_lsap_sel;
extern kal_uint8 current_lsap_sel;
extern kal_uint32 remote_device_address;
 
extern kal_uint8 irda_lmp_flow;
extern kal_uint8 irda_error_code;
extern kal_uint16 irda_lmp_flag;
extern module_type module_id_mapping[MAX_SEL];

extern void init_irda_lmp( void );
extern void irda_ttp_lmp_main(void);
extern void irda_lap_to_lmp_msg(void);
extern void irda_ttp_to_lmp_msg(void);
extern void irda_lmp_process_external_msg(ilm_struct rx_msg);
extern void lm_link_disconnect_request(void);
extern void lm_link_disconnect_indication(void);
extern kal_uint16 lm_connect_request(void);
extern kal_uint16 station_control_check(void);
extern kal_uint8 AddressConflicts(LOG *ptr);
extern void RemoveConflicts(LOG *ptr);
extern kal_uint8 lmp_data_indication_parse(void);
extern void lmp_send_msg_to_upper_layer(kal_uint16 msg, FBUF *frame, irda_error_code_enum code);
extern void IrLMP_Disconnect_Reset(kal_uint8 local);
extern kal_uint8 IrLMP_Connect_Request(kal_uint8 local, kal_uint8 remote, FBUF *frame);
extern kal_uint8 IrLMP_DisConnect_Request(kal_uint8 local, kal_uint8 remote, FBUF *frame);
extern kal_uint8 IrLMP_Data_Request(kal_uint8 local, kal_uint8 remote, FBUF *frame);
extern kal_uint8 IrLMP_Connect_Response(kal_uint8 local, kal_uint8 remote, FBUF *frame);
#endif /* _IRDA_LMP_H_ */

⌨️ 快捷键说明

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