📄 lmp.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 + -