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