MeterLogger
Functions
cgiwifi.h File Reference
#include "httpd.h"
Include dependency graph for cgiwifi.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

int cgiWiFiScan (HttpdConnData *connData)
 
void tplSetup (HttpdConnData *connData, char *token, void **arg)
 
int cgiWiFi (HttpdConnData *connData)
 
int cgiSetup (HttpdConnData *connData)
 
int cgiWifiSetMode (HttpdConnData *connData)
 

Function Documentation

◆ cgiSetup()

int cgiSetup ( HttpdConnData connData)

Definition at line 168 of file cgiwifi.c.

References cfg_save(), HttpdConnData::conn, HTTPD_CGI_DONE, httpdFindArg(), httpdRedirect(), INFO, kw_to_w_str(), NULL, os_strncpy, os_timer_arm, os_timer_disarm, os_timer_setfn, HttpdConnData::postBuff, resetTimer, resetTimerCb(), syscfg_t::sta_pwd, syscfg_t::sta_ssid, and sys_cfg.

168  {
169  char essid[128];
170  char passwd[128];
171 #ifdef IMPULSE
172  char impulse_meter_serial[32 + 1];
173  char impulse_meter_energy_kw[32 + 1];
174  char impulse_meter_energy[32 + 1];
175  char impulses_per_kwh[8 + 1];
176 #endif
177 
178  if (connData->conn==NULL) {
179  //Connection aborted. Clean up.
180  return HTTPD_CGI_DONE;
181  }
182 
183  httpdFindArg(connData->postBuff, "essid", essid, sizeof(essid));
184  httpdFindArg(connData->postBuff, "passwd", passwd, sizeof(passwd));
185 #ifdef IMPULSE
186  httpdFindArg(connData->postBuff, "impulse_meter_serial", impulse_meter_serial, sizeof(impulse_meter_serial));
187  httpdFindArg(connData->postBuff, "impulse_meter_energy", impulse_meter_energy_kw, sizeof(impulse_meter_energy_kw));
188  httpdFindArg(connData->postBuff, "impulses_per_kwh", impulses_per_kwh, sizeof(impulses_per_kwh));
189 #endif
190 
191  os_strncpy((char*)sys_cfg.sta_ssid, essid, 32);
192  os_strncpy((char*)sys_cfg.sta_pwd, passwd, 64);
193 #ifdef IMPULSE
194  os_strncpy((char*)sys_cfg.impulse_meter_serial, impulse_meter_serial, 32 + 1);
195  kw_to_w_str(impulse_meter_energy_kw, impulse_meter_energy);
196  os_strncpy((char*)sys_cfg.impulse_meter_energy, impulse_meter_energy, 32 + 1);
197  os_strncpy((char*)sys_cfg.impulses_per_kwh, impulses_per_kwh, 8 + 1);
198  sys_cfg.impulse_meter_count = 0;
199 #endif
200 
201  cfg_save();
202 
203  INFO("Try to connect to AP %s pw %s\n", essid, passwd);
204 
205  //Schedule disconnect/connect
208  os_timer_arm(&resetTimer, 1000, 0);
209 #ifdef IMPULSE
210  httpdRedirect(connData, "impulse_meter_setting_up.html");
211 #else
212  httpdRedirect(connData, "setting_up.html");
213 #endif
214 
215  // restart to go directly to sample mode after 5 seconds
218  os_timer_arm(&resetTimer, 5000, 0);
219 
220  return HTTPD_CGI_DONE;
221 }
uint8_t sta_ssid[64]
Definition: config.h:48
#define os_timer_disarm
Definition: osapi.h:51
uint8_t sta_pwd[64]
Definition: config.h:49
#define NULL
Definition: def.h:47
void ICACHE_FLASH_ATTR cfg_save()
Definition: config.c:28
ICACHE_FLASH_ATTR void kw_to_w_str(char *kw, char *w)
Definition: utils.c:67
ICACHE_FLASH_ATTR void httpdRedirect(HttpdConnData *conn, char *newUrl)
Definition: httpd.c:246
static os_timer_t resetTimer
Definition: cgiwifi.c:43
#define HTTPD_CGI_DONE
Definition: httpd.h:9
#define os_timer_setfn
Definition: osapi.h:52
ICACHE_FLASH_ATTR int httpdFindArg(char *line, char *arg, char *buff, int buffLen)
Definition: httpd.c:167
#define os_strncpy
Definition: osapi.h:45
static void ICACHE_FLASH_ATTR resetTimerCb(void *arg)
Definition: cgiwifi.c:150
struct espconn * conn
Definition: httpd.h:20
#define os_timer_arm(a, b, c)
Definition: osapi.h:50
char * postBuff
Definition: httpd.h:28
#define INFO(...)
Definition: debug.h:17
syscfg_t sys_cfg
Definition: config.c:12
Here is the call graph for this function:

