ZG2100 Network interface source

Committer:
donatien
Date:
Fri Aug 06 10:46:03 2010 +0000
Revision:
4:e00281c7453d
Parent:
3:c4f7efa7d8c3

        

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