Windows-Server-2003/net/irda/inc/decdirda.h

192 lines
4.4 KiB
C

// returns pointers pOutStr
TCHAR *DecodeIRDA(int *pFrameType,// return frame type (-1 = bad frame)
UCHAR *pFrameBuf, // pointer to buffer containing IRLAP frame
UINT FrameLen, // length of buffer
TCHAR *OutputBuffer, // string where decoded packet is placed
ULONG OutputBufferSizeInCharacters,
UINT DecodeLayer,// 2-LAP only, 3-LAP/LMP, 4-LAP/LMP/TTP
int fNoConnAddr,// TRUE->Don't show conn address in str
int DispMode // DISP_ASCII/HEX/BOTH
);
#define IAS_SEL 0
#define DISP_ASCII 1
#define DISP_HEX 2
#define DISP_BOTH 3
extern UINT BaudBitField;
#define IRLAP_BOF 0xC0
#define IRLAP_EOF 0xC1
#define IRLAP_ESC 0x7D
#define IRLAP_COMP_BIT 0x20
#define IRLAP_BROADCAST 0xfe
#define _IRLAP_CMD 0x01
#define _IRLAP_RSP 0x00
#define IRLAP_I_FRM 0x00
#define IRLAP_S_FRM 0x01
#define IRLAP_U_FRM 0x03
/*
** Unnumbered Frame types with P/F bit set to 0
*/
#define IRLAP_UI 0x03
#define IRLAP_XID_CMD 0x2f
#define IRLAP_TEST 0xe3
#define IRLAP_SNRM 0x83
#define IRLAP_DISC 0x43
#define IRLAP_UA 0x63
#define IRLAP_FRMR 0x87
#define IRLAP_DM 0x0f
#define IRLAP_XID_RSP 0xaf
/*
** Supervisory Frames
*/
#define IRLAP_RR 0x01
#define IRLAP_RNR 0x05
#define IRLAP_REJ 0x09
#define IRLAP_SREJ 0x0d
#define IRLAP_GET_ADDR(addr) (addr >> 1)
#define IRLAP_GET_CRBIT(addr) (addr & 1)
#define IRLAP_GET_PFBIT(cntl) ((cntl >>4) & 1)
#define IRLAP_GET_UCNTL(cntl) (cntl & 0xEF)
#define IRLAP_GET_SCNTL(cntl) (cntl & 0x0F)
#define IRLAP_FRAME_TYPE(cntl) (cntl & 0x01 ? (cntl & 3) : 0)
#define IRLAP_GET_NR(cntl) ((cntl & 0xE0) >> 5)
#define IRLAP_GET_NS(cntl) ((cntl & 0xE) >> 1)
/*
** XID stuff
*/
#define XID_DISCV_FORMAT_ID 0x01
#define XID_NEGPARMS_FORMAT_ID 0x02
typedef struct
{
UCHAR SrcAddr[4];
UCHAR DestAddr[4];
UCHAR NoOfSlots:2;
UCHAR GenNewAddr:1;
UCHAR Reserved:5;
UCHAR SlotNo;
UCHAR Version;
} XID_DISCV_FORMAT;
/*
** SNRM
*/
typedef struct
{
UCHAR SrcAddr[4];
UCHAR DestAddr[4];
UCHAR ConnAddr;
UCHAR FirstPI;
} SNRM_FORMAT;
/*
** UA
*/
typedef struct
{
UCHAR SrcAddr[4];
UCHAR DestAddr[4];
UCHAR FirstPI;
} UA_FORMAT;
/*
** LM-PDU stuff
*/
typedef struct
{
UCHAR DLSAP_SEL:7;
UCHAR CntlBit:1;
UCHAR SLSAP_SEL:7;
UCHAR RsvrdBi1:1;
} LM_HEADER;
/* LM-PDU frame types */
#define LM_PDU_CNTL_FRAME 1
#define LM_PDU_DATA_FRAME 0
typedef struct
{
UCHAR OpCode:7;
UCHAR ABit:1;
} LM_CNTL_FORMAT;
/* Opcodes */
#define LM_PDU_CONNECT 1
#define LM_PDU_DISCONNECT 2
#define LM_PDU_ACCESSMODE 3
#define LM_PDU_REQUEST 0
#define LM_PDU_CONFIRM 1
#define LM_PDU_SUCCESS 0
#define LM_PDU_FAILURE 1
#define LM_PDU_UNSUPPORTED 0xFF
#define LM_PDU_MULTIPLEXED 0
#define LM_PDU_EXCLUSIVE 1
/* Max disconnect reason code, see _LM_PDU_DscReason[] in decdirda.c */
#define LM_PDU_MAX_DSC_REASON 0x8
/*
** Negotiation Parameter Identifiers
*/
#define NEG_PI_BAUD 0x01
#define NEG_PI_MAX_TAT 0x82
#define NEG_PI_DATA_SZ 0x83
#define NEG_PI_WIN_SZ 0x84
#define NEG_PI_BOFS 0x85
#define NEG_PI_MIN_TAT 0x86
#define NEG_PI_DISC_THRESH 0x08
// Tiny TP!
#define TTP_PFLAG_NO_PARMS 0
#define TTP_PFLAG_PARMS 1
#define TTP_MBIT_NOT_FINAL 1
#define TTP_MBIT_FINAL 0
typedef struct
{
UCHAR InitialCredit : 7;
UCHAR ParmFlag : 1;
} TTP_CONN_HEADER;
typedef struct
{
UCHAR AdditionalCredit : 7;
UCHAR MoreBit : 1;
} TTP_DATA_HEADER;
#if (defined(_M_IX86) && (_MSC_FULL_VER > 13009037)) || ((defined(_M_AMD64) || defined(_M_IA64)) && (_MSC_FULL_VER > 13009175))
#define net_short(_x) _byteswap_ushort((USHORT)(_x))
#define net_long(_x) _byteswap_ulong(_x)
#else
#define net_short(x) ((((x)&0xff) << 8) | (((x)&0xff00) >> 8))
#define net_long(x) (((((DWORD UNALIGNED)(x))&0xffL)<<24) | \
((((DWORD UNALIGNED)(x))&0xff00L)<<8) | \
((((DWORD UNALIGNED)(x))&0xff0000L)>>8) | \
((((DWORD UNALIGNED)(x))&0xff000000L)>>24))
#endif
typedef struct
{
UCHAR OpCode : 6;
UCHAR Ack : 1;
UCHAR Last : 1;
} IAS_CNTL_HEADER;
#define LM_GETVALUEBYCLASS 4