From 4248a1f073b86e3e2bffb26a7741f16377dbb17e Mon Sep 17 00:00:00 2001 From: OnlineCaveman <115506475+OnlineCaveman@users.noreply.github.com> Date: Sat, 15 Oct 2022 16:15:32 +0200 Subject: [PATCH 01/11] Updated for samd51 flash storage compatibility --- src/samd_platform.cpp | 92 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 73 insertions(+), 19 deletions(-) diff --git a/src/samd_platform.cpp b/src/samd_platform.cpp index fc85645..09df962 100644 --- a/src/samd_platform.cpp +++ b/src/samd_platform.cpp @@ -87,7 +87,11 @@ void SamdPlatform::init() _memoryType = Flash; _pageSize = pageSizes[NVMCTRL->PARAM.bit.PSZ]; _pageCnt = NVMCTRL->PARAM.bit.NVMP; - _rowSize = PAGES_PER_ROW * _pageSize; + #if defined(__SAMD51__) + _rowSize = (_pageSize * _pageCnt / 64); + #else + _rowSize = (_pageSize * PAGES_PER_ROW); + #endif // find end of program flash and set limit to next row uint32_t endEddr = (uint32_t)(&__etext + (&__data_end__ - &__data_start__)); // text + data MemoryBlock @@ -100,6 +104,33 @@ void SamdPlatform::init() } } +#if defined(__SAMD51__) +// Invalidate all CMCC cache entries if CMCC cache is enabled. +static void invalidate_CMCC_cache() +{ + if (CMCC->SR.bit.CSTS) { + CMCC->CTRL.bit.CEN = 0; + while (CMCC->SR.bit.CSTS) {} + CMCC->MAINT0.bit.INVALL = 1; + CMCC->CTRL.bit.CEN = 1; + } +} +#endif + +static inline uint32_t read_unaligned_uint32(volatile void *data) +{ + union { + uint32_t u32; + uint8_t u8[4]; + } res; + const uint8_t *d = (const uint8_t *)data; + res.u8[0] = d[0]; + res.u8[1] = d[1]; + res.u8[2] = d[2]; + res.u8[3] = d[3]; + return res.u32; +} + size_t SamdPlatform::flashEraseBlockSize() { return PAGES_PER_ROW; @@ -171,36 +202,54 @@ void SamdPlatform::write(const volatile void *flash_ptr, const void *data, uint3 size = (size + 3) / 4; volatile uint32_t *src_addr = (volatile uint32_t *)data; volatile uint32_t *dst_addr = (volatile uint32_t *)flash_ptr; - // volatile uint32_t *dst_addr = (volatile uint32_t *)flash_ptr; - // const uint8_t *src_addr = (uint8_t *)data; // Disable automatic page write - NVMCTRL->CTRLB.bit.MANW = 1; + #if defined(__SAMD51__) + NVMCTRL->CTRLA.bit.WMODE = 0; + while (NVMCTRL->STATUS.bit.READY == 0) { } + // Disable NVMCTRL cache while writing, per SAMD51 errata. + bool original_CACHEDIS0 = NVMCTRL->CTRLA.bit.CACHEDIS0; + bool original_CACHEDIS1 = NVMCTRL->CTRLA.bit.CACHEDIS1; + NVMCTRL->CTRLA.bit.CACHEDIS0 = true; + NVMCTRL->CTRLA.bit.CACHEDIS1 = true; + #else + NVMCTRL->CTRLB.bit.MANW = 1; + #endif // Do writes in pages while (size) { // Execute "PBC" Page Buffer Clear - NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_PBC; - while (NVMCTRL->INTFLAG.bit.READY == 0) - { - } + #if defined(__SAMD51__) + NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_PBC; + while (NVMCTRL->INTFLAG.bit.DONE == 0) { } + #else + NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_PBC; + while (NVMCTRL->INTFLAG.bit.READY == 0) { } + #endif // Fill page buffer uint32_t i; for (i = 0; i < (_pageSize / 4) && size; i++) { - *dst_addr = *src_addr; - src_addr++; + *dst_addr = read_unaligned_uint32(src_addr); + src_addr += 4; dst_addr++; size--; } // Execute "WP" Write Page - NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_WP; - while (NVMCTRL->INTFLAG.bit.READY == 0) - { - } + #if defined(__SAMD51__) + NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_WP; + while (NVMCTRL->INTFLAG.bit.DONE == 0) { } + invalidate_CMCC_cache(); + // Restore original NVMCTRL cache settings. + NVMCTRL->CTRLA.bit.CACHEDIS0 = original_CACHEDIS0; + NVMCTRL->CTRLA.bit.CACHEDIS1 = original_CACHEDIS1; + #else + NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_WP; + while (NVMCTRL->INTFLAG.bit.READY == 0) { } + #endif } } @@ -218,11 +267,16 @@ void SamdPlatform::erase(const volatile void *flash_ptr, uint32_t size) void SamdPlatform::eraseRow(const volatile void *flash_ptr) { - NVMCTRL->ADDR.reg = ((uint32_t)flash_ptr) / 2; - NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_ER; - while (!NVMCTRL->INTFLAG.bit.READY) - { - } + #if defined(__SAMD51__) + NVMCTRL->ADDR.reg = ((uint32_t)flash_ptr); + NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_EB; + while (!NVMCTRL->INTFLAG.bit.DONE) { } + invalidate_CMCC_cache(); + #else + NVMCTRL->ADDR.reg = ((uint32_t)flash_ptr) / 2; + NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_ER; + while (!NVMCTRL->INTFLAG.bit.READY) { } + #endif } #endif From b8107fd62d44c8d6ced25a9d363c0d156dda6647 Mon Sep 17 00:00:00 2001 From: OnlineCaveman <115506475+OnlineCaveman@users.noreply.github.com> Date: Mon, 17 Oct 2022 19:48:09 +0200 Subject: [PATCH 02/11] SAMD51/SAMD21 files Separate files for SAMD51 and SAMD21 platforms. --- src/samd51_platform.cpp | 222 ++++++++++++++++++++++++++++++++++++++++ src/samd51_platform.h | 47 +++++++++ src/samd_platform.cpp | 92 ++++------------- 3 files changed, 288 insertions(+), 73 deletions(-) create mode 100644 src/samd51_platform.cpp create mode 100644 src/samd51_platform.h diff --git a/src/samd51_platform.cpp b/src/samd51_platform.cpp new file mode 100644 index 0000000..d35c3c2 --- /dev/null +++ b/src/samd51_platform.cpp @@ -0,0 +1,222 @@ +#ifdef __SAMD51__ +#include +#include "samd51_platform.h" +#include + +#if KNX_FLASH_SIZE % 1024 +#error "KNX_FLASH_SIZE must be multiple of 1024" +#endif + +#ifndef KNX_SERIAL +#define KNX_SERIAL Serial1 +#endif + +SamdPlatform::SamdPlatform() +#ifndef KNX_NO_DEFAULT_UART + : ArduinoPlatform(&KNX_SERIAL) +#endif +{ + init(); +} + +SamdPlatform::SamdPlatform( HardwareSerial* s) : ArduinoPlatform(s) +{ + init(); +} + +uint32_t SamdPlatform::uniqueSerialNumber() +{ + // SAMD51 from section 9.6 of the datasheet + #define SERIAL_NUMBER_WORD_0 *(volatile uint32_t*)(0x008061FC) + #define SERIAL_NUMBER_WORD_1 *(volatile uint32_t*)(0x00806010) + #define SERIAL_NUMBER_WORD_2 *(volatile uint32_t*)(0x00806014) + #define SERIAL_NUMBER_WORD_3 *(volatile uint32_t*)(0x00806018) + + return SERIAL_NUMBER_WORD_0 ^ SERIAL_NUMBER_WORD_1 ^ SERIAL_NUMBER_WORD_2 ^ SERIAL_NUMBER_WORD_3; +} + +void SamdPlatform::restart() +{ + println("restart"); + NVIC_SystemReset(); +} + +extern uint32_t __etext; +extern uint32_t __data_start__; +extern uint32_t __data_end__; + +static const uint32_t pageSizes[] = {8, 16, 32, 64, 128, 256, 512, 1024}; + +void SamdPlatform::init() +{ + _memoryType = Flash; + _pageSize = pageSizes[NVMCTRL->PARAM.bit.PSZ]; + _pageCnt = NVMCTRL->PARAM.bit.NVMP; + _rowSize = (_pageSize * _pageCnt / 64); + + // find end of program flash and set limit to next row + uint32_t endEddr = (uint32_t)(&__etext + (&__data_end__ - &__data_start__)); // text + data MemoryBlock + _MemoryStart = getRowAddr(_pageSize * _pageCnt - KNX_FLASH_SIZE - 1); // 23295 + _MemoryEnd = getRowAddr(_pageSize * _pageCnt - 1); + // chosen flash size is not available anymore + if (_MemoryStart < endEddr) { + println("KNX_FLASH_SIZE is not available (possible too much flash use by firmware)"); + fatalError(); + } +} + +// Invalidate all CMCC cache entries if CMCC cache is enabled. +static void invalidate_CMCC_cache() +{ + if (CMCC->SR.bit.CSTS) { + CMCC->CTRL.bit.CEN = 0; + while (CMCC->SR.bit.CSTS) {} + CMCC->MAINT0.bit.INVALL = 1; + CMCC->CTRL.bit.CEN = 1; + } +} + +static inline uint32_t read_unaligned_uint32(volatile void *data) +{ + union { + uint32_t u32; + uint8_t u8[4]; + } res; + const uint8_t *d = (const uint8_t *)data; + res.u8[0] = d[0]; + res.u8[1] = d[1]; + res.u8[2] = d[2]; + res.u8[3] = d[3]; + return res.u32; +} + +size_t SamdPlatform::flashEraseBlockSize() +{ + return PAGES_PER_ROW; +} + +size_t SamdPlatform::flashPageSize() +{ + return _pageSize; +} + +uint8_t* SamdPlatform::userFlashStart() +{ + return (uint8_t*)_MemoryStart; +} + +size_t SamdPlatform::userFlashSizeEraseBlocks() +{ + if (KNX_FLASH_SIZE <= 0) + return 0; + else + return ((KNX_FLASH_SIZE - 1) / (flashPageSize() * flashEraseBlockSize())) + 1; +} + +void SamdPlatform::flashErase(uint16_t eraseBlockNum) +{ + noInterrupts(); + + eraseRow((void *)(_MemoryStart + eraseBlockNum * _rowSize)); + // flash_range_erase(KNX_FLASH_OFFSET + eraseBlockNum * flashPageSize() * flashEraseBlockSize(), flashPageSize() * flashEraseBlockSize()); + + interrupts(); +} + +void SamdPlatform::flashWritePage(uint16_t pageNumber, uint8_t* data) +{ + noInterrupts(); + + write((void *)(_MemoryStart + pageNumber * _pageSize), data, _pageSize); + // flash_range_program(KNX_FLASH_OFFSET + pageNumber * flashPageSize(), data, flashPageSize()); + + interrupts(); +} + +void SamdPlatform::writeBufferedEraseBlock() +{ + if (_bufferedEraseblockNumber > -1 && _bufferedEraseblockDirty) + { + noInterrupts(); + + eraseRow((void *)(_MemoryStart + _bufferedEraseblockNumber * _rowSize)); + write((void *)(_MemoryStart + _bufferedEraseblockNumber * _rowSize), _eraseblockBuffer, _rowSize); + // flash_range_erase(KNX_FLASH_OFFSET + _bufferedEraseblockNumber * flashPageSize() * flashEraseBlockSize(), flashPageSize() * flashEraseBlockSize()); + // flash_range_program(KNX_FLASH_OFFSET + _bufferedEraseblockNumber * flashPageSize() * flashEraseBlockSize(), _eraseblockBuffer, flashPageSize() * flashEraseBlockSize()); + + interrupts(); + + _bufferedEraseblockDirty = false; + } +} + +uint32_t SamdPlatform::getRowAddr(uint32_t flasAddr) +{ + return flasAddr & ~(_rowSize - 1); +} + +void SamdPlatform::write(const volatile void *flash_ptr, const void *data, uint32_t size) +{ + // Calculate data boundaries + size = (size + 3) / 4; + volatile uint32_t *src_addr = (volatile uint32_t *)data; + volatile uint32_t *dst_addr = (volatile uint32_t *)flash_ptr; + + // Disable automatic page write + NVMCTRL->CTRLA.bit.WMODE = 0; + while (NVMCTRL->STATUS.bit.READY == 0) { } + // Disable NVMCTRL cache while writing, per SAMD51 errata. + bool original_CACHEDIS0 = NVMCTRL->CTRLA.bit.CACHEDIS0; + bool original_CACHEDIS1 = NVMCTRL->CTRLA.bit.CACHEDIS1; + NVMCTRL->CTRLA.bit.CACHEDIS0 = true; + NVMCTRL->CTRLA.bit.CACHEDIS1 = true; + + // Do writes in pages + while (size) + { + // Execute "PBC" Page Buffer Clear + NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_PBC; + while (NVMCTRL->INTFLAG.bit.DONE == 0) { } + + // Fill page buffer + uint32_t i; + for (i = 0; i < (_pageSize / 4) && size; i++) + { + *dst_addr = read_unaligned_uint32(src_addr); + src_addr += 4; + dst_addr++; + size--; + } + + // Execute "WP" Write Page + NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_WP; + while (NVMCTRL->INTFLAG.bit.DONE == 0) { } + invalidate_CMCC_cache(); + // Restore original NVMCTRL cache settings. + NVMCTRL->CTRLA.bit.CACHEDIS0 = original_CACHEDIS0; + NVMCTRL->CTRLA.bit.CACHEDIS1 = original_CACHEDIS1; + + } +} + +void SamdPlatform::erase(const volatile void *flash_ptr, uint32_t size) +{ + const uint8_t *ptr = (const uint8_t *)flash_ptr; + while (size > _rowSize) + { + eraseRow(ptr); + ptr += _rowSize; + size -= _rowSize; + } + eraseRow(ptr); +} + +void SamdPlatform::eraseRow(const volatile void *flash_ptr) +{ + NVMCTRL->ADDR.reg = ((uint32_t)flash_ptr); + NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_EB; + while (!NVMCTRL->INTFLAG.bit.DONE) { } + invalidate_CMCC_cache(); +} + +#endif diff --git a/src/samd51_platform.h b/src/samd51_platform.h new file mode 100644 index 0000000..57f331a --- /dev/null +++ b/src/samd51_platform.h @@ -0,0 +1,47 @@ +#ifdef __SAMD51__ +#include "Arduino.h" +#include "arduino_platform.h" + +class SamdPlatform : public ArduinoPlatform +{ +public: + SamdPlatform(); + SamdPlatform( HardwareSerial* s); + + // unique serial number + uint32_t uniqueSerialNumber() override; + + void restart(); + + // size of one EraseBlock in pages + virtual size_t flashEraseBlockSize(); + // size of one flash page in bytes + virtual size_t flashPageSize(); + // start of user flash aligned to start of an erase block + virtual uint8_t* userFlashStart(); + // size of the user flash in EraseBlocks + virtual size_t userFlashSizeEraseBlocks(); + // relativ to userFlashStart + virtual void flashErase(uint16_t eraseBlockNum); + // write a single page to flash (pageNumber relative to userFashStart + virtual void flashWritePage(uint16_t pageNumber, uint8_t* data); + + // writes _eraseblockBuffer to flash - overrides Plattform::writeBufferedEraseBlock() for performance optimization only + void writeBufferedEraseBlock(); + +private: + void init(); + uint32_t _MemoryEnd = 0; + uint32_t _MemoryStart = 0; + uint32_t _pageSize; + uint32_t _rowSize; + uint32_t _pageCnt; + + uint32_t getRowAddr(uint32_t flasAddr); + void write(const volatile void* flash_ptr, const void* data, uint32_t size); + void erase(const volatile void* flash_ptr, uint32_t size); + void eraseRow(const volatile void* flash_ptr); + +}; + +#endif diff --git a/src/samd_platform.cpp b/src/samd_platform.cpp index 09df962..fc85645 100644 --- a/src/samd_platform.cpp +++ b/src/samd_platform.cpp @@ -87,11 +87,7 @@ void SamdPlatform::init() _memoryType = Flash; _pageSize = pageSizes[NVMCTRL->PARAM.bit.PSZ]; _pageCnt = NVMCTRL->PARAM.bit.NVMP; - #if defined(__SAMD51__) - _rowSize = (_pageSize * _pageCnt / 64); - #else - _rowSize = (_pageSize * PAGES_PER_ROW); - #endif + _rowSize = PAGES_PER_ROW * _pageSize; // find end of program flash and set limit to next row uint32_t endEddr = (uint32_t)(&__etext + (&__data_end__ - &__data_start__)); // text + data MemoryBlock @@ -104,33 +100,6 @@ void SamdPlatform::init() } } -#if defined(__SAMD51__) -// Invalidate all CMCC cache entries if CMCC cache is enabled. -static void invalidate_CMCC_cache() -{ - if (CMCC->SR.bit.CSTS) { - CMCC->CTRL.bit.CEN = 0; - while (CMCC->SR.bit.CSTS) {} - CMCC->MAINT0.bit.INVALL = 1; - CMCC->CTRL.bit.CEN = 1; - } -} -#endif - -static inline uint32_t read_unaligned_uint32(volatile void *data) -{ - union { - uint32_t u32; - uint8_t u8[4]; - } res; - const uint8_t *d = (const uint8_t *)data; - res.u8[0] = d[0]; - res.u8[1] = d[1]; - res.u8[2] = d[2]; - res.u8[3] = d[3]; - return res.u32; -} - size_t SamdPlatform::flashEraseBlockSize() { return PAGES_PER_ROW; @@ -202,54 +171,36 @@ void SamdPlatform::write(const volatile void *flash_ptr, const void *data, uint3 size = (size + 3) / 4; volatile uint32_t *src_addr = (volatile uint32_t *)data; volatile uint32_t *dst_addr = (volatile uint32_t *)flash_ptr; + // volatile uint32_t *dst_addr = (volatile uint32_t *)flash_ptr; + // const uint8_t *src_addr = (uint8_t *)data; // Disable automatic page write - #if defined(__SAMD51__) - NVMCTRL->CTRLA.bit.WMODE = 0; - while (NVMCTRL->STATUS.bit.READY == 0) { } - // Disable NVMCTRL cache while writing, per SAMD51 errata. - bool original_CACHEDIS0 = NVMCTRL->CTRLA.bit.CACHEDIS0; - bool original_CACHEDIS1 = NVMCTRL->CTRLA.bit.CACHEDIS1; - NVMCTRL->CTRLA.bit.CACHEDIS0 = true; - NVMCTRL->CTRLA.bit.CACHEDIS1 = true; - #else - NVMCTRL->CTRLB.bit.MANW = 1; - #endif + NVMCTRL->CTRLB.bit.MANW = 1; // Do writes in pages while (size) { // Execute "PBC" Page Buffer Clear - #if defined(__SAMD51__) - NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_PBC; - while (NVMCTRL->INTFLAG.bit.DONE == 0) { } - #else - NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_PBC; - while (NVMCTRL->INTFLAG.bit.READY == 0) { } - #endif + NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_PBC; + while (NVMCTRL->INTFLAG.bit.READY == 0) + { + } // Fill page buffer uint32_t i; for (i = 0; i < (_pageSize / 4) && size; i++) { - *dst_addr = read_unaligned_uint32(src_addr); - src_addr += 4; + *dst_addr = *src_addr; + src_addr++; dst_addr++; size--; } // Execute "WP" Write Page - #if defined(__SAMD51__) - NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_WP; - while (NVMCTRL->INTFLAG.bit.DONE == 0) { } - invalidate_CMCC_cache(); - // Restore original NVMCTRL cache settings. - NVMCTRL->CTRLA.bit.CACHEDIS0 = original_CACHEDIS0; - NVMCTRL->CTRLA.bit.CACHEDIS1 = original_CACHEDIS1; - #else - NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_WP; - while (NVMCTRL->INTFLAG.bit.READY == 0) { } - #endif + NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_WP; + while (NVMCTRL->INTFLAG.bit.READY == 0) + { + } } } @@ -267,16 +218,11 @@ void SamdPlatform::erase(const volatile void *flash_ptr, uint32_t size) void SamdPlatform::eraseRow(const volatile void *flash_ptr) { - #if defined(__SAMD51__) - NVMCTRL->ADDR.reg = ((uint32_t)flash_ptr); - NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_EB; - while (!NVMCTRL->INTFLAG.bit.DONE) { } - invalidate_CMCC_cache(); - #else - NVMCTRL->ADDR.reg = ((uint32_t)flash_ptr) / 2; - NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_ER; - while (!NVMCTRL->INTFLAG.bit.READY) { } - #endif + NVMCTRL->ADDR.reg = ((uint32_t)flash_ptr) / 2; + NVMCTRL->CTRLA.reg = NVMCTRL_CTRLA_CMDEX_KEY | NVMCTRL_CTRLA_CMD_ER; + while (!NVMCTRL->INTFLAG.bit.READY) + { + } } #endif From 6c4a10e189e81b553d854b92862be24e0177501e Mon Sep 17 00:00:00 2001 From: OnlineCaveman <115506475+OnlineCaveman@users.noreply.github.com> Date: Mon, 17 Oct 2022 19:51:31 +0200 Subject: [PATCH 03/11] Fault in change tracking Renaming subdir knx to force changes --- src/{knx => knxold}/address_table_object.cpp | 0 src/{knx => knxold}/address_table_object.h | 0 src/{knx => knxold}/aes.c | 0 src/{knx => knxold}/aes.h | 0 src/{knx => knxold}/aes.hpp | 0 src/{knx => knxold}/apdu.cpp | 0 src/{knx => knxold}/apdu.h | 0 src/{knx => knxold}/application_layer.cpp | 0 src/{knx => knxold}/application_layer.h | 0 .../application_program_object.cpp | 0 .../application_program_object.h | 0 .../association_table_object.cpp | 0 .../association_table_object.h | 0 src/{knx => knxold}/bau.cpp | 0 src/{knx => knxold}/bau.h | 0 src/{knx => knxold}/bau07B0.cpp | 0 src/{knx => knxold}/bau07B0.h | 0 src/{knx => knxold}/bau091A.cpp | 0 src/{knx => knxold}/bau091A.h | 0 src/{knx => knxold}/bau27B0.cpp | 0 src/{knx => knxold}/bau27B0.h | 0 src/{knx => knxold}/bau2920.cpp | 0 src/{knx => knxold}/bau2920.h | 0 src/{knx => knxold}/bau57B0.cpp | 0 src/{knx => knxold}/bau57B0.h | 0 src/{knx => knxold}/bau_systemB.cpp | 0 src/{knx => knxold}/bau_systemB.h | 0 src/{knx => knxold}/bau_systemB_coupler.cpp | 0 src/{knx => knxold}/bau_systemB_coupler.h | 0 src/{knx => knxold}/bau_systemB_device.cpp | 0 src/{knx => knxold}/bau_systemB_device.h | 0 src/{knx => knxold}/bits.cpp | 0 src/{knx => knxold}/bits.h | 0 src/{knx => knxold}/callback_property.h | 0 src/{knx => knxold}/cemi_frame.cpp | 0 src/{knx => knxold}/cemi_frame.h | 0 src/{knx => knxold}/cemi_server.cpp | 0 src/{knx => knxold}/cemi_server.h | 0 src/{knx => knxold}/cemi_server_object.cpp | 0 src/{knx => knxold}/cemi_server_object.h | 0 src/{knx => knxold}/config.h | 0 src/{knx => knxold}/data_link_layer.cpp | 0 src/{knx => knxold}/data_link_layer.h | 0 src/{knx => knxold}/data_property.cpp | 0 src/{knx => knxold}/data_property.h | 0 src/{knx => knxold}/datapoint_types.cpp | 0 src/{knx => knxold}/datapoint_types.h | 0 src/{knx => knxold}/device_object.cpp | 0 src/{knx => knxold}/device_object.h | 0 src/{knx => knxold}/dpt.cpp | 0 src/{knx => knxold}/dpt.h | 0 src/{knx => knxold}/dptconvert.cpp | 0 src/{knx => knxold}/dptconvert.h | 0 src/{knx => knxold}/function_property.h | 0 src/{knx => knxold}/group_object.cpp | 0 src/{knx => knxold}/group_object.h | 0 .../group_object_table_object.cpp | 0 .../group_object_table_object.h | 0 src/{knx => knxold}/interface_object.cpp | 0 src/{knx => knxold}/interface_object.h | 0 src/{knx => knxold}/ip_data_link_layer.cpp | 0 src/{knx => knxold}/ip_data_link_layer.h | 0 .../ip_host_protocol_address_information.cpp | 0 .../ip_host_protocol_address_information.h | 0 src/{knx => knxold}/ip_parameter_object.cpp | 0 src/{knx => knxold}/ip_parameter_object.h | 0 .../knx_ip_device_information_dib.cpp | 0 .../knx_ip_device_information_dib.h | 0 src/{knx => knxold}/knx_ip_dib.cpp | 0 src/{knx => knxold}/knx_ip_dib.h | 0 src/{knx => knxold}/knx_ip_frame.cpp | 0 src/{knx => knxold}/knx_ip_frame.h | 0 .../knx_ip_routing_indication.cpp | 0 .../knx_ip_routing_indication.h | 0 src/{knx => knxold}/knx_ip_search_request.cpp | 0 src/{knx => knxold}/knx_ip_search_request.h | 0 .../knx_ip_search_response.cpp | 0 src/{knx => knxold}/knx_ip_search_response.h | 0 .../knx_ip_supported_service_dib.cpp | 0 .../knx_ip_supported_service_dib.h | 0 src/{knx => knxold}/knx_types.h | 0 src/{knx => knxold}/knx_value.cpp | 1122 ++++++++--------- src/{knx => knxold}/knx_value.h | 0 src/{knx => knxold}/memory.cpp | 0 src/{knx => knxold}/memory.h | 0 src/{knx => knxold}/network_layer.cpp | 0 src/{knx => knxold}/network_layer.h | 0 src/{knx => knxold}/network_layer_coupler.cpp | 0 src/{knx => knxold}/network_layer_coupler.h | 0 src/{knx => knxold}/network_layer_device.cpp | 0 src/{knx => knxold}/network_layer_device.h | 0 src/{knx => knxold}/network_layer_entity.cpp | 0 src/{knx => knxold}/network_layer_entity.h | 0 src/{knx => knxold}/npdu.cpp | 0 src/{knx => knxold}/npdu.h | 0 src/{knx => knxold}/platform.cpp | 0 src/{knx => knxold}/platform.h | 0 src/{knx => knxold}/property.cpp | 0 src/{knx => knxold}/property.h | 0 src/{knx => knxold}/rf_data_link_layer.cpp | 0 src/{knx => knxold}/rf_data_link_layer.h | 0 src/{knx => knxold}/rf_medium_object.cpp | 0 src/{knx => knxold}/rf_medium_object.h | 0 src/{knx => knxold}/rf_physical_layer.h | 0 .../rf_physical_layer_cc1101.cpp | 0 .../rf_physical_layer_cc1101.h | 0 .../rf_physical_layer_cc1310.cpp | 0 .../rf_physical_layer_cc1310.h | 0 src/{knx => knxold}/router_object.cpp | 0 src/{knx => knxold}/router_object.h | 0 src/{knx => knxold}/save_restore.h | 0 .../secure_application_layer.cpp | 0 .../secure_application_layer.h | 0 .../security_interface_object.cpp | 0 .../security_interface_object.h | 0 src/{knx => knxold}/simple_map.h | 0 src/{knx => knxold}/table_object.cpp | 0 src/{knx => knxold}/table_object.h | 0 src/{knx => knxold}/tpdu.cpp | 0 src/{knx => knxold}/tpdu.h | 0 .../tpuart_data_link_layer.cpp | 0 src/{knx => knxold}/tpuart_data_link_layer.h | 0 src/{knx => knxold}/transport_layer.cpp | 0 src/{knx => knxold}/transport_layer.h | 0 src/{knx => knxold}/usb_tunnel_interface.cpp | 0 src/{knx => knxold}/usb_tunnel_interface.h | 0 126 files changed, 561 insertions(+), 561 deletions(-) rename src/{knx => knxold}/address_table_object.cpp (100%) rename src/{knx => knxold}/address_table_object.h (100%) rename src/{knx => knxold}/aes.c (100%) rename src/{knx => knxold}/aes.h (100%) rename src/{knx => knxold}/aes.hpp (100%) rename src/{knx => knxold}/apdu.cpp (100%) rename src/{knx => knxold}/apdu.h (100%) rename src/{knx => knxold}/application_layer.cpp (100%) rename src/{knx => knxold}/application_layer.h (100%) rename src/{knx => knxold}/application_program_object.cpp (100%) rename src/{knx => knxold}/application_program_object.h (100%) rename src/{knx => knxold}/association_table_object.cpp (100%) rename src/{knx => knxold}/association_table_object.h (100%) rename src/{knx => knxold}/bau.cpp (100%) rename src/{knx => knxold}/bau.h (100%) rename src/{knx => knxold}/bau07B0.cpp (100%) rename src/{knx => knxold}/bau07B0.h (100%) rename src/{knx => knxold}/bau091A.cpp (100%) rename src/{knx => knxold}/bau091A.h (100%) rename src/{knx => knxold}/bau27B0.cpp (100%) rename src/{knx => knxold}/bau27B0.h (100%) rename src/{knx => knxold}/bau2920.cpp (100%) rename src/{knx => knxold}/bau2920.h (100%) rename src/{knx => knxold}/bau57B0.cpp (100%) rename src/{knx => knxold}/bau57B0.h (100%) rename src/{knx => knxold}/bau_systemB.cpp (100%) rename src/{knx => knxold}/bau_systemB.h (100%) rename src/{knx => knxold}/bau_systemB_coupler.cpp (100%) rename src/{knx => knxold}/bau_systemB_coupler.h (100%) rename src/{knx => knxold}/bau_systemB_device.cpp (100%) rename src/{knx => knxold}/bau_systemB_device.h (100%) rename src/{knx => knxold}/bits.cpp (100%) rename src/{knx => knxold}/bits.h (100%) rename src/{knx => knxold}/callback_property.h (100%) rename src/{knx => knxold}/cemi_frame.cpp (100%) rename src/{knx => knxold}/cemi_frame.h (100%) rename src/{knx => knxold}/cemi_server.cpp (100%) rename src/{knx => knxold}/cemi_server.h (100%) rename src/{knx => knxold}/cemi_server_object.cpp (100%) rename src/{knx => knxold}/cemi_server_object.h (100%) rename src/{knx => knxold}/config.h (100%) rename src/{knx => knxold}/data_link_layer.cpp (100%) rename src/{knx => knxold}/data_link_layer.h (100%) rename src/{knx => knxold}/data_property.cpp (100%) rename src/{knx => knxold}/data_property.h (100%) rename src/{knx => knxold}/datapoint_types.cpp (100%) rename src/{knx => knxold}/datapoint_types.h (100%) rename src/{knx => knxold}/device_object.cpp (100%) rename src/{knx => knxold}/device_object.h (100%) rename src/{knx => knxold}/dpt.cpp (100%) rename src/{knx => knxold}/dpt.h (100%) rename src/{knx => knxold}/dptconvert.cpp (100%) rename src/{knx => knxold}/dptconvert.h (100%) rename src/{knx => knxold}/function_property.h (100%) rename src/{knx => knxold}/group_object.cpp (100%) rename src/{knx => knxold}/group_object.h (100%) rename src/{knx => knxold}/group_object_table_object.cpp (100%) rename src/{knx => knxold}/group_object_table_object.h (100%) rename src/{knx => knxold}/interface_object.cpp (100%) rename src/{knx => knxold}/interface_object.h (100%) rename src/{knx => knxold}/ip_data_link_layer.cpp (100%) rename src/{knx => knxold}/ip_data_link_layer.h (100%) rename src/{knx => knxold}/ip_host_protocol_address_information.cpp (100%) rename src/{knx => knxold}/ip_host_protocol_address_information.h (100%) rename src/{knx => knxold}/ip_parameter_object.cpp (100%) rename src/{knx => knxold}/ip_parameter_object.h (100%) rename src/{knx => knxold}/knx_ip_device_information_dib.cpp (100%) rename src/{knx => knxold}/knx_ip_device_information_dib.h (100%) rename src/{knx => knxold}/knx_ip_dib.cpp (100%) rename src/{knx => knxold}/knx_ip_dib.h (100%) rename src/{knx => knxold}/knx_ip_frame.cpp (100%) rename src/{knx => knxold}/knx_ip_frame.h (100%) rename src/{knx => knxold}/knx_ip_routing_indication.cpp (100%) rename src/{knx => knxold}/knx_ip_routing_indication.h (100%) rename src/{knx => knxold}/knx_ip_search_request.cpp (100%) rename src/{knx => knxold}/knx_ip_search_request.h (100%) rename src/{knx => knxold}/knx_ip_search_response.cpp (100%) rename src/{knx => knxold}/knx_ip_search_response.h (100%) rename src/{knx => knxold}/knx_ip_supported_service_dib.cpp (100%) rename src/{knx => knxold}/knx_ip_supported_service_dib.h (100%) rename src/{knx => knxold}/knx_types.h (100%) rename src/{knx => knxold}/knx_value.cpp (95%) rename src/{knx => knxold}/knx_value.h (100%) rename src/{knx => knxold}/memory.cpp (100%) rename src/{knx => knxold}/memory.h (100%) rename src/{knx => knxold}/network_layer.cpp (100%) rename src/{knx => knxold}/network_layer.h (100%) rename src/{knx => knxold}/network_layer_coupler.cpp (100%) rename src/{knx => knxold}/network_layer_coupler.h (100%) rename src/{knx => knxold}/network_layer_device.cpp (100%) rename src/{knx => knxold}/network_layer_device.h (100%) rename src/{knx => knxold}/network_layer_entity.cpp (100%) rename src/{knx => knxold}/network_layer_entity.h (100%) rename src/{knx => knxold}/npdu.cpp (100%) rename src/{knx => knxold}/npdu.h (100%) rename src/{knx => knxold}/platform.cpp (100%) rename src/{knx => knxold}/platform.h (100%) rename src/{knx => knxold}/property.cpp (100%) rename src/{knx => knxold}/property.h (100%) rename src/{knx => knxold}/rf_data_link_layer.cpp (100%) rename src/{knx => knxold}/rf_data_link_layer.h (100%) rename src/{knx => knxold}/rf_medium_object.cpp (100%) rename src/{knx => knxold}/rf_medium_object.h (100%) rename src/{knx => knxold}/rf_physical_layer.h (100%) rename src/{knx => knxold}/rf_physical_layer_cc1101.cpp (100%) rename src/{knx => knxold}/rf_physical_layer_cc1101.h (100%) rename src/{knx => knxold}/rf_physical_layer_cc1310.cpp (100%) rename src/{knx => knxold}/rf_physical_layer_cc1310.h (100%) rename src/{knx => knxold}/router_object.cpp (100%) rename src/{knx => knxold}/router_object.h (100%) rename src/{knx => knxold}/save_restore.h (100%) rename src/{knx => knxold}/secure_application_layer.cpp (100%) rename src/{knx => knxold}/secure_application_layer.h (100%) rename src/{knx => knxold}/security_interface_object.cpp (100%) rename src/{knx => knxold}/security_interface_object.h (100%) rename src/{knx => knxold}/simple_map.h (100%) rename src/{knx => knxold}/table_object.cpp (100%) rename src/{knx => knxold}/table_object.h (100%) rename src/{knx => knxold}/tpdu.cpp (100%) rename src/{knx => knxold}/tpdu.h (100%) rename src/{knx => knxold}/tpuart_data_link_layer.cpp (100%) rename src/{knx => knxold}/tpuart_data_link_layer.h (100%) rename src/{knx => knxold}/transport_layer.cpp (100%) rename src/{knx => knxold}/transport_layer.h (100%) rename src/{knx => knxold}/usb_tunnel_interface.cpp (100%) rename src/{knx => knxold}/usb_tunnel_interface.h (100%) diff --git a/src/knx/address_table_object.cpp b/src/knxold/address_table_object.cpp similarity index 100% rename from src/knx/address_table_object.cpp rename to src/knxold/address_table_object.cpp diff --git a/src/knx/address_table_object.h b/src/knxold/address_table_object.h similarity index 100% rename from src/knx/address_table_object.h rename to src/knxold/address_table_object.h diff --git a/src/knx/aes.c b/src/knxold/aes.c similarity index 100% rename from src/knx/aes.c rename to src/knxold/aes.c diff --git a/src/knx/aes.h b/src/knxold/aes.h similarity index 100% rename from src/knx/aes.h rename to src/knxold/aes.h diff --git a/src/knx/aes.hpp b/src/knxold/aes.hpp similarity index 100% rename from src/knx/aes.hpp rename to src/knxold/aes.hpp diff --git a/src/knx/apdu.cpp b/src/knxold/apdu.cpp similarity index 100% rename from src/knx/apdu.cpp rename to src/knxold/apdu.cpp diff --git a/src/knx/apdu.h b/src/knxold/apdu.h similarity index 100% rename from src/knx/apdu.h rename to src/knxold/apdu.h diff --git a/src/knx/application_layer.cpp b/src/knxold/application_layer.cpp similarity index 100% rename from src/knx/application_layer.cpp rename to src/knxold/application_layer.cpp diff --git a/src/knx/application_layer.h b/src/knxold/application_layer.h similarity index 100% rename from src/knx/application_layer.h rename to src/knxold/application_layer.h diff --git a/src/knx/application_program_object.cpp b/src/knxold/application_program_object.cpp similarity index 100% rename from src/knx/application_program_object.cpp rename to src/knxold/application_program_object.cpp diff --git a/src/knx/application_program_object.h b/src/knxold/application_program_object.h similarity index 100% rename from src/knx/application_program_object.h rename to src/knxold/application_program_object.h diff --git a/src/knx/association_table_object.cpp b/src/knxold/association_table_object.cpp similarity index 100% rename from src/knx/association_table_object.cpp rename to src/knxold/association_table_object.cpp diff --git a/src/knx/association_table_object.h b/src/knxold/association_table_object.h similarity index 100% rename from src/knx/association_table_object.h rename to src/knxold/association_table_object.h diff --git a/src/knx/bau.cpp b/src/knxold/bau.cpp similarity index 100% rename from src/knx/bau.cpp rename to src/knxold/bau.cpp diff --git a/src/knx/bau.h b/src/knxold/bau.h similarity index 100% rename from src/knx/bau.h rename to src/knxold/bau.h diff --git a/src/knx/bau07B0.cpp b/src/knxold/bau07B0.cpp similarity index 100% rename from src/knx/bau07B0.cpp rename to src/knxold/bau07B0.cpp diff --git a/src/knx/bau07B0.h b/src/knxold/bau07B0.h similarity index 100% rename from src/knx/bau07B0.h rename to src/knxold/bau07B0.h diff --git a/src/knx/bau091A.cpp b/src/knxold/bau091A.cpp similarity index 100% rename from src/knx/bau091A.cpp rename to src/knxold/bau091A.cpp diff --git a/src/knx/bau091A.h b/src/knxold/bau091A.h similarity index 100% rename from src/knx/bau091A.h rename to src/knxold/bau091A.h diff --git a/src/knx/bau27B0.cpp b/src/knxold/bau27B0.cpp similarity index 100% rename from src/knx/bau27B0.cpp rename to src/knxold/bau27B0.cpp diff --git a/src/knx/bau27B0.h b/src/knxold/bau27B0.h similarity index 100% rename from src/knx/bau27B0.h rename to src/knxold/bau27B0.h diff --git a/src/knx/bau2920.cpp b/src/knxold/bau2920.cpp similarity index 100% rename from src/knx/bau2920.cpp rename to src/knxold/bau2920.cpp diff --git a/src/knx/bau2920.h b/src/knxold/bau2920.h similarity index 100% rename from src/knx/bau2920.h rename to src/knxold/bau2920.h diff --git a/src/knx/bau57B0.cpp b/src/knxold/bau57B0.cpp similarity index 100% rename from src/knx/bau57B0.cpp rename to src/knxold/bau57B0.cpp diff --git a/src/knx/bau57B0.h b/src/knxold/bau57B0.h similarity index 100% rename from src/knx/bau57B0.h rename to src/knxold/bau57B0.h diff --git a/src/knx/bau_systemB.cpp b/src/knxold/bau_systemB.cpp similarity index 100% rename from src/knx/bau_systemB.cpp rename to src/knxold/bau_systemB.cpp diff --git a/src/knx/bau_systemB.h b/src/knxold/bau_systemB.h similarity index 100% rename from src/knx/bau_systemB.h rename to src/knxold/bau_systemB.h diff --git a/src/knx/bau_systemB_coupler.cpp b/src/knxold/bau_systemB_coupler.cpp similarity index 100% rename from src/knx/bau_systemB_coupler.cpp rename to src/knxold/bau_systemB_coupler.cpp diff --git a/src/knx/bau_systemB_coupler.h b/src/knxold/bau_systemB_coupler.h similarity index 100% rename from src/knx/bau_systemB_coupler.h rename to src/knxold/bau_systemB_coupler.h diff --git a/src/knx/bau_systemB_device.cpp b/src/knxold/bau_systemB_device.cpp similarity index 100% rename from src/knx/bau_systemB_device.cpp rename to src/knxold/bau_systemB_device.cpp diff --git a/src/knx/bau_systemB_device.h b/src/knxold/bau_systemB_device.h similarity index 100% rename from src/knx/bau_systemB_device.h rename to src/knxold/bau_systemB_device.h diff --git a/src/knx/bits.cpp b/src/knxold/bits.cpp similarity index 100% rename from src/knx/bits.cpp rename to src/knxold/bits.cpp diff --git a/src/knx/bits.h b/src/knxold/bits.h similarity index 100% rename from src/knx/bits.h rename to src/knxold/bits.h diff --git a/src/knx/callback_property.h b/src/knxold/callback_property.h similarity index 100% rename from src/knx/callback_property.h rename to src/knxold/callback_property.h diff --git a/src/knx/cemi_frame.cpp b/src/knxold/cemi_frame.cpp similarity index 100% rename from src/knx/cemi_frame.cpp rename to src/knxold/cemi_frame.cpp diff --git a/src/knx/cemi_frame.h b/src/knxold/cemi_frame.h similarity index 100% rename from src/knx/cemi_frame.h rename to src/knxold/cemi_frame.h diff --git a/src/knx/cemi_server.cpp b/src/knxold/cemi_server.cpp similarity index 100% rename from src/knx/cemi_server.cpp rename to src/knxold/cemi_server.cpp diff --git a/src/knx/cemi_server.h b/src/knxold/cemi_server.h similarity index 100% rename from src/knx/cemi_server.h rename to src/knxold/cemi_server.h diff --git a/src/knx/cemi_server_object.cpp b/src/knxold/cemi_server_object.cpp similarity index 100% rename from src/knx/cemi_server_object.cpp rename to src/knxold/cemi_server_object.cpp diff --git a/src/knx/cemi_server_object.h b/src/knxold/cemi_server_object.h similarity index 100% rename from src/knx/cemi_server_object.h rename to src/knxold/cemi_server_object.h diff --git a/src/knx/config.h b/src/knxold/config.h similarity index 100% rename from src/knx/config.h rename to src/knxold/config.h diff --git a/src/knx/data_link_layer.cpp b/src/knxold/data_link_layer.cpp similarity index 100% rename from src/knx/data_link_layer.cpp rename to src/knxold/data_link_layer.cpp diff --git a/src/knx/data_link_layer.h b/src/knxold/data_link_layer.h similarity index 100% rename from src/knx/data_link_layer.h rename to src/knxold/data_link_layer.h diff --git a/src/knx/data_property.cpp b/src/knxold/data_property.cpp similarity index 100% rename from src/knx/data_property.cpp rename to src/knxold/data_property.cpp diff --git a/src/knx/data_property.h b/src/knxold/data_property.h similarity index 100% rename from src/knx/data_property.h rename to src/knxold/data_property.h diff --git a/src/knx/datapoint_types.cpp b/src/knxold/datapoint_types.cpp similarity index 100% rename from src/knx/datapoint_types.cpp rename to src/knxold/datapoint_types.cpp diff --git a/src/knx/datapoint_types.h b/src/knxold/datapoint_types.h similarity index 100% rename from src/knx/datapoint_types.h rename to src/knxold/datapoint_types.h diff --git a/src/knx/device_object.cpp b/src/knxold/device_object.cpp similarity index 100% rename from src/knx/device_object.cpp rename to src/knxold/device_object.cpp diff --git a/src/knx/device_object.h b/src/knxold/device_object.h similarity index 100% rename from src/knx/device_object.h rename to src/knxold/device_object.h diff --git a/src/knx/dpt.cpp b/src/knxold/dpt.cpp similarity index 100% rename from src/knx/dpt.cpp rename to src/knxold/dpt.cpp diff --git a/src/knx/dpt.h b/src/knxold/dpt.h similarity index 100% rename from src/knx/dpt.h rename to src/knxold/dpt.h diff --git a/src/knx/dptconvert.cpp b/src/knxold/dptconvert.cpp similarity index 100% rename from src/knx/dptconvert.cpp rename to src/knxold/dptconvert.cpp diff --git a/src/knx/dptconvert.h b/src/knxold/dptconvert.h similarity index 100% rename from src/knx/dptconvert.h rename to src/knxold/dptconvert.h diff --git a/src/knx/function_property.h b/src/knxold/function_property.h similarity index 100% rename from src/knx/function_property.h rename to src/knxold/function_property.h diff --git a/src/knx/group_object.cpp b/src/knxold/group_object.cpp similarity index 100% rename from src/knx/group_object.cpp rename to src/knxold/group_object.cpp diff --git a/src/knx/group_object.h b/src/knxold/group_object.h similarity index 100% rename from src/knx/group_object.h rename to src/knxold/group_object.h diff --git a/src/knx/group_object_table_object.cpp b/src/knxold/group_object_table_object.cpp similarity index 100% rename from src/knx/group_object_table_object.cpp rename to src/knxold/group_object_table_object.cpp diff --git a/src/knx/group_object_table_object.h b/src/knxold/group_object_table_object.h similarity index 100% rename from src/knx/group_object_table_object.h rename to src/knxold/group_object_table_object.h diff --git a/src/knx/interface_object.cpp b/src/knxold/interface_object.cpp similarity index 100% rename from src/knx/interface_object.cpp rename to src/knxold/interface_object.cpp diff --git a/src/knx/interface_object.h b/src/knxold/interface_object.h similarity index 100% rename from src/knx/interface_object.h rename to src/knxold/interface_object.h diff --git a/src/knx/ip_data_link_layer.cpp b/src/knxold/ip_data_link_layer.cpp similarity index 100% rename from src/knx/ip_data_link_layer.cpp rename to src/knxold/ip_data_link_layer.cpp diff --git a/src/knx/ip_data_link_layer.h b/src/knxold/ip_data_link_layer.h similarity index 100% rename from src/knx/ip_data_link_layer.h rename to src/knxold/ip_data_link_layer.h diff --git a/src/knx/ip_host_protocol_address_information.cpp b/src/knxold/ip_host_protocol_address_information.cpp similarity index 100% rename from src/knx/ip_host_protocol_address_information.cpp rename to src/knxold/ip_host_protocol_address_information.cpp diff --git a/src/knx/ip_host_protocol_address_information.h b/src/knxold/ip_host_protocol_address_information.h similarity index 100% rename from src/knx/ip_host_protocol_address_information.h rename to src/knxold/ip_host_protocol_address_information.h diff --git a/src/knx/ip_parameter_object.cpp b/src/knxold/ip_parameter_object.cpp similarity index 100% rename from src/knx/ip_parameter_object.cpp rename to src/knxold/ip_parameter_object.cpp diff --git a/src/knx/ip_parameter_object.h b/src/knxold/ip_parameter_object.h similarity index 100% rename from src/knx/ip_parameter_object.h rename to src/knxold/ip_parameter_object.h diff --git a/src/knx/knx_ip_device_information_dib.cpp b/src/knxold/knx_ip_device_information_dib.cpp similarity index 100% rename from src/knx/knx_ip_device_information_dib.cpp rename to src/knxold/knx_ip_device_information_dib.cpp diff --git a/src/knx/knx_ip_device_information_dib.h b/src/knxold/knx_ip_device_information_dib.h similarity index 100% rename from src/knx/knx_ip_device_information_dib.h rename to src/knxold/knx_ip_device_information_dib.h diff --git a/src/knx/knx_ip_dib.cpp b/src/knxold/knx_ip_dib.cpp similarity index 100% rename from src/knx/knx_ip_dib.cpp rename to src/knxold/knx_ip_dib.cpp diff --git a/src/knx/knx_ip_dib.h b/src/knxold/knx_ip_dib.h similarity index 100% rename from src/knx/knx_ip_dib.h rename to src/knxold/knx_ip_dib.h diff --git a/src/knx/knx_ip_frame.cpp b/src/knxold/knx_ip_frame.cpp similarity index 100% rename from src/knx/knx_ip_frame.cpp rename to src/knxold/knx_ip_frame.cpp diff --git a/src/knx/knx_ip_frame.h b/src/knxold/knx_ip_frame.h similarity index 100% rename from src/knx/knx_ip_frame.h rename to src/knxold/knx_ip_frame.h diff --git a/src/knx/knx_ip_routing_indication.cpp b/src/knxold/knx_ip_routing_indication.cpp similarity index 100% rename from src/knx/knx_ip_routing_indication.cpp rename to src/knxold/knx_ip_routing_indication.cpp diff --git a/src/knx/knx_ip_routing_indication.h b/src/knxold/knx_ip_routing_indication.h similarity index 100% rename from src/knx/knx_ip_routing_indication.h rename to src/knxold/knx_ip_routing_indication.h diff --git a/src/knx/knx_ip_search_request.cpp b/src/knxold/knx_ip_search_request.cpp similarity index 100% rename from src/knx/knx_ip_search_request.cpp rename to src/knxold/knx_ip_search_request.cpp diff --git a/src/knx/knx_ip_search_request.h b/src/knxold/knx_ip_search_request.h similarity index 100% rename from src/knx/knx_ip_search_request.h rename to src/knxold/knx_ip_search_request.h diff --git a/src/knx/knx_ip_search_response.cpp b/src/knxold/knx_ip_search_response.cpp similarity index 100% rename from src/knx/knx_ip_search_response.cpp rename to src/knxold/knx_ip_search_response.cpp diff --git a/src/knx/knx_ip_search_response.h b/src/knxold/knx_ip_search_response.h similarity index 100% rename from src/knx/knx_ip_search_response.h rename to src/knxold/knx_ip_search_response.h diff --git a/src/knx/knx_ip_supported_service_dib.cpp b/src/knxold/knx_ip_supported_service_dib.cpp similarity index 100% rename from src/knx/knx_ip_supported_service_dib.cpp rename to src/knxold/knx_ip_supported_service_dib.cpp diff --git a/src/knx/knx_ip_supported_service_dib.h b/src/knxold/knx_ip_supported_service_dib.h similarity index 100% rename from src/knx/knx_ip_supported_service_dib.h rename to src/knxold/knx_ip_supported_service_dib.h diff --git a/src/knx/knx_types.h b/src/knxold/knx_types.h similarity index 100% rename from src/knx/knx_types.h rename to src/knxold/knx_types.h diff --git a/src/knx/knx_value.cpp b/src/knxold/knx_value.cpp similarity index 95% rename from src/knx/knx_value.cpp rename to src/knxold/knx_value.cpp index c8d9f54..d255c88 100644 --- a/src/knx/knx_value.cpp +++ b/src/knxold/knx_value.cpp @@ -1,562 +1,562 @@ -#include "knx_value.h" - -#include -#include -#include - -KNXValue::KNXValue(bool value) -{ - _value.boolValue = value; - _type = BoolType; -} - -KNXValue::KNXValue(uint8_t value) -{ - _value.ucharValue = value; - _type = UCharType; -} - -KNXValue::KNXValue(uint16_t value) -{ - _value.ushortValue = value; - _type = UShortType; -} - -KNXValue::KNXValue(uint32_t value) -{ - _value.uintValue = value; - _type = UIntType; -} - -KNXValue::KNXValue(uint64_t value) -{ - _value.ulongValue = value; - _type = ULongType; -} - -KNXValue::KNXValue(int8_t value) -{ - _value.charValue = value; - _type = CharType; -} - -KNXValue::KNXValue(int16_t value) -{ - _value.shortValue = value; - _type = ShortType; -} - -KNXValue::KNXValue(int32_t value) -{ - _value.intValue = value; - _type = IntType; -} - -KNXValue::KNXValue(int64_t value) -{ - _value.longValue = value; - _type = LongType; -} - -KNXValue::KNXValue(double value) -{ - _value.doubleValue = value; - _type = DoubleType; -} - -KNXValue::KNXValue(const char* value) -{ - _value.stringValue = value; - _type = StringType; -} - -KNXValue::KNXValue(struct tm value) -{ - _value.timeValue = value; - _type = TimeType; -} - -KNXValue::operator bool() const -{ - return boolValue(); -} - -KNXValue::operator uint8_t() const -{ - return ucharValue(); -} - -KNXValue::operator uint16_t() const -{ - return ushortValue(); -} - -KNXValue::operator uint32_t() const -{ - return uintValue(); -} - -KNXValue::operator uint64_t() const -{ - return ulongValue(); -} - -KNXValue::operator int8_t() const -{ - return charValue(); -} - -KNXValue::operator int16_t() const -{ - return shortValue(); -} - -KNXValue::operator int32_t() const -{ - return intValue(); -} - -KNXValue::operator int64_t() const -{ - return longValue(); -} - -KNXValue::operator double() const -{ - return doubleValue(); -} - -KNXValue::operator const char*() const -{ - return stringValue(); -} - -KNXValue::operator struct tm() const -{ - return timeValue(); -} - -KNXValue& KNXValue::operator=(const bool value) -{ - _value.boolValue = value; - _type = BoolType; - return *this; -} - -KNXValue& KNXValue::operator=(const uint8_t value) -{ - _value.ucharValue = value; - _type = UCharType; - return *this; -} - -KNXValue& KNXValue::operator=(const uint16_t value) -{ - _value.ushortValue = value; - _type = UShortType; - return *this; -} - -KNXValue& KNXValue::operator=(const uint32_t value) -{ - _value.uintValue = value; - _type = UIntType; - return *this; -} - -KNXValue& KNXValue::operator=(const uint64_t value) -{ - _value.ulongValue = value; - _type = ULongType; - return *this; -} - -KNXValue& KNXValue::operator=(const int8_t value) -{ - _value.charValue = value; - _type = CharType; - return *this; -} - -KNXValue& KNXValue::operator=(const int16_t value) -{ - _value.shortValue = value; - _type = ShortType; - return *this; -} - -KNXValue& KNXValue::operator=(const int32_t value) -{ - _value.intValue = value; - _type = IntType; - return *this; -} - -KNXValue& KNXValue::operator=(const int64_t value) -{ - _value.longValue = value; - _type = LongType; - return *this; -} - -KNXValue& KNXValue::operator=(const double value) -{ - _value.doubleValue = value; - _type = DoubleType; - return *this; -} - -KNXValue& KNXValue::operator=(const char* value) -{ - _value.stringValue = value; - _type = StringType; - return *this; -} - -KNXValue& KNXValue::operator=(const struct tm value) -{ - _value.timeValue = value; - _type = TimeType; - return *this; -} - -bool KNXValue::boolValue() const -{ - switch (_type) - { - case BoolType: - return _value.boolValue; - case UCharType: - case UShortType: - case UIntType: - case ULongType: - case CharType: - case ShortType: - case IntType: - case LongType: - case TimeType: - return longValue() != 0; - case DoubleType: - return _value.doubleValue != 0; - case StringType: - return strcmp(_value.stringValue, "true") == 0 || strcmp(_value.stringValue, "True") == 0 || longValue() != 0 || doubleValue() != 0; - } - return 0; -} - -uint8_t KNXValue::ucharValue() const -{ - switch (_type) - { - case UCharType: - return _value.ucharValue; - case BoolType: - case UShortType: - case UIntType: - case ULongType: - case TimeType: - return (uint8_t)ulongValue(); - case CharType: - case ShortType: - case IntType: - case LongType: - case DoubleType: - case StringType: - return (uint8_t)longValue(); - } - return 0; -} - -uint16_t KNXValue::ushortValue() const -{ - switch (_type) - { - case UShortType: - return _value.ushortValue; - case BoolType: - case UCharType: - case UIntType: - case ULongType: - case TimeType: - return (uint16_t)ulongValue(); - case CharType: - case ShortType: - case IntType: - case LongType: - case DoubleType: - case StringType: - return (uint16_t)longValue(); - } - return 0; -} - -uint32_t KNXValue::uintValue() const -{ - switch (_type) - { - case UIntType: - return _value.uintValue; - case BoolType: - case UCharType: - case UShortType: - case ULongType: - case TimeType: - return (uint32_t)ulongValue(); - case CharType: - case ShortType: - case IntType: - case LongType: - case DoubleType: - case StringType: - return (uint32_t)longValue(); - } - return 0; -} - -uint64_t KNXValue::ulongValue() const -{ - switch (_type) - { - case ULongType: - return _value.ulongValue; - case BoolType: - return _value.boolValue ? 1 : 0; - case UCharType: - return (uint64_t)_value.ucharValue; - case UShortType: - return (uint64_t)_value.ushortValue; - case UIntType: - return (uint64_t)_value.uintValue; - case TimeType: - { - struct tm* timeptr = const_cast(&_value.timeValue); - return (uint64_t)mktime(timeptr); - } - case CharType: - return (uint64_t)_value.charValue; - case ShortType: - return (uint64_t)_value.shortValue; - case IntType: - return (uint64_t)_value.intValue; - case LongType: - return (uint64_t)_value.longValue; - case DoubleType: - return (uint64_t)_value.doubleValue; - case StringType: -#ifndef KNX_NO_STRTOx_CONVERSION - return (uint64_t)strtoul(_value.stringValue, NULL, 0); -#else - return 0; -#endif - } - return 0; -} - -int8_t KNXValue::charValue() const -{ - switch (_type) - { - case CharType: - return _value.charValue; - case BoolType: - case UCharType: - case UShortType: - case UIntType: - case ULongType: - case TimeType: - return (int8_t)ulongValue(); - case ShortType: - case IntType: - case LongType: - case DoubleType: - case StringType: - return (int8_t)longValue(); - } - return 0; -} - -int16_t KNXValue::shortValue() const -{ - switch (_type) - { - case ShortType: - return _value.shortValue; - case BoolType: - case UCharType: - case UShortType: - case UIntType: - case ULongType: - case TimeType: - return (int16_t)ulongValue(); - case CharType: - case IntType: - case LongType: - case DoubleType: - case StringType: - return (int16_t)longValue(); - } - return 0; -} - -int32_t KNXValue::intValue() const -{ - switch (_type) - { - case IntType: - return _value.shortValue; - case BoolType: - case UCharType: - case UShortType: - case UIntType: - case ULongType: - case TimeType: - return (int32_t)ulongValue(); - case CharType: - case ShortType: - case LongType: - case DoubleType: - case StringType: - return (int32_t)longValue(); - } - return 0; -} - -int64_t KNXValue::longValue() const -{ - switch (_type) - { - case LongType: - return _value.longValue; - case BoolType: - return _value.boolValue ? 1 : 0; - case UCharType: - return (int64_t)_value.ucharValue; - case UShortType: - return (int64_t)_value.ushortValue; - case UIntType: - return (int64_t)_value.uintValue; - case ULongType: - return (int64_t)_value.uintValue; - case TimeType: - return (int64_t)ulongValue(); - case CharType: - return (int64_t)_value.charValue; - case ShortType: - return (int64_t)_value.shortValue; - case IntType: - return (int64_t)_value.intValue; - case DoubleType: - return (int64_t)_value.doubleValue; - case StringType: -#ifndef KNX_NO_STRTOx_CONVERSION - return strtol(_value.stringValue, NULL, 0); -#else - return 0; -#endif - } - return 0; -} - -double KNXValue::doubleValue() const -{ - switch (_type) - { - case DoubleType: - return _value.doubleValue; - case BoolType: - return _value.boolValue ? 1 : 0; - case UCharType: - return _value.ucharValue; - case UShortType: - return _value.ushortValue; - case UIntType: - return _value.uintValue; - case ULongType: - return _value.uintValue; - case TimeType: - return ulongValue(); - case CharType: - return _value.charValue; - case ShortType: - return _value.shortValue; - case IntType: - return _value.intValue; - case LongType: - return _value.longValue; - case StringType: -#ifndef KNX_NO_STRTOx_CONVERSION - return strtod(_value.stringValue, NULL); -#else - return 0; -#endif - } - return 0; -} - -const char* KNXValue::stringValue() const -{ - switch (_type) - { - case DoubleType: - case BoolType: - case UCharType: - case UShortType: - case UIntType: - case ULongType: - case TimeType: - case CharType: - case ShortType: - case IntType: - case LongType: - return ""; // we would have to manage the memory for the string otherwise. Maybe later. - case StringType: - return _value.stringValue; - } - return 0; -} - -struct tm KNXValue::timeValue() const -{ - switch (_type) - { - case TimeType: - return _value.timeValue; - case BoolType: - case UCharType: - case UShortType: - case UIntType: - case ULongType: - case CharType: - case ShortType: - case IntType: - case LongType: - case DoubleType: - case StringType: - { - time_t timeVal = ulongValue(); - struct tm timeStruct; - gmtime_r(&timeVal, &timeStruct); - return timeStruct; - } - } - struct tm tmp = {0}; - return tmp; -} - -KNXValue::KNXValue(float value) -{ - _value.doubleValue = value; - _type = DoubleType; -} - -KNXValue& KNXValue::operator=(const float value) -{ - _value.doubleValue = value; - _type = DoubleType; - return *this; -} - -KNXValue::operator float() const -{ - return doubleValue(); +#include "knx_value.h" + +#include +#include +#include + +KNXValue::KNXValue(bool value) +{ + _value.boolValue = value; + _type = BoolType; +} + +KNXValue::KNXValue(uint8_t value) +{ + _value.ucharValue = value; + _type = UCharType; +} + +KNXValue::KNXValue(uint16_t value) +{ + _value.ushortValue = value; + _type = UShortType; +} + +KNXValue::KNXValue(uint32_t value) +{ + _value.uintValue = value; + _type = UIntType; +} + +KNXValue::KNXValue(uint64_t value) +{ + _value.ulongValue = value; + _type = ULongType; +} + +KNXValue::KNXValue(int8_t value) +{ + _value.charValue = value; + _type = CharType; +} + +KNXValue::KNXValue(int16_t value) +{ + _value.shortValue = value; + _type = ShortType; +} + +KNXValue::KNXValue(int32_t value) +{ + _value.intValue = value; + _type = IntType; +} + +KNXValue::KNXValue(int64_t value) +{ + _value.longValue = value; + _type = LongType; +} + +KNXValue::KNXValue(double value) +{ + _value.doubleValue = value; + _type = DoubleType; +} + +KNXValue::KNXValue(const char* value) +{ + _value.stringValue = value; + _type = StringType; +} + +KNXValue::KNXValue(struct tm value) +{ + _value.timeValue = value; + _type = TimeType; +} + +KNXValue::operator bool() const +{ + return boolValue(); +} + +KNXValue::operator uint8_t() const +{ + return ucharValue(); +} + +KNXValue::operator uint16_t() const +{ + return ushortValue(); +} + +KNXValue::operator uint32_t() const +{ + return uintValue(); +} + +KNXValue::operator uint64_t() const +{ + return ulongValue(); +} + +KNXValue::operator int8_t() const +{ + return charValue(); +} + +KNXValue::operator int16_t() const +{ + return shortValue(); +} + +KNXValue::operator int32_t() const +{ + return intValue(); +} + +KNXValue::operator int64_t() const +{ + return longValue(); +} + +KNXValue::operator double() const +{ + return doubleValue(); +} + +KNXValue::operator const char*() const +{ + return stringValue(); +} + +KNXValue::operator struct tm() const +{ + return timeValue(); +} + +KNXValue& KNXValue::operator=(const bool value) +{ + _value.boolValue = value; + _type = BoolType; + return *this; +} + +KNXValue& KNXValue::operator=(const uint8_t value) +{ + _value.ucharValue = value; + _type = UCharType; + return *this; +} + +KNXValue& KNXValue::operator=(const uint16_t value) +{ + _value.ushortValue = value; + _type = UShortType; + return *this; +} + +KNXValue& KNXValue::operator=(const uint32_t value) +{ + _value.uintValue = value; + _type = UIntType; + return *this; +} + +KNXValue& KNXValue::operator=(const uint64_t value) +{ + _value.ulongValue = value; + _type = ULongType; + return *this; +} + +KNXValue& KNXValue::operator=(const int8_t value) +{ + _value.charValue = value; + _type = CharType; + return *this; +} + +KNXValue& KNXValue::operator=(const int16_t value) +{ + _value.shortValue = value; + _type = ShortType; + return *this; +} + +KNXValue& KNXValue::operator=(const int32_t value) +{ + _value.intValue = value; + _type = IntType; + return *this; +} + +KNXValue& KNXValue::operator=(const int64_t value) +{ + _value.longValue = value; + _type = LongType; + return *this; +} + +KNXValue& KNXValue::operator=(const double value) +{ + _value.doubleValue = value; + _type = DoubleType; + return *this; +} + +KNXValue& KNXValue::operator=(const char* value) +{ + _value.stringValue = value; + _type = StringType; + return *this; +} + +KNXValue& KNXValue::operator=(const struct tm value) +{ + _value.timeValue = value; + _type = TimeType; + return *this; +} + +bool KNXValue::boolValue() const +{ + switch (_type) + { + case BoolType: + return _value.boolValue; + case UCharType: + case UShortType: + case UIntType: + case ULongType: + case CharType: + case ShortType: + case IntType: + case LongType: + case TimeType: + return longValue() != 0; + case DoubleType: + return _value.doubleValue != 0; + case StringType: + return strcmp(_value.stringValue, "true") == 0 || strcmp(_value.stringValue, "True") == 0 || longValue() != 0 || doubleValue() != 0; + } + return 0; +} + +uint8_t KNXValue::ucharValue() const +{ + switch (_type) + { + case UCharType: + return _value.ucharValue; + case BoolType: + case UShortType: + case UIntType: + case ULongType: + case TimeType: + return (uint8_t)ulongValue(); + case CharType: + case ShortType: + case IntType: + case LongType: + case DoubleType: + case StringType: + return (uint8_t)longValue(); + } + return 0; +} + +uint16_t KNXValue::ushortValue() const +{ + switch (_type) + { + case UShortType: + return _value.ushortValue; + case BoolType: + case UCharType: + case UIntType: + case ULongType: + case TimeType: + return (uint16_t)ulongValue(); + case CharType: + case ShortType: + case IntType: + case LongType: + case DoubleType: + case StringType: + return (uint16_t)longValue(); + } + return 0; +} + +uint32_t KNXValue::uintValue() const +{ + switch (_type) + { + case UIntType: + return _value.uintValue; + case BoolType: + case UCharType: + case UShortType: + case ULongType: + case TimeType: + return (uint32_t)ulongValue(); + case CharType: + case ShortType: + case IntType: + case LongType: + case DoubleType: + case StringType: + return (uint32_t)longValue(); + } + return 0; +} + +uint64_t KNXValue::ulongValue() const +{ + switch (_type) + { + case ULongType: + return _value.ulongValue; + case BoolType: + return _value.boolValue ? 1 : 0; + case UCharType: + return (uint64_t)_value.ucharValue; + case UShortType: + return (uint64_t)_value.ushortValue; + case UIntType: + return (uint64_t)_value.uintValue; + case TimeType: + { + struct tm* timeptr = const_cast(&_value.timeValue); + return (uint64_t)mktime(timeptr); + } + case CharType: + return (uint64_t)_value.charValue; + case ShortType: + return (uint64_t)_value.shortValue; + case IntType: + return (uint64_t)_value.intValue; + case LongType: + return (uint64_t)_value.longValue; + case DoubleType: + return (uint64_t)_value.doubleValue; + case StringType: +#ifndef KNX_NO_STRTOx_CONVERSION + return (uint64_t)strtoul(_value.stringValue, NULL, 0); +#else + return 0; +#endif + } + return 0; +} + +int8_t KNXValue::charValue() const +{ + switch (_type) + { + case CharType: + return _value.charValue; + case BoolType: + case UCharType: + case UShortType: + case UIntType: + case ULongType: + case TimeType: + return (int8_t)ulongValue(); + case ShortType: + case IntType: + case LongType: + case DoubleType: + case StringType: + return (int8_t)longValue(); + } + return 0; +} + +int16_t KNXValue::shortValue() const +{ + switch (_type) + { + case ShortType: + return _value.shortValue; + case BoolType: + case UCharType: + case UShortType: + case UIntType: + case ULongType: + case TimeType: + return (int16_t)ulongValue(); + case CharType: + case IntType: + case LongType: + case DoubleType: + case StringType: + return (int16_t)longValue(); + } + return 0; +} + +int32_t KNXValue::intValue() const +{ + switch (_type) + { + case IntType: + return _value.shortValue; + case BoolType: + case UCharType: + case UShortType: + case UIntType: + case ULongType: + case TimeType: + return (int32_t)ulongValue(); + case CharType: + case ShortType: + case LongType: + case DoubleType: + case StringType: + return (int32_t)longValue(); + } + return 0; +} + +int64_t KNXValue::longValue() const +{ + switch (_type) + { + case LongType: + return _value.longValue; + case BoolType: + return _value.boolValue ? 1 : 0; + case UCharType: + return (int64_t)_value.ucharValue; + case UShortType: + return (int64_t)_value.ushortValue; + case UIntType: + return (int64_t)_value.uintValue; + case ULongType: + return (int64_t)_value.uintValue; + case TimeType: + return (int64_t)ulongValue(); + case CharType: + return (int64_t)_value.charValue; + case ShortType: + return (int64_t)_value.shortValue; + case IntType: + return (int64_t)_value.intValue; + case DoubleType: + return (int64_t)_value.doubleValue; + case StringType: +#ifndef KNX_NO_STRTOx_CONVERSION + return strtol(_value.stringValue, NULL, 0); +#else + return 0; +#endif + } + return 0; +} + +double KNXValue::doubleValue() const +{ + switch (_type) + { + case DoubleType: + return _value.doubleValue; + case BoolType: + return _value.boolValue ? 1 : 0; + case UCharType: + return _value.ucharValue; + case UShortType: + return _value.ushortValue; + case UIntType: + return _value.uintValue; + case ULongType: + return _value.uintValue; + case TimeType: + return ulongValue(); + case CharType: + return _value.charValue; + case ShortType: + return _value.shortValue; + case IntType: + return _value.intValue; + case LongType: + return _value.longValue; + case StringType: +#ifndef KNX_NO_STRTOx_CONVERSION + return strtod(_value.stringValue, NULL); +#else + return 0; +#endif + } + return 0; +} + +const char* KNXValue::stringValue() const +{ + switch (_type) + { + case DoubleType: + case BoolType: + case UCharType: + case UShortType: + case UIntType: + case ULongType: + case TimeType: + case CharType: + case ShortType: + case IntType: + case LongType: + return ""; // we would have to manage the memory for the string otherwise. Maybe later. + case StringType: + return _value.stringValue; + } + return 0; +} + +struct tm KNXValue::timeValue() const +{ + switch (_type) + { + case TimeType: + return _value.timeValue; + case BoolType: + case UCharType: + case UShortType: + case UIntType: + case ULongType: + case CharType: + case ShortType: + case IntType: + case LongType: + case DoubleType: + case StringType: + { + time_t timeVal = ulongValue(); + struct tm timeStruct; + gmtime_r(&timeVal, &timeStruct); + return timeStruct; + } + } + struct tm tmp = {0}; + return tmp; +} + +KNXValue::KNXValue(float value) +{ + _value.doubleValue = value; + _type = DoubleType; +} + +KNXValue& KNXValue::operator=(const float value) +{ + _value.doubleValue = value; + _type = DoubleType; + return *this; +} + +KNXValue::operator float() const +{ + return doubleValue(); } \ No newline at end of file diff --git a/src/knx/knx_value.h b/src/knxold/knx_value.h similarity index 100% rename from src/knx/knx_value.h rename to src/knxold/knx_value.h diff --git a/src/knx/memory.cpp b/src/knxold/memory.cpp similarity index 100% rename from src/knx/memory.cpp rename to src/knxold/memory.cpp diff --git a/src/knx/memory.h b/src/knxold/memory.h similarity index 100% rename from src/knx/memory.h rename to src/knxold/memory.h diff --git a/src/knx/network_layer.cpp b/src/knxold/network_layer.cpp similarity index 100% rename from src/knx/network_layer.cpp rename to src/knxold/network_layer.cpp diff --git a/src/knx/network_layer.h b/src/knxold/network_layer.h similarity index 100% rename from src/knx/network_layer.h rename to src/knxold/network_layer.h diff --git a/src/knx/network_layer_coupler.cpp b/src/knxold/network_layer_coupler.cpp similarity index 100% rename from src/knx/network_layer_coupler.cpp rename to src/knxold/network_layer_coupler.cpp diff --git a/src/knx/network_layer_coupler.h b/src/knxold/network_layer_coupler.h similarity index 100% rename from src/knx/network_layer_coupler.h rename to src/knxold/network_layer_coupler.h diff --git a/src/knx/network_layer_device.cpp b/src/knxold/network_layer_device.cpp similarity index 100% rename from src/knx/network_layer_device.cpp rename to src/knxold/network_layer_device.cpp diff --git a/src/knx/network_layer_device.h b/src/knxold/network_layer_device.h similarity index 100% rename from src/knx/network_layer_device.h rename to src/knxold/network_layer_device.h diff --git a/src/knx/network_layer_entity.cpp b/src/knxold/network_layer_entity.cpp similarity index 100% rename from src/knx/network_layer_entity.cpp rename to src/knxold/network_layer_entity.cpp diff --git a/src/knx/network_layer_entity.h b/src/knxold/network_layer_entity.h similarity index 100% rename from src/knx/network_layer_entity.h rename to src/knxold/network_layer_entity.h diff --git a/src/knx/npdu.cpp b/src/knxold/npdu.cpp similarity index 100% rename from src/knx/npdu.cpp rename to src/knxold/npdu.cpp diff --git a/src/knx/npdu.h b/src/knxold/npdu.h similarity index 100% rename from src/knx/npdu.h rename to src/knxold/npdu.h diff --git a/src/knx/platform.cpp b/src/knxold/platform.cpp similarity index 100% rename from src/knx/platform.cpp rename to src/knxold/platform.cpp diff --git a/src/knx/platform.h b/src/knxold/platform.h similarity index 100% rename from src/knx/platform.h rename to src/knxold/platform.h diff --git a/src/knx/property.cpp b/src/knxold/property.cpp similarity index 100% rename from src/knx/property.cpp rename to src/knxold/property.cpp diff --git a/src/knx/property.h b/src/knxold/property.h similarity index 100% rename from src/knx/property.h rename to src/knxold/property.h diff --git a/src/knx/rf_data_link_layer.cpp b/src/knxold/rf_data_link_layer.cpp similarity index 100% rename from src/knx/rf_data_link_layer.cpp rename to src/knxold/rf_data_link_layer.cpp diff --git a/src/knx/rf_data_link_layer.h b/src/knxold/rf_data_link_layer.h similarity index 100% rename from src/knx/rf_data_link_layer.h rename to src/knxold/rf_data_link_layer.h diff --git a/src/knx/rf_medium_object.cpp b/src/knxold/rf_medium_object.cpp similarity index 100% rename from src/knx/rf_medium_object.cpp rename to src/knxold/rf_medium_object.cpp diff --git a/src/knx/rf_medium_object.h b/src/knxold/rf_medium_object.h similarity index 100% rename from src/knx/rf_medium_object.h rename to src/knxold/rf_medium_object.h diff --git a/src/knx/rf_physical_layer.h b/src/knxold/rf_physical_layer.h similarity index 100% rename from src/knx/rf_physical_layer.h rename to src/knxold/rf_physical_layer.h diff --git a/src/knx/rf_physical_layer_cc1101.cpp b/src/knxold/rf_physical_layer_cc1101.cpp similarity index 100% rename from src/knx/rf_physical_layer_cc1101.cpp rename to src/knxold/rf_physical_layer_cc1101.cpp diff --git a/src/knx/rf_physical_layer_cc1101.h b/src/knxold/rf_physical_layer_cc1101.h similarity index 100% rename from src/knx/rf_physical_layer_cc1101.h rename to src/knxold/rf_physical_layer_cc1101.h diff --git a/src/knx/rf_physical_layer_cc1310.cpp b/src/knxold/rf_physical_layer_cc1310.cpp similarity index 100% rename from src/knx/rf_physical_layer_cc1310.cpp rename to src/knxold/rf_physical_layer_cc1310.cpp diff --git a/src/knx/rf_physical_layer_cc1310.h b/src/knxold/rf_physical_layer_cc1310.h similarity index 100% rename from src/knx/rf_physical_layer_cc1310.h rename to src/knxold/rf_physical_layer_cc1310.h diff --git a/src/knx/router_object.cpp b/src/knxold/router_object.cpp similarity index 100% rename from src/knx/router_object.cpp rename to src/knxold/router_object.cpp diff --git a/src/knx/router_object.h b/src/knxold/router_object.h similarity index 100% rename from src/knx/router_object.h rename to src/knxold/router_object.h diff --git a/src/knx/save_restore.h b/src/knxold/save_restore.h similarity index 100% rename from src/knx/save_restore.h rename to src/knxold/save_restore.h diff --git a/src/knx/secure_application_layer.cpp b/src/knxold/secure_application_layer.cpp similarity index 100% rename from src/knx/secure_application_layer.cpp rename to src/knxold/secure_application_layer.cpp diff --git a/src/knx/secure_application_layer.h b/src/knxold/secure_application_layer.h similarity index 100% rename from src/knx/secure_application_layer.h rename to src/knxold/secure_application_layer.h diff --git a/src/knx/security_interface_object.cpp b/src/knxold/security_interface_object.cpp similarity index 100% rename from src/knx/security_interface_object.cpp rename to src/knxold/security_interface_object.cpp diff --git a/src/knx/security_interface_object.h b/src/knxold/security_interface_object.h similarity index 100% rename from src/knx/security_interface_object.h rename to src/knxold/security_interface_object.h diff --git a/src/knx/simple_map.h b/src/knxold/simple_map.h similarity index 100% rename from src/knx/simple_map.h rename to src/knxold/simple_map.h diff --git a/src/knx/table_object.cpp b/src/knxold/table_object.cpp similarity index 100% rename from src/knx/table_object.cpp rename to src/knxold/table_object.cpp diff --git a/src/knx/table_object.h b/src/knxold/table_object.h similarity index 100% rename from src/knx/table_object.h rename to src/knxold/table_object.h diff --git a/src/knx/tpdu.cpp b/src/knxold/tpdu.cpp similarity index 100% rename from src/knx/tpdu.cpp rename to src/knxold/tpdu.cpp diff --git a/src/knx/tpdu.h b/src/knxold/tpdu.h similarity index 100% rename from src/knx/tpdu.h rename to src/knxold/tpdu.h diff --git a/src/knx/tpuart_data_link_layer.cpp b/src/knxold/tpuart_data_link_layer.cpp similarity index 100% rename from src/knx/tpuart_data_link_layer.cpp rename to src/knxold/tpuart_data_link_layer.cpp diff --git a/src/knx/tpuart_data_link_layer.h b/src/knxold/tpuart_data_link_layer.h similarity index 100% rename from src/knx/tpuart_data_link_layer.h rename to src/knxold/tpuart_data_link_layer.h diff --git a/src/knx/transport_layer.cpp b/src/knxold/transport_layer.cpp similarity index 100% rename from src/knx/transport_layer.cpp rename to src/knxold/transport_layer.cpp diff --git a/src/knx/transport_layer.h b/src/knxold/transport_layer.h similarity index 100% rename from src/knx/transport_layer.h rename to src/knxold/transport_layer.h diff --git a/src/knx/usb_tunnel_interface.cpp b/src/knxold/usb_tunnel_interface.cpp similarity index 100% rename from src/knx/usb_tunnel_interface.cpp rename to src/knxold/usb_tunnel_interface.cpp diff --git a/src/knx/usb_tunnel_interface.h b/src/knxold/usb_tunnel_interface.h similarity index 100% rename from src/knx/usb_tunnel_interface.h rename to src/knxold/usb_tunnel_interface.h From c0e5621a5f4420c086fa1fb0ec92912b56b29833 Mon Sep 17 00:00:00 2001 From: OnlineCaveman <115506475+OnlineCaveman@users.noreply.github.com> Date: Mon, 17 Oct 2022 19:52:10 +0200 Subject: [PATCH 04/11] Rename back to original --- src/{knxold => knx}/address_table_object.cpp | 0 src/{knxold => knx}/address_table_object.h | 0 src/{knxold => knx}/aes.c | 0 src/{knxold => knx}/aes.h | 0 src/{knxold => knx}/aes.hpp | 0 src/{knxold => knx}/apdu.cpp | 0 src/{knxold => knx}/apdu.h | 0 src/{knxold => knx}/application_layer.cpp | 0 src/{knxold => knx}/application_layer.h | 0 src/{knxold => knx}/application_program_object.cpp | 0 src/{knxold => knx}/application_program_object.h | 0 src/{knxold => knx}/association_table_object.cpp | 0 src/{knxold => knx}/association_table_object.h | 0 src/{knxold => knx}/bau.cpp | 0 src/{knxold => knx}/bau.h | 0 src/{knxold => knx}/bau07B0.cpp | 0 src/{knxold => knx}/bau07B0.h | 0 src/{knxold => knx}/bau091A.cpp | 0 src/{knxold => knx}/bau091A.h | 0 src/{knxold => knx}/bau27B0.cpp | 0 src/{knxold => knx}/bau27B0.h | 0 src/{knxold => knx}/bau2920.cpp | 0 src/{knxold => knx}/bau2920.h | 0 src/{knxold => knx}/bau57B0.cpp | 0 src/{knxold => knx}/bau57B0.h | 0 src/{knxold => knx}/bau_systemB.cpp | 0 src/{knxold => knx}/bau_systemB.h | 0 src/{knxold => knx}/bau_systemB_coupler.cpp | 0 src/{knxold => knx}/bau_systemB_coupler.h | 0 src/{knxold => knx}/bau_systemB_device.cpp | 0 src/{knxold => knx}/bau_systemB_device.h | 0 src/{knxold => knx}/bits.cpp | 0 src/{knxold => knx}/bits.h | 0 src/{knxold => knx}/callback_property.h | 0 src/{knxold => knx}/cemi_frame.cpp | 0 src/{knxold => knx}/cemi_frame.h | 0 src/{knxold => knx}/cemi_server.cpp | 0 src/{knxold => knx}/cemi_server.h | 0 src/{knxold => knx}/cemi_server_object.cpp | 0 src/{knxold => knx}/cemi_server_object.h | 0 src/{knxold => knx}/config.h | 0 src/{knxold => knx}/data_link_layer.cpp | 0 src/{knxold => knx}/data_link_layer.h | 0 src/{knxold => knx}/data_property.cpp | 0 src/{knxold => knx}/data_property.h | 0 src/{knxold => knx}/datapoint_types.cpp | 0 src/{knxold => knx}/datapoint_types.h | 0 src/{knxold => knx}/device_object.cpp | 0 src/{knxold => knx}/device_object.h | 0 src/{knxold => knx}/dpt.cpp | 0 src/{knxold => knx}/dpt.h | 0 src/{knxold => knx}/dptconvert.cpp | 0 src/{knxold => knx}/dptconvert.h | 0 src/{knxold => knx}/function_property.h | 0 src/{knxold => knx}/group_object.cpp | 0 src/{knxold => knx}/group_object.h | 0 src/{knxold => knx}/group_object_table_object.cpp | 0 src/{knxold => knx}/group_object_table_object.h | 0 src/{knxold => knx}/interface_object.cpp | 0 src/{knxold => knx}/interface_object.h | 0 src/{knxold => knx}/ip_data_link_layer.cpp | 0 src/{knxold => knx}/ip_data_link_layer.h | 0 src/{knxold => knx}/ip_host_protocol_address_information.cpp | 0 src/{knxold => knx}/ip_host_protocol_address_information.h | 0 src/{knxold => knx}/ip_parameter_object.cpp | 0 src/{knxold => knx}/ip_parameter_object.h | 0 src/{knxold => knx}/knx_ip_device_information_dib.cpp | 0 src/{knxold => knx}/knx_ip_device_information_dib.h | 0 src/{knxold => knx}/knx_ip_dib.cpp | 0 src/{knxold => knx}/knx_ip_dib.h | 0 src/{knxold => knx}/knx_ip_frame.cpp | 0 src/{knxold => knx}/knx_ip_frame.h | 0 src/{knxold => knx}/knx_ip_routing_indication.cpp | 0 src/{knxold => knx}/knx_ip_routing_indication.h | 0 src/{knxold => knx}/knx_ip_search_request.cpp | 0 src/{knxold => knx}/knx_ip_search_request.h | 0 src/{knxold => knx}/knx_ip_search_response.cpp | 0 src/{knxold => knx}/knx_ip_search_response.h | 0 src/{knxold => knx}/knx_ip_supported_service_dib.cpp | 0 src/{knxold => knx}/knx_ip_supported_service_dib.h | 0 src/{knxold => knx}/knx_types.h | 0 src/{knxold => knx}/knx_value.cpp | 0 src/{knxold => knx}/knx_value.h | 0 src/{knxold => knx}/memory.cpp | 0 src/{knxold => knx}/memory.h | 0 src/{knxold => knx}/network_layer.cpp | 0 src/{knxold => knx}/network_layer.h | 0 src/{knxold => knx}/network_layer_coupler.cpp | 0 src/{knxold => knx}/network_layer_coupler.h | 0 src/{knxold => knx}/network_layer_device.cpp | 0 src/{knxold => knx}/network_layer_device.h | 0 src/{knxold => knx}/network_layer_entity.cpp | 0 src/{knxold => knx}/network_layer_entity.h | 0 src/{knxold => knx}/npdu.cpp | 0 src/{knxold => knx}/npdu.h | 0 src/{knxold => knx}/platform.cpp | 0 src/{knxold => knx}/platform.h | 0 src/{knxold => knx}/property.cpp | 0 src/{knxold => knx}/property.h | 0 src/{knxold => knx}/rf_data_link_layer.cpp | 0 src/{knxold => knx}/rf_data_link_layer.h | 0 src/{knxold => knx}/rf_medium_object.cpp | 0 src/{knxold => knx}/rf_medium_object.h | 0 src/{knxold => knx}/rf_physical_layer.h | 0 src/{knxold => knx}/rf_physical_layer_cc1101.cpp | 0 src/{knxold => knx}/rf_physical_layer_cc1101.h | 0 src/{knxold => knx}/rf_physical_layer_cc1310.cpp | 0 src/{knxold => knx}/rf_physical_layer_cc1310.h | 0 src/{knxold => knx}/router_object.cpp | 0 src/{knxold => knx}/router_object.h | 0 src/{knxold => knx}/save_restore.h | 0 src/{knxold => knx}/secure_application_layer.cpp | 0 src/{knxold => knx}/secure_application_layer.h | 0 src/{knxold => knx}/security_interface_object.cpp | 0 src/{knxold => knx}/security_interface_object.h | 0 src/{knxold => knx}/simple_map.h | 0 src/{knxold => knx}/table_object.cpp | 0 src/{knxold => knx}/table_object.h | 0 src/{knxold => knx}/tpdu.cpp | 0 src/{knxold => knx}/tpdu.h | 0 src/{knxold => knx}/tpuart_data_link_layer.cpp | 0 src/{knxold => knx}/tpuart_data_link_layer.h | 0 src/{knxold => knx}/transport_layer.cpp | 0 src/{knxold => knx}/transport_layer.h | 0 src/{knxold => knx}/usb_tunnel_interface.cpp | 0 src/{knxold => knx}/usb_tunnel_interface.h | 0 126 files changed, 0 insertions(+), 0 deletions(-) rename src/{knxold => knx}/address_table_object.cpp (100%) rename src/{knxold => knx}/address_table_object.h (100%) rename src/{knxold => knx}/aes.c (100%) rename src/{knxold => knx}/aes.h (100%) rename src/{knxold => knx}/aes.hpp (100%) rename src/{knxold => knx}/apdu.cpp (100%) rename src/{knxold => knx}/apdu.h (100%) rename src/{knxold => knx}/application_layer.cpp (100%) rename src/{knxold => knx}/application_layer.h (100%) rename src/{knxold => knx}/application_program_object.cpp (100%) rename src/{knxold => knx}/application_program_object.h (100%) rename src/{knxold => knx}/association_table_object.cpp (100%) rename src/{knxold => knx}/association_table_object.h (100%) rename src/{knxold => knx}/bau.cpp (100%) rename src/{knxold => knx}/bau.h (100%) rename src/{knxold => knx}/bau07B0.cpp (100%) rename src/{knxold => knx}/bau07B0.h (100%) rename src/{knxold => knx}/bau091A.cpp (100%) rename src/{knxold => knx}/bau091A.h (100%) rename src/{knxold => knx}/bau27B0.cpp (100%) rename src/{knxold => knx}/bau27B0.h (100%) rename src/{knxold => knx}/bau2920.cpp (100%) rename src/{knxold => knx}/bau2920.h (100%) rename src/{knxold => knx}/bau57B0.cpp (100%) rename src/{knxold => knx}/bau57B0.h (100%) rename src/{knxold => knx}/bau_systemB.cpp (100%) rename src/{knxold => knx}/bau_systemB.h (100%) rename src/{knxold => knx}/bau_systemB_coupler.cpp (100%) rename src/{knxold => knx}/bau_systemB_coupler.h (100%) rename src/{knxold => knx}/bau_systemB_device.cpp (100%) rename src/{knxold => knx}/bau_systemB_device.h (100%) rename src/{knxold => knx}/bits.cpp (100%) rename src/{knxold => knx}/bits.h (100%) rename src/{knxold => knx}/callback_property.h (100%) rename src/{knxold => knx}/cemi_frame.cpp (100%) rename src/{knxold => knx}/cemi_frame.h (100%) rename src/{knxold => knx}/cemi_server.cpp (100%) rename src/{knxold => knx}/cemi_server.h (100%) rename src/{knxold => knx}/cemi_server_object.cpp (100%) rename src/{knxold => knx}/cemi_server_object.h (100%) rename src/{knxold => knx}/config.h (100%) rename src/{knxold => knx}/data_link_layer.cpp (100%) rename src/{knxold => knx}/data_link_layer.h (100%) rename src/{knxold => knx}/data_property.cpp (100%) rename src/{knxold => knx}/data_property.h (100%) rename src/{knxold => knx}/datapoint_types.cpp (100%) rename src/{knxold => knx}/datapoint_types.h (100%) rename src/{knxold => knx}/device_object.cpp (100%) rename src/{knxold => knx}/device_object.h (100%) rename src/{knxold => knx}/dpt.cpp (100%) rename src/{knxold => knx}/dpt.h (100%) rename src/{knxold => knx}/dptconvert.cpp (100%) rename src/{knxold => knx}/dptconvert.h (100%) rename src/{knxold => knx}/function_property.h (100%) rename src/{knxold => knx}/group_object.cpp (100%) rename src/{knxold => knx}/group_object.h (100%) rename src/{knxold => knx}/group_object_table_object.cpp (100%) rename src/{knxold => knx}/group_object_table_object.h (100%) rename src/{knxold => knx}/interface_object.cpp (100%) rename src/{knxold => knx}/interface_object.h (100%) rename src/{knxold => knx}/ip_data_link_layer.cpp (100%) rename src/{knxold => knx}/ip_data_link_layer.h (100%) rename src/{knxold => knx}/ip_host_protocol_address_information.cpp (100%) rename src/{knxold => knx}/ip_host_protocol_address_information.h (100%) rename src/{knxold => knx}/ip_parameter_object.cpp (100%) rename src/{knxold => knx}/ip_parameter_object.h (100%) rename src/{knxold => knx}/knx_ip_device_information_dib.cpp (100%) rename src/{knxold => knx}/knx_ip_device_information_dib.h (100%) rename src/{knxold => knx}/knx_ip_dib.cpp (100%) rename src/{knxold => knx}/knx_ip_dib.h (100%) rename src/{knxold => knx}/knx_ip_frame.cpp (100%) rename src/{knxold => knx}/knx_ip_frame.h (100%) rename src/{knxold => knx}/knx_ip_routing_indication.cpp (100%) rename src/{knxold => knx}/knx_ip_routing_indication.h (100%) rename src/{knxold => knx}/knx_ip_search_request.cpp (100%) rename src/{knxold => knx}/knx_ip_search_request.h (100%) rename src/{knxold => knx}/knx_ip_search_response.cpp (100%) rename src/{knxold => knx}/knx_ip_search_response.h (100%) rename src/{knxold => knx}/knx_ip_supported_service_dib.cpp (100%) rename src/{knxold => knx}/knx_ip_supported_service_dib.h (100%) rename src/{knxold => knx}/knx_types.h (100%) rename src/{knxold => knx}/knx_value.cpp (100%) rename src/{knxold => knx}/knx_value.h (100%) rename src/{knxold => knx}/memory.cpp (100%) rename src/{knxold => knx}/memory.h (100%) rename src/{knxold => knx}/network_layer.cpp (100%) rename src/{knxold => knx}/network_layer.h (100%) rename src/{knxold => knx}/network_layer_coupler.cpp (100%) rename src/{knxold => knx}/network_layer_coupler.h (100%) rename src/{knxold => knx}/network_layer_device.cpp (100%) rename src/{knxold => knx}/network_layer_device.h (100%) rename src/{knxold => knx}/network_layer_entity.cpp (100%) rename src/{knxold => knx}/network_layer_entity.h (100%) rename src/{knxold => knx}/npdu.cpp (100%) rename src/{knxold => knx}/npdu.h (100%) rename src/{knxold => knx}/platform.cpp (100%) rename src/{knxold => knx}/platform.h (100%) rename src/{knxold => knx}/property.cpp (100%) rename src/{knxold => knx}/property.h (100%) rename src/{knxold => knx}/rf_data_link_layer.cpp (100%) rename src/{knxold => knx}/rf_data_link_layer.h (100%) rename src/{knxold => knx}/rf_medium_object.cpp (100%) rename src/{knxold => knx}/rf_medium_object.h (100%) rename src/{knxold => knx}/rf_physical_layer.h (100%) rename src/{knxold => knx}/rf_physical_layer_cc1101.cpp (100%) rename src/{knxold => knx}/rf_physical_layer_cc1101.h (100%) rename src/{knxold => knx}/rf_physical_layer_cc1310.cpp (100%) rename src/{knxold => knx}/rf_physical_layer_cc1310.h (100%) rename src/{knxold => knx}/router_object.cpp (100%) rename src/{knxold => knx}/router_object.h (100%) rename src/{knxold => knx}/save_restore.h (100%) rename src/{knxold => knx}/secure_application_layer.cpp (100%) rename src/{knxold => knx}/secure_application_layer.h (100%) rename src/{knxold => knx}/security_interface_object.cpp (100%) rename src/{knxold => knx}/security_interface_object.h (100%) rename src/{knxold => knx}/simple_map.h (100%) rename src/{knxold => knx}/table_object.cpp (100%) rename src/{knxold => knx}/table_object.h (100%) rename src/{knxold => knx}/tpdu.cpp (100%) rename src/{knxold => knx}/tpdu.h (100%) rename src/{knxold => knx}/tpuart_data_link_layer.cpp (100%) rename src/{knxold => knx}/tpuart_data_link_layer.h (100%) rename src/{knxold => knx}/transport_layer.cpp (100%) rename src/{knxold => knx}/transport_layer.h (100%) rename src/{knxold => knx}/usb_tunnel_interface.cpp (100%) rename src/{knxold => knx}/usb_tunnel_interface.h (100%) diff --git a/src/knxold/address_table_object.cpp b/src/knx/address_table_object.cpp similarity index 100% rename from src/knxold/address_table_object.cpp rename to src/knx/address_table_object.cpp diff --git a/src/knxold/address_table_object.h b/src/knx/address_table_object.h similarity index 100% rename from src/knxold/address_table_object.h rename to src/knx/address_table_object.h diff --git a/src/knxold/aes.c b/src/knx/aes.c similarity index 100% rename from src/knxold/aes.c rename to src/knx/aes.c diff --git a/src/knxold/aes.h b/src/knx/aes.h similarity index 100% rename from src/knxold/aes.h rename to src/knx/aes.h diff --git a/src/knxold/aes.hpp b/src/knx/aes.hpp similarity index 100% rename from src/knxold/aes.hpp rename to src/knx/aes.hpp diff --git a/src/knxold/apdu.cpp b/src/knx/apdu.cpp similarity index 100% rename from src/knxold/apdu.cpp rename to src/knx/apdu.cpp diff --git a/src/knxold/apdu.h b/src/knx/apdu.h similarity index 100% rename from src/knxold/apdu.h rename to src/knx/apdu.h diff --git a/src/knxold/application_layer.cpp b/src/knx/application_layer.cpp similarity index 100% rename from src/knxold/application_layer.cpp rename to src/knx/application_layer.cpp diff --git a/src/knxold/application_layer.h b/src/knx/application_layer.h similarity index 100% rename from src/knxold/application_layer.h rename to src/knx/application_layer.h diff --git a/src/knxold/application_program_object.cpp b/src/knx/application_program_object.cpp similarity index 100% rename from src/knxold/application_program_object.cpp rename to src/knx/application_program_object.cpp diff --git a/src/knxold/application_program_object.h b/src/knx/application_program_object.h similarity index 100% rename from src/knxold/application_program_object.h rename to src/knx/application_program_object.h diff --git a/src/knxold/association_table_object.cpp b/src/knx/association_table_object.cpp similarity index 100% rename from src/knxold/association_table_object.cpp rename to src/knx/association_table_object.cpp diff --git a/src/knxold/association_table_object.h b/src/knx/association_table_object.h similarity index 100% rename from src/knxold/association_table_object.h rename to src/knx/association_table_object.h diff --git a/src/knxold/bau.cpp b/src/knx/bau.cpp similarity index 100% rename from src/knxold/bau.cpp rename to src/knx/bau.cpp diff --git a/src/knxold/bau.h b/src/knx/bau.h similarity index 100% rename from src/knxold/bau.h rename to src/knx/bau.h diff --git a/src/knxold/bau07B0.cpp b/src/knx/bau07B0.cpp similarity index 100% rename from src/knxold/bau07B0.cpp rename to src/knx/bau07B0.cpp diff --git a/src/knxold/bau07B0.h b/src/knx/bau07B0.h similarity index 100% rename from src/knxold/bau07B0.h rename to src/knx/bau07B0.h diff --git a/src/knxold/bau091A.cpp b/src/knx/bau091A.cpp similarity index 100% rename from src/knxold/bau091A.cpp rename to src/knx/bau091A.cpp diff --git a/src/knxold/bau091A.h b/src/knx/bau091A.h similarity index 100% rename from src/knxold/bau091A.h rename to src/knx/bau091A.h diff --git a/src/knxold/bau27B0.cpp b/src/knx/bau27B0.cpp similarity index 100% rename from src/knxold/bau27B0.cpp rename to src/knx/bau27B0.cpp diff --git a/src/knxold/bau27B0.h b/src/knx/bau27B0.h similarity index 100% rename from src/knxold/bau27B0.h rename to src/knx/bau27B0.h diff --git a/src/knxold/bau2920.cpp b/src/knx/bau2920.cpp similarity index 100% rename from src/knxold/bau2920.cpp rename to src/knx/bau2920.cpp diff --git a/src/knxold/bau2920.h b/src/knx/bau2920.h similarity index 100% rename from src/knxold/bau2920.h rename to src/knx/bau2920.h diff --git a/src/knxold/bau57B0.cpp b/src/knx/bau57B0.cpp similarity index 100% rename from src/knxold/bau57B0.cpp rename to src/knx/bau57B0.cpp diff --git a/src/knxold/bau57B0.h b/src/knx/bau57B0.h similarity index 100% rename from src/knxold/bau57B0.h rename to src/knx/bau57B0.h diff --git a/src/knxold/bau_systemB.cpp b/src/knx/bau_systemB.cpp similarity index 100% rename from src/knxold/bau_systemB.cpp rename to src/knx/bau_systemB.cpp diff --git a/src/knxold/bau_systemB.h b/src/knx/bau_systemB.h similarity index 100% rename from src/knxold/bau_systemB.h rename to src/knx/bau_systemB.h diff --git a/src/knxold/bau_systemB_coupler.cpp b/src/knx/bau_systemB_coupler.cpp similarity index 100% rename from src/knxold/bau_systemB_coupler.cpp rename to src/knx/bau_systemB_coupler.cpp diff --git a/src/knxold/bau_systemB_coupler.h b/src/knx/bau_systemB_coupler.h similarity index 100% rename from src/knxold/bau_systemB_coupler.h rename to src/knx/bau_systemB_coupler.h diff --git a/src/knxold/bau_systemB_device.cpp b/src/knx/bau_systemB_device.cpp similarity index 100% rename from src/knxold/bau_systemB_device.cpp rename to src/knx/bau_systemB_device.cpp diff --git a/src/knxold/bau_systemB_device.h b/src/knx/bau_systemB_device.h similarity index 100% rename from src/knxold/bau_systemB_device.h rename to src/knx/bau_systemB_device.h diff --git a/src/knxold/bits.cpp b/src/knx/bits.cpp similarity index 100% rename from src/knxold/bits.cpp rename to src/knx/bits.cpp diff --git a/src/knxold/bits.h b/src/knx/bits.h similarity index 100% rename from src/knxold/bits.h rename to src/knx/bits.h diff --git a/src/knxold/callback_property.h b/src/knx/callback_property.h similarity index 100% rename from src/knxold/callback_property.h rename to src/knx/callback_property.h diff --git a/src/knxold/cemi_frame.cpp b/src/knx/cemi_frame.cpp similarity index 100% rename from src/knxold/cemi_frame.cpp rename to src/knx/cemi_frame.cpp diff --git a/src/knxold/cemi_frame.h b/src/knx/cemi_frame.h similarity index 100% rename from src/knxold/cemi_frame.h rename to src/knx/cemi_frame.h diff --git a/src/knxold/cemi_server.cpp b/src/knx/cemi_server.cpp similarity index 100% rename from src/knxold/cemi_server.cpp rename to src/knx/cemi_server.cpp diff --git a/src/knxold/cemi_server.h b/src/knx/cemi_server.h similarity index 100% rename from src/knxold/cemi_server.h rename to src/knx/cemi_server.h diff --git a/src/knxold/cemi_server_object.cpp b/src/knx/cemi_server_object.cpp similarity index 100% rename from src/knxold/cemi_server_object.cpp rename to src/knx/cemi_server_object.cpp diff --git a/src/knxold/cemi_server_object.h b/src/knx/cemi_server_object.h similarity index 100% rename from src/knxold/cemi_server_object.h rename to src/knx/cemi_server_object.h diff --git a/src/knxold/config.h b/src/knx/config.h similarity index 100% rename from src/knxold/config.h rename to src/knx/config.h diff --git a/src/knxold/data_link_layer.cpp b/src/knx/data_link_layer.cpp similarity index 100% rename from src/knxold/data_link_layer.cpp rename to src/knx/data_link_layer.cpp diff --git a/src/knxold/data_link_layer.h b/src/knx/data_link_layer.h similarity index 100% rename from src/knxold/data_link_layer.h rename to src/knx/data_link_layer.h diff --git a/src/knxold/data_property.cpp b/src/knx/data_property.cpp similarity index 100% rename from src/knxold/data_property.cpp rename to src/knx/data_property.cpp diff --git a/src/knxold/data_property.h b/src/knx/data_property.h similarity index 100% rename from src/knxold/data_property.h rename to src/knx/data_property.h diff --git a/src/knxold/datapoint_types.cpp b/src/knx/datapoint_types.cpp similarity index 100% rename from src/knxold/datapoint_types.cpp rename to src/knx/datapoint_types.cpp diff --git a/src/knxold/datapoint_types.h b/src/knx/datapoint_types.h similarity index 100% rename from src/knxold/datapoint_types.h rename to src/knx/datapoint_types.h diff --git a/src/knxold/device_object.cpp b/src/knx/device_object.cpp similarity index 100% rename from src/knxold/device_object.cpp rename to src/knx/device_object.cpp diff --git a/src/knxold/device_object.h b/src/knx/device_object.h similarity index 100% rename from src/knxold/device_object.h rename to src/knx/device_object.h diff --git a/src/knxold/dpt.cpp b/src/knx/dpt.cpp similarity index 100% rename from src/knxold/dpt.cpp rename to src/knx/dpt.cpp diff --git a/src/knxold/dpt.h b/src/knx/dpt.h similarity index 100% rename from src/knxold/dpt.h rename to src/knx/dpt.h diff --git a/src/knxold/dptconvert.cpp b/src/knx/dptconvert.cpp similarity index 100% rename from src/knxold/dptconvert.cpp rename to src/knx/dptconvert.cpp diff --git a/src/knxold/dptconvert.h b/src/knx/dptconvert.h similarity index 100% rename from src/knxold/dptconvert.h rename to src/knx/dptconvert.h diff --git a/src/knxold/function_property.h b/src/knx/function_property.h similarity index 100% rename from src/knxold/function_property.h rename to src/knx/function_property.h diff --git a/src/knxold/group_object.cpp b/src/knx/group_object.cpp similarity index 100% rename from src/knxold/group_object.cpp rename to src/knx/group_object.cpp diff --git a/src/knxold/group_object.h b/src/knx/group_object.h similarity index 100% rename from src/knxold/group_object.h rename to src/knx/group_object.h diff --git a/src/knxold/group_object_table_object.cpp b/src/knx/group_object_table_object.cpp similarity index 100% rename from src/knxold/group_object_table_object.cpp rename to src/knx/group_object_table_object.cpp diff --git a/src/knxold/group_object_table_object.h b/src/knx/group_object_table_object.h similarity index 100% rename from src/knxold/group_object_table_object.h rename to src/knx/group_object_table_object.h diff --git a/src/knxold/interface_object.cpp b/src/knx/interface_object.cpp similarity index 100% rename from src/knxold/interface_object.cpp rename to src/knx/interface_object.cpp diff --git a/src/knxold/interface_object.h b/src/knx/interface_object.h similarity index 100% rename from src/knxold/interface_object.h rename to src/knx/interface_object.h diff --git a/src/knxold/ip_data_link_layer.cpp b/src/knx/ip_data_link_layer.cpp similarity index 100% rename from src/knxold/ip_data_link_layer.cpp rename to src/knx/ip_data_link_layer.cpp diff --git a/src/knxold/ip_data_link_layer.h b/src/knx/ip_data_link_layer.h similarity index 100% rename from src/knxold/ip_data_link_layer.h rename to src/knx/ip_data_link_layer.h diff --git a/src/knxold/ip_host_protocol_address_information.cpp b/src/knx/ip_host_protocol_address_information.cpp similarity index 100% rename from src/knxold/ip_host_protocol_address_information.cpp rename to src/knx/ip_host_protocol_address_information.cpp diff --git a/src/knxold/ip_host_protocol_address_information.h b/src/knx/ip_host_protocol_address_information.h similarity index 100% rename from src/knxold/ip_host_protocol_address_information.h rename to src/knx/ip_host_protocol_address_information.h diff --git a/src/knxold/ip_parameter_object.cpp b/src/knx/ip_parameter_object.cpp similarity index 100% rename from src/knxold/ip_parameter_object.cpp rename to src/knx/ip_parameter_object.cpp diff --git a/src/knxold/ip_parameter_object.h b/src/knx/ip_parameter_object.h similarity index 100% rename from src/knxold/ip_parameter_object.h rename to src/knx/ip_parameter_object.h diff --git a/src/knxold/knx_ip_device_information_dib.cpp b/src/knx/knx_ip_device_information_dib.cpp similarity index 100% rename from src/knxold/knx_ip_device_information_dib.cpp rename to src/knx/knx_ip_device_information_dib.cpp diff --git a/src/knxold/knx_ip_device_information_dib.h b/src/knx/knx_ip_device_information_dib.h similarity index 100% rename from src/knxold/knx_ip_device_information_dib.h rename to src/knx/knx_ip_device_information_dib.h diff --git a/src/knxold/knx_ip_dib.cpp b/src/knx/knx_ip_dib.cpp similarity index 100% rename from src/knxold/knx_ip_dib.cpp rename to src/knx/knx_ip_dib.cpp diff --git a/src/knxold/knx_ip_dib.h b/src/knx/knx_ip_dib.h similarity index 100% rename from src/knxold/knx_ip_dib.h rename to src/knx/knx_ip_dib.h diff --git a/src/knxold/knx_ip_frame.cpp b/src/knx/knx_ip_frame.cpp similarity index 100% rename from src/knxold/knx_ip_frame.cpp rename to src/knx/knx_ip_frame.cpp diff --git a/src/knxold/knx_ip_frame.h b/src/knx/knx_ip_frame.h similarity index 100% rename from src/knxold/knx_ip_frame.h rename to src/knx/knx_ip_frame.h diff --git a/src/knxold/knx_ip_routing_indication.cpp b/src/knx/knx_ip_routing_indication.cpp similarity index 100% rename from src/knxold/knx_ip_routing_indication.cpp rename to src/knx/knx_ip_routing_indication.cpp diff --git a/src/knxold/knx_ip_routing_indication.h b/src/knx/knx_ip_routing_indication.h similarity index 100% rename from src/knxold/knx_ip_routing_indication.h rename to src/knx/knx_ip_routing_indication.h diff --git a/src/knxold/knx_ip_search_request.cpp b/src/knx/knx_ip_search_request.cpp similarity index 100% rename from src/knxold/knx_ip_search_request.cpp rename to src/knx/knx_ip_search_request.cpp diff --git a/src/knxold/knx_ip_search_request.h b/src/knx/knx_ip_search_request.h similarity index 100% rename from src/knxold/knx_ip_search_request.h rename to src/knx/knx_ip_search_request.h diff --git a/src/knxold/knx_ip_search_response.cpp b/src/knx/knx_ip_search_response.cpp similarity index 100% rename from src/knxold/knx_ip_search_response.cpp rename to src/knx/knx_ip_search_response.cpp diff --git a/src/knxold/knx_ip_search_response.h b/src/knx/knx_ip_search_response.h similarity index 100% rename from src/knxold/knx_ip_search_response.h rename to src/knx/knx_ip_search_response.h diff --git a/src/knxold/knx_ip_supported_service_dib.cpp b/src/knx/knx_ip_supported_service_dib.cpp similarity index 100% rename from src/knxold/knx_ip_supported_service_dib.cpp rename to src/knx/knx_ip_supported_service_dib.cpp diff --git a/src/knxold/knx_ip_supported_service_dib.h b/src/knx/knx_ip_supported_service_dib.h similarity index 100% rename from src/knxold/knx_ip_supported_service_dib.h rename to src/knx/knx_ip_supported_service_dib.h diff --git a/src/knxold/knx_types.h b/src/knx/knx_types.h similarity index 100% rename from src/knxold/knx_types.h rename to src/knx/knx_types.h diff --git a/src/knxold/knx_value.cpp b/src/knx/knx_value.cpp similarity index 100% rename from src/knxold/knx_value.cpp rename to src/knx/knx_value.cpp diff --git a/src/knxold/knx_value.h b/src/knx/knx_value.h similarity index 100% rename from src/knxold/knx_value.h rename to src/knx/knx_value.h diff --git a/src/knxold/memory.cpp b/src/knx/memory.cpp similarity index 100% rename from src/knxold/memory.cpp rename to src/knx/memory.cpp diff --git a/src/knxold/memory.h b/src/knx/memory.h similarity index 100% rename from src/knxold/memory.h rename to src/knx/memory.h diff --git a/src/knxold/network_layer.cpp b/src/knx/network_layer.cpp similarity index 100% rename from src/knxold/network_layer.cpp rename to src/knx/network_layer.cpp diff --git a/src/knxold/network_layer.h b/src/knx/network_layer.h similarity index 100% rename from src/knxold/network_layer.h rename to src/knx/network_layer.h diff --git a/src/knxold/network_layer_coupler.cpp b/src/knx/network_layer_coupler.cpp similarity index 100% rename from src/knxold/network_layer_coupler.cpp rename to src/knx/network_layer_coupler.cpp diff --git a/src/knxold/network_layer_coupler.h b/src/knx/network_layer_coupler.h similarity index 100% rename from src/knxold/network_layer_coupler.h rename to src/knx/network_layer_coupler.h diff --git a/src/knxold/network_layer_device.cpp b/src/knx/network_layer_device.cpp similarity index 100% rename from src/knxold/network_layer_device.cpp rename to src/knx/network_layer_device.cpp diff --git a/src/knxold/network_layer_device.h b/src/knx/network_layer_device.h similarity index 100% rename from src/knxold/network_layer_device.h rename to src/knx/network_layer_device.h diff --git a/src/knxold/network_layer_entity.cpp b/src/knx/network_layer_entity.cpp similarity index 100% rename from src/knxold/network_layer_entity.cpp rename to src/knx/network_layer_entity.cpp diff --git a/src/knxold/network_layer_entity.h b/src/knx/network_layer_entity.h similarity index 100% rename from src/knxold/network_layer_entity.h rename to src/knx/network_layer_entity.h diff --git a/src/knxold/npdu.cpp b/src/knx/npdu.cpp similarity index 100% rename from src/knxold/npdu.cpp rename to src/knx/npdu.cpp diff --git a/src/knxold/npdu.h b/src/knx/npdu.h similarity index 100% rename from src/knxold/npdu.h rename to src/knx/npdu.h diff --git a/src/knxold/platform.cpp b/src/knx/platform.cpp similarity index 100% rename from src/knxold/platform.cpp rename to src/knx/platform.cpp diff --git a/src/knxold/platform.h b/src/knx/platform.h similarity index 100% rename from src/knxold/platform.h rename to src/knx/platform.h diff --git a/src/knxold/property.cpp b/src/knx/property.cpp similarity index 100% rename from src/knxold/property.cpp rename to src/knx/property.cpp diff --git a/src/knxold/property.h b/src/knx/property.h similarity index 100% rename from src/knxold/property.h rename to src/knx/property.h diff --git a/src/knxold/rf_data_link_layer.cpp b/src/knx/rf_data_link_layer.cpp similarity index 100% rename from src/knxold/rf_data_link_layer.cpp rename to src/knx/rf_data_link_layer.cpp diff --git a/src/knxold/rf_data_link_layer.h b/src/knx/rf_data_link_layer.h similarity index 100% rename from src/knxold/rf_data_link_layer.h rename to src/knx/rf_data_link_layer.h diff --git a/src/knxold/rf_medium_object.cpp b/src/knx/rf_medium_object.cpp similarity index 100% rename from src/knxold/rf_medium_object.cpp rename to src/knx/rf_medium_object.cpp diff --git a/src/knxold/rf_medium_object.h b/src/knx/rf_medium_object.h similarity index 100% rename from src/knxold/rf_medium_object.h rename to src/knx/rf_medium_object.h diff --git a/src/knxold/rf_physical_layer.h b/src/knx/rf_physical_layer.h similarity index 100% rename from src/knxold/rf_physical_layer.h rename to src/knx/rf_physical_layer.h diff --git a/src/knxold/rf_physical_layer_cc1101.cpp b/src/knx/rf_physical_layer_cc1101.cpp similarity index 100% rename from src/knxold/rf_physical_layer_cc1101.cpp rename to src/knx/rf_physical_layer_cc1101.cpp diff --git a/src/knxold/rf_physical_layer_cc1101.h b/src/knx/rf_physical_layer_cc1101.h similarity index 100% rename from src/knxold/rf_physical_layer_cc1101.h rename to src/knx/rf_physical_layer_cc1101.h diff --git a/src/knxold/rf_physical_layer_cc1310.cpp b/src/knx/rf_physical_layer_cc1310.cpp similarity index 100% rename from src/knxold/rf_physical_layer_cc1310.cpp rename to src/knx/rf_physical_layer_cc1310.cpp diff --git a/src/knxold/rf_physical_layer_cc1310.h b/src/knx/rf_physical_layer_cc1310.h similarity index 100% rename from src/knxold/rf_physical_layer_cc1310.h rename to src/knx/rf_physical_layer_cc1310.h diff --git a/src/knxold/router_object.cpp b/src/knx/router_object.cpp similarity index 100% rename from src/knxold/router_object.cpp rename to src/knx/router_object.cpp diff --git a/src/knxold/router_object.h b/src/knx/router_object.h similarity index 100% rename from src/knxold/router_object.h rename to src/knx/router_object.h diff --git a/src/knxold/save_restore.h b/src/knx/save_restore.h similarity index 100% rename from src/knxold/save_restore.h rename to src/knx/save_restore.h diff --git a/src/knxold/secure_application_layer.cpp b/src/knx/secure_application_layer.cpp similarity index 100% rename from src/knxold/secure_application_layer.cpp rename to src/knx/secure_application_layer.cpp diff --git a/src/knxold/secure_application_layer.h b/src/knx/secure_application_layer.h similarity index 100% rename from src/knxold/secure_application_layer.h rename to src/knx/secure_application_layer.h diff --git a/src/knxold/security_interface_object.cpp b/src/knx/security_interface_object.cpp similarity index 100% rename from src/knxold/security_interface_object.cpp rename to src/knx/security_interface_object.cpp diff --git a/src/knxold/security_interface_object.h b/src/knx/security_interface_object.h similarity index 100% rename from src/knxold/security_interface_object.h rename to src/knx/security_interface_object.h diff --git a/src/knxold/simple_map.h b/src/knx/simple_map.h similarity index 100% rename from src/knxold/simple_map.h rename to src/knx/simple_map.h diff --git a/src/knxold/table_object.cpp b/src/knx/table_object.cpp similarity index 100% rename from src/knxold/table_object.cpp rename to src/knx/table_object.cpp diff --git a/src/knxold/table_object.h b/src/knx/table_object.h similarity index 100% rename from src/knxold/table_object.h rename to src/knx/table_object.h diff --git a/src/knxold/tpdu.cpp b/src/knx/tpdu.cpp similarity index 100% rename from src/knxold/tpdu.cpp rename to src/knx/tpdu.cpp diff --git a/src/knxold/tpdu.h b/src/knx/tpdu.h similarity index 100% rename from src/knxold/tpdu.h rename to src/knx/tpdu.h diff --git a/src/knxold/tpuart_data_link_layer.cpp b/src/knx/tpuart_data_link_layer.cpp similarity index 100% rename from src/knxold/tpuart_data_link_layer.cpp rename to src/knx/tpuart_data_link_layer.cpp diff --git a/src/knxold/tpuart_data_link_layer.h b/src/knx/tpuart_data_link_layer.h similarity index 100% rename from src/knxold/tpuart_data_link_layer.h rename to src/knx/tpuart_data_link_layer.h diff --git a/src/knxold/transport_layer.cpp b/src/knx/transport_layer.cpp similarity index 100% rename from src/knxold/transport_layer.cpp rename to src/knx/transport_layer.cpp diff --git a/src/knxold/transport_layer.h b/src/knx/transport_layer.h similarity index 100% rename from src/knxold/transport_layer.h rename to src/knx/transport_layer.h diff --git a/src/knxold/usb_tunnel_interface.cpp b/src/knx/usb_tunnel_interface.cpp similarity index 100% rename from src/knxold/usb_tunnel_interface.cpp rename to src/knx/usb_tunnel_interface.cpp diff --git a/src/knxold/usb_tunnel_interface.h b/src/knx/usb_tunnel_interface.h similarity index 100% rename from src/knxold/usb_tunnel_interface.h rename to src/knx/usb_tunnel_interface.h From 37e056a91cbc2a77326c8d9c587f3709047616a1 Mon Sep 17 00:00:00 2001 From: OnlineCaveman <115506475+OnlineCaveman@users.noreply.github.com> Date: Mon, 17 Oct 2022 20:37:44 +0200 Subject: [PATCH 05/11] ARCH_SAMD Now checking for __SAMD21__ and __SAMD51__ in knx_facade, samd_platform (samd21) and samd51_platform (samd51) Preparation for external flash functionality in platform.h --- src/knx/platform.h | 3 +- src/knx_facade.cpp | 18 +++++++++-- src/knx_facade.h | 28 ++++++++++++++--- src/samd51_platform.cpp | 69 +++++++++++++++++++++++++++++------------ src/samd51_platform.h | 12 ++++--- src/samd_platform.cpp | 6 +++- src/samd_platform.h | 5 ++- 7 files changed, 108 insertions(+), 33 deletions(-) diff --git a/src/knx/platform.h b/src/knx/platform.h index 2aaf758..78c9c40 100644 --- a/src/knx/platform.h +++ b/src/knx/platform.h @@ -12,7 +12,8 @@ enum NvMemoryType { Eeprom, - Flash + Flash, + QspiFlash }; class Platform diff --git a/src/knx_facade.cpp b/src/knx_facade.cpp index 35a6a6b..4180f5e 100644 --- a/src/knx_facade.cpp +++ b/src/knx_facade.cpp @@ -36,7 +36,19 @@ } #endif - #ifdef ARDUINO_ARCH_SAMD + #ifdef __SAMD51__ + // predefined global instance for TP or IP + #if MASK_VERSION == 0x07B0 + KnxFacade knx(buttonEvent); + #elif MASK_VERSION == 0x57B0 + KnxFacade knx(buttonEvent); + #else + #error "Mask version not supported on SAMD51" + #endif + #elif (defined(__SAMD21E17A__) || \ + defined(__SAMD21G18A__) || \ + defined(__SAMD21E18A__) || \ + defined(__SAMD21J18A__)) // predefined global instance for TP or RF or TP/RF coupler #if MASK_VERSION == 0x07B0 KnxFacade knx(buttonEvent); @@ -45,7 +57,7 @@ #elif MASK_VERSION == 0x2920 KnxFacade knx(buttonEvent); #else - #error "Mask version not supported on ARDUINO_ARCH_SAMD" + #error "Mask version not supported on SAMD21" #endif #elif defined(ARDUINO_ARCH_RP2040) // predefined global instance for TP or RF or TP/RF coupler @@ -93,4 +105,4 @@ // no predefined global instance #endif -#endif // KNX_NO_AUTOMATIC_GLOBAL_INSTANCE +#endif // KNX_NO_AUTOMATIC_GLOBAL_INSTANCE \ No newline at end of file diff --git a/src/knx_facade.h b/src/knx_facade.h index 9d12182..64ed039 100644 --- a/src/knx_facade.h +++ b/src/knx_facade.h @@ -12,7 +12,15 @@ #define USERDATA_SAVE_SIZE 0 #endif -#ifdef ARDUINO_ARCH_SAMD +#ifdef __SAMD51__ + #include "samd51_platform.h" + #ifndef KNX_NO_AUTOMATIC_GLOBAL_INSTANCE + void buttonUp(); + #endif +#elif (defined(__SAMD21E17A__) || \ + defined(__SAMD21G18A__) || \ + defined(__SAMD21E18A__) || \ + defined(__SAMD21J18A__)) #include "samd_platform.h" #ifndef KNX_NO_AUTOMATIC_GLOBAL_INSTANCE void buttonUp(); @@ -465,7 +473,19 @@ template class KnxFacade : private SaveRestore }; #ifndef KNX_NO_AUTOMATIC_GLOBAL_INSTANCE - #ifdef ARDUINO_ARCH_SAMD + #ifdef __SAMD51__ + // predefined global instance for TP or IP + #if MASK_VERSION == 0x07B0 + extern KnxFacade knx; + #elif MASK_VERSION == 0x57B0 + extern KnxFacade knx; + #else + #error "Mask version not supported on SAMD51" + #endif + #elif (defined(__SAMD21E17A__) || \ + defined(__SAMD21G18A__) || \ + defined(__SAMD21E18A__) || \ + defined(__SAMD21J18A__)) // predefined global instance for TP or RF or TP/RF coupler #if MASK_VERSION == 0x07B0 extern KnxFacade knx; @@ -474,7 +494,7 @@ template class KnxFacade : private SaveRestore #elif MASK_VERSION == 0x2920 extern KnxFacade knx; #else - #error "Mask version not supported on ARDUINO_ARCH_SAMD" + #error "Mask version not supported on SAMD21" #endif #elif defined(ARDUINO_ARCH_RP2040) // predefined global instance for TP or RF or TP/RF coupler @@ -519,4 +539,4 @@ template class KnxFacade : private SaveRestore #else // Non-Arduino platforms and Linux platform // no predefined global instance #endif -#endif // KNX_NO_AUTOMATIC_GLOBAL_INSTANCE +#endif // KNX_NO_AUTOMATIC_GLOBAL_INSTANCE \ No newline at end of file diff --git a/src/samd51_platform.cpp b/src/samd51_platform.cpp index d35c3c2..ea51aee 100644 --- a/src/samd51_platform.cpp +++ b/src/samd51_platform.cpp @@ -3,6 +3,19 @@ #include "samd51_platform.h" #include +#define QSPI_STORAGE + +#ifdef QSPI_STORAGE + #include //QSPI + #include //QSPI + #include //QSPI + //#define FILE_NAME parameters.knx + Adafruit_FlashTransport_QSPI flashTransport; + Adafruit_SPIFlash flash(&flashTransport); + FatVolume fatfs; + File32 saveFile; +#endif + #if KNX_FLASH_SIZE % 1024 #error "KNX_FLASH_SIZE must be multiple of 1024" #endif @@ -11,7 +24,7 @@ #define KNX_SERIAL Serial1 #endif -SamdPlatform::SamdPlatform() +Samd51Platform::Samd51Platform() #ifndef KNX_NO_DEFAULT_UART : ArduinoPlatform(&KNX_SERIAL) #endif @@ -19,12 +32,12 @@ SamdPlatform::SamdPlatform() init(); } -SamdPlatform::SamdPlatform( HardwareSerial* s) : ArduinoPlatform(s) +Samd51Platform::Samd51Platform( HardwareSerial* s) : ArduinoPlatform(s) { init(); } -uint32_t SamdPlatform::uniqueSerialNumber() +uint32_t Samd51Platform::uniqueSerialNumber() { // SAMD51 from section 9.6 of the datasheet #define SERIAL_NUMBER_WORD_0 *(volatile uint32_t*)(0x008061FC) @@ -35,7 +48,7 @@ uint32_t SamdPlatform::uniqueSerialNumber() return SERIAL_NUMBER_WORD_0 ^ SERIAL_NUMBER_WORD_1 ^ SERIAL_NUMBER_WORD_2 ^ SERIAL_NUMBER_WORD_3; } -void SamdPlatform::restart() +void Samd51Platform::restart() { println("restart"); NVIC_SystemReset(); @@ -47,18 +60,36 @@ extern uint32_t __data_end__; static const uint32_t pageSizes[] = {8, 16, 32, 64, 128, 256, 512, 1024}; -void SamdPlatform::init() +void Samd51Platform::init() { + // _memoryType = QspiFlash; + // Initialize flash library and check its chip ID. + // if (!flash.begin()) { + // Serial.println("Error, failed to initialize flash chip!"); + // fatalError(); + // while(1) delay(1); + // } + // Serial.print("Flash chip JEDEC ID: 0x"); Serial.println(flash.getJEDECID(), HEX); + + // if (!fatfs.begin(&flash)) { + // Serial.println("Error, failed to mount newly formatted filesystem!"); + // Serial.println("Was the flash chip formatted with the fatfs_format example?"); + // fatalError(); + // while(1) delay(1); + // } + // Serial.println("Mounted filesystem!"); + + _memoryType = Flash; _pageSize = pageSizes[NVMCTRL->PARAM.bit.PSZ]; _pageCnt = NVMCTRL->PARAM.bit.NVMP; _rowSize = (_pageSize * _pageCnt / 64); - // find end of program flash and set limit to next row + //find end of program flash and set limit to next row uint32_t endEddr = (uint32_t)(&__etext + (&__data_end__ - &__data_start__)); // text + data MemoryBlock _MemoryStart = getRowAddr(_pageSize * _pageCnt - KNX_FLASH_SIZE - 1); // 23295 _MemoryEnd = getRowAddr(_pageSize * _pageCnt - 1); - // chosen flash size is not available anymore + //chosen flash size is not available anymore if (_MemoryStart < endEddr) { println("KNX_FLASH_SIZE is not available (possible too much flash use by firmware)"); fatalError(); @@ -90,22 +121,22 @@ static inline uint32_t read_unaligned_uint32(volatile void *data) return res.u32; } -size_t SamdPlatform::flashEraseBlockSize() +size_t Samd51Platform::flashEraseBlockSize() { - return PAGES_PER_ROW; + return (_pageSize / 64); //PAGES_PER_ROW; } -size_t SamdPlatform::flashPageSize() +size_t Samd51Platform::flashPageSize() { return _pageSize; } -uint8_t* SamdPlatform::userFlashStart() +uint8_t* Samd51Platform::userFlashStart() { return (uint8_t*)_MemoryStart; } -size_t SamdPlatform::userFlashSizeEraseBlocks() +size_t Samd51Platform::userFlashSizeEraseBlocks() { if (KNX_FLASH_SIZE <= 0) return 0; @@ -113,7 +144,7 @@ size_t SamdPlatform::userFlashSizeEraseBlocks() return ((KNX_FLASH_SIZE - 1) / (flashPageSize() * flashEraseBlockSize())) + 1; } -void SamdPlatform::flashErase(uint16_t eraseBlockNum) +void Samd51Platform::flashErase(uint16_t eraseBlockNum) { noInterrupts(); @@ -123,7 +154,7 @@ void SamdPlatform::flashErase(uint16_t eraseBlockNum) interrupts(); } -void SamdPlatform::flashWritePage(uint16_t pageNumber, uint8_t* data) +void Samd51Platform::flashWritePage(uint16_t pageNumber, uint8_t* data) { noInterrupts(); @@ -133,7 +164,7 @@ void SamdPlatform::flashWritePage(uint16_t pageNumber, uint8_t* data) interrupts(); } -void SamdPlatform::writeBufferedEraseBlock() +void Samd51Platform::writeBufferedEraseBlock() { if (_bufferedEraseblockNumber > -1 && _bufferedEraseblockDirty) { @@ -150,12 +181,12 @@ void SamdPlatform::writeBufferedEraseBlock() } } -uint32_t SamdPlatform::getRowAddr(uint32_t flasAddr) +uint32_t Samd51Platform::getRowAddr(uint32_t flasAddr) { return flasAddr & ~(_rowSize - 1); } -void SamdPlatform::write(const volatile void *flash_ptr, const void *data, uint32_t size) +void Samd51Platform::write(const volatile void *flash_ptr, const void *data, uint32_t size) { // Calculate data boundaries size = (size + 3) / 4; @@ -199,7 +230,7 @@ void SamdPlatform::write(const volatile void *flash_ptr, const void *data, uint3 } } -void SamdPlatform::erase(const volatile void *flash_ptr, uint32_t size) +void Samd51Platform::erase(const volatile void *flash_ptr, uint32_t size) { const uint8_t *ptr = (const uint8_t *)flash_ptr; while (size > _rowSize) @@ -211,7 +242,7 @@ void SamdPlatform::erase(const volatile void *flash_ptr, uint32_t size) eraseRow(ptr); } -void SamdPlatform::eraseRow(const volatile void *flash_ptr) +void Samd51Platform::eraseRow(const volatile void *flash_ptr) { NVMCTRL->ADDR.reg = ((uint32_t)flash_ptr); NVMCTRL->CTRLB.reg = NVMCTRL_CTRLB_CMDEX_KEY | NVMCTRL_CTRLB_CMD_EB; diff --git a/src/samd51_platform.h b/src/samd51_platform.h index 57f331a..5770387 100644 --- a/src/samd51_platform.h +++ b/src/samd51_platform.h @@ -2,11 +2,16 @@ #include "Arduino.h" #include "arduino_platform.h" -class SamdPlatform : public ArduinoPlatform +// #include //QSPI +// #include //QSPI +// #include //QSPI +// #define FILE_NAME parameters.sav + +class Samd51Platform : public ArduinoPlatform { public: - SamdPlatform(); - SamdPlatform( HardwareSerial* s); + Samd51Platform(); + Samd51Platform( HardwareSerial* s); // unique serial number uint32_t uniqueSerialNumber() override; @@ -41,7 +46,6 @@ private: void write(const volatile void* flash_ptr, const void* data, uint32_t size); void erase(const volatile void* flash_ptr, uint32_t size); void eraseRow(const volatile void* flash_ptr); - }; #endif diff --git a/src/samd_platform.cpp b/src/samd_platform.cpp index fc85645..eb100da 100644 --- a/src/samd_platform.cpp +++ b/src/samd_platform.cpp @@ -1,6 +1,10 @@ +#if(defined(__SAMD21E17A__) || \ + defined(__SAMD21G18A__) || \ + defined(__SAMD21E18A__) || \ + defined(__SAMD21J18A__)) + #include "samd_platform.h" -#ifdef ARDUINO_ARCH_SAMD #include #include diff --git a/src/samd_platform.h b/src/samd_platform.h index fb22dc6..220ec01 100644 --- a/src/samd_platform.h +++ b/src/samd_platform.h @@ -2,7 +2,10 @@ #include "Arduino.h" -#ifdef ARDUINO_ARCH_SAMD +#if (defined(__SAMD21E17A__) || \ + defined(__SAMD21G18A__) || \ + defined(__SAMD21E18A__) || \ + defined(__SAMD21J18A__)) #define PAGES_PER_ROW 4 From 02565a0ba3d573314797991255c092589a825f6e Mon Sep 17 00:00:00 2001 From: OnlineCaveman <115506475+OnlineCaveman@users.noreply.github.com> Date: Mon, 17 Oct 2022 21:10:23 +0200 Subject: [PATCH 06/11] Cleanup Removed unnecesary Qspi stuff for now. Compiles fine for samd51 and samd21. Have no samd21 platform or tpuart to do thorough testing but nothing fundamental was changed in samd_platform other than the ifdef checks. --- src/knx/platform.h | 3 +-- src/samd51_platform.cpp | 32 -------------------------------- src/samd51_platform.h | 5 ----- 3 files changed, 1 insertion(+), 39 deletions(-) diff --git a/src/knx/platform.h b/src/knx/platform.h index 53f3c98..21a2867 100644 --- a/src/knx/platform.h +++ b/src/knx/platform.h @@ -12,8 +12,7 @@ enum NvMemoryType { Eeprom, - Flash, - QspiFlash + Flash }; class Platform diff --git a/src/samd51_platform.cpp b/src/samd51_platform.cpp index ea51aee..ad2b6b2 100644 --- a/src/samd51_platform.cpp +++ b/src/samd51_platform.cpp @@ -3,19 +3,6 @@ #include "samd51_platform.h" #include -#define QSPI_STORAGE - -#ifdef QSPI_STORAGE - #include //QSPI - #include //QSPI - #include //QSPI - //#define FILE_NAME parameters.knx - Adafruit_FlashTransport_QSPI flashTransport; - Adafruit_SPIFlash flash(&flashTransport); - FatVolume fatfs; - File32 saveFile; -#endif - #if KNX_FLASH_SIZE % 1024 #error "KNX_FLASH_SIZE must be multiple of 1024" #endif @@ -62,24 +49,6 @@ static const uint32_t pageSizes[] = {8, 16, 32, 64, 128, 256, 512, 1024}; void Samd51Platform::init() { - // _memoryType = QspiFlash; - // Initialize flash library and check its chip ID. - // if (!flash.begin()) { - // Serial.println("Error, failed to initialize flash chip!"); - // fatalError(); - // while(1) delay(1); - // } - // Serial.print("Flash chip JEDEC ID: 0x"); Serial.println(flash.getJEDECID(), HEX); - - // if (!fatfs.begin(&flash)) { - // Serial.println("Error, failed to mount newly formatted filesystem!"); - // Serial.println("Was the flash chip formatted with the fatfs_format example?"); - // fatalError(); - // while(1) delay(1); - // } - // Serial.println("Mounted filesystem!"); - - _memoryType = Flash; _pageSize = pageSizes[NVMCTRL->PARAM.bit.PSZ]; _pageCnt = NVMCTRL->PARAM.bit.NVMP; @@ -226,7 +195,6 @@ void Samd51Platform::write(const volatile void *flash_ptr, const void *data, uin // Restore original NVMCTRL cache settings. NVMCTRL->CTRLA.bit.CACHEDIS0 = original_CACHEDIS0; NVMCTRL->CTRLA.bit.CACHEDIS1 = original_CACHEDIS1; - } } diff --git a/src/samd51_platform.h b/src/samd51_platform.h index 5770387..3063d08 100644 --- a/src/samd51_platform.h +++ b/src/samd51_platform.h @@ -2,11 +2,6 @@ #include "Arduino.h" #include "arduino_platform.h" -// #include //QSPI -// #include //QSPI -// #include //QSPI -// #define FILE_NAME parameters.sav - class Samd51Platform : public ArduinoPlatform { public: From 76762571ea6a8852705ad491b0ef53235e29c044 Mon Sep 17 00:00:00 2001 From: OnlineCaveman <115506475+OnlineCaveman@users.noreply.github.com> Date: Tue, 25 Oct 2022 15:56:34 +0200 Subject: [PATCH 07/11] Ifdef include requested change --- src/samd51_platform.cpp | 6 ++++-- src/samd51_platform.h | 3 ++- src/samd_platform.cpp | 24 +++++++----------------- 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/src/samd51_platform.cpp b/src/samd51_platform.cpp index ad2b6b2..0a30973 100644 --- a/src/samd51_platform.cpp +++ b/src/samd51_platform.cpp @@ -1,7 +1,9 @@ -#ifdef __SAMD51__ -#include #include "samd51_platform.h" + +#ifdef __SAMD51__ + #include +#include #if KNX_FLASH_SIZE % 1024 #error "KNX_FLASH_SIZE must be multiple of 1024" diff --git a/src/samd51_platform.h b/src/samd51_platform.h index 3063d08..491a63b 100644 --- a/src/samd51_platform.h +++ b/src/samd51_platform.h @@ -1,7 +1,8 @@ -#ifdef __SAMD51__ #include "Arduino.h" #include "arduino_platform.h" +#ifdef __SAMD51__ + class Samd51Platform : public ArduinoPlatform { public: diff --git a/src/samd_platform.cpp b/src/samd_platform.cpp index eb100da..be888fb 100644 --- a/src/samd_platform.cpp +++ b/src/samd_platform.cpp @@ -1,10 +1,10 @@ +#include "samd_platform.h" + #if(defined(__SAMD21E17A__) || \ defined(__SAMD21G18A__) || \ defined(__SAMD21E18A__) || \ defined(__SAMD21J18A__)) -#include "samd_platform.h" - #include #include @@ -39,21 +39,11 @@ SamdPlatform::SamdPlatform( HardwareSerial* s) : ArduinoPlatform(s) uint32_t SamdPlatform::uniqueSerialNumber() { - #if defined (__SAMD51__) - // SAMD51 from section 9.6 of the datasheet - #define SERIAL_NUMBER_WORD_0 *(volatile uint32_t*)(0x008061FC) - #define SERIAL_NUMBER_WORD_1 *(volatile uint32_t*)(0x00806010) - #define SERIAL_NUMBER_WORD_2 *(volatile uint32_t*)(0x00806014) - #define SERIAL_NUMBER_WORD_3 *(volatile uint32_t*)(0x00806018) - #else - //#elif defined (__SAMD21E17A__) || defined(__SAMD21G18A__) || defined(__SAMD21E18A__) || defined(__SAMD21J18A__) - // SAMD21 from section 9.3.3 of the datasheet - #define SERIAL_NUMBER_WORD_0 *(volatile uint32_t*)(0x0080A00C) - #define SERIAL_NUMBER_WORD_1 *(volatile uint32_t*)(0x0080A040) - #define SERIAL_NUMBER_WORD_2 *(volatile uint32_t*)(0x0080A044) - #define SERIAL_NUMBER_WORD_3 *(volatile uint32_t*)(0x0080A048) - #endif - + #define SERIAL_NUMBER_WORD_0 *(volatile uint32_t*)(0x0080A00C) + #define SERIAL_NUMBER_WORD_1 *(volatile uint32_t*)(0x0080A040) + #define SERIAL_NUMBER_WORD_2 *(volatile uint32_t*)(0x0080A044) + #define SERIAL_NUMBER_WORD_3 *(volatile uint32_t*)(0x0080A048) + return SERIAL_NUMBER_WORD_0 ^ SERIAL_NUMBER_WORD_1 ^ SERIAL_NUMBER_WORD_2 ^ SERIAL_NUMBER_WORD_3; } From 7373ab0a875b42e5eab242adc56707430f7756e1 Mon Sep 17 00:00:00 2001 From: OnlineCaveman <115506475+OnlineCaveman@users.noreply.github.com> Date: Tue, 25 Oct 2022 16:19:53 +0200 Subject: [PATCH 08/11] No IP version yet --- src/knx_facade.cpp | 4 ++-- src/knx_facade.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/knx_facade.cpp b/src/knx_facade.cpp index 4180f5e..3e7bb1c 100644 --- a/src/knx_facade.cpp +++ b/src/knx_facade.cpp @@ -40,8 +40,8 @@ // predefined global instance for TP or IP #if MASK_VERSION == 0x07B0 KnxFacade knx(buttonEvent); - #elif MASK_VERSION == 0x57B0 - KnxFacade knx(buttonEvent); + // #elif MASK_VERSION == 0x57B0 + // KnxFacade knx(buttonEvent); #else #error "Mask version not supported on SAMD51" #endif diff --git a/src/knx_facade.h b/src/knx_facade.h index 64ed039..d7961ad 100644 --- a/src/knx_facade.h +++ b/src/knx_facade.h @@ -477,8 +477,8 @@ template class KnxFacade : private SaveRestore // predefined global instance for TP or IP #if MASK_VERSION == 0x07B0 extern KnxFacade knx; - #elif MASK_VERSION == 0x57B0 - extern KnxFacade knx; + // #elif MASK_VERSION == 0x57B0 + // extern KnxFacade knx; #else #error "Mask version not supported on SAMD51" #endif From d24f6de36fca4dedf3a42a60e19fb65393bb67b2 Mon Sep 17 00:00:00 2001 From: OnlineCaveman <115506475+OnlineCaveman@users.noreply.github.com> Date: Tue, 25 Oct 2022 17:24:55 +0200 Subject: [PATCH 09/11] Added the RF (0x27B0) Added checks for RF 0x27B0 as that should work ootb I suppose. Builds and uploads successfully. Gives the debug output "ERROR, RF transceiver not responding" since I have no RF hw to test. Same goes for the TP 0x07B0. Build and uploads successfully. Gives the debug output "ERROR, TPUART not responding" since no I have no TP uart hw to test. --- src/knx_facade.cpp | 2 ++ src/knx_facade.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/knx_facade.cpp b/src/knx_facade.cpp index 3e7bb1c..4a26740 100644 --- a/src/knx_facade.cpp +++ b/src/knx_facade.cpp @@ -40,6 +40,8 @@ // predefined global instance for TP or IP #if MASK_VERSION == 0x07B0 KnxFacade knx(buttonEvent); + #elif MASK_VERSION == 0x27B0 + KnxFacade knx(buttonEvent); // #elif MASK_VERSION == 0x57B0 // KnxFacade knx(buttonEvent); #else diff --git a/src/knx_facade.h b/src/knx_facade.h index d7961ad..be0a14b 100644 --- a/src/knx_facade.h +++ b/src/knx_facade.h @@ -477,6 +477,8 @@ template class KnxFacade : private SaveRestore // predefined global instance for TP or IP #if MASK_VERSION == 0x07B0 extern KnxFacade knx; + #elif MASK_VERSION == 0x27B0 + extern KnxFacade knx; // #elif MASK_VERSION == 0x57B0 // extern KnxFacade knx; #else From b0238cfe7e16c687794a2f67ae9ca298a704dfdf Mon Sep 17 00:00:00 2001 From: OnlineCaveman <115506475+OnlineCaveman@users.noreply.github.com> Date: Tue, 25 Oct 2022 17:28:00 +0200 Subject: [PATCH 10/11] Changed comment lines Changed the comment lines to reflect the current possibilities TP and RF --- src/knx_facade.cpp | 2 +- src/knx_facade.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/knx_facade.cpp b/src/knx_facade.cpp index 4a26740..2c3b97e 100644 --- a/src/knx_facade.cpp +++ b/src/knx_facade.cpp @@ -37,7 +37,7 @@ #endif #ifdef __SAMD51__ - // predefined global instance for TP or IP + // predefined global instance for TP or RF #if MASK_VERSION == 0x07B0 KnxFacade knx(buttonEvent); #elif MASK_VERSION == 0x27B0 diff --git a/src/knx_facade.h b/src/knx_facade.h index be0a14b..428b63d 100644 --- a/src/knx_facade.h +++ b/src/knx_facade.h @@ -474,7 +474,7 @@ template class KnxFacade : private SaveRestore #ifndef KNX_NO_AUTOMATIC_GLOBAL_INSTANCE #ifdef __SAMD51__ - // predefined global instance for TP or IP + // predefined global instance for TP or RF #if MASK_VERSION == 0x07B0 extern KnxFacade knx; #elif MASK_VERSION == 0x27B0 From cf44c4efe944f36c5e359ad4f6cd835e8302a0c8 Mon Sep 17 00:00:00 2001 From: OnlineCaveman <115506475+OnlineCaveman@users.noreply.github.com> Date: Fri, 28 Oct 2022 19:35:02 +0200 Subject: [PATCH 11/11] Added functionality for W5500 Initialisation works. Compiling fails on "htonl" expansion. If commented out it compiles fine. --- .vscode/extensions.json | 3 + examples/knx-demo/knx-demo.ino | 242 +++++++++++++++++++++------------ platformio.ini | 33 ++++- src/knx_facade.cpp | 4 +- src/knx_facade.h | 4 +- src/samd51_platform.cpp | 115 ++++++++++++++++ src/samd51_platform.h | 32 ++++- 7 files changed, 339 insertions(+), 94 deletions(-) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index e80666b..080e70d 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -3,5 +3,8 @@ // for the documentation about the extensions.json format "recommendations": [ "platformio.platformio-ide" + ], + "unwantedRecommendations": [ + "ms-vscode.cpptools-extension-pack" ] } diff --git a/examples/knx-demo/knx-demo.ino b/examples/knx-demo/knx-demo.ino index a72b214..f1e22c0 100644 --- a/examples/knx-demo/knx-demo.ino +++ b/examples/knx-demo/knx-demo.ino @@ -1,108 +1,180 @@ #include -#include -#if MASK_VERSION != 0x07B0 && (defined ARDUINO_ARCH_ESP8266 || defined ARDUINO_ARCH_ESP32) -#include +#define USE_KNX + +#ifdef USE_KNX + #include + + #if (MASK_VERSION != 0x07B0) && (defined ARDUINO_ARCH_ESP8266 || defined ARDUINO_ARCH_ESP32) + #include + #endif + +#if USE_W5X00 == 1 + #include + #include #endif -// create named references for easy access to group objects -#define goCurrent knx.getGroupObject(1) -#define goMax knx.getGroupObject(2) -#define goMin knx.getGroupObject(3) -#define goReset knx.getGroupObject(4) + // create named references for easy access to group objects + #define goCurrent knx.getGroupObject(1) + #define goMax knx.getGroupObject(2) + #define goMin knx.getGroupObject(3) + #define goReset knx.getGroupObject(4) -float currentValue = 0; -float maxValue = 0; -float minValue = RAND_MAX; -long lastsend = 0; + float currentValue = 0; + float maxValue = 0; + float minValue = RAND_MAX; + long lastsend = 0; -void measureTemp() -{ - long now = millis(); - if ((now - lastsend) < 2000) - return; - - lastsend = now; - int r = rand(); - currentValue = (r * 1.0) / (RAND_MAX * 1.0); - currentValue *= 100 * 100; - - // write new value to groupobject - goCurrent.value(currentValue); - - if (currentValue > maxValue) + void measureTemp() { - maxValue = currentValue; - goMax.value(maxValue); + long now = millis(); + if ((now - lastsend) < 2000) + return; + + lastsend = now; + int r = rand(); + currentValue = (r * 1.0) / (RAND_MAX * 1.0); + currentValue *= 100 * 100; + + // write new value to groupobject + goCurrent.value(currentValue); + + if (currentValue > maxValue) + { + maxValue = currentValue; + goMax.value(maxValue); + } + + if (currentValue < minValue) + { + minValue = currentValue; + goMin.value(minValue); + } } - if (currentValue < minValue) + // callback from reset-GO + void resetCallback(GroupObject& go) { - minValue = currentValue; - goMin.value(minValue); + if (go.value()) + { + maxValue = 0; + minValue = 10000; + } } -} - -// callback from reset-GO -void resetCallback(GroupObject& go) -{ - if (go.value()) - { - maxValue = 0; - minValue = 10000; - } -} +#endif void setup() { Serial.begin(115200); - ArduinoPlatform::SerialDebug = &Serial; - - randomSeed(millis()); - -#if MASK_VERSION != 0x07B0 && (defined ARDUINO_ARCH_ESP8266 || defined ARDUINO_ARCH_ESP32) - WiFiManager wifiManager; - wifiManager.autoConnect("knx-demo"); -#endif - - // read adress table, association table, groupobject table and parameters from eeprom - knx.readMemory(); - - // print values of parameters if device is already configured - if (knx.configured()) - { - // register callback for reset GO - goReset.callback(resetCallback); - goReset.dataPointType(DPT_Trigger); - goCurrent.dataPointType(DPT_Value_Temp); - goMin.dataPointType(DPT_Value_Temp); - goMax.dataPointType(DPT_Value_Temp); - - Serial.print("Timeout: "); - Serial.println(knx.paramByte(0)); - Serial.print("Zykl. senden: "); - Serial.println(knx.paramByte(1)); - Serial.print("Min/Max senden: "); - Serial.println(knx.paramByte(2)); - Serial.print("Aenderung senden: "); - Serial.println(knx.paramByte(3)); - Serial.print("Abgleich: "); - Serial.println(knx.paramByte(4)); + while (!Serial) { + delay(1000); // wait for serial port to connect. Needed for native USB port only, long for vscode stupid text } - // pin or GPIO the programming led is connected to. Default is LED_BUILTIN - // knx.ledPin(LED_BUILTIN); - // is the led active on HIGH or low? Default is LOW - // knx.ledPinActiveOn(HIGH); - // pin or GPIO programming button is connected to. Default is 0 - // knx.buttonPin(0); + // IP stuff + #if USE_W5X00 == 1 + println("****** Set SS to pin 4 ******"); + Ethernet.init(4); + byte _ma[6] = {0xC0, 0xFF, 0xEE, 0xC0, 0xDE, 0x00}; + println("****** Bring up ethernet connection ******"); + Ethernet.begin(_ma); + if (Ethernet.hardwareStatus() == EthernetNoHardware) { + println("****** No Ethernet shield found ******."); + println("****** Ideling forever... ******"); + while (true) { + delay(1); // do nothing, no point running without Ethernet hardware or link + } + } + if (Ethernet.hardwareStatus() != EthernetW5500) { + println("****** Currently only working on W5500 controller ******"); + println("****** Ideling forever... ******"); + while (true) { + delay(1); // do nothing, no point running without Ethernet hardware or link + } + } + if (Ethernet.linkStatus() == LinkOFF) { + println("Link status: Off (No network cable connected or port on switch down)"); + println("****** Ideling forever... ******"); + while (true) { + delay(1); // do nothing, no point running without Ethernet hardware or link + } + } + println("****** Ethernet shield connected ******"); + println("****** W5500 Ethernet controller detected ******"); + println("****** Link status: On ******"); + char ar[50]; + sprintf(ar, "****** Mac address used: %02X:%02X:%02X:%02X:%02X:%02X ******", _ma[0], _ma[1], _ma[2], _ma[3], _ma[4], _ma[5]); + println(ar); + println("****** Ethernet connection up ******"); + println("****** Connected with DHCP ******"); + IPAddress _ip = Ethernet.localIP(); + sprintf(ar, "****** IP address: %d.%d.%d.%d ******", _ip[0], _ip[1], _ip[2], _ip[3]); + println(ar); + _ip = Ethernet.subnetMask(); + sprintf(ar, "****** Subnet mask: %d.%d.%d.%d ******", _ip[0], _ip[1], _ip[2], _ip[3]); + println(ar); + _ip = Ethernet.gatewayIP(); + sprintf(ar, "****** Gateway: %d.%d.%d.%d ******", _ip[0], _ip[1], _ip[2], _ip[3]); + println(ar); + #endif - // start the framework. - knx.start(); + #ifdef USE_KNX + ArduinoPlatform::SerialDebug = &Serial; + println("****** Serial debug running ******"); + + randomSeed(millis()); + + #if ((MASK_VERSION != 0x07B0) && (defined ARDUINO_ARCH_ESP8266 || defined ARDUINO_ARCH_ESP32)) + WiFiManager wifiManager; + wifiManager.autoConnect("knx-demo"); + #endif + + println("****** Start reading configuration ******"); + // read adress table, association table, groupobject table and parameters from eeprom + knx.readMemory(); + + // print values of parameters if device is already configured + if (knx.configured()) + { + println("****** Configuration found ******"); + // register callback for reset GO + goReset.callback(resetCallback); + goReset.dataPointType(DPT_Trigger); + goCurrent.dataPointType(DPT_Value_Temp); + goMin.dataPointType(DPT_Value_Temp); + goMax.dataPointType(DPT_Value_Temp); + + Serial.print("Timeout: "); + Serial.println(knx.paramByte(0)); + Serial.print("Zykl. senden: "); + Serial.println(knx.paramByte(1)); + Serial.print("Min/Max senden: "); + Serial.println(knx.paramByte(2)); + Serial.print("Aenderung senden: "); + Serial.println(knx.paramByte(3)); + Serial.print("Abgleich: "); + Serial.println(knx.paramByte(4)); + } + else{ + println("****** No stored configuration found ******"); + } + + // pin or GPIO the programming led is connected to. Default is LED_BUILTIN + // knx.ledPin(LED_BUILTIN); + // is the led active on HIGH or low? Default is LOW + // knx.ledPinActiveOn(HIGH); + // pin or GPIO programming button is connected to. Default is 0 + println("****** Set KNX reset button to pin 1 ******"); + knx.buttonPin(1); + println("****** Starting knx framework ******"); + // start the framework. + knx.start(); + println("****** Knx framework started ******"); + #endif } void loop() { +#ifdef USE_KNX // don't delay here to much. Otherwise you might lose packages or mess up the timing with ETS knx.loop(); @@ -110,5 +182,7 @@ void loop() if (!knx.configured()) return; - measureTemp(); + // measureTemp(); +#endif + } diff --git a/platformio.ini b/platformio.ini index 23ac4f9..d3990e0 100644 --- a/platformio.ini +++ b/platformio.ini @@ -11,17 +11,40 @@ [platformio] src_dir = examples/knx-demo - -[env] +[env:feather_m4_w5500] platform = atmelsam -board = zeroUSB +board = adafruit_feather_m4 framework = arduino build_type = debug monitor_speed = 115200 -lib_ldf_mode = deep+ +; lib_ldf_mode = deep+ lib_extra_dirs = - ${sysenv.USERPROFILE}/Documents/PlatformIO/Projects + ${sysenv.USERPROFILE}/Documents/Arduino/libraries +lib_compat_mode = strict +lib_deps = + build_flags = + ; -DMASK_VERSION=0x07B0 + -DMASK_VERSION=0x57B0 + -DUSE_W5X00=1 + -DKNX_NO_SPI=1 + ; -DKNX_NO_DEFAULT_UART=1 -Wno-unknown-pragmas +; [env:feather_esspresif32] +; platform = espressif32 +; board = esp32dev +; framework = arduino +; build_type = debug +; monitor_speed = 115200 +; ; lib_ldf_mode = deep+ +; lib_extra_dirs = +; ${sysenv.USERPROFILE}/Documents/Arduino/libraries +; lib_compat_mode = strict +; lib_deps = + +; build_flags = +; -DMASK_VERSION=0x57B0, +; -Wno-unknown-pragmas + [env:build] diff --git a/src/knx_facade.cpp b/src/knx_facade.cpp index 2c3b97e..b7eec68 100644 --- a/src/knx_facade.cpp +++ b/src/knx_facade.cpp @@ -42,8 +42,8 @@ KnxFacade knx(buttonEvent); #elif MASK_VERSION == 0x27B0 KnxFacade knx(buttonEvent); - // #elif MASK_VERSION == 0x57B0 - // KnxFacade knx(buttonEvent); + #elif MASK_VERSION == 0x57B0 + KnxFacade knx(buttonEvent); #else #error "Mask version not supported on SAMD51" #endif diff --git a/src/knx_facade.h b/src/knx_facade.h index 428b63d..41eb1e5 100644 --- a/src/knx_facade.h +++ b/src/knx_facade.h @@ -479,8 +479,8 @@ template class KnxFacade : private SaveRestore extern KnxFacade knx; #elif MASK_VERSION == 0x27B0 extern KnxFacade knx; - // #elif MASK_VERSION == 0x57B0 - // extern KnxFacade knx; + #elif MASK_VERSION == 0x57B0 + extern KnxFacade knx; #else #error "Mask version not supported on SAMD51" #endif diff --git a/src/samd51_platform.cpp b/src/samd51_platform.cpp index 0a30973..f2ad8bf 100644 --- a/src/samd51_platform.cpp +++ b/src/samd51_platform.cpp @@ -43,6 +43,110 @@ void Samd51Platform::restart() NVIC_SystemReset(); } +#if USE_W5X00 == 1 + + uint32_t Samd51Platform::currentIpAddress() + { + // IPAddress _ip = Ethernet.localIP(); + // _ipAddress = htonl(_ip); + // return _ipAddress; + + return Ethernet.localIP(); + + // _ipAddress = 0x0A063232; + // return _ipAddress; + + // return 0x0A063232; + } + + uint32_t Samd51Platform::currentSubnetMask() + { + // IPAddress _nm = Ethernet.subnetMask(); + // _netmask = htonl(_nm); + // return _netmask; + + return Ethernet.subnetMask(); + + // _netmask = 0xFFFFFF00; + // return _netmask; + + // return 0xFFFFFF00; + } + + uint32_t Samd51Platform::currentDefaultGateway() + { + // IPAddress _gw = Ethernet.gatewayIP(); + // _defaultGateway = htonl(_gw); + // return _defaultGateway; + + return Ethernet.gatewayIP(); + + // _defaultGateway = 0x0A063201; + // return _defaultGateway; + + // return 0x0A063201; + } + + void Samd51Platform::macAddress(uint8_t * mac_address) + { + //Ethernet.macAddress(mac_address); //try this first, not sure if this will work, is for ethernet3 lib + memcpy(mac_address, _macAddress, sizeof(_macAddress) / sizeof(_macAddress[0])); //sizeof should resolve to be just 6 + } + + void Samd51Platform::setupMultiCast(uint32_t addr, uint16_t port) + { + IPAddress _mcastaddr(htonl(addr)); + + KNX_DEBUG_SERIAL.printf("setup multicast on %d.%d.%d.%d:%d\n", _mcastaddr[0], _mcastaddr[1], _mcastaddr[2], _mcastaddr[3], port); + uint8_t result = _udp.beginMulticast(_multicastAddr, _multicastPort); + KNX_DEBUG_SERIAL.printf("result %d\n", result); + } + + void Samd51Platform::closeMultiCast() + { + _udp.stop(); + } + + bool Samd51Platform::sendBytesMultiCast(uint8_t * buffer, uint16_t len) + { + //printHex("<- ",buffer, len); + _udp.beginPacket(_multicastAddr, _multicastPort); + _udp.write(buffer, len); + _udp.endPacket(); + return true; + } + + int Samd51Platform::readBytesMultiCast(uint8_t * buffer, uint16_t maxLen) + { + int len = _udp.parsePacket(); + if (len == 0) + return 0; + + if (len > maxLen) + { + KNX_DEBUG_SERIAL.printf("udp buffer to small. was %d, needed %d\n", maxLen, len); + fatalError(); + } + + _udp.read(buffer, len); + printHex("-> ", buffer, len); + return len; + } + + bool Samd51Platform::sendBytesUniCast(uint32_t addr, uint16_t port, uint8_t* buffer, uint16_t len) + { + IPAddress ucastaddr(htonl(addr)); + println("sendBytesUniCast endPacket fail"); + if(_udp.beginPacket(ucastaddr, port) == 1) { + _udp.write(buffer, len); + if(_udp.endPacket() == 0) println("sendBytesUniCast endPacket fail"); + } + else println("sendBytesUniCast beginPacket fail"); + return true; + } + +#endif + extern uint32_t __etext; extern uint32_t __data_start__; extern uint32_t __data_end__; @@ -51,6 +155,17 @@ static const uint32_t pageSizes[] = {8, 16, 32, 64, 128, 256, 512, 1024}; void Samd51Platform::init() { + // println("Entered Init .h variables active, rest and .cpp commented"); + + // #if USE_W5X00 == 1 + // IPAddress _ip = Ethernet.localIP(); + // _ipAddress = htonl(_ip); + // _ip = Ethernet.subnetMask(); + // _netmask = htonl(_ip); + // _ip = Ethernet.gatewayIP(); + // _defaultGateway = htonl(_ip); + // #endif + _memoryType = Flash; _pageSize = pageSizes[NVMCTRL->PARAM.bit.PSZ]; _pageCnt = NVMCTRL->PARAM.bit.NVMP; diff --git a/src/samd51_platform.h b/src/samd51_platform.h index 491a63b..5a58268 100644 --- a/src/samd51_platform.h +++ b/src/samd51_platform.h @@ -1,5 +1,8 @@ -#include "Arduino.h" +#include #include "arduino_platform.h" +#include +#include +#include #ifdef __SAMD51__ @@ -14,6 +17,22 @@ public: void restart(); + #if USE_W5X00 == 1 + // ip config + uint32_t currentIpAddress() override; + uint32_t currentSubnetMask() override; + uint32_t currentDefaultGateway() override; + void macAddress(uint8_t* data) override; + + //multicast + void setupMultiCast(uint32_t addr, uint16_t port) override; + void closeMultiCast() override; + bool sendBytesMultiCast(uint8_t* buffer, uint16_t len) override; + int readBytesMultiCast(uint8_t* buffer, uint16_t maxLen) override; + + bool sendBytesUniCast(uint32_t addr, uint16_t port, uint8_t* buffer, uint16_t len) override; + #endif + // size of one EraseBlock in pages virtual size_t flashEraseBlockSize(); // size of one flash page in bytes @@ -42,6 +61,17 @@ private: void write(const volatile void* flash_ptr, const void* data, uint32_t size); void erase(const volatile void* flash_ptr, uint32_t size); void eraseRow(const volatile void* flash_ptr); + + #if USE_W5X00 == 1 + uint8_t _macAddress[6] = {0xC0, 0xFF, 0xEE, 0xC0, 0xDE, 0x00}; + uint32_t _ipAddress = 0; + uint32_t _netmask = 0; + uint32_t _defaultGateway = 0; + + uint32_t _multicastAddr = -1; + uint16_t _multicastPort = -1; + EthernetUDP _udp; + #endif }; #endif