MAXREFDES143#: DeepCover Embedded Security in IoT Authenticated Sensing & Notification
Dependencies: MaximInterface mbed
The MAXREFDES143# is an Internet of Things (IoT) embedded security reference design, built to protect an industrial sensing node by means of authentication and notification to a web server. The hardware includes a peripheral module representing a protected sensor node monitoring operating temperature and remaining life of a filter (simulated through ambient light sensing) and an mbed shield representing a controller node responsible for monitoring one or more sensor nodes. The design is hierarchical with each controller node communicating data from connected sensor nodes to a web server that maintains a centralized log and dispatches notifications as necessary. The mbed shield contains a Wi-Fi module, a DS2465 coprocessor with 1-Wire® master function, an LCD, LEDs, and pushbuttons. The protected sensor node contains a DS28E15 authenticator, a DS7505 temperature sensor, and a MAX44009 light sensor. The mbed shield communicates to a web server by the onboard Wi-Fi module and to the protected sensor node with I2C and 1-Wire. The MAXREFDES143# is equipped with a standard shield connector for immediate testing using an mbed board such as the MAX32600MBED#. The simplicity of this design enables rapid integration into any star-topology IoT network requiring the heightened security with low overhead provided by the SHA-256 symmetric-key algorithm.
More information about the MAXREFDES143# is available on the Maxim Integrated website.
Diff: esp8266-driver/ESP8266Interface.cpp
- Revision:
- 29:590a7561318b
- Parent:
- 28:e5cdaf13d299
- Child:
- 30:0784010d6975
--- a/esp8266-driver/ESP8266Interface.cpp Thu Jan 26 14:18:21 2017 -0600
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,282 +0,0 @@
-/* ESP8266 implementation of NetworkInterfaceAPI
- * Copyright (c) 2015 ARM Limited
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <string.h>
-#include "ESP8266Interface.h"
-
-// Various timeouts for different ESP8266 operations
-#define ESP8266_CONNECT_TIMEOUT 15000
-#define ESP8266_SEND_TIMEOUT 500
-#define ESP8266_RECV_TIMEOUT 0
-#define ESP8266_MISC_TIMEOUT 500
-
-// ESP8266Interface implementation
-ESP8266Interface::ESP8266Interface(PinName tx, PinName rx, bool debug)
- : _esp(tx, rx, debug)
-{
- memset(_ids, 0, sizeof(_ids));
- memset(_cbs, 0, sizeof(_cbs));
-
- _esp.attach(this, &ESP8266Interface::event);
-}
-
-int ESP8266Interface::connect(const char *ssid, const char *pass, nsapi_security_t security,
- uint8_t channel)
-{
- if (channel != 0) {
- return NSAPI_ERROR_UNSUPPORTED;
- }
-
- set_credentials(ssid, pass, security);
- return connect();
-}
-
-int ESP8266Interface::connect()
-{
- _esp.setTimeout(ESP8266_CONNECT_TIMEOUT);
-
- if (!_esp.startup(3)) {
- return NSAPI_ERROR_DEVICE_ERROR;
- }
-
- if (!_esp.dhcp(true, 1)) {
- return NSAPI_ERROR_DHCP_FAILURE;
- }
-
- if (!_esp.connect(ap_ssid, ap_pass)) {
- return NSAPI_ERROR_NO_CONNECTION;
- }
-
- if (!_esp.getIPAddress()) {
- return NSAPI_ERROR_DHCP_FAILURE;
- }
-
- return NSAPI_ERROR_OK;
-}
-
-int ESP8266Interface::set_credentials(const char *ssid, const char *pass, nsapi_security_t security)
-{
- memset(ap_ssid, 0, sizeof(ap_ssid));
- strncpy(ap_ssid, ssid, sizeof(ap_ssid));
-
- memset(ap_pass, 0, sizeof(ap_pass));
- strncpy(ap_pass, pass, sizeof(ap_pass));
-
- ap_sec = security;
-
- return 0;
-}
-
-int ESP8266Interface::set_channel(uint8_t channel)
-{
- return NSAPI_ERROR_UNSUPPORTED;
-}
-
-
-int ESP8266Interface::disconnect()
-{
- _esp.setTimeout(ESP8266_MISC_TIMEOUT);
-
- if (!_esp.disconnect()) {
- return NSAPI_ERROR_DEVICE_ERROR;
- }
-
- return NSAPI_ERROR_OK;
-}
-
-const char *ESP8266Interface::get_ip_address()
-{
- return _esp.getIPAddress();
-}
-
-const char *ESP8266Interface::get_mac_address()
-{
- return _esp.getMACAddress();
-}
-
-const char *ESP8266Interface::get_gateway()
-{
- return _esp.getGateway();
-}
-
-const char *ESP8266Interface::get_netmask()
-{
- return _esp.getNetmask();
-}
-
-int8_t ESP8266Interface::get_rssi()
-{
- return _esp.getRSSI();
-}
-
-int ESP8266Interface::scan(WiFiAccessPoint *res, unsigned count)
-{
- return _esp.scan(res, count);
-}
-
-struct esp8266_socket {
- int id;
- nsapi_protocol_t proto;
- bool connected;
- SocketAddress addr;
-};
-
-int ESP8266Interface::socket_open(void **handle, nsapi_protocol_t proto)
-{
- // Look for an unused socket
- int id = -1;
-
- for (int i = 0; i < ESP8266_SOCKET_COUNT; i++) {
- if (!_ids[i]) {
- id = i;
- _ids[i] = true;
- break;
- }
- }
-
- if (id == -1) {
- return NSAPI_ERROR_NO_SOCKET;
- }
-
- struct esp8266_socket *socket = new struct esp8266_socket;
- if (!socket) {
- return NSAPI_ERROR_NO_SOCKET;
- }
-
- socket->id = id;
- socket->proto = proto;
- socket->connected = false;
- *handle = socket;
- return 0;
-}
-
-int ESP8266Interface::socket_close(void *handle)
-{
- struct esp8266_socket *socket = (struct esp8266_socket *)handle;
- int err = 0;
- _esp.setTimeout(ESP8266_MISC_TIMEOUT);
-
- if (!_esp.close(socket->id)) {
- err = NSAPI_ERROR_DEVICE_ERROR;
- }
-
- _ids[socket->id] = false;
- delete socket;
- return err;
-}
-
-int ESP8266Interface::socket_bind(void *handle, const SocketAddress &address)
-{
- return NSAPI_ERROR_UNSUPPORTED;
-}
-
-int ESP8266Interface::socket_listen(void *handle, int backlog)
-{
- return NSAPI_ERROR_UNSUPPORTED;
-}
-
-int ESP8266Interface::socket_connect(void *handle, const SocketAddress &addr)
-{
- struct esp8266_socket *socket = (struct esp8266_socket *)handle;
- _esp.setTimeout(ESP8266_MISC_TIMEOUT);
-
- const char *proto = (socket->proto == NSAPI_UDP) ? "UDP" : "TCP";
- if (!_esp.open(proto, socket->id, addr.get_ip_address(), addr.get_port())) {
- return NSAPI_ERROR_DEVICE_ERROR;
- }
-
- socket->connected = true;
- return 0;
-}
-
-int ESP8266Interface::socket_accept(void *server, void **socket, SocketAddress *addr)
-{
- return NSAPI_ERROR_UNSUPPORTED;
-}
-
-int ESP8266Interface::socket_send(void *handle, const void *data, unsigned size)
-{
- struct esp8266_socket *socket = (struct esp8266_socket *)handle;
- _esp.setTimeout(ESP8266_SEND_TIMEOUT);
-
- if (!_esp.send(socket->id, data, size)) {
- return NSAPI_ERROR_DEVICE_ERROR;
- }
-
- return size;
-}
-
-int ESP8266Interface::socket_recv(void *handle, void *data, unsigned size)
-{
- struct esp8266_socket *socket = (struct esp8266_socket *)handle;
- _esp.setTimeout(ESP8266_RECV_TIMEOUT);
-
- int32_t recv = _esp.recv(socket->id, data, size);
- if (recv < 0) {
- return NSAPI_ERROR_WOULD_BLOCK;
- }
-
- return recv;
-}
-
-int ESP8266Interface::socket_sendto(void *handle, const SocketAddress &addr, const void *data, unsigned size)
-{
- struct esp8266_socket *socket = (struct esp8266_socket *)handle;
-
- if (socket->connected && socket->addr != addr) {
- _esp.setTimeout(ESP8266_MISC_TIMEOUT);
- if (!_esp.close(socket->id)) {
- return NSAPI_ERROR_DEVICE_ERROR;
- }
- socket->connected = false;
- }
-
- if (!socket->connected) {
- int err = socket_connect(socket, addr);
- if (err < 0) {
- return err;
- }
- socket->addr = addr;
- }
-
- return socket_send(socket, data, size);
-}
-
-int ESP8266Interface::socket_recvfrom(void *handle, SocketAddress *addr, void *data, unsigned size)
-{
- struct esp8266_socket *socket = (struct esp8266_socket *)handle;
- int ret = socket_recv(socket, data, size);
- if (ret >= 0 && addr) {
- *addr = socket->addr;
- }
-
- return ret;
-}
-
-void ESP8266Interface::socket_attach(void *handle, void (*callback)(void *), void *data)
-{
- struct esp8266_socket *socket = (struct esp8266_socket *)handle;
- _cbs[socket->id].callback = callback;
- _cbs[socket->id].data = data;
-}
-
-void ESP8266Interface::event() {
- for (int i = 0; i < ESP8266_SOCKET_COUNT; i++) {
- if (_cbs[i].callback) {
- _cbs[i].callback(_cbs[i].data);
- }
- }
-}
MAXREFDES143#: DeepCover Embedded Security in IoT Authenticated Sensing & Notification