aboutsummaryrefslogtreecommitdiff
path: root/cores/xinput/IPAddress.cpp
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2022-03-07 13:48:57 +0100
committerHampusM <hampus@hampusmat.com>2022-03-07 13:48:57 +0100
commit563f69b870a7f71026c50605b531ed40d667b0a2 (patch)
treef9dd8374cae6affb3b52d79e22823c78187b99ed /cores/xinput/IPAddress.cpp
parentf4a2dc0440d17e4c9e609e01e12fcd786d268cf7 (diff)
rename arduino core dir to xinputHEADmaster
Diffstat (limited to 'cores/xinput/IPAddress.cpp')
-rw-r--r--cores/xinput/IPAddress.cpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/cores/xinput/IPAddress.cpp b/cores/xinput/IPAddress.cpp
new file mode 100644
index 0000000..d9fe5be
--- /dev/null
+++ b/cores/xinput/IPAddress.cpp
@@ -0,0 +1,114 @@
+/*
+ IPAddress.cpp - Base class that provides IPAddress
+ Copyright (c) 2011 Adrian McEwen. All right reserved.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+*/
+
+#include <Arduino.h>
+#include <IPAddress.h>
+
+IPAddress::IPAddress()
+{
+ _address.dword = 0;
+}
+
+IPAddress::IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet)
+{
+ _address.bytes[0] = first_octet;
+ _address.bytes[1] = second_octet;
+ _address.bytes[2] = third_octet;
+ _address.bytes[3] = fourth_octet;
+}
+
+IPAddress::IPAddress(uint32_t address)
+{
+ _address.dword = address;
+}
+
+IPAddress::IPAddress(const uint8_t *address)
+{
+ memcpy(_address.bytes, address, sizeof(_address.bytes));
+}
+
+bool IPAddress::fromString(const char *address)
+{
+ uint16_t acc = 0; // Accumulator
+ uint8_t dots = 0;
+
+ while (*address)
+ {
+ char c = *address++;
+ if (c >= '0' && c <= '9')
+ {
+ acc = acc * 10 + (c - '0');
+ if (acc > 255) {
+ // Value out of [0..255] range
+ return false;
+ }
+ }
+ else if (c == '.')
+ {
+ if (dots == 3) {
+ // Too much dots (there must be 3 dots)
+ return false;
+ }
+ _address.bytes[dots++] = acc;
+ acc = 0;
+ }
+ else
+ {
+ // Invalid char
+ return false;
+ }
+ }
+
+ if (dots != 3) {
+ // Too few dots (there must be 3 dots)
+ return false;
+ }
+ _address.bytes[3] = acc;
+ return true;
+}
+
+IPAddress& IPAddress::operator=(const uint8_t *address)
+{
+ memcpy(_address.bytes, address, sizeof(_address.bytes));
+ return *this;
+}
+
+IPAddress& IPAddress::operator=(uint32_t address)
+{
+ _address.dword = address;
+ return *this;
+}
+
+bool IPAddress::operator==(const uint8_t* addr) const
+{
+ return memcmp(addr, _address.bytes, sizeof(_address.bytes)) == 0;
+}
+
+size_t IPAddress::printTo(Print& p) const
+{
+ size_t n = 0;
+ for (int i =0; i < 3; i++)
+ {
+ n += p.print(_address.bytes[i], DEC);
+ n += p.print('.');
+ }
+ n += p.print(_address.bytes[3], DEC);
+ return n;
+}
+