Committer:
donatien
Date:
Fri Aug 06 10:42:05 2010 +0000
Revision:
3:e02ec42cf9c8
Parent:
2:1f10f8ab527b

        

Who changed what in which revision?

UserRevisionLine numberNew 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