Committer:
donatien
Date:
Thu Jul 22 11:31:59 2010 +0000
Revision:
2:1f10f8ab527b
Parent:
0:0f5a52711275
Child:
3:e02ec42cf9c8

        

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