ZG2100 Network interface source

Committer:
donatien
Date:
Fri Aug 06 10:23:41 2010 +0000
Revision:
1:3a7c15057192
Parent:
0:b802fc31f1db
Child:
2:ac860ad9e490

        

Who changed what in which revision?

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