User | Revision | Line number | New contents of line |
donatien |
0:0f5a52711275
|
1
|
|
donatien |
0:0f5a52711275
|
2
|
/*
|
donatien |
0:0f5a52711275
|
3
|
Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com)
|
donatien |
0:0f5a52711275
|
4
|
|
donatien |
0:0f5a52711275
|
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
donatien |
0:0f5a52711275
|
6
|
of this software and associated documentation files (the "Software"), to deal
|
donatien |
0:0f5a52711275
|
7
|
in the Software without restriction, including without limitation the rights
|
donatien |
0:0f5a52711275
|
8
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
donatien |
0:0f5a52711275
|
9
|
copies of the Software, and to permit persons to whom the Software is
|
donatien |
0:0f5a52711275
|
10
|
furnished to do so, subject to the following conditions:
|
donatien |
0:0f5a52711275
|
11
|
|
donatien |
0:0f5a52711275
|
12
|
The above copyright notice and this permission notice shall be included in
|
donatien |
0:0f5a52711275
|
13
|
all copies or substantial portions of the Software.
|
donatien |
0:0f5a52711275
|
14
|
|
donatien |
0:0f5a52711275
|
15
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
donatien |
0:0f5a52711275
|
16
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
donatien |
0:0f5a52711275
|
17
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
donatien |
0:0f5a52711275
|
18
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
donatien |
0:0f5a52711275
|
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
donatien |
0:0f5a52711275
|
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
donatien |
0:0f5a52711275
|
21
|
THE SOFTWARE.
|
donatien |
0:0f5a52711275
|
22
|
*/
|
donatien |
0:0f5a52711275
|
23
|
|
donatien |
3:e02ec42cf9c8
|
24
|
/**
|
donatien |
3:e02ec42cf9c8
|
25
|
@file
|
donatien |
3:e02ec42cf9c8
|
26
|
ZG2100 Low-level driver definitions
|
donatien |
3:e02ec42cf9c8
|
27
|
*/
|
donatien |
0:0f5a52711275
|
28
|
//Donatien Garnier 2010
|
donatien |
0:0f5a52711275
|
29
|
|
donatien |
0:0f5a52711275
|
30
|
#ifndef ZG_DEFS_H
|
donatien |
0:0f5a52711275
|
31
|
#define ZG_DEFS_H
|
donatien |
0:0f5a52711275
|
32
|
|
donatien |
0:0f5a52711275
|
33
|
/* Parameters */
|
donatien |
0:0f5a52711275
|
34
|
|
donatien |
2:1f10f8ab527b
|
35
|
#define ZG_HEAD_BUF_SIZE 64//16
|
donatien |
2:1f10f8ab527b
|
36
|
#define ZG_FIFO_BUF_SIZE 2048
|
donatien |
2:1f10f8ab527b
|
37
|
|
donatien |
2:1f10f8ab527b
|
38
|
#define ZG_MAX_TX_PENDING 7
|
donatien |
0:0f5a52711275
|
39
|
|
donatien |
0:0f5a52711275
|
40
|
#define ZG_SCAN_PROBE_DELAY 20 //In us
|
donatien |
0:0f5a52711275
|
41
|
#define ZG_SCAN_MIN_CHAN_TIME 400 //In (1024 us)
|
donatien |
0:0f5a52711275
|
42
|
#define ZG_SCAN_MAX_CHAN_TIME 800 //In (1024 us)
|
donatien |
0:0f5a52711275
|
43
|
|
donatien |
0:0f5a52711275
|
44
|
#define ZG_REGION ZG_REGION_EUROPE
|
donatien |
0:0f5a52711275
|
45
|
|
donatien |
0:0f5a52711275
|
46
|
/* Interface-specific constants */
|
donatien |
0:0f5a52711275
|
47
|
|
donatien |
0:0f5a52711275
|
48
|
#define ZG_SSID_LEN 32 //Max SSID length
|
donatien |
0:0f5a52711275
|
49
|
#define ZG_MAX_SUPPORTED_RATES 8 //Max number of supported rates
|
donatien |
0:0f5a52711275
|
50
|
#define ZG_SCAN_MAX_CHANNELS 14
|
donatien |
0:0f5a52711275
|
51
|
#define ZG_MACADDR_LEN 6
|
donatien |
0:0f5a52711275
|
52
|
#define ZG_SNAP_LEN 6
|
donatien |
0:0f5a52711275
|
53
|
|
donatien |
0:0f5a52711275
|
54
|
#define ZG_REGION_EUROPE 2 //Channels 1 - 13
|
donatien |
0:0f5a52711275
|
55
|
#define ZG_REGION_MEA 2 //Channels 1 - 13
|
donatien |
0:0f5a52711275
|
56
|
#define ZG_REGION_AMERICAS 0 //Channels 1 - 11
|
donatien |
0:0f5a52711275
|
57
|
#define ZG_REGION_DEFAULT 1 //Channels 1 - 11
|
donatien |
0:0f5a52711275
|
58
|
#define ZG_REGION_ASIAPAC 2 //Channels 1 - 13
|
donatien |
0:0f5a52711275
|
59
|
#define ZG_REGION_JAPAN_A 5 //Channel 14 only
|
donatien |
0:0f5a52711275
|
60
|
|
donatien |
0:0f5a52711275
|
61
|
#define ZG_WEP_KEYS_COUNT 4
|
donatien |
0:0f5a52711275
|
62
|
#define ZG_WEP_KEY_LEN 13
|
donatien |
0:0f5a52711275
|
63
|
#define ZG_WPA_PASS_LEN 64
|
donatien |
0:0f5a52711275
|
64
|
#define ZG_PMK_LEN 32
|
donatien |
0:0f5a52711275
|
65
|
|
donatien |
0:0f5a52711275
|
66
|
/* Commands */
|
donatien |
0:0f5a52711275
|
67
|
|
donatien |
0:0f5a52711275
|
68
|
#define ZG_CMD_REG 0x00
|
donatien |
0:0f5a52711275
|
69
|
#define ZG_CMD_REG_RD (ZG_CMD_REG | 0x40)
|
donatien |
0:0f5a52711275
|
70
|
#define ZG_CMD_REG_WR (ZG_CMD_REG | 0x00)
|
donatien |
0:0f5a52711275
|
71
|
|
donatien |
0:0f5a52711275
|
72
|
#define ZG_CMD_FIFO 0x80
|
donatien |
0:0f5a52711275
|
73
|
|
donatien |
0:0f5a52711275
|
74
|
#define ZG_CMD_FIFO_RD_DATA (ZG_CMD_FIFO | 0x00)
|
donatien |
0:0f5a52711275
|
75
|
#define ZG_CMD_FIFO_RD_MGMT (ZG_CMD_FIFO | 0x00)
|
donatien |
0:0f5a52711275
|
76
|
#define ZG_CMD_FIFO_RD_DONE (ZG_CMD_FIFO | 0x50)
|
donatien |
0:0f5a52711275
|
77
|
|
donatien |
0:0f5a52711275
|
78
|
#define ZG_CMD_FIFO_WR_DATA (ZG_CMD_FIFO | 0x20)
|
donatien |
0:0f5a52711275
|
79
|
#define ZG_CMD_FIFO_WR_MGMT (ZG_CMD_FIFO | 0x30)
|
donatien |
0:0f5a52711275
|
80
|
#define ZG_CMD_FIFO_WR_DONE (ZG_CMD_FIFO | 0x40)
|
donatien |
0:0f5a52711275
|
81
|
|
donatien |
0:0f5a52711275
|
82
|
/* Registers */
|
donatien |
0:0f5a52711275
|
83
|
|
donatien |
0:0f5a52711275
|
84
|
#define ZG_REG_INTF 0x01 //8-bit register, interrupt raised flags
|
donatien |
0:0f5a52711275
|
85
|
#define ZG_REG_INTE 0x02 //8-bit register, interrupt enable flags
|
donatien |
0:0f5a52711275
|
86
|
|
donatien |
0:0f5a52711275
|
87
|
#define ZG_REG_INTF2 0x2d //16-bit register, 2nd level interrupt raised flags
|
donatien |
0:0f5a52711275
|
88
|
#define ZG_REG_INTE2 0x2e //16-bit register, 2nd level interrupt enable flags
|
donatien |
0:0f5a52711275
|
89
|
|
donatien |
0:0f5a52711275
|
90
|
#define ZG_REG_SYSINFO 0x21 //8-bit register, read sys info data window
|
donatien |
0:0f5a52711275
|
91
|
#define ZG_REG_SYSINFO_INDEX 0x2b //16-bit register, sys info data window offset
|
donatien |
0:0f5a52711275
|
92
|
#define ZG_REG_SYSINFO_STATUS 0x2c //16-bit register, sys info data window status
|
donatien |
0:0f5a52711275
|
93
|
|
donatien |
0:0f5a52711275
|
94
|
#define ZG_REG_F0_CTRL0 0x25 //16-bit register, FIFO0 Ctrl reg
|
donatien |
0:0f5a52711275
|
95
|
#define ZG_REG_F0_CTRL1 0x26 //16-bit register, FIFO0 Ctrl reg
|
donatien |
0:0f5a52711275
|
96
|
#define ZG_REG_F0_INDEX 0x27 //16-bit register, FIFO0 Index reg
|
donatien |
0:0f5a52711275
|
97
|
#define ZG_REG_F0_STATUS 0x28 //16-bit register, FIFO0 Status reg
|
donatien |
0:0f5a52711275
|
98
|
|
donatien |
0:0f5a52711275
|
99
|
#define ZG_REG_F1_CTRL0 0x29 //16-bit register, FIFO1 Ctrl reg
|
donatien |
0:0f5a52711275
|
100
|
#define ZG_REG_F1_CTRL1 0x2a //16-bit register, FIFO1 Ctrl reg
|
donatien |
0:0f5a52711275
|
101
|
#define ZG_REG_F1_INDEX 0x2b //16-bit register, FIFO1 Index reg
|
donatien |
0:0f5a52711275
|
102
|
#define ZG_REG_F1_STATUS 0x2c //16-bit register, FIFO1 Status reg
|
donatien |
0:0f5a52711275
|
103
|
|
donatien |
0:0f5a52711275
|
104
|
#define ZG_REG_F0_ROOM 0x2f //16-bit register, room in FIFO0 for writing
|
donatien |
0:0f5a52711275
|
105
|
|
donatien |
0:0f5a52711275
|
106
|
#define ZG_REG_F0_LEN 0x33 //16-bit register, bytes ready to read on FIFO0
|
donatien |
0:0f5a52711275
|
107
|
#define ZG_REG_F1_LEN 0x35 //16-bit register, bytes ready to read on FIFO1
|
donatien |
0:0f5a52711275
|
108
|
|
donatien |
0:0f5a52711275
|
109
|
#define ZG_REG_LOWPWR 0x3d //16-bit register, low power mode cfg
|
donatien |
0:0f5a52711275
|
110
|
#define ZG_REG_IREG_ADDR 0x3e //16-bit register, set/read the ptr to indexed regs
|
donatien |
0:0f5a52711275
|
111
|
#define ZG_REG_IREG_DATA 0x3f //16-bit register, index regs data
|
donatien |
0:0f5a52711275
|
112
|
|
donatien |
0:0f5a52711275
|
113
|
#define ZG_REG_LEN( reg ) ((reg)>=0x25?2:1) //Return bytes len of a register
|
donatien |
0:0f5a52711275
|
114
|
|
donatien |
0:0f5a52711275
|
115
|
/* Indexed Registers */
|
donatien |
0:0f5a52711275
|
116
|
|
donatien |
0:0f5a52711275
|
117
|
#define ZG_IREG_HW_STATUS 0x2a //16-bit register, hardware status
|
donatien |
0:0f5a52711275
|
118
|
#define ZG_IREG_HW_RST 0x2b //16-bit register, reset reg
|
donatien |
0:0f5a52711275
|
119
|
|
donatien |
0:0f5a52711275
|
120
|
#define ZG_HW_STATUS_RESET 0x1000 //ZG_IREG_HW_STATUS Mask to determine wether the chip is in reset
|
donatien |
0:0f5a52711275
|
121
|
|
donatien |
0:0f5a52711275
|
122
|
#define ZG_IREG_PWR_STATUS 0x3e //16-bit register, power status (sleep state)
|
donatien |
0:0f5a52711275
|
123
|
|
donatien |
0:0f5a52711275
|
124
|
#define ZG_IREG_LEN( reg ) 2 //Bytes len of an indexed register
|
donatien |
0:0f5a52711275
|
125
|
|
donatien |
0:0f5a52711275
|
126
|
/* FIFOs */
|
donatien |
0:0f5a52711275
|
127
|
|
donatien |
0:0f5a52711275
|
128
|
/*
|
donatien |
0:0f5a52711275
|
129
|
When using FIFO requests, frame is formatted like this:
|
donatien |
0:0f5a52711275
|
130
|
[ZG_CMD_FIFO_WR_****][Type][Subtype]
|
donatien |
0:0f5a52711275
|
131
|
*/
|
donatien |
0:0f5a52711275
|
132
|
|
donatien |
0:0f5a52711275
|
133
|
//Just here for zg_fifo_* cmds
|
donatien |
0:0f5a52711275
|
134
|
#define ZG_FIFO_DATA 0
|
donatien |
0:0f5a52711275
|
135
|
#define ZG_FIFO_MGMT 1
|
donatien |
0:0f5a52711275
|
136
|
#define ZG_FIFO_ANY 0 //A specific FIFO does not have to be specified for reads
|
donatien |
0:0f5a52711275
|
137
|
|
donatien |
0:0f5a52711275
|
138
|
/* Types */
|
donatien |
0:0f5a52711275
|
139
|
|
donatien |
0:0f5a52711275
|
140
|
#define ZG_FIFO_WR_TXD_REQ 1 //Req to write TX Data
|
donatien |
0:0f5a52711275
|
141
|
|
donatien |
0:0f5a52711275
|
142
|
#define ZG_FIFO_RD_TXD_ACK 1 //TX Data ack'ed
|
donatien |
0:0f5a52711275
|
143
|
|
donatien |
0:0f5a52711275
|
144
|
#define ZG_FIFO_RD_RXD_AVL 3 //RX Data available
|
donatien |
0:0f5a52711275
|
145
|
|
donatien |
0:0f5a52711275
|
146
|
#define ZG_FIFO_WR_MGMT_REQ 2 //Req to read/write mgmt Data
|
donatien |
0:0f5a52711275
|
147
|
|
donatien |
0:0f5a52711275
|
148
|
#define ZG_FIFO_RD_MGMT_AVL 2 //Mgmt Data available/written ok
|
donatien |
0:0f5a52711275
|
149
|
#define ZG_FIFO_RD_MGMT_EVT 4 //Mgmt Data event
|
donatien |
0:0f5a52711275
|
150
|
|
donatien |
0:0f5a52711275
|
151
|
/* Subtypes */
|
donatien |
0:0f5a52711275
|
152
|
|
donatien |
0:0f5a52711275
|
153
|
//TXD, RXD
|
donatien |
0:0f5a52711275
|
154
|
#define ZG_FIFO_TXD_STD 1
|
donatien |
0:0f5a52711275
|
155
|
#define ZG_FIFO_RXD_STD 1
|
donatien |
0:0f5a52711275
|
156
|
|
donatien |
0:0f5a52711275
|
157
|
//Management
|
donatien |
0:0f5a52711275
|
158
|
|
donatien |
0:0f5a52711275
|
159
|
//Events
|
donatien |
0:0f5a52711275
|
160
|
#define ZG_FIFO_MGMT_DISASSOC 1 //Disassociated
|
donatien |
0:0f5a52711275
|
161
|
#define ZG_FIFO_MGMT_DEAUTH 2 //Deauthenticated
|
donatien |
0:0f5a52711275
|
162
|
#define ZG_FIFO_MGMT_CONN 4 //Connection state
|
donatien |
0:0f5a52711275
|
163
|
|
donatien |
0:0f5a52711275
|
164
|
//Commands
|
donatien |
0:0f5a52711275
|
165
|
#define ZG_FIFO_MGMT_SCAN 1 //Network scan
|
donatien |
0:0f5a52711275
|
166
|
|
donatien |
0:0f5a52711275
|
167
|
#define ZG_FIFO_MGMT_PSK_CALC 12 //Compute Pre-Shared Key
|
donatien |
0:0f5a52711275
|
168
|
|
donatien |
0:0f5a52711275
|
169
|
#define ZG_FIFO_MGMT_PMK_KEY 8 //Set Pairwise Master Key
|
donatien |
0:0f5a52711275
|
170
|
#define ZG_FIFO_MGMT_WEP_KEY 10 //Set WEP key
|
donatien |
0:0f5a52711275
|
171
|
|
donatien |
0:0f5a52711275
|
172
|
#define ZG_FIFO_MGMT_PARM_SET 15 //Set param
|
donatien |
0:0f5a52711275
|
173
|
#define ZG_FIFO_MGMT_PARM_GET 16 //Get param
|
donatien |
0:0f5a52711275
|
174
|
|
donatien |
0:0f5a52711275
|
175
|
#define ZG_FIFO_MGMT_ADHOC 18 //Start an adhoc connection
|
donatien |
0:0f5a52711275
|
176
|
#define ZG_FIFO_MGMT_CONNECT 19
|
donatien |
0:0f5a52711275
|
177
|
#define ZG_FIFO_MGMT_DISC 5
|
donatien |
0:0f5a52711275
|
178
|
|
donatien |
0:0f5a52711275
|
179
|
#define ZG_FIFO_MGMT_CONN_MGMT 20 //Manage connection
|
donatien |
0:0f5a52711275
|
180
|
|
donatien |
0:0f5a52711275
|
181
|
/* Params IDs for Get/Set Params */
|
donatien |
0:0f5a52711275
|
182
|
|
donatien |
0:0f5a52711275
|
183
|
#define ZG_FIFO_MGMT_PARM_MACAD 1 //MAC Addr (6 bytes long)
|
donatien |
0:0f5a52711275
|
184
|
#define ZG_FIFO_MGMT_PARM_REGION 2 //Region (1 byte long)
|
donatien |
0:0f5a52711275
|
185
|
#define ZG_FIFO_MGMT_PARM_SYSV 26 //System version (2 bytes long)
|
donatien |
0:0f5a52711275
|
186
|
|
donatien |
0:0f5a52711275
|
187
|
/* Masks used by ZG_REG_INT* */
|
donatien |
0:0f5a52711275
|
188
|
|
donatien |
0:0f5a52711275
|
189
|
#define ZG_INT_MASK_F0 0x40
|
donatien |
0:0f5a52711275
|
190
|
#define ZG_INT_MASK_F1 0x80
|
donatien |
0:0f5a52711275
|
191
|
|
donatien |
3:e02ec42cf9c8
|
192
|
/* Internal Error Codes */
|
donatien |
3:e02ec42cf9c8
|
193
|
|
donatien |
3:e02ec42cf9c8
|
194
|
typedef enum __ZG_INT_ERR
|
donatien |
3:e02ec42cf9c8
|
195
|
{
|
donatien |
3:e02ec42cf9c8
|
196
|
ZG_INT_OK = 1,
|
donatien |
3:e02ec42cf9c8
|
197
|
ZG_INT_RESOURCES = 12, //Not enough resources
|
donatien |
3:e02ec42cf9c8
|
198
|
ZG_INT_TIMEOUT,
|
donatien |
3:e02ec42cf9c8
|
199
|
ZG_INT_FRAME_ERROR,
|
donatien |
3:e02ec42cf9c8
|
200
|
ZG_INT_AUTH_REFUSED,
|
donatien |
3:e02ec42cf9c8
|
201
|
ZG_INT_ASSOC_REFUSED,
|
donatien |
3:e02ec42cf9c8
|
202
|
ZG_INT_IN_PROGRESS,
|
donatien |
3:e02ec42cf9c8
|
203
|
ZG_INT_SUPPLICANT_FAILED = 21
|
donatien |
3:e02ec42cf9c8
|
204
|
|
donatien |
3:e02ec42cf9c8
|
205
|
} ZG_INT_ERR;
|
donatien |
3:e02ec42cf9c8
|
206
|
|
donatien |
0:0f5a52711275
|
207
|
/* F0 / F1 helpers */
|
donatien |
0:0f5a52711275
|
208
|
#define ZG_REG_F_CTRL0(n) ((n==0)?ZG_REG_F0_CTRL0:ZG_REG_F1_CTRL0)
|
donatien |
0:0f5a52711275
|
209
|
#define ZG_REG_F_CTRL1(n) ((n==0)?ZG_REG_F0_CTRL1:ZG_REG_F1_CTRL1)
|
donatien |
0:0f5a52711275
|
210
|
#define ZG_REG_F_INDEX(n) ((n==0)?ZG_REG_F0_INDEX:ZG_REG_F1_INDEX)
|
donatien |
0:0f5a52711275
|
211
|
#define ZG_REG_F_STATUS(n) ((n==0)?ZG_REG_F0_STATUS:ZG_REG_F1_STATUS)
|
donatien |
0:0f5a52711275
|
212
|
|
donatien |
0:0f5a52711275
|
213
|
#define ZG_REG_F_LEN(n) ((n==0)?ZG_REG_F0_LEN:ZG_REG_F1_LEN)
|
donatien |
0:0f5a52711275
|
214
|
|
donatien |
0:0f5a52711275
|
215
|
#define ZG_INT_MASK_F(n) ((n==0)?ZG_INT_MASK_F0:ZG_INT_MASK_F1)
|
donatien |
0:0f5a52711275
|
216
|
|
donatien |
0:0f5a52711275
|
217
|
/* Macro helpers (LE Platform, SPI is BE) */
|
donatien |
0:0f5a52711275
|
218
|
|
donatien |
2:1f10f8ab527b
|
219
|
#define HTODS( x ) ( (((x)<<8) | ((x)>>8)) & 0xFFFF ) //Host to device, short
|
donatien |
0:0f5a52711275
|
220
|
#define DTOHS( x ) ( HTODS(x) ) //Device to host, short
|
donatien |
0:0f5a52711275
|
221
|
|
donatien |
2:1f10f8ab527b
|
222
|
#define HTODL( x ) ( ( ((x) & 0x000000FF) << 24 ) \
|
donatien |
2:1f10f8ab527b
|
223
|
| ( ((x) & 0x0000FF00) << 8 ) \
|
donatien |
2:1f10f8ab527b
|
224
|
| ( ((x) & 0x00FF0000) >> 8 ) \
|
donatien |
2:1f10f8ab527b
|
225
|
| ( ((x) & 0xFF000000) >> 24 ) ) //Host to device, long
|
donatien |
0:0f5a52711275
|
226
|
#define DTOHL( x ) ( HTODL(x) )
|
donatien |
0:0f5a52711275
|
227
|
|
donatien |
0:0f5a52711275
|
228
|
/* Platform Specific defs */
|
donatien |
0:0f5a52711275
|
229
|
|
donatien |
2:1f10f8ab527b
|
230
|
#define ZG_MEM __attribute((section("AHBSRAM1")))
|
donatien |
0:0f5a52711275
|
231
|
|
donatien |
0:0f5a52711275
|
232
|
/* Typedefs */
|
donatien |
0:0f5a52711275
|
233
|
|
donatien |
0:0f5a52711275
|
234
|
typedef unsigned char byte;
|
donatien |
0:0f5a52711275
|
235
|
typedef unsigned short word;
|
donatien |
0:0f5a52711275
|
236
|
typedef unsigned int dword;
|
donatien |
0:0f5a52711275
|
237
|
|
donatien |
0:0f5a52711275
|
238
|
typedef signed char int8_t;
|
donatien |
0:0f5a52711275
|
239
|
typedef unsigned char uint8_t;
|
donatien |
0:0f5a52711275
|
240
|
|
donatien |
0:0f5a52711275
|
241
|
typedef signed short int16_t;
|
donatien |
0:0f5a52711275
|
242
|
typedef unsigned short uint16_t;
|
donatien |
0:0f5a52711275
|
243
|
|
donatien |
0:0f5a52711275
|
244
|
typedef signed int int32_t;
|
donatien |
0:0f5a52711275
|
245
|
typedef unsigned int uint32_t;
|
donatien |
0:0f5a52711275
|
246
|
|
donatien |
0:0f5a52711275
|
247
|
/* Data structures */
|
donatien |
0:0f5a52711275
|
248
|
|
donatien |
0:0f5a52711275
|
249
|
typedef __packed struct __ZG_SYSV
|
donatien |
0:0f5a52711275
|
250
|
{
|
donatien |
0:0f5a52711275
|
251
|
byte rom;
|
donatien |
0:0f5a52711275
|
252
|
byte revision;
|
donatien |
0:0f5a52711275
|
253
|
} ZG_SYSV;
|
donatien |
0:0f5a52711275
|
254
|
|
donatien |
3:e02ec42cf9c8
|
255
|
///BSS types
|
donatien |
0:0f5a52711275
|
256
|
typedef enum __ZG_BSS_TYPE
|
donatien |
0:0f5a52711275
|
257
|
{
|
donatien |
3:e02ec42cf9c8
|
258
|
ZG_BSS_INFRA = 1, ///< Infrastructure
|
donatien |
3:e02ec42cf9c8
|
259
|
ZG_BSS_ADHOC = 2, ///< Ad-Hoc
|
donatien |
3:e02ec42cf9c8
|
260
|
ZG_BSS_ANY = 3 ///< Either
|
donatien |
0:0f5a52711275
|
261
|
} ZG_BSS_TYPE;
|
donatien |
0:0f5a52711275
|
262
|
|
donatien |
0:0f5a52711275
|
263
|
typedef enum __ZG_PROBE_TYPE
|
donatien |
0:0f5a52711275
|
264
|
{
|
donatien |
0:0f5a52711275
|
265
|
ZG_PROBE_ACTIVE = 1,
|
donatien |
0:0f5a52711275
|
266
|
ZG_PROBE_PASSIVE = 2
|
donatien |
0:0f5a52711275
|
267
|
} ZG_PROBE_TYPE;
|
donatien |
0:0f5a52711275
|
268
|
|
donatien |
0:0f5a52711275
|
269
|
//Scan request
|
donatien |
0:0f5a52711275
|
270
|
typedef __packed struct __ZG_SCAN_REQ
|
donatien |
0:0f5a52711275
|
271
|
{
|
donatien |
0:0f5a52711275
|
272
|
word probe_delay; //In us
|
donatien |
0:0f5a52711275
|
273
|
word min_chan_time; //Min scan time on each channel in (1024 us)
|
donatien |
0:0f5a52711275
|
274
|
word max_chan_time; //Max scan time on each channel in (1024 us)
|
donatien |
0:0f5a52711275
|
275
|
byte bssid_mask[ZG_MACADDR_LEN];
|
donatien |
0:0f5a52711275
|
276
|
ZG_BSS_TYPE bss_type; //Infra, adhoc or both
|
donatien |
0:0f5a52711275
|
277
|
ZG_PROBE_TYPE probe_req; //Send probe request frames
|
donatien |
0:0f5a52711275
|
278
|
byte ssid_len;
|
donatien |
0:0f5a52711275
|
279
|
byte channels_count; //Number
|
donatien |
0:0f5a52711275
|
280
|
char ssid[ZG_SSID_LEN]; //Scan for a specific network, 0 otherwise
|
donatien |
0:0f5a52711275
|
281
|
byte channels[ZG_SCAN_MAX_CHANNELS]; //Channels to scan
|
donatien |
0:0f5a52711275
|
282
|
} ZG_SCAN_REQ;
|
donatien |
0:0f5a52711275
|
283
|
|
donatien |
0:0f5a52711275
|
284
|
//Scan results header
|
donatien |
0:0f5a52711275
|
285
|
typedef __packed struct __ZG_SCAN_RES
|
donatien |
0:0f5a52711275
|
286
|
{
|
donatien |
0:0f5a52711275
|
287
|
byte result;
|
donatien |
0:0f5a52711275
|
288
|
byte state;
|
donatien |
0:0f5a52711275
|
289
|
byte last_channel; //Last channel scanned
|
donatien |
0:0f5a52711275
|
290
|
byte results_count; //Number of ZG_SCAN_ITEM following this header
|
donatien |
0:0f5a52711275
|
291
|
} ZG_SCAN_RES;
|
donatien |
0:0f5a52711275
|
292
|
|
donatien |
0:0f5a52711275
|
293
|
//Scan result
|
donatien |
0:0f5a52711275
|
294
|
//See:
|
donatien |
0:0f5a52711275
|
295
|
// - http://en.wikipedia.org/wiki/Beacon_frame
|
donatien |
0:0f5a52711275
|
296
|
// - IEEE 802.11-2007 7.2.3.1 Beacon frame format (p. 80 ~ 81)
|
donatien |
0:0f5a52711275
|
297
|
// - IEEE 802.11-2007 7.3 Management frame body components (p. 87 ~ 139)
|
donatien |
0:0f5a52711275
|
298
|
typedef __packed struct __ZG_SCAN_ITEM
|
donatien |
0:0f5a52711275
|
299
|
{
|
donatien |
0:0f5a52711275
|
300
|
byte bssid[ZG_MACADDR_LEN]; //This is actually a MAC address
|
donatien |
0:0f5a52711275
|
301
|
char ssid[ZG_SSID_LEN]; //SSID of the network
|
donatien |
0:0f5a52711275
|
302
|
word capability;
|
donatien |
0:0f5a52711275
|
303
|
word beacon_period;
|
donatien |
0:0f5a52711275
|
304
|
word atim_wdw; //http://en.wikipedia.org/wiki/Announcement_Traffic_Indication_Message
|
donatien |
0:0f5a52711275
|
305
|
byte supported_rates[ZG_MAX_SUPPORTED_RATES];//(0x80 | enc_rate) where enc_rate = (rate / 500Kbps)
|
donatien |
0:0f5a52711275
|
306
|
byte rssi;
|
donatien |
0:0f5a52711275
|
307
|
byte supported_rates_count;
|
donatien |
0:0f5a52711275
|
308
|
byte dtim_period; //http://en.wikipedia.org/wiki/Delivery_Traffic_Indication_Message
|
donatien |
0:0f5a52711275
|
309
|
ZG_BSS_TYPE bss_type; //Infra or adhoc
|
donatien |
0:0f5a52711275
|
310
|
byte channel;
|
donatien |
0:0f5a52711275
|
311
|
byte ssid_len;
|
donatien |
0:0f5a52711275
|
312
|
} ZG_SCAN_ITEM;
|
donatien |
0:0f5a52711275
|
313
|
|
donatien |
0:0f5a52711275
|
314
|
//WEP Key setup
|
donatien |
0:0f5a52711275
|
315
|
typedef __packed struct __ZG_WEP_REQ
|
donatien |
0:0f5a52711275
|
316
|
{
|
donatien |
0:0f5a52711275
|
317
|
byte slot;
|
donatien |
0:0f5a52711275
|
318
|
byte key_size;
|
donatien |
0:0f5a52711275
|
319
|
byte default_key;
|
donatien |
0:0f5a52711275
|
320
|
byte ssid_len;
|
donatien |
0:0f5a52711275
|
321
|
char ssid[ZG_SSID_LEN]; //SSID of the network
|
donatien |
0:0f5a52711275
|
322
|
byte keys[ZG_WEP_KEYS_COUNT][ZG_WEP_KEY_LEN];
|
donatien |
0:0f5a52711275
|
323
|
} ZG_WEP_REQ;
|
donatien |
0:0f5a52711275
|
324
|
|
donatien |
0:0f5a52711275
|
325
|
//PSK Key computation
|
donatien |
0:0f5a52711275
|
326
|
typedef __packed struct __ZG_PSK_CALC_REQ
|
donatien |
0:0f5a52711275
|
327
|
{
|
donatien |
0:0f5a52711275
|
328
|
byte config;
|
donatien |
0:0f5a52711275
|
329
|
byte phrase_len;
|
donatien |
0:0f5a52711275
|
330
|
byte ssid_len;
|
donatien |
0:0f5a52711275
|
331
|
byte _pad; //Padding
|
donatien |
0:0f5a52711275
|
332
|
char ssid[ZG_SSID_LEN]; //SSID of the network
|
donatien |
0:0f5a52711275
|
333
|
char pass_phrase[ZG_WPA_PASS_LEN];
|
donatien |
0:0f5a52711275
|
334
|
} ZG_PSK_CALC_REQ;
|
donatien |
0:0f5a52711275
|
335
|
|
donatien |
0:0f5a52711275
|
336
|
typedef __packed struct __ZG_PSK_CALC_RES
|
donatien |
0:0f5a52711275
|
337
|
{
|
donatien |
0:0f5a52711275
|
338
|
byte result;
|
donatien |
0:0f5a52711275
|
339
|
byte state;
|
donatien |
0:0f5a52711275
|
340
|
byte key_returned;
|
donatien |
0:0f5a52711275
|
341
|
byte _pad; //Padding
|
donatien |
0:0f5a52711275
|
342
|
byte key[ZG_PMK_LEN]; //PSK key returned
|
donatien |
0:0f5a52711275
|
343
|
} ZG_PSK_CALC_RES;
|
donatien |
0:0f5a52711275
|
344
|
|
donatien |
0:0f5a52711275
|
345
|
typedef __packed struct __ZG_PMK_REQ
|
donatien |
0:0f5a52711275
|
346
|
{
|
donatien |
0:0f5a52711275
|
347
|
byte slot;
|
donatien |
0:0f5a52711275
|
348
|
byte ssid_len;
|
donatien |
0:0f5a52711275
|
349
|
char ssid[ZG_SSID_LEN]; //SSID of the network
|
donatien |
0:0f5a52711275
|
350
|
byte key[ZG_PMK_LEN]; //PSK key returned
|
donatien |
0:0f5a52711275
|
351
|
} ZG_PMK_REQ;
|
donatien |
0:0f5a52711275
|
352
|
|
donatien |
3:e02ec42cf9c8
|
353
|
///Security type
|
donatien |
0:0f5a52711275
|
354
|
typedef enum __ZG_SECURITY
|
donatien |
0:0f5a52711275
|
355
|
{
|
donatien |
3:e02ec42cf9c8
|
356
|
ZG_SECURITY_NONE = 0x00, ///< None
|
donatien |
3:e02ec42cf9c8
|
357
|
ZG_SECURITY_WEP = 0x01, ///< WEP
|
donatien |
3:e02ec42cf9c8
|
358
|
ZG_SECURITY_WPA = 0x02, ///< WPA
|
donatien |
3:e02ec42cf9c8
|
359
|
ZG_SECURITY_WPA2 = 0x03, ///< WPA2
|
donatien |
3:e02ec42cf9c8
|
360
|
ZG_SECURITY_TRY = 0xFF ///< Try all (not recommanded)
|
donatien |
0:0f5a52711275
|
361
|
} ZG_SECURITY;
|
donatien |
0:0f5a52711275
|
362
|
|
donatien |
0:0f5a52711275
|
363
|
typedef __packed struct __ZG_CONNECT_REQ
|
donatien |
0:0f5a52711275
|
364
|
{
|
donatien |
0:0f5a52711275
|
365
|
ZG_SECURITY security;
|
donatien |
0:0f5a52711275
|
366
|
byte ssid_len;
|
donatien |
0:0f5a52711275
|
367
|
char ssid[ZG_SSID_LEN]; //SSID of the network
|
donatien |
0:0f5a52711275
|
368
|
word sleep_duration; //Power save sleep duration (/100 ms)
|
donatien |
0:0f5a52711275
|
369
|
ZG_BSS_TYPE bss_type;
|
donatien |
0:0f5a52711275
|
370
|
byte _pad; //Padding
|
donatien |
0:0f5a52711275
|
371
|
} ZG_CONNECT_REQ;
|
donatien |
0:0f5a52711275
|
372
|
|
donatien |
0:0f5a52711275
|
373
|
typedef __packed struct __ZG_DISCONNECT_REQ
|
donatien |
0:0f5a52711275
|
374
|
{
|
donatien |
0:0f5a52711275
|
375
|
word reason_code;
|
donatien |
0:0f5a52711275
|
376
|
bool disconnect;
|
donatien |
0:0f5a52711275
|
377
|
bool deauth_frame;
|
donatien |
0:0f5a52711275
|
378
|
} ZG_DISCONNECT_REQ;
|
donatien |
0:0f5a52711275
|
379
|
|
donatien |
0:0f5a52711275
|
380
|
//Ethernet / ZG Packet headers
|
donatien |
0:0f5a52711275
|
381
|
typedef __packed struct __ZG_ETH_HDR //Ethernet packet header
|
donatien |
0:0f5a52711275
|
382
|
{
|
donatien |
0:0f5a52711275
|
383
|
byte dest[ZG_MACADDR_LEN];
|
donatien |
0:0f5a52711275
|
384
|
byte src[ZG_MACADDR_LEN];
|
donatien |
0:0f5a52711275
|
385
|
word type;
|
donatien |
0:0f5a52711275
|
386
|
} ZG_ETH_HDR;
|
donatien |
0:0f5a52711275
|
387
|
|
donatien |
0:0f5a52711275
|
388
|
typedef __packed struct __ZG_RX_HDR //ZG packet header on rx
|
donatien |
0:0f5a52711275
|
389
|
{
|
donatien |
0:0f5a52711275
|
390
|
word rssi;
|
donatien |
0:0f5a52711275
|
391
|
byte dest[ZG_MACADDR_LEN];
|
donatien |
0:0f5a52711275
|
392
|
byte src[ZG_MACADDR_LEN];
|
donatien |
0:0f5a52711275
|
393
|
dword arrival_time;
|
donatien |
0:0f5a52711275
|
394
|
word data_len;
|
donatien |
0:0f5a52711275
|
395
|
byte snap[ZG_SNAP_LEN]; //SNAP word, see zg_net
|
donatien |
0:0f5a52711275
|
396
|
word type; //Ethernet type
|
donatien |
0:0f5a52711275
|
397
|
} ZG_RX_HDR;
|
donatien |
0:0f5a52711275
|
398
|
|
donatien |
0:0f5a52711275
|
399
|
typedef __packed struct __ZG_TX_HDR //ZG packet header on tx
|
donatien |
0:0f5a52711275
|
400
|
{
|
donatien |
0:0f5a52711275
|
401
|
word zero; //Must be set to zero
|
donatien |
0:0f5a52711275
|
402
|
byte dest[ZG_MACADDR_LEN];
|
donatien |
0:0f5a52711275
|
403
|
byte snap[ZG_SNAP_LEN]; //SNAP word, see zg_net
|
donatien |
0:0f5a52711275
|
404
|
word type; //Ethernet type
|
donatien |
0:0f5a52711275
|
405
|
} ZG_TX_HDR;
|
donatien |
0:0f5a52711275
|
406
|
|
donatien |
0:0f5a52711275
|
407
|
#endif
|
donatien |
0:0f5a52711275
|
408
|
|