◆ cgiWiFi()

int cgiWiFi ( HttpdConnData connData)

◆ cgiWiFiScan()

int cgiWiFiScan ( HttpdConnData connData)

Definition at line 108 of file cgiwifi.c.

References ScanResultData::apData, ApData::enc, HTTPD_CGI_DONE, httpdEndHeaders(), httpdHeader(), httpdSend(), httpdStartResponse(), ScanResultData::noAps, NULL, ApData::rssi, ScanResultData::scanInProgress, ApData::ssid, strlen, tfp_snprintf(), and wifiStartScan().

108  {
109  int len;
110  int i;
111  char buff[1024];
112  httpdStartResponse(connData, 200);
113  httpdHeader(connData, "Content-Type", "text/json");
114  httpdEndHeaders(connData);
115 
116  if (cgiWifiAps.scanInProgress==1) {
117  //We're still scanning. Tell Javascript code that.
118  tfp_snprintf(buff, 1024, "{\n \"result\": { \n\"inProgress\": \"1\"\n }\n}\n");
119  len = strlen(buff);
120  httpdSend(connData, buff, len);
121  } else {
122  //We have a scan result. Pass it on.
123  tfp_snprintf(buff, 1024, "{\n \"result\": { \n\"inProgress\": \"0\", \n\"APs\": [\n");
124  len = strlen(buff);
125  httpdSend(connData, buff, len);
127  for (i=0; i<cgiWifiAps.noAps; i++) {
128  //Fill in json code for an access point
129  tfp_snprintf(buff, 1024, "{\"essid\": \"%s\", \"rssi\": \"%d\", \"enc\": \"%d\"}%s\n",
131  cgiWifiAps.apData[i]->enc, (i==cgiWifiAps.noAps-1)?"":",");
132  len = strlen(buff);
133  httpdSend(connData, buff, len);
134  }
135  tfp_snprintf(buff, 1024, "]\n}\n}\n");
136  len = strlen(buff);
137  httpdSend(connData, buff, len);
138  //Also start a new scan.
139  wifiStartScan();
140  }
141  return HTTPD_CGI_DONE;
142 }
static void ICACHE_FLASH_ATTR wifiStartScan()
Definition: cgiwifi.c:98
#define NULL
Definition: def.h:47
char rssi
Definition: cgiwifi.c:29
ApData ** apData
Definition: cgiwifi.c:36
#define HTTPD_CGI_DONE
Definition: httpd.h:9
ScanResultData cgiWifiAps
Definition: cgiwifi.c:41
char ssid[32]
Definition: cgiwifi.c:28
ICACHE_FLASH_ATTR void httpdStartResponse(HttpdConnData *conn, int code)
Definition: httpd.c:219
char enc
Definition: cgiwifi.c:30
ICACHE_FLASH_ATTR void httpdEndHeaders(HttpdConnData *conn)
Definition: httpd.c:240
ICACHE_FLASH_ATTR int tfp_snprintf(char *str, size_t size, const char *format,...)
Definition: tinyprintf.c:480
ICACHE_FLASH_ATTR void httpdHeader(HttpdConnData *conn, const char *field, const char *val)
Definition: httpd.c:229
ICACHE_FLASH_ATTR int httpdSend(HttpdConnData *conn, const char *data, int len)
Definition: httpd.c:270
char scanInProgress
Definition: cgiwifi.c:35
#define strlen(a)
Definition: platform.h:25
Here is the call graph for this function:

◆ cgiWifiSetMode()

int cgiWifiSetMode ( HttpdConnData connData)

Definition at line 225 of file cgiwifi.c.

References HttpdConnData::conn, HttpdConnData::getArgs, HTTPD_CGI_DONE, httpdFindArg(), httpdRedirect(), INFO, NULL, system_restart(), and wifi_set_opmode().

