sgdk
|
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