📄 irda.h
字号:
* | IRLMP_CONNECT_CONF | IRDA_CONNECT_SERVICE |
* | | o IRDA_MSG_pQos |
* | | o IRDA_MSG_pConnData |
* | | o IRDA_MSG_ConnDataLen |
* | | o IRDA_MSG_pContext |
* | | o IRDA_MSG_MaxSDUSize - Max size that this |
* | | IRLMP client can send to peer |
* | | o IRDA_MSG_MaxPDUSize |
* |--------------------------+----------------------------------------------|
* | IRLMP_DATA_IND | IRDA_DATA_SERVICE |
* | | o IRDA_MSG_pRead = start of User Data |
* | | o IRDA_MSG_pWrite = end of User Data |
* | | o IRDA_MSG_SegFlags = 0 or SEG_FINAL |
* |--------------------------+----------------------------------------------|
* | IRLMP_DATA_CONF | IRDA_DATA_SERVICE |
* | | o IRDA_MSG_pDataContext =ptr to NDIS_BUFFER|
* | | o IRDA_MSG_DataStatus = |
* | | IRLMP_DATA_REQUEST_COMPLETED |
* | | IRLMP_DATA_REQUEST_FAILED |
* |--------------------------+----------------------------------------------|
* | IRLMP_ACCESSMODE_IND | IRLMP_ACCESSMODE_SERVICE |
* | | o IRDA_MSG_AccessMode = |
* | | IRLMP_EXCLUSIVE |
* | | IRLMP_MULTIPLEXED |
* |--------------------------+----------------------------------------------|
* | IRLMP_ACCESSMODE_CONF | IRLMP_ACCESSMODE_SERVICE |
* | | o IRDA_MSG_AccessMode = |
* | | IRLMP_EXCLUSIVE |
* | | IRLMP_MULTIPLEXED |
* | | o IRDA_MSG_ModeStatus = |
* | | IRLMP_ACCESSMODE_SUCCESS |
* | | IRLMP_ACCESSMODE_FAILURE |
* |--------------------------+----------------------------------------------|
* |IRLMP_GETVALUEBYCLASS_CONF| IRDA_DATA_SERVICE |
* | | o IRDA_MSG_pIasQuery |
* | | o IRDA_MSG_IASStatus = An IRLMP_DISC_REASON|
* | | (see below) |
* |-------------------------------------------------------------------------|
*/
#ifndef UNDER_CE
#include <ntos.h>
#else
#include <windows.h>
#endif
#include <cxport.h>
#include <ndis.h>
#include <af_irda.h>
#include <irerr.h>
#ifdef UNDER_CE
// #include <ntddndis.h>
#include "mem.h"
#else
#include <dbgmsg.h>
#endif
#include <refcnt.h>
#define IRDA_MSG_DATA_SIZE_INTERNAL sizeof(IRDA_MSG)+128 // can this be smaller?
#define IRDA_MAX_DATA_SIZE 2048
//#define TEMPERAMENTAL_SERIAL_DRIVER // drivers busted. intercharacter delays cause
// IrLAP to reset.
#if DBG
// Prototypes for Debugging Output
void IRDA_DebugOut (TCHAR *pFormat, ...);
void IRDA_DebugStartLog (void);
void IRDA_DebugEndLog (void *, void *);
#endif
#ifndef UNDER_CE
#define DBG_NDIS 0x00000002 // keep in sync with test\irdakdx
#define DBG_TIMER 0x00000004
#define DBG_IRMAC 0x00000008
#define DBG_IRLAP 0x00000010
#define DBG_IRLAPLOG 0x00000020
#define DBG_RXFRAME 0x00000040
#define DBG_TXFRAME 0x00000080
#define DBG_IRLMP 0x00000100
#define DBG_IRLMP_CONN 0x00000200
#define DBG_IRLMP_CRED 0x00000400
#define DBG_IRLMP_IAS 0x00000800
#define DBG_DISCOVERY 0x00001000
#define DBG_PRINT 0x00002000
#define DBG_ADDR 0x00004000
#define DBG_REF 0x00010000
#define DBG_TDI 0x00020000
#define DBG_TDI_IRP 0x00040000
#define DBG_ALLOC 0x10000000
#define DBG_FUNCTION 0x20000000
#define DBG_WARN 0x40000000
#define DBG_ERROR 0x80000000
#else // !UNDER_CE
// Debug zone definitions.
#define ZONE_INIT DEBUGZONE(0)
#define ZONE_WSHIRDA DEBUGZONE(1)
#define ZONE_TDI DEBUGZONE(2)
#define ZONE_IRLMP DEBUGZONE(3)
#define ZONE_IRLAP DEBUGZONE(4)
#define ZONE_IRNDIS DEBUGZONE(5)
#define ZONE_DSCV DEBUGZONE(6)
#define ZONE_SOCKETCNT DEBUGZONE(7)
#define ZONE_TIMER DEBUGZONE(8)
#define ZONE_REF DEBUGZONE(9)
#define ZONE_LOCK DEBUGZONE(10)
#define ZONE_MISC DEBUGZONE(11)
#define ZONE_ALLOC DEBUGZONE(12)
#define ZONE_FUNCTION DEBUGZONE(13)
#define ZONE_WARN DEBUGZONE(14)
#define ZONE_ERROR DEBUGZONE(15)
#define DBG_TDI ZONE_TDI
#define DBG_IRLMP ZONE_IRLMP
#define DBG_IRLMP_CONN ZONE_IRLMP
#define DBG_IRLMP_CRED ZONE_IRLMP
#define DBG_IRLMP_IAS ZONE_IRLMP
#define DBG_IRLAP ZONE_IRLAP
#define DBG_IRLAPLOG ZONE_IRLAP
#define DBG_DISCOVERY ZONE_DSCV
#define DBG_PRINT (0)
#define DBG_ADDR (0)
#define DBG_NDIS ZONE_IRNDIS
#define DBG_TIMER ZONE_TIMER
#define DBG_REF ZONE_REF
#define DBG_MISC ZONE_MISC
#define DBG_ALLOC ZONE_ALLOC
#define DBG_FUNCTION ZONE_FUNCTION
#define DBG_WARN ZONE_WARN
#define DBG_ERROR ZONE_ERROR
// This is zone for debug logging
#define DBG_RXFRAME 0x1
#define DBG_TXFRAME 0x2
#endif // UNDER_CE
#define IRDA_ALLOC_MEM(ptr, sz, id) ((ptr) = CTEAllocMem(sz))
#define IRDA_FREE_MEM(ptr) CTEFreeMem((ptr))
#if DBG
#define STATIC
#else
#define STATIC static
#endif
typedef struct
{
CTETimer CteTimer;
VOID (*ExpFunc)(PVOID Context);
PVOID Context;
UINT Timeout;
BOOLEAN Late;
struct IrdaLinkCb *pIrdaLinkCb;
#if DBG
char *pName;
#endif
} IRDA_TIMER, *PIRDA_TIMER;
typedef struct
{
CTEEvent CteEvent; // Must be first field
VOID (*Callback)(PVOID Context);
} IRDA_EVENT, *PIRDA_EVENT;
#define IRMAC_CONTEXT(ilcb) ((ilcb)->IrmacContext)
#define IRLAP_CONTEXT(ilcb) ((ilcb)->IrlapContext)
#define IRLMP_CONTEXT(ilcb) ((ilcb)->IrlmpContext)
// Device/Discovery Information
#define IRLAP_DSCV_INFO_LEN 32
#define IRDA_DEV_ADDR_LEN 4
typedef struct
{
LIST_ENTRY Linkage;
UCHAR DevAddr[IRDA_DEV_ADDR_LEN];
int DscvMethod;
int IRLAP_Version;
UCHAR DscvInfo[IRLAP_DSCV_INFO_LEN];
int DscvInfoLen;
int NotSeenCnt; // used by IRLMP to determine when to remove
// the device from its list
PVOID LinkContext; // Link on which device was discovered
} IRDA_DEVICE;
#define IRDA_NDIS_BUFFER_POOL_SIZE 14
#define IRDA_NDIS_PACKET_POOL_SIZE 7
#define IRDA_MSG_LIST_LEN 2
#define IRDA_MSG_DATA_SIZE 64
typedef struct
{
LIST_ENTRY Linkage;
PVOID Owner;
struct irda_msg *pMsg;
MEDIA_SPECIFIC_INFORMATION MediaInfo;
} IRDA_PROTOCOL_RESERVED, *PIRDA_PROTOCOL_RESERVED;
typedef struct IrdaLinkCb
{
LIST_ENTRY Linkage;
PVOID IrlapContext;
PVOID IrlmpContext;
NDIS_SPIN_LOCK SpinLock;
#ifdef UNDER_CE
CRITICAL_SECTION Mutex;
#else
KMUTEX Mutex;
#endif // !UNDER_CE
NDIS_HANDLE UnbindContext;
NDIS_HANDLE NdisBindingHandle;
NDIS_EVENT SyncEvent;
NDIS_STATUS SyncStatus;
IRDA_TIMER MediaSenseTimer;
int MediaBusy;
NDIS_HANDLE BufferPool;
NDIS_HANDLE PacketPool;
LIST_ENTRY PacketList;
LIST_ENTRY TxMsgFreeList;
int TxMsgFreeListLen;
LIST_ENTRY RxMsgFreeList;
int RxMsgFreeListLen;
LIST_ENTRY RxMsgList;
IRDA_EVENT EvRxMsgReady;
int RxMsgDataSize;
UINT ExtraBofs; // These should be per connection for
UINT MinTat; // multipoint
BOOLEAN WaitMinTat;
REF_CNT RefCnt;
} IRDA_LINK_CB, *PIRDA_LINK_CB;
// IRLAP Quality of Service
#define BIT_0 1
#define BIT_1 2
#define BIT_2 4
#define BIT_3 8
#define BIT_4 16
#define BIT_5 32
#define BIT_6 64
#define BIT_7 128
#define BIT_8 256
#define BPS_2400 BIT_0 // Baud Rates
#define BPS_9600 BIT_1
#define BPS_19200 BIT_2
#define BPS_38400 BIT_3
#define BPS_57600 BIT_4
#define BPS_115200 BIT_5
#define BPS_4000000 BIT_8
#define MAX_TAT_500 BIT_0 // Maximum Turnaround Time (millisecs)
#define MAX_TAT_250 BIT_1
#define MAX_TAT_100 BIT_2
#define MAX_TAT_50 BIT_3
#define MAX_TAT_25 BIT_4
#define MAX_TAT_10 BIT_5
#define MAX_TAT_5 BIT_6
#define DATA_SIZE_64 BIT_0 // Data Size (bytes)
#define DATA_SIZE_128 BIT_1
#define DATA_SIZE_256 BIT_2
#define DATA_SIZE_512 BIT_3
#define DATA_SIZE_1024 BIT_4
#define DATA_SIZE_2048 BIT_5
#define FRAMES_1 BIT_0 // Window Size
#define FRAMES_2 BIT_1
#define FRAMES_3 BIT_2
#define FRAMES_4 BIT_3
#define FRAMES_5 BIT_4
#define FRAMES_6 BIT_5
#define FRAMES_7 BIT_6
#define BOFS_48 BIT_0 // Additional Beginning of Frame Flags
#define BOFS_24 BIT_1
#define BOFS_12 BIT_2
#define BOFS_5 BIT_3
#define BOFS_3 BIT_4
#define BOFS_2 BIT_5
#define BOFS_1 BIT_6
#define BOFS_0 BIT_7
#define MIN_TAT_10 BIT_0 // Minumum Turnaround Time (millisecs)
#define MIN_TAT_5 BIT_1
#define MIN_TAT_1 BIT_2
#define MIN_TAT_0_5 BIT_3
#define MIN_TAT_0_1 BIT_4
#define MIN_TAT_0_05 BIT_5
#define MIN_TAT_0_01 BIT_6
#define MIN_TAT_0 BIT_7
#define DISC_TIME_3 BIT_0 // Link Disconnect/Threshold Time (seconds)
#define DISC_TIME_8 BIT_1
#define DISC_TIME_12 BIT_2
#define DISC_TIME_16 BIT_3
#define DISC_TIME_20 BIT_4
#define DISC_TIME_25 BIT_5
#define DISC_TIME_30 BIT_6
#define DISC_TIME_40 BIT_7
typedef struct
{
UINT bfBaud;
UINT bfMaxTurnTime;
UINT bfDataSize;
UINT bfWindowSize;
UINT bfBofs;
UINT bfMinTurnTime;
UINT bfDisconnectTime; // holds threshold time also
} IRDA_QOS_PARMS;
// IrDA Message Primitives
typedef enum
{
MAC_DATA_REQ = 0, // Keep in sync with table in irlaplog.c
MAC_DATA_IND,
MAC_DATA_RESP,
MAC_DATA_CONF,
MAC_CONTROL_REQ,
MAC_CONTROL_CONF,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -