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
|
// Global data structure for ping request
|
||||||
static struct ping_option pingOpt;
|
static struct ping_option pingOpt;
|
||||||
|
|
||||||
|
// Global data structure for setIP and setAPIP
|
||||||
|
static struct ip_info info;
|
||||||
|
|
||||||
// Configuration save to flash
|
// Configuration save to flash
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint16_t length, version;
|
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.
|
* 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_setHostname(JsVar *jsHostname);
|
||||||
void jswrap_ESP8266_wifi_getHostByName(JsVar *jsHostname, JsVar *jsCallback);
|
void jswrap_ESP8266_wifi_getHostByName(JsVar *jsHostname, JsVar *jsCallback);
|
||||||
void jswrap_ESP8266_wifi_setSNTP(JsVar *zone, JsVar *server);
|
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_ */
|
#endif /* LIBS_NETWORK_ESP8266_JSWRAP_ESP8266_NETWORK_H_ */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user