summaryrefslogtreecommitdiff
path: root/network/wlan/WDI/COMMON/GeneralFunc.h
blob: cf02a46ca83504131235573010c5d329977519b5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#ifndef __INC_GENERALFUNC_H
#define __INC_GENERALFUNC_H

#define eqMacAddr(a,b)						( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 )
#define cpMacAddr(des,src)					((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3],(des)[4]=(src)[4],(des)[5]=(src)[5])
#define cpIpAddr(des,src)					((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3])

// OUI, 3 bytes
#define eqOUI(a,b)							( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2]) ? 1 : 0 )
#define cpOUI(des, src)						((des)[0]=(src)[0], (des)[1]=(src)[1], (des)[2]=(src)[2])

#define	SET_OUI_WITH_TYPE(_pStart, _OUI, _Type) {cpOUI((UNALIGNED pu1Byte)(_pStart), _OUI); WriteEF1Byte((UNALIGNED pu1Byte)(_pStart) + 3, (u1Byte)_Type);}
#define	GET_OUI_WITH_TYPE(_pStart, _pOUI, _Type) {cpOUI(_pOUI, (UNALIGNED pu1Byte)(_pStart)); (u1Byte)_Type = ReadEF1Byte((UNALIGNED pu1Byte)(_pStart) + 3);}



#define MacAddr_isBcst(addr) \
( \
	( (addr[0] == 0xff) && (addr[1] == 0xff) && \
		(addr[2] == 0xff) && (addr[3] == 0xff) && \
		(addr[4] == 0xff) && (addr[5] == 0xff) )  ? TRUE : FALSE \
)

#define MacAddr_isMulticast(addr) \
( \
	( addr[0] & 0x01 )  ? TRUE : FALSE \
)

//
// Copy String2 to String1 and end by the length or the end of character "\0".
// Only used for ASCII.
//
#define ASCII_STR_COPY(__STR1, __STR2, __Length)	\
{												\
	LONG	__i;								\
	for(__i = 0; __i < __Length; __i ++)		\
	{											\
		__STR1[__i] = __STR2[__i];				\
		if(__STR2[__i] == '\0')					\
		{										\
			break;								\
		}										\
	}											\
}

#define TEST_FLAG(__Flag,__testFlag)		(((__Flag) & (__testFlag)) != 0)
#define	SET_FLAG(__Flag, __setFlag)			((__Flag) |= __setFlag)
#define	CLEAR_FLAG(__Flag, __clearFlag)		((__Flag) &= ~(__clearFlag))
#define	CLEAR_FLAGS(__Flag)					((__Flag) = 0)
#define	TEST_FLAGS(__Flag, __testFlags)		(((__Flag) & (__testFlags)) == (__testFlags))

//
// Description:
//	RT_OBJECT_HEADER: Type + Id + Version + Length
//	Type - The type of the data or id.
//	Id - The number of the object.
//	Version - The version of content. Different versions cause different content or format of data.
//	Length - The total length in byte of Value.
// Format:
//	|   Type    |    	Id	|Version    |    Length    |     Value    
//	| ULONG   |    ULONG	|ULONG    |    ULONG    |    Veriable....
// Remark:
//	It's a general header for data commnuication between layers and applications under variable versions.
//	Each module can check this header to determine if the carring version of data is compatible with itself.
//
#pragma pack(1)
typedef struct _RT_OBJECT_HEADER
{
	u4Byte		Type;
	u4Byte		Id;
	u4Byte		Version;
	u4Byte		Length;
	u1Byte		Value[1];
}RT_OBJECT_HEADER, *PRT_OBJECT_HEADER;
#pragma pack()

#define	RT_OBJECT_HEADER_SIZE	(FIELD_OFFSET(RT_OBJECT_HEADER, Value))

#define RT_ASSIGN_OBJECT_HEADER(_pHeader, _Type, _Id, _Ver, _Len) \
{	\
		((PRT_OBJECT_HEADER)(_pHeader))->Type = (u4Byte)(_Type); \
		((PRT_OBJECT_HEADER)(_pHeader))->Id = (u4Byte)(_Id); \
		((PRT_OBJECT_HEADER)(_pHeader))->Version = (u4Byte)(_Ver); \
		((PRT_OBJECT_HEADER)(_pHeader))->Length = (u4Byte)(_Len);	\
}

#define	RT_OB_HDR_TYPE_UNKNOWN		0
#define	RT_OB_HDR_TYPE_QUERY		1
#define	RT_OB_HDR_TYPE_SET			2
#define	RT_OB_HDR_TYPE_QUERY_SET	3
#define	RT_OB_HDR_TYPE_INDIC		4
#define	RT_OB_HDR_TYPE_DATA			5

BOOLEAN 
eqNByte(
	pu1Byte	str1,
	pu1Byte	str2,
	u4Byte	num
	);

BOOLEAN 
IsHexDigit(
	IN		s1Byte		chTmp
	);

u4Byte
MapCharToHexDigit(
	IN		s1Byte		chTmp
);

BOOLEAN 
GetHexValueFromString(
	IN		ps1Byte			szStr,
	IN OUT	pu4Byte			pu4bVal,
	IN OUT	pu4Byte			pu4bMove
	);

BOOLEAN 
GetFractionValueFromString(
	IN		ps1Byte			szStr,
	IN OUT	pu1Byte			pInteger,
	IN OUT  pu1Byte			pFraction,
	IN OUT	pu4Byte			pu4bMove
	);


BOOLEAN
IsCommentString(
	IN		ps1Byte			szStr
	);

BOOLEAN 
ParseQualifiedString(
    IN      ps1Byte 		In, 
    IN OUT  pu4Byte 		Start, 
    OUT     ps1Byte 		Out,
    OUT     const u4Byte 	MaxOutLen,    
    IN      s1Byte  		LeftQualifier, 
    IN      s1Byte  		RightQualifier
    );

BOOLEAN
GetU1ByteIntegerFromStringInDecimal(
	IN		ps1Byte Str,
	IN OUT	pu1Byte pInt
	);

BOOLEAN
GetS1ByteIntegerFromStringInDecimal(
	IN		ps1Byte Str,
	IN OUT	ps1Byte pInt
	);

BOOLEAN
isAllSpaceOrTab(
	pu1Byte data,
	u1Byte	size
	);

u4Byte
GenTag(
	IN	char	*pFunName
	);
	

#endif // #ifndef __INC_GENERALFUNC_H