00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 #ifndef WLP_PROTO_H
00048 #define WLP_PROTO_H
00049
00050 #include <stdint.h>
00051
00052
00053 #define WLP_TYPE_MGMT_REQ 0
00054 #define WLP_TYPE_MGMT_CFM 1
00055 #define WLP_TYPE_DATA_REQ 2
00056 #define WLP_TYPE_DATA_CFM 3
00057 #define WLP_TYPE_DATA_IND 4
00058
00059
00060 #define WLP_UART_CONFIG 0
00061 #define WLP_POLL 1
00062 #define WLP_FW_VERSION 2
00063 #define WLP_FW_UPGRADE 28
00064 #define WLP_SET_MODE 22
00065 #define WLP_SET_CHANNEL 23
00066 #define WLP_RESET 24
00067 #define WLP_GET_MODE 26
00068 #define WLP_SET_PS_CONF 29
00069 #define WLP_SET_PS_ENABLE 30
00070 #define WLP_SET_CONFIG 31
00071 #define WLP_SET_LED 32
00072 #define WLP_SET_HEARTBEAT 33
00073 #define WLP_SET_POLL_PERIOD 34
00074 #define WLP_GET_CONFIG 35
00075
00076 #define WLP_LINK_UP 3
00077 #define WLP_LINK_DOWN 4
00078 #define WLP_LINK_STATUS 5
00079 #define WLP_LINK_INFO 6
00080
00081 #define WLP_NET_STATUS 7
00082 #define WLP_NET_CONFIG 8
00083 #define WLP_NET_INFO 9
00084 #define WLP_NET_DNSLOOKUP 10
00085 #define WLP_NET_DHCPD 25
00086
00087 #define WLP_SOCK_OPEN 11
00088 #define WLP_SOCK_BIND 12
00089 #define WLP_SOCK_LISTEN 13
00090 #define WLP_SOCK_CONNECT 14
00091
00092 #define WLP_SOCK_CLOSE 15
00093 #define WLP_SOCK_RECV 16
00094 #define WLP_SOCK_SEND 17
00095 #define WLP_SOCK_SENDTO 18
00096 #define WLP_SOCK_STATUS 19
00097 #define WLP_SOCK_ACCEPT 20
00098 #define WLP_SOCK_INFO 21
00099 #define WLP_SOCK_DATA 27
00100
00102 enum wlp_auth_mode {
00103 WLP_AUTH_AUTO = 0,
00104 WLP_AUTH_WEP,
00105 WLP_AUTH_WPA_PSK,
00106 WLP_AUTH_WPA2_PSK
00107 };
00108
00109
00110 enum wlp_fw_upgrade_method {
00111 WLP_UPGRADE_METHOD_HTTP_POST
00112 };
00113
00114 #ifndef WL_API_H
00115 #define WL_MAX_PASS_LEN 64
00116 #define WL_SSID_MAX_LENGTH 32
00117 #define WL_MAC_ADDR_LENGTH 6
00118 struct wl_ssid_t {
00119 char ssid[WL_SSID_MAX_LENGTH];
00120 uint8_t len;
00121 };
00122
00123 struct wl_mac_addr_t {
00124 uint8_t octet[WL_MAC_ADDR_LENGTH];
00125 };
00126
00127 #define WL_MODE_STA 0
00128 #define WL_MODE_AP 1
00129
00130 #endif
00131
00132
00133 #define WLP_SIZE_ALIGNMENT 4
00134 #define WLP_SIZE_ALIGNMENT_MASK (WLP_SIZE_ALIGNMENT - 1)
00135 #define wlp_pad(len) \
00136 (((len) & WLP_SIZE_ALIGNMENT_MASK) ? \
00137 WLP_SIZE_ALIGNMENT - ((len) & WLP_SIZE_ALIGNMENT_MASK) : 0)
00138
00139
00140 #ifndef __LWIP_IP_ADDR_H__
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174 struct ip_addr {
00175 uint32_t addr;
00176 };
00177
00178 extern const struct ip_addr ip_addr_any;
00179
00180 #define IP_ADDR_ANY ((struct ip_addr *) &ip_addr_any)
00181 #define IP4_ADDR(ipaddr, a,b,c,d) \
00182 (ipaddr)->addr = htonl(((uint32_t)((a) & 0xff) << 24) | \
00183 ((uint32_t)((b) & 0xff) << 16) | \
00184 ((uint32_t)((c) & 0xff) << 8) | \
00185 (uint32_t)((d) & 0xff))
00186 #define ip_addr_set(dest, src) \
00187 (dest)->addr = ((src) == NULL? 0: (src)->addr)
00188 #define ip_addr_netcmp(addr1, addr2, mask) \
00189 (((addr1)->addr & (mask)->addr) == ((addr2)->addr & (mask)->addr))
00190 #define ip_addr_cmp(addr1, addr2) \
00191 ((addr1)->addr == (addr2)->addr)
00192 #define ip_addr_isany(addr1) \
00193 ((addr1) == NULL || (addr1)->addr == 0)
00194
00195 #define ip4_addr1(ipaddr) ((uint16_t)(ntohl((ipaddr)->addr) >> 24) & 0xff)
00196 #define ip4_addr2(ipaddr) ((uint16_t)(ntohl((ipaddr)->addr) >> 16) & 0xff)
00197 #define ip4_addr3(ipaddr) ((uint16_t)(ntohl((ipaddr)->addr) >> 8) & 0xff)
00198 #define ip4_addr4(ipaddr) ((uint16_t)(ntohl((ipaddr)->addr)) & 0xff)
00199
00200 #endif
00201
00202 #define WLP_VERSION(a,b,c) (((uint32_t)((a) & 0xff) << 16) | \
00203 ((uint32_t)((b) & 0xff) << 8) | \
00204 (uint32_t)((c) & 0xff))
00205 #define WLP_MAJOR_VERSION(code) ((uint16_t)((code) >> 16) & 0xff)
00206 #define WLP_MINOR_VERSION(code) ((uint16_t)((code) >> 8) & 0xff)
00207 #define WLP_PATCH_VERSION(code) ((uint16_t)((code)) & 0xff)
00208
00209
00210 #define WLP_CAP_HA_PIN (1 << 0)
00211 #define WLP_CAP_WAKEUP_PIN (1 << 1)
00213 struct wlp_uart_config_req {
00214 uint32_t baudrate;
00215 uint8_t rtscts;
00216 uint8_t pad[3];
00217 };
00218
00219 struct wlp_set_config_req {
00220 uint8_t flags;
00221 #define WLP_FLAG_WAKEUP_PIN_PRESENT 1
00222 uint8_t pad[3];
00223 };
00224
00225 struct wlp_get_config_req {
00226 };
00227
00228 struct wlp_poll_req {
00229 };
00230
00231 struct wlp_fw_version_req {
00232 };
00233
00234 struct wlp_fw_upgrade_req {
00235 struct ip_addr addr;
00236 uint16_t port;
00237 uint8_t method;
00238 char pad[1];
00239 #define WLP_PATH_MAX_LENGTH 127
00240 char path[WLP_PATH_MAX_LENGTH + 1];
00241 };
00242
00243 struct wlp_set_mode_req {
00244 uint8_t mode;
00245 uint8_t pad[3];
00246 };
00247
00248 struct wlp_get_mode_req {
00249 };
00250
00251 struct wlp_set_channel_req {
00252 uint8_t channel;
00253 uint8_t pad[3];
00254 };
00255
00256 struct wlp_set_ps_conf_req {
00257 uint32_t ps_delay;
00258 uint32_t traffic_timeout;
00259 uint16_t listen_interval;
00260 uint8_t ps_poll;
00261 uint8_t rx_all_dtim;
00262 char pad[3];
00263 };
00264
00265 struct wlp_set_ps_enable_req {
00266 uint8_t enable;
00267 uint8_t pad[3];
00268 };
00269
00270 struct wlp_set_led_req {
00271 uint8_t enable;
00272 uint8_t pad[3];
00273 };
00274
00275 struct wlp_set_heartbeat_req {
00276 uint32_t period;
00277 };
00278
00279 struct wlp_set_poll_period_req {
00280 uint32_t period;
00281 };
00282
00283 struct wlp_reset_req {
00284 };
00285
00286 struct wlp_link_up_req {
00287 struct wl_ssid_t ssid;
00288 char pad[3];
00289 char key[WL_MAX_PASS_LEN];
00290 uint8_t auth;
00291 char pad2[3];
00292 };
00293
00294 struct wlp_link_down_req {
00295 };
00296
00297 struct wlp_link_status_req {
00298 };
00299
00300 struct wlp_link_info_req {
00301 };
00302
00303 struct wlp_net_status_req {
00304 };
00305
00306 struct wlp_net_config_req {
00307 struct ip_addr ip;
00308 struct ip_addr netmask;
00309 struct ip_addr gw;
00310 struct ip_addr dns_server;
00311 int8_t dhcp;
00312 char pad[3];
00313 };
00314
00315 struct wlp_net_info_req {
00316 };
00317
00318 struct wlp_net_dnslookup_req {
00319 #define WLP_HOSTNAME_MAX_LENGTH 127
00320 char host[WLP_HOSTNAME_MAX_LENGTH + 1];
00321 };
00322
00323 struct wlp_net_dhcpd_req {
00324 uint8_t enable;
00325 char pad[3];
00326 };
00327
00328
00329 struct wlp_sock_open_req {
00330 #define WLP_SOCK_STREAM 0
00331 #define WLP_SOCK_DGRAM 1
00332 #define WLP_SOCK_RAW 2
00333 uint8_t stype;
00334 uint8_t protocol;
00335 char pad[2];
00336 };
00337
00338 struct wlp_sock_bind_req {
00339 struct ip_addr ip;
00340 int16_t sockid;
00341 uint16_t port;
00342 };
00343
00344 struct wlp_sock_listen_req {
00345 int16_t sockid;
00346 int8_t backlog;
00347 char pad[1];
00348 };
00349
00350 struct wlp_sock_connect_req {
00351 struct ip_addr ip;
00352 int16_t sockid;
00353 uint16_t port;
00354 };
00355
00356 struct wlp_sock_close_req {
00357 int16_t sockid;
00358 char pad[2];
00359 };
00360
00361 struct wlp_sock_recv_req {
00362 int16_t sockid;
00363 int16_t datalen;
00364 };
00365
00366 struct wlp_sock_send_req {
00367 int16_t sockid;
00368 int16_t datalen;
00369 };
00370
00371 struct wlp_sock_sendto_req {
00372 struct ip_addr addr;
00373 int16_t sockid;
00374 int16_t datalen;
00375 uint16_t port;
00376 char pad[2];
00377 };
00378
00379 struct wlp_sock_status_req {
00380 int16_t sockid;
00381 char pad[2];
00382 };
00383
00384 struct wlp_sock_accept_req {
00385 int16_t sockid;
00386 char pad[2];
00387 };
00388
00389 struct wlp_sock_info_req {
00390 int16_t sockid;
00391 char pad[2];
00392 };
00393
00394
00395 struct wlp_uart_config_cfm {
00396 int8_t mode;
00397 char pad[3];
00398 };
00399
00400 struct wlp_set_config_cfm {
00401 };
00402
00403 struct wlp_get_config_cfm {
00404 uint8_t flags;
00405 uint8_t pad[3];
00406 };
00407
00408 struct wlp_poll_cfm {
00409 };
00410
00411 struct wlp_fw_version_cfm {
00412 uint8_t major;
00413 uint8_t minor;
00414 uint8_t patch;
00415 char pad[1];
00416 char build[16];
00417 char hw_rev[16];
00418 };
00419
00420 struct wlp_fw_upgrade_cfm {
00421 };
00422
00423 struct wlp_set_mode_cfm {
00424 };
00425
00426 struct wlp_get_mode_cfm {
00427 uint8_t mode;
00428 char pad[3];
00429 };
00430
00431 struct wlp_set_channel_cfm {
00432 };
00433
00434 struct wlp_set_ps_conf_cfm {
00435 };
00436
00437 struct wlp_set_ps_enable_cfm {
00438 };
00439
00440 struct wlp_set_led_cfm {
00441 };
00442
00443 struct wlp_set_heartbeat_cfm {
00444 };
00445
00446 struct wlp_set_poll_period_cfm {
00447 };
00448
00449 struct wlp_reset_cfm {
00450 };
00451
00452 struct wlp_link_up_cfm {
00453 };
00454
00455 struct wlp_link_down_cfm {
00456 };
00457
00458 struct wlp_link_status_cfm {
00459 };
00460
00461 struct wlp_link_info_cfm {
00462 struct wl_mac_addr_t hwaddr;
00463 struct wl_mac_addr_t ap;
00464 struct wl_ssid_t ssid;
00465 char pad[3];
00466 int16_t rssi;
00467 int16_t snr;
00468 };
00469
00470 struct wlp_net_status_cfm {
00471 };
00472
00473 struct wlp_net_config_cfm {
00474 };
00475
00476 struct wlp_net_info_cfm {
00477 struct ip_addr ip;
00478 struct ip_addr netmask;
00479 struct ip_addr gw;
00480 struct ip_addr dns_server;
00481 struct ip_addr dns_lookup;
00482
00483 #define WLP_DNS_OK 0
00484 #define WLP_DNS_ERROR -1
00485 #define WLP_DNS_AGAIN -2
00486 #define WLP_DNS_INVALID -3
00487 int8_t dns_result;
00488 int8_t dhcp;
00489 char pad[2];
00490 };
00491
00492 struct wlp_net_dnslookup_cfm {
00493 };
00494
00495 struct wlp_net_dhcpd_cfm {
00496 };
00497
00498 struct wlp_sock_open_cfm {
00499 };
00500
00501 struct wlp_sock_bind_cfm {
00502 };
00503
00504 struct wlp_sock_listen_cfm {
00505 };
00506
00507 struct wlp_sock_connect_cfm {
00508 };
00509
00510 struct wlp_sock_close_cfm {
00511 };
00512
00513 struct wlp_sock_recv_cfm {
00514 };
00515
00516 struct wlp_sock_send_cfm {
00517 };
00518
00519 struct wlp_sock_sendto_cfm {
00520 };
00521
00522 struct wlp_sock_status_cfm {
00523 #define WLP_SOCK_STATE_DISCONNECTED 0
00524 #define WLP_SOCK_STATE_CONNECTED 1
00525 #define WLP_SOCK_STATE_LISTEN 2
00526 #define WLP_SOCK_STATE_ACCEPT 3
00527 #define WLP_SOCK_STATE_ERROR 4
00528 int8_t state;
00529 char pad[3];
00530 };
00531
00532 struct wlp_sock_accept_cfm {
00533 };
00534
00535 struct wlp_sock_info_cfm {
00536 struct ip_addr peer;
00537 };
00538
00539 struct wlp_hdr {
00540 uint16_t len;
00541 uint8_t type;
00542 uint8_t id;
00543 int16_t res;
00544 uint8_t pad;
00545 char reserved[1];
00546 };
00547
00548 struct wlp_req {
00549 union {
00550 struct wlp_uart_config_req uart_config;
00551 struct wlp_set_config_req config;
00552 struct wlp_get_config_req fw_config;
00553 struct wlp_poll_req poll;
00554 struct wlp_fw_version_req fw_version;
00555 struct wlp_fw_upgrade_req fw_upgrade;
00556 struct wlp_set_mode_req set_mode;
00557 struct wlp_get_mode_req get_mode;
00558 struct wlp_set_channel_req set_channel;
00559 struct wlp_set_ps_conf_req ps_config;
00560 struct wlp_set_ps_enable_req ps_enable;
00561 struct wlp_set_led_req led_enable;
00562 struct wlp_set_heartbeat_req heartbeat;
00563 struct wlp_set_poll_period_req poll_period;
00564 struct wlp_reset_req reset;
00565
00566 struct wlp_link_up_req link_up;
00567 struct wlp_link_down_req link_down;
00568 struct wlp_link_status_req link_status;
00569 struct wlp_link_info_req link_info;
00570
00571 struct wlp_net_status_req net_status;
00572 struct wlp_net_config_req net_config;
00573 struct wlp_net_info_req net_info;
00574 struct wlp_net_dnslookup_req net_dnslookup;
00575 struct wlp_net_dhcpd_req net_dhcpd;
00576
00577 struct wlp_sock_open_req sock_open;
00578 struct wlp_sock_bind_req sock_bind;
00579 struct wlp_sock_listen_req sock_listen;
00580 struct wlp_sock_connect_req sock_connect;
00581 struct wlp_sock_close_req sock_close;
00582 struct wlp_sock_recv_req sock_recv;
00583 struct wlp_sock_send_req sock_send;
00584 struct wlp_sock_sendto_req sock_sendto;
00585 struct wlp_sock_status_req sock_status;
00586 struct wlp_sock_accept_req sock_accept;
00587 struct wlp_sock_info_req sock_info;
00588 };
00589 };
00590
00591 struct wlp_cfm {
00592 union {
00593 struct wlp_uart_config_cfm uart_config;
00594 struct wlp_set_config_cfm config;
00595 struct wlp_get_config_cfm fw_config;
00596 struct wlp_poll_cfm poll;
00597 struct wlp_fw_version_cfm fw_version;
00598 struct wlp_fw_upgrade_cfm fw_upgrade;
00599 struct wlp_set_mode_cfm set_mode;
00600 struct wlp_get_mode_cfm get_mode;
00601 struct wlp_set_channel_cfm set_channel;
00602 struct wlp_set_ps_conf_cfm ps_config;
00603 struct wlp_set_ps_enable_cfm ps_enable;
00604 struct wlp_set_led_cfm led_enable;
00605 struct wlp_set_heartbeat_cfm heartbeat;
00606 struct wlp_set_poll_period_cfm poll_period;
00607 struct wlp_reset_cfm reset;
00608
00609 struct wlp_link_up_cfm link_up;
00610 struct wlp_link_down_cfm link_down;
00611 struct wlp_link_status_cfm link_status;
00612 struct wlp_link_info_cfm link_info;
00613
00614 struct wlp_net_status_cfm net_status;
00615 struct wlp_net_config_cfm net_config;
00616 struct wlp_net_info_cfm net_info;
00617 struct wlp_net_dnslookup_cfm net_dnslookup;
00618 struct wlp_net_dhcpd_cfm net_dhcpd;
00619
00620 struct wlp_sock_open_cfm sock_open;
00621 struct wlp_sock_bind_cfm sock_bind;
00622 struct wlp_sock_listen_cfm sock_listen;
00623 struct wlp_sock_connect_cfm sock_connect;
00624 struct wlp_sock_close_cfm sock_close;
00625 struct wlp_sock_recv_cfm sock_recv;
00626 struct wlp_sock_send_cfm sock_send;
00627 struct wlp_sock_sendto_cfm sock_sendto;
00628 struct wlp_sock_status_cfm sock_status;
00629 struct wlp_sock_accept_cfm sock_accept;
00630 struct wlp_sock_info_cfm sock_info;
00631 };
00632 };
00633
00634 struct wlp_data {
00635
00636 };
00637
00638 struct wlp_msg {
00639 struct wlp_hdr hdr;
00640 union {
00641 struct wlp_req req;
00642 struct wlp_cfm cfm;
00643 struct wlp_data data;
00644 };
00645 };
00646
00647
00648 #define WLP_VERSION_CODE WLP_VERSION(1,3,0)
00649
00650 #endif