aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cores/arduino/Arduino.h4
-rw-r--r--cores/arduino/IPAddress.cpp24
-rw-r--r--cores/arduino/IPAddress.h16
-rw-r--r--cores/arduino/Stream.cpp2
4 files changed, 24 insertions, 22 deletions
diff --git a/cores/arduino/Arduino.h b/cores/arduino/Arduino.h
index e12ac82..ec1389e 100644
--- a/cores/arduino/Arduino.h
+++ b/cores/arduino/Arduino.h
@@ -21,6 +21,7 @@
#define Arduino_h
#include <stdlib.h>
+#include <stdbool.h>
#include <string.h>
#include <math.h>
@@ -43,9 +44,6 @@ void yield(void);
#define OUTPUT 0x1
#define INPUT_PULLUP 0x2
-#define true 0x1
-#define false 0x0
-
#define PI 3.1415926535897932384626433832795
#define HALF_PI 1.5707963267948966192313216916398
#define TWO_PI 6.283185307179586476925286766559
diff --git a/cores/arduino/IPAddress.cpp b/cores/arduino/IPAddress.cpp
index 22a0e42..899cbd4 100644
--- a/cores/arduino/IPAddress.cpp
+++ b/cores/arduino/IPAddress.cpp
@@ -22,42 +22,42 @@
IPAddress::IPAddress()
{
- memset(_address, 0, sizeof(_address));
+ _address.dword = 0;
}
IPAddress::IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet)
{
- _address[0] = first_octet;
- _address[1] = second_octet;
- _address[2] = third_octet;
- _address[3] = 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)
{
- memcpy(_address, &address, sizeof(_address));
+ _address.dword = address;
}
IPAddress::IPAddress(const uint8_t *address)
{
- memcpy(_address, address, sizeof(_address));
+ memcpy(_address.bytes, address, sizeof(_address.bytes));
}
IPAddress& IPAddress::operator=(const uint8_t *address)
{
- memcpy(_address, address, sizeof(_address));
+ memcpy(_address.bytes, address, sizeof(_address.bytes));
return *this;
}
IPAddress& IPAddress::operator=(uint32_t address)
{
- memcpy(_address, (const uint8_t *)&address, sizeof(_address));
+ _address.dword = address;
return *this;
}
bool IPAddress::operator==(const uint8_t* addr) const
{
- return memcmp(addr, _address, sizeof(_address)) == 0;
+ return memcmp(addr, _address.bytes, sizeof(_address.bytes)) == 0;
}
size_t IPAddress::printTo(Print& p) const
@@ -65,10 +65,10 @@ size_t IPAddress::printTo(Print& p) const
size_t n = 0;
for (int i =0; i < 3; i++)
{
- n += p.print(_address[i], DEC);
+ n += p.print(_address.bytes[i], DEC);
n += p.print('.');
}
- n += p.print(_address[3], DEC);
+ n += p.print(_address.bytes[3], DEC);
return n;
}
diff --git a/cores/arduino/IPAddress.h b/cores/arduino/IPAddress.h
index 6ea8127..94acdc4 100644
--- a/cores/arduino/IPAddress.h
+++ b/cores/arduino/IPAddress.h
@@ -27,12 +27,16 @@
class IPAddress : public Printable {
private:
- uint8_t _address[4]; // IPv4 address
+ union {
+ uint8_t bytes[4]; // IPv4 address
+ uint32_t dword;
+ } _address;
+
// Access the raw byte array containing the address. Because this returns a pointer
// to the internal structure rather than a copy of the address this function should only
// be used when you know that the usage of the returned uint8_t* will be transient and not
// stored.
- uint8_t* raw_address() { return _address; };
+ uint8_t* raw_address() { return _address.bytes; };
public:
// Constructors
@@ -43,13 +47,13 @@ public:
// Overloaded cast operator to allow IPAddress objects to be used where a pointer
// to a four-byte uint8_t array is expected
- operator uint32_t() const { return *((uint32_t*)_address); };
- bool operator==(const IPAddress& addr) const { return (*((uint32_t*)_address)) == (*((uint32_t*)addr._address)); };
+ operator uint32_t() const { return _address.dword; };
+ bool operator==(const IPAddress& addr) const { return _address.dword == addr._address.dword; };
bool operator==(const uint8_t* addr) const;
// Overloaded index operator to allow getting and setting individual octets of the address
- uint8_t operator[](int index) const { return _address[index]; };
- uint8_t& operator[](int index) { return _address[index]; };
+ uint8_t operator[](int index) const { return _address.bytes[index]; };
+ uint8_t& operator[](int index) { return _address.bytes[index]; };
// Overloaded copy operators to allow initialisation of IPAddress objects from other types
IPAddress& operator=(const uint8_t *address);
diff --git a/cores/arduino/Stream.cpp b/cores/arduino/Stream.cpp
index aafb7fc..a12a72e 100644
--- a/cores/arduino/Stream.cpp
+++ b/cores/arduino/Stream.cpp
@@ -176,7 +176,7 @@ float Stream::parseFloat(char skipChar){
boolean isNegative = false;
boolean isFraction = false;
long value = 0;
- char c;
+ int c;
float fraction = 1.0;
c = peekNextDigit();