Color Oled(SSD1331) connect to STMicroelectronics Nucleo-F466

Dependencies:   ssd1331

Committer:
kadonotakashi
Date:
Thu Oct 11 02:27:46 2018 +0000
Revision:
3:f3764f852aa8
Parent:
0:8fdf9a60065b
Nucreo 446 + SSD1331 test version;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kadonotakashi 0:8fdf9a60065b 1 /* LWIP implementation of NetworkInterfaceAPI
kadonotakashi 0:8fdf9a60065b 2 * Copyright (c) 2015 ARM Limited
kadonotakashi 0:8fdf9a60065b 3 *
kadonotakashi 0:8fdf9a60065b 4 * Licensed under the Apache License, Version 2.0 (the "License");
kadonotakashi 0:8fdf9a60065b 5 * you may not use this file except in compliance with the License.
kadonotakashi 0:8fdf9a60065b 6 * You may obtain a copy of the License at
kadonotakashi 0:8fdf9a60065b 7 *
kadonotakashi 0:8fdf9a60065b 8 * http://www.apache.org/licenses/LICENSE-2.0
kadonotakashi 0:8fdf9a60065b 9 *
kadonotakashi 0:8fdf9a60065b 10 * Unless required by applicable law or agreed to in writing, software
kadonotakashi 0:8fdf9a60065b 11 * distributed under the License is distributed on an "AS IS" BASIS,
kadonotakashi 0:8fdf9a60065b 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kadonotakashi 0:8fdf9a60065b 13 * See the License for the specific language governing permissions and
kadonotakashi 0:8fdf9a60065b 14 * limitations under the License.
kadonotakashi 0:8fdf9a60065b 15 */
kadonotakashi 0:8fdf9a60065b 16
kadonotakashi 0:8fdf9a60065b 17 #include "EMACInterface.h"
kadonotakashi 0:8fdf9a60065b 18
kadonotakashi 0:8fdf9a60065b 19 /* Interface implementation */
kadonotakashi 0:8fdf9a60065b 20 EMACInterface::EMACInterface(EMAC &emac, OnboardNetworkStack &stack) :
kadonotakashi 0:8fdf9a60065b 21 _emac(emac),
kadonotakashi 0:8fdf9a60065b 22 _stack(stack),
kadonotakashi 0:8fdf9a60065b 23 _interface(NULL),
kadonotakashi 0:8fdf9a60065b 24 _dhcp(true),
kadonotakashi 0:8fdf9a60065b 25 _blocking(true),
kadonotakashi 0:8fdf9a60065b 26 _ip_address(),
kadonotakashi 0:8fdf9a60065b 27 _netmask(),
kadonotakashi 0:8fdf9a60065b 28 _gateway()
kadonotakashi 0:8fdf9a60065b 29 {
kadonotakashi 0:8fdf9a60065b 30 }
kadonotakashi 0:8fdf9a60065b 31
kadonotakashi 0:8fdf9a60065b 32 nsapi_error_t EMACInterface::set_network(const char *ip_address, const char *netmask, const char *gateway)
kadonotakashi 0:8fdf9a60065b 33 {
kadonotakashi 0:8fdf9a60065b 34 _dhcp = false;
kadonotakashi 0:8fdf9a60065b 35
kadonotakashi 0:8fdf9a60065b 36 strncpy(_ip_address, ip_address ? ip_address : "", sizeof(_ip_address));
kadonotakashi 0:8fdf9a60065b 37 _ip_address[sizeof(_ip_address) - 1] = '\0';
kadonotakashi 0:8fdf9a60065b 38 strncpy(_netmask, netmask ? netmask : "", sizeof(_netmask));
kadonotakashi 0:8fdf9a60065b 39 _netmask[sizeof(_netmask) - 1] = '\0';
kadonotakashi 0:8fdf9a60065b 40 strncpy(_gateway, gateway ? gateway : "", sizeof(_gateway));
kadonotakashi 0:8fdf9a60065b 41 _gateway[sizeof(_gateway) - 1] = '\0';
kadonotakashi 0:8fdf9a60065b 42
kadonotakashi 0:8fdf9a60065b 43 return NSAPI_ERROR_OK;
kadonotakashi 0:8fdf9a60065b 44 }
kadonotakashi 0:8fdf9a60065b 45
kadonotakashi 0:8fdf9a60065b 46 nsapi_error_t EMACInterface::set_dhcp(bool dhcp)
kadonotakashi 0:8fdf9a60065b 47 {
kadonotakashi 0:8fdf9a60065b 48 _dhcp = dhcp;
kadonotakashi 0:8fdf9a60065b 49 return NSAPI_ERROR_OK;
kadonotakashi 0:8fdf9a60065b 50 }
kadonotakashi 0:8fdf9a60065b 51
kadonotakashi 0:8fdf9a60065b 52 nsapi_error_t EMACInterface::connect()
kadonotakashi 0:8fdf9a60065b 53 {
kadonotakashi 0:8fdf9a60065b 54 if (!_interface) {
kadonotakashi 0:8fdf9a60065b 55 nsapi_error_t err = _stack.add_ethernet_interface(_emac, true, &_interface);
kadonotakashi 0:8fdf9a60065b 56 if (err != NSAPI_ERROR_OK) {
kadonotakashi 0:8fdf9a60065b 57 _interface = NULL;
kadonotakashi 0:8fdf9a60065b 58 return err;
kadonotakashi 0:8fdf9a60065b 59 }
kadonotakashi 0:8fdf9a60065b 60 _interface->attach(_connection_status_cb);
kadonotakashi 0:8fdf9a60065b 61 }
kadonotakashi 0:8fdf9a60065b 62
kadonotakashi 0:8fdf9a60065b 63 return _interface->bringup(_dhcp,
kadonotakashi 0:8fdf9a60065b 64 _ip_address[0] ? _ip_address : 0,
kadonotakashi 0:8fdf9a60065b 65 _netmask[0] ? _netmask : 0,
kadonotakashi 0:8fdf9a60065b 66 _gateway[0] ? _gateway : 0,
kadonotakashi 0:8fdf9a60065b 67 DEFAULT_STACK,
kadonotakashi 0:8fdf9a60065b 68 _blocking);
kadonotakashi 0:8fdf9a60065b 69 }
kadonotakashi 0:8fdf9a60065b 70
kadonotakashi 0:8fdf9a60065b 71 nsapi_error_t EMACInterface::disconnect()
kadonotakashi 0:8fdf9a60065b 72 {
kadonotakashi 0:8fdf9a60065b 73 if (_interface) {
kadonotakashi 0:8fdf9a60065b 74 return _interface->bringdown();
kadonotakashi 0:8fdf9a60065b 75 }
kadonotakashi 0:8fdf9a60065b 76 return NSAPI_ERROR_NO_CONNECTION;
kadonotakashi 0:8fdf9a60065b 77 }
kadonotakashi 0:8fdf9a60065b 78
kadonotakashi 0:8fdf9a60065b 79 const char *EMACInterface::get_mac_address()
kadonotakashi 0:8fdf9a60065b 80 {
kadonotakashi 0:8fdf9a60065b 81 if (_interface && _interface->get_mac_address(_mac_address, sizeof(_mac_address))) {
kadonotakashi 0:8fdf9a60065b 82 return _mac_address;
kadonotakashi 0:8fdf9a60065b 83 }
kadonotakashi 0:8fdf9a60065b 84 return NULL;
kadonotakashi 0:8fdf9a60065b 85 }
kadonotakashi 0:8fdf9a60065b 86
kadonotakashi 0:8fdf9a60065b 87 const char *EMACInterface::get_ip_address()
kadonotakashi 0:8fdf9a60065b 88 {
kadonotakashi 0:8fdf9a60065b 89 if (_interface && _interface->get_ip_address(_ip_address, sizeof(_ip_address))) {
kadonotakashi 0:8fdf9a60065b 90 return _ip_address;
kadonotakashi 0:8fdf9a60065b 91 }
kadonotakashi 0:8fdf9a60065b 92
kadonotakashi 0:8fdf9a60065b 93 return NULL;
kadonotakashi 0:8fdf9a60065b 94 }
kadonotakashi 0:8fdf9a60065b 95
kadonotakashi 0:8fdf9a60065b 96 const char *EMACInterface::get_netmask()
kadonotakashi 0:8fdf9a60065b 97 {
kadonotakashi 0:8fdf9a60065b 98 if (_interface && _interface->get_netmask(_netmask, sizeof(_netmask))) {
kadonotakashi 0:8fdf9a60065b 99 return _netmask;
kadonotakashi 0:8fdf9a60065b 100 }
kadonotakashi 0:8fdf9a60065b 101
kadonotakashi 0:8fdf9a60065b 102 return 0;
kadonotakashi 0:8fdf9a60065b 103 }
kadonotakashi 0:8fdf9a60065b 104
kadonotakashi 0:8fdf9a60065b 105 const char *EMACInterface::get_gateway()
kadonotakashi 0:8fdf9a60065b 106 {
kadonotakashi 0:8fdf9a60065b 107 if (_interface && _interface->get_gateway(_gateway, sizeof(_gateway))) {
kadonotakashi 0:8fdf9a60065b 108 return _gateway;
kadonotakashi 0:8fdf9a60065b 109 }
kadonotakashi 0:8fdf9a60065b 110
kadonotakashi 0:8fdf9a60065b 111 return 0;
kadonotakashi 0:8fdf9a60065b 112 }
kadonotakashi 0:8fdf9a60065b 113
kadonotakashi 0:8fdf9a60065b 114 NetworkStack *EMACInterface::get_stack()
kadonotakashi 0:8fdf9a60065b 115 {
kadonotakashi 0:8fdf9a60065b 116 return &_stack;
kadonotakashi 0:8fdf9a60065b 117 }
kadonotakashi 0:8fdf9a60065b 118
kadonotakashi 0:8fdf9a60065b 119 void EMACInterface::attach(
kadonotakashi 0:8fdf9a60065b 120 Callback<void(nsapi_event_t, intptr_t)> status_cb)
kadonotakashi 0:8fdf9a60065b 121 {
kadonotakashi 0:8fdf9a60065b 122 _connection_status_cb = status_cb;
kadonotakashi 0:8fdf9a60065b 123 if (_interface) {
kadonotakashi 0:8fdf9a60065b 124 _interface->attach(status_cb);
kadonotakashi 0:8fdf9a60065b 125 }
kadonotakashi 0:8fdf9a60065b 126 }
kadonotakashi 0:8fdf9a60065b 127
kadonotakashi 0:8fdf9a60065b 128 nsapi_connection_status_t EMACInterface::get_connection_status() const
kadonotakashi 0:8fdf9a60065b 129 {
kadonotakashi 0:8fdf9a60065b 130 if (_interface) {
kadonotakashi 0:8fdf9a60065b 131 return _interface->get_connection_status();
kadonotakashi 0:8fdf9a60065b 132 } else {
kadonotakashi 0:8fdf9a60065b 133 return NSAPI_STATUS_DISCONNECTED;
kadonotakashi 0:8fdf9a60065b 134 }
kadonotakashi 0:8fdf9a60065b 135 }
kadonotakashi 0:8fdf9a60065b 136
kadonotakashi 0:8fdf9a60065b 137 nsapi_error_t EMACInterface::set_blocking(bool blocking)
kadonotakashi 0:8fdf9a60065b 138 {
kadonotakashi 0:8fdf9a60065b 139 _blocking = blocking;
kadonotakashi 0:8fdf9a60065b 140 return NSAPI_ERROR_OK;
kadonotakashi 0:8fdf9a60065b 141 }