ZG2100 Network interface source
drv/zg2100/zg_defs.h@4:e00281c7453d, 2010-08-06 (annotated)
- Committer:
- donatien
- Date:
- Fri Aug 06 10:46:03 2010 +0000
- Revision:
- 4:e00281c7453d
- Parent:
- 3:c4f7efa7d8c3
Who changed what in which revision?
User | Revision | Line number | New 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 |