mirror of
https://github.com/espruino/Espruino.git
synced 2025-12-08 19:06:15 +00:00
add setIP and setAPIP
This commit is contained in:
parent
939741ba4b
commit
eabffa4032
@ -102,6 +102,9 @@ static bool g_skipDisconnect;
|
||||
// Global data structure for ping request
|
||||
static struct ping_option pingOpt;
|
||||
|
||||
// Global data structure for setIP and setAPIP
|
||||
static struct ip_info info;
|
||||
|
||||
// Configuration save to flash
|
||||
typedef struct {
|
||||
uint16_t length, version;
|
||||
@ -1743,6 +1746,148 @@ static void pingRecvCB(void *pingOpt, void *pingResponse) {
|
||||
}
|
||||
}
|
||||
|
||||
// worker for jswrap_ESP8266_wifi_setIP and jswrap_ESP8266_wifi_setAPIP
|
||||
static void setIP(JsVar *jsSettings, JsVar *jsCallback, int interface) {
|
||||
DBGV("> setIP\n");
|
||||
|
||||
char ipTmp[20];
|
||||
int len = 0;
|
||||
bool rc = false;
|
||||
memset(&info, 0, sizeof(info));
|
||||
|
||||
// first check parameter
|
||||
if (!jsvIsObject(jsSettings)) {
|
||||
EXPECT_OPT_EXCEPTION(jsSettings);
|
||||
return;
|
||||
}
|
||||
|
||||
// get,check and store ip
|
||||
JsVar *jsIP = jsvObjectGetChild(jsSettings, "ip", 0);
|
||||
if (jsIP != NULL && !jsvIsString(jsIP)) {
|
||||
EXPECT_OPT_EXCEPTION(jsIP);
|
||||
jsvUnLock(jsIP);
|
||||
return;
|
||||
}
|
||||
jsvGetString(jsIP, ipTmp, sizeof(ipTmp)-1);
|
||||
//DBG(">> ip: %s\n",ipTmp);
|
||||
info.ip.addr = networkParseIPAddress(ipTmp);
|
||||
if ( info.ip.addr == 0) {
|
||||
jsExceptionHere(JSET_ERROR, "Not a valid IP address.");
|
||||
jsvUnLock(jsIP);
|
||||
return;
|
||||
}
|
||||
jsvUnLock(jsIP);
|
||||
|
||||
// get, check and store gw
|
||||
JsVar *jsGW = jsvObjectGetChild(jsSettings, "gw", 0);
|
||||
if (jsGW != NULL && !jsvIsString(jsGW)) {
|
||||
EXPECT_OPT_EXCEPTION(jsGW);
|
||||
jsvUnLock(jsGW);
|
||||
return ;
|
||||
}
|
||||
jsvGetString(jsGW, ipTmp, sizeof(ipTmp)-1);
|
||||
//DBG(">> gw: %s\n",ipTmp);
|
||||
info.gw.addr = networkParseIPAddress(ipTmp);
|
||||
if (info.gw.addr == 0) {
|
||||
jsExceptionHere(JSET_ERROR, "Not a valid Gateway address.");
|
||||
jsvUnLock(jsGW);
|
||||
return;
|
||||
}
|
||||
jsvUnLock(jsGW);
|
||||
|
||||
// netmask setting
|
||||
JsVar *jsNM = jsvObjectGetChild(jsSettings, "netmask", 0);
|
||||
if (jsNM != NULL && !jsvIsString(jsNM)) {
|
||||
EXPECT_OPT_EXCEPTION(jsNM);
|
||||
jsvUnLock(jsNM);
|
||||
return;
|
||||
}
|
||||
jsvGetString(jsNM, ipTmp, sizeof(ipTmp)-1);
|
||||
//DBG(">> netmask: %s\n",ipTmp);
|
||||
info.netmask.addr = networkParseIPAddress(ipTmp);
|
||||
if (info.netmask.addr == 0) {
|
||||
jsExceptionHere(JSET_ERROR, "Not a valid Netmask.");
|
||||
jsvUnLock(jsNM);
|
||||
return;
|
||||
}
|
||||
jsvUnLock(jsNM);
|
||||
|
||||
// set IP for station
|
||||
if (interface == STATION_IF ) {
|
||||
wifi_station_dhcpc_stop();
|
||||
rc = wifi_set_ip_info(STATION_IF, &info);
|
||||
}
|
||||
// set IP for access point
|
||||
else {
|
||||
wifi_softap_dhcps_stop();
|
||||
rc = wifi_set_ip_info(SOFTAP_IF, &info);
|
||||
wifi_softap_dhcps_start();
|
||||
}
|
||||
|
||||
DBG(">> rc: %s\n", rc ? "true" : "false");
|
||||
|
||||
// Schedule callback
|
||||
if (jsvIsFunction(jsCallback)) {
|
||||
JsVar *jsRC = jsvNewObject();
|
||||
jsvObjectSetChildAndUnLock(jsRC, "success",jsvNewFromBool(rc));
|
||||
JsVar *params[1];
|
||||
params[0] = jsRC;
|
||||
jsiQueueEvents(NULL, jsCallback, params, 1);
|
||||
jsvUnLock(params[0]);
|
||||
jsvUnLock(jsRC);
|
||||
}
|
||||
else {
|
||||
jsExceptionHere(JSET_ERROR, "Callback is not a function.");
|
||||
}
|
||||
DBGV("< setIP\n");
|
||||
return ;
|
||||
};
|
||||
|
||||
//===== Wifi.setIP
|
||||
/*JSON{
|
||||
"type" : "staticmethod",
|
||||
"class" : "Wifi",
|
||||
"name" : "setIP",
|
||||
"generate" : "jswrap_ESP8266_wifi_setIP",
|
||||
"params" : [
|
||||
["settings", "JsVar", "Configuration settings"],
|
||||
["callback", "JsVar", "The callback to invoke when ip is set"]
|
||||
]
|
||||
}
|
||||
The `settings` object must contain the following properties.
|
||||
|
||||
* `ip` IP address as string (e.g. "192.168.5.100")
|
||||
* `gw` The network gateway as string (e.g. "192.168.5.1")
|
||||
* `netmask` The interface netmask as string (e.g. "255.255.255.0")
|
||||
|
||||
*/
|
||||
void jswrap_ESP8266_wifi_setIP(JsVar *jsSettings, JsVar *jsCallback) {
|
||||
setIP(jsSettings, jsCallback, STATION_IF);
|
||||
return ;
|
||||
}
|
||||
|
||||
//===== Wifi.setAPIP
|
||||
/*JSON{
|
||||
"type" : "staticmethod",
|
||||
"class" : "Wifi",
|
||||
"name" : "setAPIP",
|
||||
"generate" : "jswrap_ESP8266_wifi_setAPIP",
|
||||
"params" : [
|
||||
["settings", "JsVar", "Configuration settings"],
|
||||
["callback", "JsVar", "The callback to invoke when ip is set"]
|
||||
]
|
||||
}
|
||||
The `settings` object must contain the following properties.
|
||||
|
||||
* `ip` IP address as string (e.g. "192.168.5.100")
|
||||
* `gw` The network gateway as string (e.g. "192.168.5.1")
|
||||
* `netmask` The interface netmask as string (e.g. "255.255.255.0")
|
||||
*/
|
||||
void jswrap_ESP8266_wifi_setAPIP(JsVar *jsSettings, JsVar *jsCallback) {
|
||||
setIP(jsSettings, jsCallback, SOFTAP_IF);
|
||||
return ;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Callback function that is invoked at the culmination of a scan.
|
||||
|
||||
@ -38,5 +38,7 @@ JsVar *jswrap_ESP8266_wifi_getHostname(JsVar *jsCallback);
|
||||
void jswrap_ESP8266_wifi_setHostname(JsVar *jsHostname);
|
||||
void jswrap_ESP8266_wifi_getHostByName(JsVar *jsHostname, JsVar *jsCallback);
|
||||
void jswrap_ESP8266_wifi_setSNTP(JsVar *zone, JsVar *server);
|
||||
void jswrap_ESP8266_wifi_setIP(JsVar *jsSettings, JsVar *jsCallback);
|
||||
void jswrap_ESP8266_wifi_setAPIP(JsVar *jsSettings, JsVar *jsCallback);
|
||||
|
||||
#endif /* LIBS_NETWORK_ESP8266_JSWRAP_ESP8266_NETWORK_H_ */
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user