225  {
226  int len;
227  char buff[1024];
228 
229  if (connData->conn==NULL) {
230  //Connection aborted. Clean up.
231  return HTTPD_CGI_DONE;
232  }
233 
234  len=httpdFindArg(connData->getArgs, "mode", buff, sizeof(buff));
235  if (len!=0) {
236  INFO("cgiWifiSetMode: %s\n", buff);
237 #ifndef DEMO_MODE
238  wifi_set_opmode(atoi(buff));
239  system_restart();
240 #endif
241  }
242  httpdRedirect(connData, "/wifi");
243  return HTTPD_CGI_DONE;
244 }
char * getArgs
Definition: httpd.h:22
#define NULL
Definition: def.h:47
ICACHE_FLASH_ATTR void httpdRedirect(HttpdConnData *conn, char *newUrl)
Definition: httpd.c:246
#define HTTPD_CGI_DONE
Definition: httpd.h:9
ICACHE_FLASH_ATTR int httpdFindArg(char *line, char *arg, char *buff, int buffLen)
Definition: httpd.c:167
void system_restart(void)
struct espconn * conn
Definition: httpd.h:20
#define INFO(...)
Definition: debug.h:17
bool wifi_set_opmode(uint8 opmode)
Here is the call graph for this function:

◆ tplSetup()

void tplSetup ( HttpdConnData connData,
char *  token,
void **  arg 
)

Definition at line 247 of file cgiwifi.c.

References cfg_load(), httpdSend(), NULL, os_strcmp, os_strcpy, syscfg_t::sta_pwd, syscfg_t::sta_ssid, sys_cfg, tfp_snprintf(), w_to_kw_str(), and wifi_get_opmode().

247  {
248  char buff[1024];
249 #ifdef IMPULSE
250  char impulse_meter_energy[32 + 1];
251 #endif // IMPULSE
252  int x;
253  //static struct station_config stconf;
254  if (token==NULL) return;
255  //wifi_station_get_config(&stconf);
256  cfg_load();
257 
258  os_strcpy(buff, "Unknown");
259  if (os_strcmp(token, "WiFiMode")==0) {
260  x=wifi_get_opmode();
261  if (x == 1) os_strcpy(buff, "Client");
262  if (x == 2) os_strcpy(buff, "SoftAP");
263  if (x == 3) os_strcpy(buff, "STA+AP");
264  }
265  else if (os_strcmp(token, "currSsid") == 0) {
266  os_strcpy(buff, (char*)sys_cfg.sta_ssid);
267  }
268  else if (os_strcmp(token, "WiFiPasswd") == 0) {
269  os_strcpy(buff, (char*)sys_cfg.sta_pwd);
270  }
271  else if (os_strcmp(token, "WiFiapwarn") == 0) {
272  x = wifi_get_opmode();
273  if (x == 2) {
274  os_strcpy(buff, "<b>Can't scan in this mode.</b> Click <a href=\"setmode.cgi?mode=3\">here</a> to go to STA+AP mode.");
275  }
276  else {
277  os_strcpy(buff, "Click <a href=\"setmode.cgi?mode=2\">here</a> to go to standalone AP mode.");
278  }
279  }
280 #ifdef IMPULSE
281  else if (os_strcmp(token, "ImpulseMeterSerial") == 0) {
282  os_strcpy(buff, (char*)sys_cfg.impulse_meter_serial);
283  }
284  else if (os_strcmp(token, "ImpulseMeterEnergy") == 0) {
285  tfp_snprintf(impulse_meter_energy, 32 + 1, "%u", atoi(sys_cfg.impulse_meter_energy) + sys_cfg.impulse_meter_count * (1000 / atoi(sys_cfg.impulses_per_kwh)));
286  w_to_kw_str(impulse_meter_energy, buff);
287  }
288  else if (os_strcmp(token, "ImpulsesPerKwh") == 0) {
289  os_strcpy(buff, (char*)sys_cfg.impulses_per_kwh);
290  }
291 #endif
292 
293  httpdSend(connData, buff, -1);
294 }
uint8_t sta_ssid[64]
Definition: config.h:48
uint8_t sta_pwd[64]
Definition: config.h:49
#define NULL
Definition: def.h:47
ICACHE_FLASH_ATTR void w_to_kw_str(char *w, char *kw)
Definition: utils.c:54
uint8 wifi_get_opmode(void)
#define os_strcmp
Definition: osapi.h:41
ICACHE_FLASH_ATTR int tfp_snprintf(char *str, size_t size, const char *format,...)
Definition: tinyprintf.c:480
ICACHE_FLASH_ATTR int httpdSend(HttpdConnData *conn, const char *data, int len)
Definition: httpd.c:270
#define os_strcpy
Definition: osapi.h:42
void ICACHE_FLASH_ATTR cfg_load()
Definition: config.c:77
syscfg_t sys_cfg
Definition: config.c:12
Here is the call graph for this function: