sgdk
megawifi.h
Go to the documentation of this file.
00001 /************************************************************************/
00026 #ifndef _MEGAWIFI_H_
00027 #define _MEGAWIFI_H_
00028 
00029 #include "16c550.h"
00030 #include "mw-msg.h"
00031 #include "lsd.h"
00032 
00033 #if (MODULE_MEGAWIFI != 0)
00034 
00035 
00037 #define MW_API_VERSION_MAJOR    1
00038 
00040 #define MW_API_VERSION_MINOR    5
00041 
00043 #define MW_COMMAND_TOUT_MS      1000
00044 
00045 #define MW_CONNECT_TOUT_MS      10000
00046 
00047 #define MW_HTTP_OPEN_TOUT_MS    10000
00048 
00049 #define MW_SCAN_TOUT_MS         10000
00050 
00051 #define MW_ASSOC_TOUT_MS        20000
00052 
00053 #define MW_ASSOC_WAIT_SLEEP_MS  5000
00054 
00055 #define MW_UPGRADE_TOUT_MS      180000
00056 
00057 #define MW_STAT_POLL_MS         250
00058 
00060 enum mw_err {
00061         MW_ERR_NONE = 0,                
00062         MW_ERR,                         
00063         MW_ERR_NOT_READY,               
00064         MW_ERR_BUFFER_TOO_SHORT,        
00065         MW_ERR_PARAM,                   
00066         MW_ERR_SEND,                    
00067         MW_ERR_RECV                     
00068 };
00069 
00071 enum mw_http_method {
00072     MW_HTTP_METHOD_GET = 0,    
00073     MW_HTTP_METHOD_POST,       
00074     MW_HTTP_METHOD_PUT,        
00075     MW_HTTP_METHOD_PATCH,      
00076     MW_HTTP_METHOD_DELETE,     
00077     MW_HTTP_METHOD_HEAD,       
00078     MW_HTTP_METHOD_NOTIFY,     
00079     MW_HTTP_METHOD_SUBSCRIBE,  
00080     MW_HTTP_METHOD_UNSUBSCRIBE,
00081     MW_HTTP_METHOD_OPTIONS,    
00082     MW_HTTP_METHOD_MAX,
00083 };
00084 
00088 #define MW__RESET       UART_MCR__OUT1  ///< Reset out.
00089 #define MW__PRG         UART_MCR__OUT2  ///< Program out.
00090 #define MW__PD          UART_MCR__DTR   ///< Power Down out.
00091 #define MW__DAT         UART_MSR__DSR   ///< Data request in.
00092 
00094 
00095 #define MW_SSID_MAXLEN          32
00096 
00097 #define MW_PASS_MAXLEN          64
00098 
00099 #define MW_NTP_POOL_MAXLEN      80
00100 
00101 #define MW_NUM_CFG_SLOTS        3
00102 
00103 #define MW_NUM_DNS_SERVERS      2
00104 
00105 #define MW_FSM_QUEUE_LEN        8
00106 
00107 #define MW_MAX_SOCK                     3
00108 
00109 #define MW_CTRL_CH                      0
00110 
00111 #define MW_HTTP_CH                      LSD_MAX_CH - 1
00112 
00116 #define MW_CMD_MIN_BUFLEN       168
00117 
00119 struct mw_ap_data {
00120         enum mw_security auth;  
00121         uint8_t channel;        
00122         int8_t rssi;            
00123         uint8_t ssid_len;       
00124         char *ssid;             
00125 };
00126 
00128 enum mw_if_type {
00129         MW_IF_STATION = 0,      
00130         MW_IF_SOFTAP,           
00131         MW_IF_MAX               
00132 };
00133 
00134 /************************************************************************/
00143 int16_t mw_init(char *cmd_buf, uint16_t buf_len);
00144 
00145 /************************************************************************/
00153 static inline void mw_process(void)     {lsd_process();}
00154 
00155 /************************************************************************/
00165 void mw_cmd_data_cb_set(lsd_recv_cb cmd_recv_cb);
00166 
00167 /************************************************************************/
00177 enum mw_err mw_detect(uint8_t *major, uint8_t *minor, char **variant);
00178 
00179 /************************************************************************/
00187 enum mw_err mw_version_get(uint8_t version[3], char **variant);
00188 
00189 /************************************************************************/
00196 uint8_t *mw_bssid_get(enum mw_if_type interface_type);
00197 
00198 /************************************************************************/
00206 enum mw_err mw_default_cfg_set(void);
00207 
00208 /************************************************************************/
00223 enum mw_err mw_ap_cfg_set(uint8_t slot, const char *ssid, const char *pass,
00224                  enum mw_phy_type phy_type);
00225 
00226 /************************************************************************/
00240 enum mw_err mw_ap_cfg_get(uint8_t slot, char **ssid, char **pass,
00241                 enum mw_phy_type *phy_type);
00242 
00243 /************************************************************************/
00254 enum mw_err mw_ip_cfg_set(uint8_t slot, const struct mw_ip_cfg *ip);
00255 
00256 /************************************************************************/
00264 enum mw_err mw_ip_cfg_get(uint8_t slot, struct mw_ip_cfg **ip);
00265 
00266 /************************************************************************/
00282 enum mw_err mw_wifi_adv_cfg_set(const struct mw_wifi_adv_cfg *wifi);
00283 
00284 /************************************************************************/
00289 struct mw_wifi_adv_cfg *mw_wifi_adv_cfg_get(void);
00290 
00291 /************************************************************************/
00296 enum mw_err mw_cfg_save(void);
00297 
00298 /************************************************************************/
00305 enum mw_err mw_ip_current(struct mw_ip_cfg **ip);
00306 
00307 /************************************************************************/
00318 int16_t mw_ap_scan(enum mw_phy_type phy_type, char **ap_data, uint8_t *aps);
00319 
00320 /************************************************************************/
00336 int16_t mw_ap_fill_next(const char *ap_data, uint16_t pos,
00337                 struct mw_ap_data *apd, uint16_t data_len);
00338 
00339 /************************************************************************/
00346 enum mw_err mw_ap_assoc(uint8_t slot);
00347 
00348 /************************************************************************/
00358 enum mw_err mw_ap_assoc_wait(int16_t tout_frames);
00359 
00360 /************************************************************************/
00370 enum mw_err mw_def_ap_cfg(uint8_t slot);
00371 
00372 /************************************************************************/
00377 enum mw_err mw_ap_disassoc(void);
00378 
00379 /************************************************************************/
00384 int16_t mw_def_ap_cfg_get(void);
00385 
00386 /************************************************************************/
00397 enum mw_err mw_tcp_connect(uint8_t ch, const char *dst_addr,
00398                 const char *dst_port, const char *src_port);
00399 
00400 /************************************************************************/
00410 enum mw_err mw_close(uint8_t ch);
00411 
00413 #define mw_tcp_disconnect(ch)   mw_close(ch)
00414 
00415 /************************************************************************/
00427 enum mw_err mw_udp_set(uint8_t ch, const char *dst_addr, const char *dst_port,
00428                 const char *src_port);
00429 
00431 #define mw_udp_unset(ch)        mw_close(ch)
00432 
00433 /************************************************************************/
00443 enum mw_err mw_tcp_bind(uint8_t ch, uint16_t port);
00444 
00445 /************************************************************************/
00455 enum mw_err mw_sock_conn_wait(uint8_t ch, int16_t tout_frames);
00456 
00457 /************************************************************************/
00467 static inline enum lsd_status mw_recv(char *buf, int16_t len, void *ctx,
00468                 lsd_recv_cb recv_cb)
00469 {
00470         return lsd_recv(buf, len, ctx, recv_cb);
00471 }
00472 
00473 /************************************************************************/
00484 static inline enum lsd_status mw_udp_reuse_recv(struct mw_reuse_payload *data,
00485                 int16_t len, void *ctx, lsd_recv_cb recv_cb)
00486 {
00487         return lsd_recv((char*)data, len, ctx, recv_cb);
00488 }
00489 
00490 /************************************************************************/
00502 static inline enum lsd_status mw_udp_reuse_send(uint8_t ch,
00503                 const struct mw_reuse_payload *data, int16_t len, void *ctx,
00504                 lsd_send_cb send_cb)
00505 {
00506         return lsd_send(ch, (const char*)data, len, ctx, send_cb);
00507 }
00508 
00509 /************************************************************************/
00527 static inline enum lsd_status mw_send(uint8_t ch, const char *data, int16_t len,
00528                 void *ctx, lsd_send_cb send_cb)
00529 {
00530         return lsd_send(ch, data, len, ctx, send_cb);
00531 }
00532 
00533 /************************************************************************/
00547 enum mw_err mw_recv_sync(uint8_t *ch, char *buf, int16_t *buf_len,
00548                 int16_t tout_frames);
00549 
00550 /************************************************************************/
00565 enum mw_err mw_send_sync(uint8_t ch, const char *data, uint16_t len,
00566                 int16_t tout_frames);
00567 
00568 /************************************************************************/
00573 union mw_msg_sys_stat *mw_sys_stat_get(void);
00574 
00575 /************************************************************************/
00582 enum mw_sock_stat mw_sock_stat_get(uint8_t ch);
00583 
00584 /************************************************************************/
00596 enum mw_err mw_sntp_cfg_set(const char *tz_str, const char *server[3]);
00597 
00598 /************************************************************************/
00607 enum mw_err mw_sntp_cfg_get(char **tz_str, char *server[3]);
00608 
00609 /************************************************************************/
00619 char *mw_date_time_get(uint32_t dt_bin[2]);
00620 
00621 /************************************************************************/
00629 enum mw_err mw_flash_id_get(uint8_t *man_id, uint16_t *dev_id);
00630 
00631 /************************************************************************/
00639 enum mw_err mw_flash_sector_erase(uint16_t sect);
00640 
00641 /************************************************************************/
00650 enum mw_err mw_flash_write(uint32_t addr, uint8_t *data, uint16_t data_len);
00651 
00652 /************************************************************************/
00660 uint8_t *mw_flash_read(uint32_t addr, uint16_t data_len);
00661 
00662 /************************************************************************/
00665 #define mw_module_reset()       do{uart_set_bits(MCR, MW__RESET);}while(0)
00666 
00667 /************************************************************************/
00670 #define mw_module_start()       do{uart_clr_bits(MCR, MW__RESET);}while(0)
00671 
00672 /************************************************************************/
00683 enum mw_err mw_gamertag_set(uint8_t slot, const struct mw_gamertag *gamertag);
00684 
00685 /************************************************************************/
00692 struct mw_gamertag *mw_gamertag_get(uint8_t slot);
00693 
00694 /************************************************************************/
00701 enum mw_err mw_log(const char *msg);
00702 
00703 /************************************************************************/
00709 enum mw_err mw_factory_settings(void);
00710 
00711 /************************************************************************/
00717 void mw_power_off(void);
00718 
00719 /************************************************************************/
00724 void mw_sleep(int16_t frames);
00725 
00726 /************************************************************************/
00733 enum mw_err mw_http_url_set(const char *url);
00734 
00735 /************************************************************************/
00742 enum mw_err mw_http_method_set(enum mw_http_method method);
00743 
00744 /************************************************************************/
00752 enum mw_err mw_http_header_add(const char *key, const char *value);
00753 
00754 /************************************************************************/
00761 enum mw_err mw_http_header_del(const char *key);
00762 
00763 /************************************************************************/
00775 enum mw_err mw_http_open(uint32_t content_len);
00776 
00777 /************************************************************************/
00795 int16_t mw_http_finish(uint32_t *content_len, int16_t tout_frames);
00796 
00797 /************************************************************************/
00803 uint32_t mw_http_cert_query(void);
00804 
00805 /************************************************************************/
00822 enum mw_err mw_http_cert_set(uint32_t cert_hash, const char *cert,
00823                 uint16_t cert_len);
00824 
00825 /************************************************************************/
00830 int16_t mw_http_cleanup(void);
00831 
00832 /************************************************************************/
00837 char *mw_def_server_get(void);
00838 
00839 /************************************************************************/
00849 enum mw_err mw_def_server_set(const char *server_url);
00850 
00851 /************************************************************************/
00859 uint8_t *mw_hrng_get(uint16_t rnd_len);
00860 
00861 /************************************************************************/
00873 enum mw_err mw_ga_endpoint_set(const char *endpoint, const char *priv_key);
00874 
00875 /************************************************************************/
00893 enum mw_err mw_ga_key_value_add(const char **key, const char **value,
00894                 uint16_t num_pairs);
00895 
00896 /************************************************************************/
00926 int16_t mw_ga_request(enum mw_http_method method, const char **path,
00927                 uint8_t num_paths, const char **key, const char **value,
00928                 uint8_t num_kv_pairs, uint32_t *content_len,
00929                 int16_t tout_frames);
00930 
00931 /************************************************************************/
00939 enum mw_err mw_fw_upgrade(const char *name);
00940 
00941 /****** THE FOLLOWING COMMANDS ARE LOWER LEVEL AND USUALLY NOT NEEDED ******/
00942 
00943 /************************************************************************/
00952 static inline enum lsd_status mw_cmd_send(mw_cmd *cmd, void *ctx,
00953                 lsd_send_cb send_cb)
00954 {
00955         // Send data on control channel (0).
00956         return lsd_send(MW_CTRL_CH, cmd->packet, cmd->data_len + 4,
00957                         ctx, send_cb);
00958 }
00959 
00960 /************************************************************************/
00969 static inline enum lsd_status mw_cmd_recv(mw_cmd *rep, void *ctx,
00970                 lsd_recv_cb recv_cb) {
00971         return lsd_recv(rep->packet, sizeof(mw_cmd), ctx, recv_cb);
00972 }
00973 
00974 #endif // MODULE_MEGAWIFI
00975 
00976 #endif /*_MEGAWIFI_H_*/
00977 
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines