sgdk
Loading...
Searching...
No Matches
megawifi.h
Go to the documentation of this file.
1/************************************************************************/
26#ifndef _MEGAWIFI_H_
27#define _MEGAWIFI_H_
28
29#include "16c550.h"
30#include "mw-msg.h"
31#include "lsd.h"
32
33#if (MODULE_MEGAWIFI != 0)
34
35
37#define MW_API_VERSION_MAJOR 1
38
40#define MW_API_VERSION_MINOR 5
41
43#define MW_COMMAND_TOUT_MS 1000
45#define MW_CONNECT_TOUT_MS 10000
47#define MW_HTTP_OPEN_TOUT_MS 10000
49#define MW_SCAN_TOUT_MS 10000
51#define MW_ASSOC_TOUT_MS 20000
53#define MW_ASSOC_WAIT_SLEEP_MS 5000
55#define MW_UPGRADE_TOUT_MS 180000
57#define MW_STAT_POLL_MS 250
58
60enum mw_err {
61 MW_ERR_NONE = 0,
62 MW_ERR,
63 MW_ERR_NOT_READY,
64 MW_ERR_BUFFER_TOO_SHORT,
65 MW_ERR_PARAM,
66 MW_ERR_SEND,
67 MW_ERR_RECV
68};
69
71enum mw_http_method {
72 MW_HTTP_METHOD_GET = 0,
73 MW_HTTP_METHOD_POST,
74 MW_HTTP_METHOD_PUT,
75 MW_HTTP_METHOD_PATCH,
76 MW_HTTP_METHOD_DELETE,
77 MW_HTTP_METHOD_HEAD,
78 MW_HTTP_METHOD_NOTIFY,
79 MW_HTTP_METHOD_SUBSCRIBE,
80 MW_HTTP_METHOD_UNSUBSCRIBE,
81 MW_HTTP_METHOD_OPTIONS,
82 MW_HTTP_METHOD_MAX,
83};
84
88#define MW__RESET UART_MCR__OUT1
89#define MW__PRG UART_MCR__OUT2
90#define MW__PD UART_MCR__DTR
91#define MW__DAT UART_MSR__DSR
95#define MW_SSID_MAXLEN 32
97#define MW_PASS_MAXLEN 64
99#define MW_NTP_POOL_MAXLEN 80
101#define MW_NUM_CFG_SLOTS 3
103#define MW_NUM_DNS_SERVERS 2
105#define MW_FSM_QUEUE_LEN 8
107#define MW_MAX_SOCK 3
109#define MW_CTRL_CH 0
111#define MW_HTTP_CH LSD_MAX_CH - 1
112
116#define MW_CMD_MIN_BUFLEN 168
117
119struct mw_ap_data {
120 enum mw_security auth;
121 uint8_t channel;
122 int8_t rssi;
123 uint8_t ssid_len;
124 char *ssid;
125};
126
128enum mw_if_type {
129 MW_IF_STATION = 0,
130 MW_IF_SOFTAP,
131 MW_IF_MAX
132};
133
134/************************************************************************/
143int16_t mw_init(uint16_t *cmd_buf, uint16_t buf_len);
144
145/************************************************************************/
153static inline void mw_process(void) {lsd_process();}
154
155/************************************************************************/
165void mw_cmd_data_cb_set(lsd_recv_cb cmd_recv_cb);
166
167/************************************************************************/
177enum mw_err mw_detect(uint8_t *major, uint8_t *minor, char **variant);
178
179/************************************************************************/
187enum mw_err mw_version_get(uint8_t version[3], char **variant);
188
189/************************************************************************/
196uint8_t *mw_bssid_get(enum mw_if_type interface_type);
197
198/************************************************************************/
206enum mw_err mw_default_cfg_set(void);
207
208/************************************************************************/
223enum mw_err mw_ap_cfg_set(uint8_t slot, const char *ssid, const char *pass,
224 enum mw_phy_type phy_type);
225
226/************************************************************************/
240enum mw_err mw_ap_cfg_get(uint8_t slot, char **ssid, char **pass,
241 enum mw_phy_type *phy_type);
242
243/************************************************************************/
254enum mw_err mw_ip_cfg_set(uint8_t slot, const struct mw_ip_cfg *ip);
255
256/************************************************************************/
264enum mw_err mw_ip_cfg_get(uint8_t slot, struct mw_ip_cfg **ip);
265
266/************************************************************************/
282enum mw_err mw_wifi_adv_cfg_set(const struct mw_wifi_adv_cfg *wifi);
283
284/************************************************************************/
289struct mw_wifi_adv_cfg *mw_wifi_adv_cfg_get(void);
290
291/************************************************************************/
296enum mw_err mw_cfg_save(void);
297
298/************************************************************************/
305enum mw_err mw_ip_current(struct mw_ip_cfg **ip);
306
307/************************************************************************/
318int16_t mw_ap_scan(enum mw_phy_type phy_type, char **ap_data, uint8_t *aps);
319
320/************************************************************************/
336int16_t mw_ap_fill_next(const char *ap_data, uint16_t pos,
337 struct mw_ap_data *apd, uint16_t data_len);
338
339/************************************************************************/
346enum mw_err mw_ap_assoc(uint8_t slot);
347
348/************************************************************************/
358enum mw_err mw_ap_assoc_wait(int16_t tout_frames);
359
360/************************************************************************/
370enum mw_err mw_def_ap_cfg(uint8_t slot);
371
372/************************************************************************/
377enum mw_err mw_ap_disassoc(void);
378
379/************************************************************************/
384int16_t mw_def_ap_cfg_get(void);
385
386/************************************************************************/
397enum mw_err mw_tcp_connect(uint8_t ch, const char *dst_addr,
398 const char *dst_port, const char *src_port);
399
400/************************************************************************/
410enum mw_err mw_close(uint8_t ch);
411
413#define mw_tcp_disconnect(ch) mw_close(ch)
414
415/************************************************************************/
427enum mw_err mw_udp_set(uint8_t ch, const char *dst_addr, const char *dst_port,
428 const char *src_port);
429
431#define mw_udp_unset(ch) mw_close(ch)
432
433/************************************************************************/
443enum mw_err mw_tcp_bind(uint8_t ch, uint16_t port);
444
445/************************************************************************/
455enum mw_err mw_sock_conn_wait(uint8_t ch, int16_t tout_frames);
456
457/************************************************************************/
467static inline enum lsd_status mw_recv(char *buf, int16_t len, void *ctx,
468 lsd_recv_cb recv_cb)
469{
470 return lsd_recv(buf, len, ctx, recv_cb);
471}
472
473/************************************************************************/
484static inline enum lsd_status mw_udp_reuse_recv(struct mw_reuse_payload *data,
485 int16_t len, void *ctx, lsd_recv_cb recv_cb)
486{
487 return lsd_recv((char*)data, len, ctx, recv_cb);
488}
489
490/************************************************************************/
502static inline enum lsd_status mw_udp_reuse_send(uint8_t ch,
503 const struct mw_reuse_payload *data, int16_t len, void *ctx,
504 lsd_send_cb send_cb)
505{
506 return lsd_send(ch, (const char*)data, len, ctx, send_cb);
507}
508
509/************************************************************************/
527static inline enum lsd_status mw_send(uint8_t ch, const char *data, int16_t len,
528 void *ctx, lsd_send_cb send_cb)
529{
530 return lsd_send(ch, data, len, ctx, send_cb);
531}
532
533/************************************************************************/
547enum mw_err mw_recv_sync(uint8_t *ch, char *buf, int16_t *buf_len,
548 int16_t tout_frames);
549
550/************************************************************************/
565enum mw_err mw_send_sync(uint8_t ch, const char *data, uint16_t len,
566 int16_t tout_frames);
567
568/************************************************************************/
573union mw_msg_sys_stat *mw_sys_stat_get(void);
574
575/************************************************************************/
582enum mw_sock_stat mw_sock_stat_get(uint8_t ch);
583
584/************************************************************************/
596enum mw_err mw_sntp_cfg_set(const char *tz_str, const char *server[3]);
597
598/************************************************************************/
607enum mw_err mw_sntp_cfg_get(char **tz_str, char *server[3]);
608
609/************************************************************************/
619char *mw_date_time_get(uint32_t dt_bin[2]);
620
621/************************************************************************/
629enum mw_err mw_flash_id_get(uint8_t *man_id, uint16_t *dev_id);
630
631/************************************************************************/
639enum mw_err mw_flash_sector_erase(uint16_t sect);
640
641/************************************************************************/
650enum mw_err mw_flash_write(uint32_t addr, uint8_t *data, uint16_t data_len);
651
652/************************************************************************/
660uint8_t *mw_flash_read(uint32_t addr, uint16_t data_len);
661
662/************************************************************************/
665#define mw_module_reset() do{uart_set_bits(MCR, MW__RESET);}while(0)
666
667/************************************************************************/
670#define mw_module_start() do{uart_clr_bits(MCR, MW__RESET);}while(0)
671
672/************************************************************************/
683enum mw_err mw_gamertag_set(uint8_t slot, const struct mw_gamertag *gamertag);
684
685/************************************************************************/
692struct mw_gamertag *mw_gamertag_get(uint8_t slot);
693
694/************************************************************************/
701enum mw_err mw_log(const char *msg);
702
703/************************************************************************/
709enum mw_err mw_factory_settings(void);
710
711/************************************************************************/
717void mw_power_off(void);
718
719/************************************************************************/
724void mw_sleep(int16_t frames);
725
726/************************************************************************/
733enum mw_err mw_http_url_set(const char *url);
734
735/************************************************************************/
742enum mw_err mw_http_method_set(enum mw_http_method method);
743
744/************************************************************************/
752enum mw_err mw_http_header_add(const char *key, const char *value);
753
754/************************************************************************/
761enum mw_err mw_http_header_del(const char *key);
762
763/************************************************************************/
775enum mw_err mw_http_open(uint32_t content_len);
776
777/************************************************************************/
795int16_t mw_http_finish(uint32_t *content_len, int16_t tout_frames);
796
797/************************************************************************/
803uint32_t mw_http_cert_query(void);
804
805/************************************************************************/
822enum mw_err mw_http_cert_set(uint32_t cert_hash, const char *cert,
823 uint16_t cert_len);
824
825/************************************************************************/
830int16_t mw_http_cleanup(void);
831
832/************************************************************************/
837char *mw_def_server_get(void);
838
839/************************************************************************/
849enum mw_err mw_def_server_set(const char *server_url);
850
851/************************************************************************/
859uint8_t *mw_hrng_get(uint16_t rnd_len);
860
861/************************************************************************/
873enum mw_err mw_ga_endpoint_set(const char *endpoint, const char *priv_key);
874
875/************************************************************************/
893enum mw_err mw_ga_key_value_add(const char **key, const char **value,
894 uint16_t num_pairs);
895
896/************************************************************************/
926int16_t mw_ga_request(enum mw_http_method method, const char **path,
927 uint8_t num_paths, const char **key, const char **value,
928 uint8_t num_kv_pairs, uint32_t *content_len,
929 int16_t tout_frames);
930
931/************************************************************************/
939enum mw_err mw_fw_upgrade(const char *name);
940
941/****** THE FOLLOWING COMMANDS ARE LOWER LEVEL AND USUALLY NOT NEEDED ******/
942
943/************************************************************************/
952static inline enum lsd_status mw_cmd_send(mw_cmd *cmd, void *ctx,
953 lsd_send_cb send_cb)
954{
955 // Send data on control channel (0).
956 return lsd_send(MW_CTRL_CH, cmd->packet, cmd->data_len + 4,
957 ctx, send_cb);
958}
959
960/************************************************************************/
969static inline enum lsd_status mw_cmd_recv(mw_cmd *rep, void *ctx,
970 lsd_recv_cb recv_cb) {
971 return lsd_recv(rep->packet, sizeof(mw_cmd), ctx, recv_cb);
972}
973
974#endif // MODULE_MEGAWIFI
975
976#endif /*_MEGAWIFI_H_*/
977
MegaWiFi command message definitions.