UIPEthernet library for Arduino IDE, Eclipse with arduino plugin and MBED/SMeshStudio (AVR,STM32F,ESP8266,Intel ARC32,Nordic nRF51,Teensy boards,Realtek Ameba(RTL8195A,RTL8710)), ENC28j60 network chip. Compatible with Wiznet W5100 Ethernet library API. Compiled and tested on Nucleo-F302R8. Master repository is: https://github.com/UIPEthernet/UIPEthernet/
mbed/IPAddress.cpp@39:deeb00b81cc9, 2018-01-23 (annotated)
- Committer:
- cassyarduino
- Date:
- Tue Jan 23 15:08:43 2018 +0100
- Revision:
- 39:deeb00b81cc9
- Parent:
- 35:f9f3a91fe4d4
Release: 2.0.4
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
cassyarduino | 1:34b5616a463d | 1 | /* |
cassyarduino | 1:34b5616a463d | 2 | IPAddress.cpp - Base class that provides IPAddress |
cassyarduino | 1:34b5616a463d | 3 | Copyright (c) 2011 Adrian McEwen. All right reserved. |
cassyarduino | 1:34b5616a463d | 4 | |
cassyarduino | 1:34b5616a463d | 5 | This library is free software; you can redistribute it and/or |
cassyarduino | 1:34b5616a463d | 6 | modify it under the terms of the GNU Lesser General Public |
cassyarduino | 1:34b5616a463d | 7 | License as published by the Free Software Foundation; either |
cassyarduino | 1:34b5616a463d | 8 | version 2.1 of the License, or (at your option) any later version. |
cassyarduino | 1:34b5616a463d | 9 | |
cassyarduino | 1:34b5616a463d | 10 | This library is distributed in the hope that it will be useful, |
cassyarduino | 1:34b5616a463d | 11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
cassyarduino | 1:34b5616a463d | 12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
cassyarduino | 1:34b5616a463d | 13 | Lesser General Public License for more details. |
cassyarduino | 1:34b5616a463d | 14 | |
cassyarduino | 1:34b5616a463d | 15 | You should have received a copy of the GNU Lesser General Public |
cassyarduino | 1:34b5616a463d | 16 | License along with this library; if not, write to the Free Software |
cassyarduino | 1:34b5616a463d | 17 | Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
cassyarduino | 1:34b5616a463d | 18 | */ |
cassyarduino | 35:f9f3a91fe4d4 | 19 | #if !defined(ARDUINO_ARCH_AVR) && !defined(ARDUINO_ARCH_SAM) |
cassyarduino | 1:34b5616a463d | 20 | |
cassyarduino | 13:54b176a8dbd6 | 21 | #if defined(ARDUINO) |
cassyarduino | 13:54b176a8dbd6 | 22 | #include <Arduino.h> |
cassyarduino | 14:dc2eb02f9689 | 23 | #include <IPAddress.h> |
cassyarduino | 13:54b176a8dbd6 | 24 | #endif |
cassyarduino | 13:54b176a8dbd6 | 25 | #if defined(__MBED__) |
cassyarduino | 13:54b176a8dbd6 | 26 | #include <mbed.h> |
cassyarduino | 13:54b176a8dbd6 | 27 | #include "mbed/Print.h" |
cassyarduino | 14:dc2eb02f9689 | 28 | #include "mbed/IPAddress.h" |
cassyarduino | 13:54b176a8dbd6 | 29 | #endif |
cassyarduino | 13:54b176a8dbd6 | 30 | |
cassyarduino | 13:54b176a8dbd6 | 31 | IPAddress::IPAddress() |
cassyarduino | 13:54b176a8dbd6 | 32 | { |
cassyarduino | 13:54b176a8dbd6 | 33 | _address.dword = 0; |
cassyarduino | 1:34b5616a463d | 34 | } |
cassyarduino | 1:34b5616a463d | 35 | |
cassyarduino | 13:54b176a8dbd6 | 36 | IPAddress::IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet) |
cassyarduino | 13:54b176a8dbd6 | 37 | { |
cassyarduino | 13:54b176a8dbd6 | 38 | _address.bytes[0] = first_octet; |
cassyarduino | 13:54b176a8dbd6 | 39 | _address.bytes[1] = second_octet; |
cassyarduino | 13:54b176a8dbd6 | 40 | _address.bytes[2] = third_octet; |
cassyarduino | 13:54b176a8dbd6 | 41 | _address.bytes[3] = fourth_octet; |
cassyarduino | 13:54b176a8dbd6 | 42 | } |
cassyarduino | 13:54b176a8dbd6 | 43 | |
cassyarduino | 13:54b176a8dbd6 | 44 | IPAddress::IPAddress(uint32_t address) |
cassyarduino | 13:54b176a8dbd6 | 45 | { |
cassyarduino | 13:54b176a8dbd6 | 46 | _address.dword = address; |
cassyarduino | 13:54b176a8dbd6 | 47 | } |
cassyarduino | 13:54b176a8dbd6 | 48 | |
cassyarduino | 13:54b176a8dbd6 | 49 | IPAddress::IPAddress(const uint8_t *address) |
cassyarduino | 13:54b176a8dbd6 | 50 | { |
cassyarduino | 13:54b176a8dbd6 | 51 | memcpy(_address.bytes, address, sizeof(_address.bytes)); |
cassyarduino | 1:34b5616a463d | 52 | } |
cassyarduino | 1:34b5616a463d | 53 | |
cassyarduino | 13:54b176a8dbd6 | 54 | bool IPAddress::fromString(const char *address) |
cassyarduino | 13:54b176a8dbd6 | 55 | { |
cassyarduino | 13:54b176a8dbd6 | 56 | // TODO: add support for "a", "a.b", "a.b.c" formats |
cassyarduino | 13:54b176a8dbd6 | 57 | |
cassyarduino | 13:54b176a8dbd6 | 58 | uint16_t acc = 0; // Accumulator |
cassyarduino | 13:54b176a8dbd6 | 59 | uint8_t dots = 0; |
cassyarduino | 13:54b176a8dbd6 | 60 | |
cassyarduino | 13:54b176a8dbd6 | 61 | while (*address) |
cassyarduino | 13:54b176a8dbd6 | 62 | { |
cassyarduino | 13:54b176a8dbd6 | 63 | char c = *address++; |
cassyarduino | 13:54b176a8dbd6 | 64 | if (c >= '0' && c <= '9') |
cassyarduino | 13:54b176a8dbd6 | 65 | { |
cassyarduino | 13:54b176a8dbd6 | 66 | acc = acc * 10 + (c - '0'); |
cassyarduino | 13:54b176a8dbd6 | 67 | if (acc > 255) { |
cassyarduino | 13:54b176a8dbd6 | 68 | // Value out of [0..255] range |
cassyarduino | 13:54b176a8dbd6 | 69 | return false; |
cassyarduino | 13:54b176a8dbd6 | 70 | } |
cassyarduino | 13:54b176a8dbd6 | 71 | } |
cassyarduino | 13:54b176a8dbd6 | 72 | else if (c == '.') |
cassyarduino | 13:54b176a8dbd6 | 73 | { |
cassyarduino | 13:54b176a8dbd6 | 74 | if (dots == 3) { |
cassyarduino | 13:54b176a8dbd6 | 75 | // Too much dots (there must be 3 dots) |
cassyarduino | 13:54b176a8dbd6 | 76 | return false; |
cassyarduino | 13:54b176a8dbd6 | 77 | } |
cassyarduino | 13:54b176a8dbd6 | 78 | _address.bytes[dots++] = acc; |
cassyarduino | 13:54b176a8dbd6 | 79 | acc = 0; |
cassyarduino | 13:54b176a8dbd6 | 80 | } |
cassyarduino | 13:54b176a8dbd6 | 81 | else |
cassyarduino | 13:54b176a8dbd6 | 82 | { |
cassyarduino | 13:54b176a8dbd6 | 83 | // Invalid char |
cassyarduino | 13:54b176a8dbd6 | 84 | return false; |
cassyarduino | 13:54b176a8dbd6 | 85 | } |
cassyarduino | 13:54b176a8dbd6 | 86 | } |
cassyarduino | 13:54b176a8dbd6 | 87 | |
cassyarduino | 13:54b176a8dbd6 | 88 | if (dots != 3) { |
cassyarduino | 13:54b176a8dbd6 | 89 | // Too few dots (there must be 3 dots) |
cassyarduino | 13:54b176a8dbd6 | 90 | return false; |
cassyarduino | 13:54b176a8dbd6 | 91 | } |
cassyarduino | 13:54b176a8dbd6 | 92 | _address.bytes[3] = acc; |
cassyarduino | 13:54b176a8dbd6 | 93 | return true; |
cassyarduino | 1:34b5616a463d | 94 | } |
cassyarduino | 1:34b5616a463d | 95 | |
cassyarduino | 13:54b176a8dbd6 | 96 | IPAddress& IPAddress::operator=(const uint8_t *address) |
cassyarduino | 13:54b176a8dbd6 | 97 | { |
cassyarduino | 13:54b176a8dbd6 | 98 | memcpy(_address.bytes, address, sizeof(_address.bytes)); |
cassyarduino | 1:34b5616a463d | 99 | return *this; |
cassyarduino | 1:34b5616a463d | 100 | } |
cassyarduino | 1:34b5616a463d | 101 | |
cassyarduino | 13:54b176a8dbd6 | 102 | IPAddress& IPAddress::operator=(uint32_t address) |
cassyarduino | 13:54b176a8dbd6 | 103 | { |
cassyarduino | 13:54b176a8dbd6 | 104 | _address.dword = address; |
cassyarduino | 1:34b5616a463d | 105 | return *this; |
cassyarduino | 1:34b5616a463d | 106 | } |
cassyarduino | 1:34b5616a463d | 107 | |
cassyarduino | 1:34b5616a463d | 108 | bool IPAddress::operator==(const uint8_t* addr) const |
cassyarduino | 1:34b5616a463d | 109 | { |
cassyarduino | 13:54b176a8dbd6 | 110 | return memcmp(addr, _address.bytes, sizeof(_address.bytes)) == 0; |
cassyarduino | 1:34b5616a463d | 111 | } |
cassyarduino | 1:34b5616a463d | 112 | |
cassyarduino | 13:54b176a8dbd6 | 113 | size_t IPAddress::printTo(Print& p) const |
cassyarduino | 13:54b176a8dbd6 | 114 | { |
cassyarduino | 13:54b176a8dbd6 | 115 | size_t n = 0; |
cassyarduino | 13:54b176a8dbd6 | 116 | for (int i =0; i < 3; i++) |
cassyarduino | 13:54b176a8dbd6 | 117 | { |
cassyarduino | 13:54b176a8dbd6 | 118 | n += p.print(_address.bytes[i], DEC); |
cassyarduino | 13:54b176a8dbd6 | 119 | n += p.print('.'); |
cassyarduino | 13:54b176a8dbd6 | 120 | } |
cassyarduino | 13:54b176a8dbd6 | 121 | n += p.print(_address.bytes[3], DEC); |
cassyarduino | 13:54b176a8dbd6 | 122 | return n; |
cassyarduino | 13:54b176a8dbd6 | 123 | } |
cassyarduino | 35:f9f3a91fe4d4 | 124 | #endif |