diff --git a/bits.cpp b/bits.cpp index 671d9f5..b10ac52 100644 --- a/bits.cpp +++ b/bits.cpp @@ -73,3 +73,182 @@ uint32_t getInt(uint8_t * data) { return (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3]; } + + +#ifdef __linux__ + +void print(const char* s) +{ + printf("%s", s); +} +void print(char c) +{ + printf("%c", c); +} + +void print(unsigned char num) +{ + print(num, DEC); +} + +void print(unsigned char num, int base) +{ + if (base == HEX) + printf("%X", num); + else + printf("%d", num); +} + +void print(int num) +{ + print(num, DEC); +} + +void print(int num, int base) +{ + if (base == HEX) + printf("%X", num); + else + printf("%d", num); +} + +void print(unsigned int num) +{ + print(num, DEC); +} + +void print(unsigned int num, int base) +{ + if (base == HEX) + printf("%X", num); + else + printf("%d", num); +} + +void print(long num) +{ + print(num, DEC); +} + +void print(long num, int base) +{ + if (base == HEX) + printf("%lX", num); + else + printf("%ld", num); +} + +void print(unsigned long num) +{ + print(num, DEC); +} + +void print(unsigned long num, int base) +{ + if (base == HEX) + printf("%lX", num); + else + printf("%ld", num); +} + +void print(double num) +{ + printf("%f", num); +} + +void println(const char* s) +{ + printf("%s\n", s); +} +void println(char c) +{ + printf("%c\n", c); +} + +void println(unsigned char num) +{ + println(num, DEC); +} + +void println(unsigned char num, int base) +{ + if (base == HEX) + printf("%X\n", num); + else + printf("%d\n", num); +} + +void println(int num) +{ + println(num, DEC); +} + +void println(int num, int base) +{ + if (base == HEX) + printf("%X\n", num); + else + printf("%d\n", num); +} + +void println(unsigned int num) +{ + println(num, DEC); +} + +void println(unsigned int num, int base) +{ + if (base == HEX) + printf("%X\n", num); + else + printf("%d\n", num); +} + +void println(long num) +{ + println(num, DEC); +} + +void println(long num, int base) +{ + if (base == HEX) + printf("%lX\n", num); + else + printf("%ld\n", num); +} + +void println(unsigned long num) +{ + println(num, DEC); +} + +void println(unsigned long num, int base) +{ + if (base == HEX) + printf("%lX\n", num); + else + printf("%ld\n", num); +} + +void println(double num) +{ + printf("%f\n", num); +} + +void println(void) +{ + printf("\n"); +} + +#endif + +void printHex(const char* suffix, const uint8_t *data, size_t length) +{ + _print(suffix); + for (size_t i = 0; i < length; i++) { + if (data[i] < 0x10) { _print("0"); } + _print(data[i], HEX); + _print(" "); + } + _print("\n"); +} \ No newline at end of file diff --git a/bits.h b/bits.h index 1e5688a..d3ac717 100644 --- a/bits.h +++ b/bits.h @@ -4,9 +4,37 @@ #ifdef __linux__ #include +#include + #define lowByte(val) ((val) & 255) #define highByte(val) (((val) >> ((sizeof(val) - 1) << 3)) & 255) #define bitRead(val, bitno) (((val) >> (bitno)) & 1) + +#define DEC 10 +#define HEX 16 + +#define _print print +#define _println println + +void print(const char[]); +void print(char); +void print(unsigned char, int = DEC); +void print(int, int = DEC); +void print(unsigned int, int = DEC); +void print(long, int = DEC); +void print(unsigned long, int = DEC); +void print(double, int = 2); + +void println(const char[]); +void println(char); +void println(unsigned char, int = DEC); +void println(int, int = DEC); +void println(unsigned int, int = DEC); +void println(long, int = DEC); +void println(unsigned long, int = DEC); +void println(double, int = 2); +void println(void); + #elif ARDUINO_ARCH_SAMD #include #define htons(x) ( ((x)<<8) | (((x)>>8)&0xFF) ) @@ -24,7 +52,7 @@ #define printf Serial.printf #endif - +void printHex(const char* suffix, const uint8_t *data, size_t length); uint8_t* popByte(uint8_t& b, uint8_t* data); uint8_t* popWord(uint16_t& w, uint8_t* data); diff --git a/data_link_layer.cpp b/data_link_layer.cpp index 27e8d33..03784b2 100644 --- a/data_link_layer.cpp +++ b/data_link_layer.cpp @@ -76,7 +76,7 @@ bool DataLinkLayer::sendTelegram(NPDU & npdu, AckType ack, uint16_t destinationA if (!frame.valid()) { - _println("invalid frame\n"); + _println("invalid frame"); return false; } diff --git a/platform.h b/platform.h index 73db16e..78273fc 100644 --- a/platform.h +++ b/platform.h @@ -22,13 +22,13 @@ public: virtual bool sendBytes(uint8_t* buffer, uint16_t len) = 0; virtual int readBytes(uint8_t* buffer, uint16_t maxLen) = 0; - virtual void setupUart(); - virtual void closeUart(); - virtual int uartAvailable(); - virtual size_t writeUart(const uint8_t data); - virtual size_t writeUart(const uint8_t *buffer, size_t size); - virtual int readUart(); - virtual size_t readBytesUart(uint8_t *buffer, size_t length); + virtual void setupUart() = 0; + virtual void closeUart() = 0; + virtual int uartAvailable() = 0; + virtual size_t writeUart(const uint8_t data) = 0; + virtual size_t writeUart(const uint8_t *buffer, size_t size) = 0; + virtual int readUart() = 0; + virtual size_t readBytesUart(uint8_t *buffer, size_t length) = 0; virtual uint8_t* getEepromBuffer(uint16_t size) = 0; virtual void commitToEeprom() = 0; diff --git a/tpuart_data_link_layer.cpp b/tpuart_data_link_layer.cpp index a6c9f17..f2b53a4 100644 --- a/tpuart_data_link_layer.cpp +++ b/tpuart_data_link_layer.cpp @@ -212,8 +212,8 @@ bool TpUartDataLinkLayer::checkDataInd(uint8_t firstByte) printHex("=>", buffer, len); CemiFrame frame(buffer, len); - if (frame.addressType() == InduvidualAddress && _deviceObject.induvidualAddress() == frame.destinationAddress() - || frame.addressType() == GroupAddress && _groupAddressTable.contains(frame.destinationAddress())) + if ((frame.addressType() == InduvidualAddress && _deviceObject.induvidualAddress() == frame.destinationAddress()) + || (frame.addressType() == GroupAddress && _groupAddressTable.contains(frame.destinationAddress()))) { //send ack. _platform.writeUart(U_ACK_REQ + 1);