static int do_wifi(const struct sys_config *cfg) { int result = 1; int gpio = cfg->wifi.ap.trigger_on_gpio; int trigger_ap = 0; wifi_set_opmode_current(STATION_MODE); wifi_station_set_auto_connect(0); wifi_station_disconnect(); if (gpio >= 0) { sj_gpio_set_mode(gpio, GPIO_MODE_INPUT, GPIO_PULL_PULLUP); trigger_ap = sj_gpio_read(gpio) == GPIO_LEVEL_HIGH; } if (!trigger_ap && cfg->wifi.ap.mode == 2 && cfg->wifi.sta.enable) { wifi_set_opmode_current(STATIONAP_MODE); result = sj_wifi_setup_ap(&cfg->wifi.ap) ? sj_wifi_setup_sta(&cfg->wifi.sta) : 0; } else if (!trigger_ap && cfg->wifi.sta.enable) { wifi_set_opmode_current(STATION_MODE); result = sj_wifi_setup_sta(&cfg->wifi.sta); } else if (trigger_ap || cfg->wifi.ap.mode > 0) { wifi_set_opmode_current(SOFTAP_MODE); result = sj_wifi_setup_ap(&cfg->wifi.ap); } else { LOG(LL_WARN, ("No wifi mode specified")); } return result; }
void do_stuff() { #if !defined(ESP_ENABLE_HW_WATCHDOG) && !defined(RTOS_TODO) ets_wdt_disable(); #endif pp_soft_wdt_stop(); last_ts = system_get_time(); wifi_set_event_handler_cb(x_wifi_changed_cb); sj_wifi_setup_sta("TehCloud", ""); mg_mgr_init(&s_mgr, NULL); }
int device_init_platform(struct v7 *v7, struct sys_config *cfg) { (void) v7; if (cfg->wifi.sta.enable) { if (!sj_wifi_setup_sta(&cfg->wifi.sta)) { return 0; } } else { if (!sj_wifi_setup_ap(&cfg->wifi.ap)) { return 0; } } return 1; /* success */ }
static v7_val_t sj_Wifi_setup(struct v7 *v7) { v7_val_t ssidv = v7_arg(v7, 0); v7_val_t passv = v7_arg(v7, 1); const char *ssid, *pass; size_t ssid_len, pass_len; if (!v7_is_string(ssidv) || !v7_is_string(passv)) { printf("ssid/pass are not strings\n"); return v7_create_undefined(); } ssid = v7_to_string(v7, &ssidv, &ssid_len); pass = v7_to_string(v7, &passv, &pass_len); return v7_create_boolean(sj_wifi_setup_sta(ssid, pass)); }
SJ_PRIVATE enum v7_err sj_Wifi_setup(struct v7 *v7, v7_val_t *res) { enum v7_err rcode = V7_OK; v7_val_t ssidv = v7_arg(v7, 0); v7_val_t passv = v7_arg(v7, 1); v7_val_t extrasv = v7_arg(v7, 2); const char *ssid, *pass; size_t ssid_len, pass_len; int permanent = 1, ret = 0; if (!v7_is_string(ssidv) || !v7_is_string(passv)) { printf("ssid/pass are not strings\n"); *res = V7_UNDEFINED; goto clean; } if (v7_is_object(extrasv)) { permanent = v7_is_truthy(v7, v7_get(v7, extrasv, "permanent", ~0)); } ssid = v7_get_string(v7, &ssidv, &ssid_len); pass = v7_get_string(v7, &passv, &pass_len); struct sys_config_wifi_sta cfg; memset(&cfg, 0, sizeof(cfg)); cfg.ssid = (char *) ssid; cfg.pass = (char *) pass; LOG(LL_INFO, ("WiFi: connecting to '%s'", ssid)); ret = sj_wifi_setup_sta(&cfg); if (ret && permanent) { struct sys_config *cfg = get_cfg(); cfg->wifi.sta.enable = 1; sj_conf_set_str(&cfg->wifi.sta.ssid, ssid); sj_conf_set_str(&cfg->wifi.sta.pass, pass); } *res = v7_mk_boolean(v7, ret); goto clean; clean: return rcode; }