mirror of https://github.com/ARMmbed/mbed-os.git
Merge pull request #12721 from michalpasztamobica/esp8266_set_network
ESP8266: static address configuration and dhcp enable/disable addedpull/12971/head
commit
8e789b0162
|
@ -412,6 +412,32 @@ const char *ESP8266::ip_addr(void)
|
||||||
return _ip_buffer;
|
return _ip_buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const bool ESP8266::set_ip_addr(const char *ip, const char *gateway, const char *netmask)
|
||||||
|
{
|
||||||
|
if (ip == nullptr || ip[0] == '\0') {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ok = false;
|
||||||
|
bool parser_send = false;
|
||||||
|
|
||||||
|
_smutex.lock();
|
||||||
|
|
||||||
|
if ((gateway == nullptr) || (netmask == nullptr) || gateway[0] == '\0' || netmask[0] == '\0') {
|
||||||
|
parser_send = _parser.send("AT+CIPSTA_CUR=\"%s\"", ip);
|
||||||
|
} else {
|
||||||
|
parser_send = _parser.send("AT+CIPSTA_CUR=\"%s\",\"%s\",\"%s\"", ip, gateway, netmask);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parser_send && _parser.recv("OK\n")) {
|
||||||
|
ok = true;
|
||||||
|
} else {
|
||||||
|
ok = false;
|
||||||
|
}
|
||||||
|
_smutex.unlock();
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
const char *ESP8266::mac_addr(void)
|
const char *ESP8266::mac_addr(void)
|
||||||
{
|
{
|
||||||
_smutex.lock();
|
_smutex.lock();
|
||||||
|
|
|
@ -194,6 +194,17 @@ public:
|
||||||
*/
|
*/
|
||||||
const char *ip_addr(void);
|
const char *ip_addr(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set static IP address, gateway and netmask
|
||||||
|
*
|
||||||
|
* @param ip IP address to set
|
||||||
|
* @param gateway (optional) gateway to set
|
||||||
|
* @param netmask (optional) netmask to set
|
||||||
|
*
|
||||||
|
* @return true if operation was successful and flase otherwise
|
||||||
|
*/
|
||||||
|
const bool set_ip_addr(const char *ip, const char *gateway, const char *netmask);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the MAC address of ESP8266
|
* Get the MAC address of ESP8266
|
||||||
*
|
*
|
||||||
|
|
|
@ -121,7 +121,8 @@ ESP8266Interface::ESP8266Interface(PinName tx, PinName rx, bool debug, PinName r
|
||||||
_oob_event_id(0),
|
_oob_event_id(0),
|
||||||
_connect_event_id(0),
|
_connect_event_id(0),
|
||||||
_disconnect_event_id(0),
|
_disconnect_event_id(0),
|
||||||
_software_conn_stat(IFACE_STATUS_DISCONNECTED)
|
_software_conn_stat(IFACE_STATUS_DISCONNECTED),
|
||||||
|
_dhcp(true)
|
||||||
{
|
{
|
||||||
memset(_cbs, 0, sizeof(_cbs));
|
memset(_cbs, 0, sizeof(_cbs));
|
||||||
memset(ap_ssid, 0, sizeof(ap_ssid));
|
memset(ap_ssid, 0, sizeof(ap_ssid));
|
||||||
|
@ -246,7 +247,7 @@ void ESP8266Interface::_connect_async()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_esp.dhcp(true, 1)) {
|
if (_dhcp && !_esp.dhcp(true, 1)) {
|
||||||
_connect_retval = NSAPI_ERROR_DHCP_FAILURE;
|
_connect_retval = NSAPI_ERROR_DHCP_FAILURE;
|
||||||
_esp.uart_enable_input(false);
|
_esp.uart_enable_input(false);
|
||||||
_software_conn_stat = IFACE_STATUS_DISCONNECTED;
|
_software_conn_stat = IFACE_STATUS_DISCONNECTED;
|
||||||
|
@ -406,6 +407,36 @@ int ESP8266Interface::set_channel(uint8_t channel)
|
||||||
return NSAPI_ERROR_UNSUPPORTED;
|
return NSAPI_ERROR_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsapi_error_t ESP8266Interface::set_network(const SocketAddress &ip_address, const SocketAddress &netmask, const SocketAddress &gateway)
|
||||||
|
{
|
||||||
|
nsapi_error_t init_result = _init();
|
||||||
|
if (NSAPI_ERROR_OK != init_result) {
|
||||||
|
return init_result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// netmask and gateway switched on purpose. ESP takes different argument order.
|
||||||
|
if (_esp.set_ip_addr(ip_address.get_ip_address(), gateway.get_ip_address(), netmask.get_ip_address())) {
|
||||||
|
_dhcp = false;
|
||||||
|
return NSAPI_ERROR_OK;
|
||||||
|
} else {
|
||||||
|
return NSAPI_ERROR_DEVICE_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
nsapi_error_t ESP8266Interface::set_dhcp(bool dhcp)
|
||||||
|
{
|
||||||
|
nsapi_error_t init_result = _init();
|
||||||
|
if (NSAPI_ERROR_OK != init_result) {
|
||||||
|
return init_result;
|
||||||
|
}
|
||||||
|
|
||||||
|
_dhcp = dhcp;
|
||||||
|
if (_esp.dhcp(dhcp, 1)) {
|
||||||
|
return NSAPI_ERROR_OK;
|
||||||
|
} else {
|
||||||
|
return NSAPI_ERROR_DEVICE_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ESP8266Interface::_disconnect_async()
|
void ESP8266Interface::_disconnect_async()
|
||||||
{
|
{
|
||||||
|
|
|
@ -132,6 +132,12 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual int set_channel(uint8_t channel);
|
virtual int set_channel(uint8_t channel);
|
||||||
|
|
||||||
|
/** @copydoc NetworkInterface::set_network */
|
||||||
|
virtual nsapi_error_t set_network(const SocketAddress &ip_address, const SocketAddress &netmask, const SocketAddress &gateway);
|
||||||
|
|
||||||
|
/** @copydoc NetworkInterface::dhcp */
|
||||||
|
virtual nsapi_error_t set_dhcp(bool dhcp);
|
||||||
|
|
||||||
/** Stop the interface
|
/** Stop the interface
|
||||||
* @return 0 on success, negative on failure
|
* @return 0 on success, negative on failure
|
||||||
*/
|
*/
|
||||||
|
@ -518,7 +524,8 @@ private:
|
||||||
void _connect_async();
|
void _connect_async();
|
||||||
void _disconnect_async();
|
void _disconnect_async();
|
||||||
rtos::Mutex _cmutex; // Protect asynchronous connection logic
|
rtos::Mutex _cmutex; // Protect asynchronous connection logic
|
||||||
esp_connection_software_status_t _software_conn_stat ;
|
esp_connection_software_status_t _software_conn_stat;
|
||||||
|
bool _dhcp;
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue