diff --git a/.gitignore b/.gitignore
index b045b0d1c..4445cdff0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -112,3 +112,4 @@ software_version_id.h
/lib-nextion
/lib-node
/lib-showfile/Doxygen
+/opi_emac_eve_example
diff --git a/README.md b/README.md
index 069f49c99..0dd1e8907 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
![GitHub](https://img.shields.io/github/license/vanvught/rpidmx512)
-[![C++ Standard](https://img.shields.io/badge/C%2B%2B-11-blue.svg)](https://img.shields.io/badge/C%2B%2B-11%-blue.svg)
+[![C++ Standard](https://img.shields.io/badge/C%2B%2B-20-blue.svg)](https://img.shields.io/badge/C%2B%2B-11%-blue.svg)
![GitHub issues](https://img.shields.io/github/issues-raw/vanvught/rpidmx512)
![GitHub contributors](https://img.shields.io/github/contributors/vanvught/rpidmx512)
![GitHub Sponsors](https://img.shields.io/github/sponsors/vanvught)
diff --git a/firmware-template-h3/Rules.mk b/firmware-template-h3/Rules.mk
index f7d88b30e..16f52f1b4 100644
--- a/firmware-template-h3/Rules.mk
+++ b/firmware-template-h3/Rules.mk
@@ -53,6 +53,7 @@ ifneq ($(findstring _TIME_STAMP_YEAR_,$(DEFINES)), _TIME_STAMP_YEAR_)
endif
DEFINES+=-DBARE_METAL -DH3
+DEFINES+=-DPHY_GENERIC=255
DEFINES+=-DPHY_TYPE=PHY_GENERIC
DEFINES+=-DENABLE_TFTP_SERVER
DEFINES+=-DCONFIG_MDNS_DOMAIN_REVERSE
diff --git a/firmware-template-h3/lib/Rules.mk b/firmware-template-h3/lib/Rules.mk
index 1ac7834bd..83b474de0 100644
--- a/firmware-template-h3/lib/Rules.mk
+++ b/firmware-template-h3/lib/Rules.mk
@@ -35,6 +35,7 @@ ifneq ($(findstring _TIME_STAMP_YEAR_,$(DEFINES)), _TIME_STAMP_YEAR_)
DEFINES+=-D_TIME_STAMP_YEAR_=$(shell date +"%Y") -D_TIME_STAMP_MONTH_=$(shell date +"%-m") -D_TIME_STAMP_DAY_=$(shell date +"%-d")
endif
+DEFINES+=-DPHY_GENERIC=255
DEFINES+=-DPHY_TYPE=PHY_GENERIC
DEFINES+=-DENABLE_TFTP_SERVER
DEFINES+=-DCONFIG_MDNS_DOMAIN_REVERSE
diff --git a/lib-arm/.settings/language.settings.xml b/lib-arm/.settings/language.settings.xml
index a6b666344..330240762 100644
--- a/lib-arm/.settings/language.settings.xml
+++ b/lib-arm/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-artnet/.settings/language.settings.xml b/lib-artnet/.settings/language.settings.xml
index c2e9d316b..db163d342 100644
--- a/lib-artnet/.settings/language.settings.xml
+++ b/lib-artnet/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-artnet/include/artnetnode.h b/lib-artnet/include/artnetnode.h
index 19704fd7a..566fc61cd 100755
--- a/lib-artnet/include/artnetnode.h
+++ b/lib-artnet/include/artnetnode.h
@@ -476,11 +476,7 @@ class ArtNetNode {
}
void SetTimeCodeIp(const uint32_t nDestinationIp) {
- if (Network::Get()->IsValidIp(nDestinationIp)) {
- m_Node.IPAddressTimeCode = nDestinationIp;
- } else {
- m_Node.IPAddressTimeCode = Network::Get()->GetBroadcastIp();
- }
+ m_Node.IPAddressTimeCode = nDestinationIp;
}
#endif
@@ -490,13 +486,8 @@ class ArtNetNode {
void SetDestinationIp(const uint32_t nPortIndex, const uint32_t nDestinationIp) {
if (nPortIndex < artnetnode::MAX_PORTS) {
- if (Network::Get()->IsValidIp(nDestinationIp)) {
- m_InputPort[nPortIndex].nDestinationIp = nDestinationIp;
- } else {
- m_InputPort[nPortIndex].nDestinationIp = Network::Get()->GetBroadcastIp();
- }
-
- DEBUG_PRINTF("m_nDestinationIp=" IPSTR, IP2STR(m_InputPort[nPortIndex].nDestinationIp));
+ m_InputPort[nPortIndex].nDestinationIp = nDestinationIp;
+ DEBUG_PRINTF("nDestinationIp=" IPSTR, IP2STR(m_InputPort[nPortIndex].nDestinationIp));
}
}
diff --git a/lib-artnet/src/node/artnetnodehandlepoll.cpp b/lib-artnet/src/node/artnetnodehandlepoll.cpp
index 2e630d53e..28360a1cc 100644
--- a/lib-artnet/src/node/artnetnodehandlepoll.cpp
+++ b/lib-artnet/src/node/artnetnodehandlepoll.cpp
@@ -130,9 +130,11 @@ void ArtNetNode::SendPollRelply(const uint32_t nBindIndex, const uint32_t nDesti
ProcessPollRelply(nPortIndex, nPortsInput, nPortsOutput);
- const auto nRefreshRate = m_pLightSet->GetRefreshRate();
- m_ArtPollReply.RefreshRateLo = static_cast(nRefreshRate);
- m_ArtPollReply.RefreshRateHi = static_cast(nRefreshRate >> 8);
+ if (__builtin_expect((m_pLightSet != nullptr), 1)) {
+ const auto nRefreshRate = m_pLightSet->GetRefreshRate();
+ m_ArtPollReply.RefreshRateLo = static_cast(nRefreshRate);
+ m_ArtPollReply.RefreshRateHi = static_cast(nRefreshRate >> 8);
+ }
m_ArtPollReply.NumPortsLo = static_cast(std::max(nPortsInput, nPortsOutput));
diff --git a/lib-bcm2835/.settings/language.settings.xml b/lib-bcm2835/.settings/language.settings.xml
index d148daee5..b2b5c4ba9 100644
--- a/lib-bcm2835/.settings/language.settings.xml
+++ b/lib-bcm2835/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/lib-configstore/.settings/language.settings.xml b/lib-configstore/.settings/language.settings.xml
index 02c2228fe..56b8506bb 100755
--- a/lib-configstore/.settings/language.settings.xml
+++ b/lib-configstore/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/lib-ddp/.settings/language.settings.xml b/lib-ddp/.settings/language.settings.xml
index ff6ec7266..99075d0fc 100755
--- a/lib-ddp/.settings/language.settings.xml
+++ b/lib-ddp/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-device/.settings/language.settings.xml b/lib-device/.settings/language.settings.xml
index b5c9c58da..9436a33d5 100644
--- a/lib-device/.settings/language.settings.xml
+++ b/lib-device/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-display/.settings/language.settings.xml b/lib-display/.settings/language.settings.xml
index 0f26841d6..e1347450b 100755
--- a/lib-display/.settings/language.settings.xml
+++ b/lib-display/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
@@ -29,7 +29,7 @@
-
+
diff --git a/lib-displayudf/.settings/language.settings.xml b/lib-displayudf/.settings/language.settings.xml
index 37f53a801..40099f716 100644
--- a/lib-displayudf/.settings/language.settings.xml
+++ b/lib-displayudf/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/lib-dmx/.settings/language.settings.xml b/lib-dmx/.settings/language.settings.xml
index f8409aefc..017a2c499 100644
--- a/lib-dmx/.settings/language.settings.xml
+++ b/lib-dmx/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-dmx/include/gd32/dmx.h b/lib-dmx/include/gd32/dmx.h
index 394b46e10..0d3c60a29 100644
--- a/lib-dmx/include/gd32/dmx.h
+++ b/lib-dmx/include/gd32/dmx.h
@@ -107,8 +107,8 @@ class Dmx {
}
private:
- void StartData(const uint32_t nUart, const uint32_t nPortIndex);
- void StopData(const uint32_t nUart, const uint32_t nPortIndex);
+ void StartData(const uint32_t nPortIndex);
+ void StopData(const uint32_t nPortIndex);
void StartDmxOutput(const uint32_t nPortIndex);
private:
diff --git a/lib-dmxserial/.settings/language.settings.xml b/lib-dmxserial/.settings/language.settings.xml
index 6478a718b..11b40c905 100644
--- a/lib-dmxserial/.settings/language.settings.xml
+++ b/lib-dmxserial/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-e131/.settings/language.settings.xml b/lib-e131/.settings/language.settings.xml
index 8cd0a6a0a..04b47eed8 100644
--- a/lib-e131/.settings/language.settings.xml
+++ b/lib-e131/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
@@ -29,7 +29,7 @@
-
+
diff --git a/lib-flash/.settings/language.settings.xml b/lib-flash/.settings/language.settings.xml
index 0a8e40bb9..f789c496c 100755
--- a/lib-flash/.settings/language.settings.xml
+++ b/lib-flash/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/lib-flash/src/spi/spi_flash_internal.h b/lib-flash/src/spi/spi_flash_internal.h
index 06564fb26..019fff1a1 100644
--- a/lib-flash/src/spi/spi_flash_internal.h
+++ b/lib-flash/src/spi/spi_flash_internal.h
@@ -77,13 +77,13 @@ struct spi_flash {
extern int spi_init();
extern int spi_xfer(uint32_t bitlen, const uint8_t *dout, uint8_t *din, uint32_t flags);
-#define CONFIG_SPI_FLASH_MACRONIX
-int spi_flash_probe_macronix(struct spi_flash *flash, uint8_t *idcode);
+//#define CONFIG_SPI_FLASH_MACRONIX
+//int spi_flash_probe_macronix(struct spi_flash *flash, uint8_t *idcode);
#define CONFIG_SPI_FLASH_WINBOND
extern int spi_flash_probe_winbond(struct spi_flash *spi, uint8_t *idcode);
-#define CONFIG_SPI_FLASH_GIGADEVICE
-extern int spi_flash_probe_gigadevice(struct spi_flash *spi, uint8_t *idcode);
+//#define CONFIG_SPI_FLASH_GIGADEVICE
+//extern int spi_flash_probe_gigadevice(struct spi_flash *spi, uint8_t *idcode);
#endif /* SPI_FLASH_INTERNAL_H_ */
diff --git a/lib-flashcode/.settings/language.settings.xml b/lib-flashcode/.settings/language.settings.xml
index a0b9e684e..9eda85020 100755
--- a/lib-flashcode/.settings/language.settings.xml
+++ b/lib-flashcode/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/lib-flashcodeinstall/.settings/language.settings.xml b/lib-flashcodeinstall/.settings/language.settings.xml
index 0f18eb382..9e1a8f479 100755
--- a/lib-flashcodeinstall/.settings/language.settings.xml
+++ b/lib-flashcodeinstall/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/lib-gps/.settings/language.settings.xml b/lib-gps/.settings/language.settings.xml
index 87a83fcb6..f3e68b7e6 100644
--- a/lib-gps/.settings/language.settings.xml
+++ b/lib-gps/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/lib-h3/.settings/language.settings.xml b/lib-h3/.settings/language.settings.xml
index d10ebb05d..561f96630 100644
--- a/lib-h3/.settings/language.settings.xml
+++ b/lib-h3/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/lib-hal/.settings/language.settings.xml b/lib-hal/.settings/language.settings.xml
index 8fea7b298..4c842bb94 100644
--- a/lib-hal/.settings/language.settings.xml
+++ b/lib-hal/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-input/.settings/language.settings.xml b/lib-input/.settings/language.settings.xml
index dd244ae59..956b700d0 100644
--- a/lib-input/.settings/language.settings.xml
+++ b/lib-input/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
@@ -29,7 +29,7 @@
-
+
diff --git a/lib-jamstapl/.settings/language.settings.xml b/lib-jamstapl/.settings/language.settings.xml
index 875b02ddc..588f95fb1 100644
--- a/lib-jamstapl/.settings/language.settings.xml
+++ b/lib-jamstapl/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/lib-l6470/.settings/language.settings.xml b/lib-l6470/.settings/language.settings.xml
index 88249b600..077a3f733 100644
--- a/lib-l6470/.settings/language.settings.xml
+++ b/lib-l6470/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
@@ -29,7 +29,7 @@
-
+
diff --git a/lib-l6470dmx/.settings/language.settings.xml b/lib-l6470dmx/.settings/language.settings.xml
index ac14caa43..1bea8cbc6 100644
--- a/lib-l6470dmx/.settings/language.settings.xml
+++ b/lib-l6470dmx/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
@@ -29,7 +29,7 @@
-
+
diff --git a/lib-lightset/.settings/language.settings.xml b/lib-lightset/.settings/language.settings.xml
index 22d14bfb8..0daee9f62 100644
--- a/lib-lightset/.settings/language.settings.xml
+++ b/lib-lightset/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-ltc/.settings/language.settings.xml b/lib-ltc/.settings/language.settings.xml
index bfb7f4ba0..6f1cc345a 100644
--- a/lib-ltc/.settings/language.settings.xml
+++ b/lib-ltc/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/lib-midi/.settings/language.settings.xml b/lib-midi/.settings/language.settings.xml
index 7a67189c1..fefa6fa4e 100644
--- a/lib-midi/.settings/language.settings.xml
+++ b/lib-midi/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-network/.settings/language.settings.xml b/lib-network/.settings/language.settings.xml
index 8491c1347..c188e8e1e 100644
--- a/lib-network/.settings/language.settings.xml
+++ b/lib-network/.settings/language.settings.xml
@@ -2,7 +2,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-network/include/emac/phy/rtl8201f.h b/lib-network/include/emac/phy/rtl8201f.h
new file mode 100755
index 000000000..eaef1a2e9
--- /dev/null
+++ b/lib-network/include/emac/phy/rtl8201f.h
@@ -0,0 +1,37 @@
+/**
+ * @file rtl8201f.h
+ *
+ */
+/* Copyright (C) 2024 by Arjan van Vught mailto:info@gd32-dmx.org
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef EMAC_PHY_RTL8201F_H_
+#define EMAC_PHY_RTL8201F_H_
+
+#include
+
+namespace net::phy {
+void rtl8201f_set_rxtiming(const uint32_t nRxTiming);
+void rtl8201f_set_txtiming(const uint32_t nTxTiming);
+void rtl8201f_get_timings(uint32_t& nRxTiming, uint32_t& nTxTiming);
+} // namespace net::phy
+
+#endif /* EMAC_PHY_RTL8201F_H_ */
diff --git a/lib-network/src/emac/phy/phygen/net_phy.cpp b/lib-network/src/emac/phy/phygen/net_phy.cpp
index 07b68f298..aeb63abbb 100755
--- a/lib-network/src/emac/phy/phygen/net_phy.cpp
+++ b/lib-network/src/emac/phy/phygen/net_phy.cpp
@@ -53,16 +53,14 @@ void phy_customized_timing() {
}
void phy_customized_status(PhyStatus& phyStatus) {
- phyStatus.link = link_status_read();
-
uint16_t nValue;
- phy_read(PHY_ADDRESS, mmi::REG_BMCR, nValue);
+ phy_read(PHY_ADDRESS, mmi::REG_BMSR, nValue);
debug_print_bits(nValue);
- phyStatus.duplex = ((nValue & BIT(8)) == BIT(8)) ? Duplex::DUPLEX_FULL : Duplex::DUPLEX_HALF;
- phyStatus.speed = ((nValue & BIT(13)) == BIT(13)) ? Speed::SPEED100 : Speed::SPEED10;
- phyStatus.bAutonegotiation = ((nValue & mmi::BMCR_AUTONEGOTIATION) == mmi::BMCR_AUTONEGOTIATION);
-
+ phyStatus.duplex = Duplex::DUPLEX_FULL;
+ phyStatus.speed = Speed::SPEED100;
+ phyStatus.link = (nValue & mmi::BMSR_LINKED_STATUS) ? Link::STATE_UP : Link::STATE_DOWN;
+ phyStatus.bAutonegotiation = (nValue & mmi::BMSR_AUTONEGO_COMPLETE);
}
} // namespace net
diff --git a/lib-network/src/emac/phy/rtl8201f/net_phy.cpp b/lib-network/src/emac/phy/rtl8201f/net_phy.cpp
index 114a0d154..38050050f 100755
--- a/lib-network/src/emac/phy/rtl8201f/net_phy.cpp
+++ b/lib-network/src/emac/phy/rtl8201f/net_phy.cpp
@@ -56,9 +56,16 @@ void phy_write_paged(uint16_t phy_page, uint16_t phy_reg, uint16_t phy_value, ui
DEBUG_PRINTF("tmp_value=0x%.4x, phy_value=0x%.4x", tmp_value, phy_value);
phy_write(PHY_ADDRESS, phy_reg, tmp_value);
+ phy_write(PHY_ADDRESS, PHY_REG_PAGE_SELECT, 0);
+}
- phy_page = 0;
+void phy_read_paged(const uint16_t phy_page, const uint16_t phy_reg, uint16_t& phy_value, const uint16_t mask = 0x0) {
phy_write(PHY_ADDRESS, PHY_REG_PAGE_SELECT, phy_page);
+
+ phy_read(PHY_ADDRESS, phy_reg, phy_value);
+ phy_value &= mask;
+
+ phy_write(PHY_ADDRESS, PHY_REG_PAGE_SELECT, 0);
}
void phy_customized_led() {
@@ -75,22 +82,26 @@ void phy_customized_led() {
DEBUG_EXIT
}
+#define RMSR_RX_TIMING_SHIFT 4
+#define RMSR_RX_TIMING_MASK 0xF0
+
+#define RMSR_TX_TIMING_SHIFT 8
+#define RMSR_TX_TIMING_MASK 0xF00
+
void phy_customized_timing() {
DEBUG_ENTRY
-#if defined (GD32F407) || defined (GD32F450)
-# define RMSR_RX_TIMING_SHIFT 4
-# define RMSR_RX_TIMING_MASK 0xF0
+#if defined (GD32F4XX)
# define RMSR_RX_TIMING_VAL 0x4
-# define RMSR_TX_TIMING_SHIFT 8
-# define RMSR_TX_TIMING_MASK 0xF00
# if defined (GD32F407)
-# define RMSR_TX_TIMING_VAL 0x2 // The GD32F407 is now running at 200MHz
+# define RMSR_TX_TIMING_VAL 0x2 // The GD32F407 is now running at 200MHz
+# elif defined (GD32F470)
+# define RMSR_TX_TIMING_VAL 0x1
# else
-# define RMSR_TX_TIMING_VAL 0xF
+# define RMSR_TX_TIMING_VAL 0xF
# endif
constexpr uint16_t phy_value = (RMSR_RX_TIMING_VAL << RMSR_RX_TIMING_SHIFT)
- | (RMSR_TX_TIMING_VAL << RMSR_TX_TIMING_SHIFT);
+ | (RMSR_TX_TIMING_VAL << RMSR_TX_TIMING_SHIFT);
phy_write_paged(0x7, PHY_REG_RMSR, phy_value, RMSR_RX_TIMING_MASK | RMSR_TX_TIMING_MASK);
#endif
DEBUG_EXIT
@@ -107,4 +118,24 @@ void phy_customized_status(PhyStatus& phyStatus) {
phyStatus.bAutonegotiation = ((nValue & mmi::BMCR_AUTONEGOTIATION) == mmi::BMCR_AUTONEGOTIATION);
}
+namespace phy {
+void rtl8201f_get_timings(uint32_t& nRxTiming, uint32_t& nTxTiming) {
+ uint16_t nValue;
+ phy_read_paged(0x7, PHY_REG_RMSR, nValue, RMSR_RX_TIMING_MASK | RMSR_TX_TIMING_MASK);
+
+ nRxTiming = (nValue >> RMSR_RX_TIMING_SHIFT) & 0xF;
+ nTxTiming = (nValue >> RMSR_TX_TIMING_SHIFT) & 0xF;
+}
+
+void rtl8201f_set_rxtiming(const uint32_t nRxTiming) {
+ const auto nValue = static_cast((nRxTiming & 0xF) << RMSR_RX_TIMING_SHIFT);
+ phy_write_paged(0x7, PHY_REG_RMSR, nValue, RMSR_RX_TIMING_MASK);
+}
+
+void rtl8201f_set_txtiming(const uint32_t nTxTiming) {
+ const auto nValue = static_cast((nTxTiming & 0xF) << RMSR_TX_TIMING_SHIFT);
+ phy_write_paged(0x7, PHY_REG_RMSR, nValue, RMSR_TX_TIMING_MASK);
+}
+
+} // namespace phy
} // namespace net
diff --git a/lib-network/src/params/networkparams.cpp b/lib-network/src/params/networkparams.cpp
index 7966b2f05..76c9ebe14 100644
--- a/lib-network/src/params/networkparams.cpp
+++ b/lib-network/src/params/networkparams.cpp
@@ -143,8 +143,13 @@ void NetworkParams::callbackFunction(const char *pLine) {
}
if (Sscan::IpAddress(pLine, NetworkParamsConst::DEFAULT_GATEWAY, nValue32) == Sscan::OK) {
- m_Params.nGatewayIp = nValue32;
- m_Params.nSetList |= networkparams::Mask::DEFAULT_GATEWAY;
+ if (nValue32 != 0) {
+ m_Params.nSetList |= networkparams::Mask::DEFAULT_GATEWAY;
+ m_Params.nGatewayIp = nValue32;
+ } else {
+ m_Params.nSetList &= ~networkparams::Mask::DEFAULT_GATEWAY;
+ }
+
return;
}
@@ -251,14 +256,12 @@ void NetworkParams::Builder(const struct networkparams::Params *ptNetworkParams,
void NetworkParams::Dump() {
printf("%s::%s \'%s\':\n", __FILE__, __FUNCTION__, NetworkParamsConst::FILE_NAME);
- debug_print_bits(m_Params.nSetList);
-
printf(" %s=%d [%s]\n", NetworkParamsConst::USE_DHCP, static_cast(m_Params.bIsDhcpUsed), m_Params.bIsDhcpUsed != 0 ? "Yes" : "No");
printf(" %s=" IPSTR "\n", NetworkParamsConst::IP_ADDRESS, IP2STR(m_Params.nLocalIp));
printf(" %s=" IPSTR "\n", NetworkParamsConst::NET_MASK, IP2STR(m_Params.nNetmask));
+ printf(" %s=" IPSTR "\n", NetworkParamsConst::DEFAULT_GATEWAY, IP2STR(m_Params.nGatewayIp));
#if defined (ESP8266)
- printf(" %s=" IPSTR "\n", NetworkParamsConst::DEFAULT_GATEWAY, IP2STR(m_Params.nGatewayIp));
printf(" %s=" IPSTR "\n", NetworkParamsConst::NAME_SERVER, IP2STR(m_Params.nNameServerIp));
#endif
diff --git a/lib-osc/.settings/language.settings.xml b/lib-osc/.settings/language.settings.xml
index 08eb97609..c63ab5c24 100644
--- a/lib-osc/.settings/language.settings.xml
+++ b/lib-osc/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
@@ -29,7 +29,7 @@
-
+
diff --git a/lib-pca9685/.settings/language.settings.xml b/lib-pca9685/.settings/language.settings.xml
index f5d9857c2..55f2e1034 100644
--- a/lib-pca9685/.settings/language.settings.xml
+++ b/lib-pca9685/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
@@ -29,7 +29,7 @@
-
+
diff --git a/lib-pca9685dmx/.settings/language.settings.xml b/lib-pca9685dmx/.settings/language.settings.xml
index d74f367de..83e455121 100644
--- a/lib-pca9685dmx/.settings/language.settings.xml
+++ b/lib-pca9685dmx/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
@@ -29,7 +29,7 @@
-
+
diff --git a/lib-pp/.settings/language.settings.xml b/lib-pp/.settings/language.settings.xml
index 898a486fe..4f12cc07b 100755
--- a/lib-pp/.settings/language.settings.xml
+++ b/lib-pp/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-properties/.settings/language.settings.xml b/lib-properties/.settings/language.settings.xml
index 818a97a4a..697b7efe6 100644
--- a/lib-properties/.settings/language.settings.xml
+++ b/lib-properties/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-rdm/.settings/language.settings.xml b/lib-rdm/.settings/language.settings.xml
index 715fe7f92..32e5490ba 100644
--- a/lib-rdm/.settings/language.settings.xml
+++ b/lib-rdm/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
@@ -29,7 +29,7 @@
-
+
diff --git a/lib-rdmsensor/.settings/language.settings.xml b/lib-rdmsensor/.settings/language.settings.xml
index 517ebb715..25fe37fb3 100644
--- a/lib-rdmsensor/.settings/language.settings.xml
+++ b/lib-rdmsensor/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
@@ -29,7 +29,7 @@
-
+
diff --git a/lib-rdmsubdevice/.settings/language.settings.xml b/lib-rdmsubdevice/.settings/language.settings.xml
index e3309cfdc..d606d2d40 100644
--- a/lib-rdmsubdevice/.settings/language.settings.xml
+++ b/lib-rdmsubdevice/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
@@ -29,7 +29,7 @@
-
+
diff --git a/lib-remoteconfig/.cproject b/lib-remoteconfig/.cproject
index d0752ea05..1c0e5e926 100644
--- a/lib-remoteconfig/.cproject
+++ b/lib-remoteconfig/.cproject
@@ -79,6 +79,10 @@
+
+
+
+
@@ -174,6 +178,10 @@
+
+
+
+
@@ -210,8 +218,8 @@
-
-
+
+
@@ -223,196 +231,179 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
-
-
+
+
+
+
+
@@ -454,6 +445,9 @@
+
+
+
@@ -463,5 +457,8 @@
+
+
+
\ No newline at end of file
diff --git a/lib-remoteconfig/.settings/language.settings.xml b/lib-remoteconfig/.settings/language.settings.xml
index 90ea1bac7..4cb50072f 100644
--- a/lib-remoteconfig/.settings/language.settings.xml
+++ b/lib-remoteconfig/.settings/language.settings.xml
@@ -5,16 +5,16 @@
-
+
-
+
-
+
diff --git a/lib-remoteconfig/Makefile.H3 b/lib-remoteconfig/Makefile.H3
index c0bb56e32..5dd3e9081 100644
--- a/lib-remoteconfig/Makefile.H3
+++ b/lib-remoteconfig/Makefile.H3
@@ -16,3 +16,5 @@ EXTRA_SRCDIR+=src/tftp src/h3/tftp
include Rules.mk
include ../firmware-template-h3/lib/Rules.mk
+
+$(info $$PHY_TYPE [${PHY_TYPE}])
diff --git a/lib-remoteconfig/Rules.mk b/lib-remoteconfig/Rules.mk
old mode 100644
new mode 100755
index ecb5ed2ea..edf9ee704
--- a/lib-remoteconfig/Rules.mk
+++ b/lib-remoteconfig/Rules.mk
@@ -8,6 +8,10 @@ ifneq ($(MAKE_FLAGS),)
EXTRA_SRCDIR+=src/httpd
endif
+ ifneq (,$(findstring ENABLE_SHELL,$(MAKE_FLAGS)))
+ EXTRA_SRCDIR+=src/shell src/uart
+ endif
+
ifeq ($(findstring NODE_ARTNET,$(MAKE_FLAGS)), NODE_ARTNET)
EXTRA_INCLUDES+=../lib-artnet/include
ifeq ($(findstring ARTNET_VERSION=4,$(MAKE_FLAGS)), ARTNET_VERSION=4)
diff --git a/lib-remoteconfig/include/remoteconfigparams.h b/lib-remoteconfig/include/remoteconfigparams.h
index e83742763..58ce482b7 100644
--- a/lib-remoteconfig/include/remoteconfigparams.h
+++ b/lib-remoteconfig/include/remoteconfigparams.h
@@ -2,7 +2,7 @@
* @file remoteconfigparams.h
*
*/
-/* Copyright (C) 2019-2023 by Arjan van Vught mailto:info@orangepi-dmx.nl
+/* Copyright (C) 2019-2024 by Arjan van Vught mailto:info@gd32-dmx.org
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/lib-remoteconfig/include/shell/shell.h b/lib-remoteconfig/include/shell/shell.h
old mode 100644
new mode 100755
index 57a6a112d..c8a5247c8
--- a/lib-remoteconfig/include/shell/shell.h
+++ b/lib-remoteconfig/include/shell/shell.h
@@ -3,7 +3,7 @@
*
*/
/* Copyright (C) 2020 by hippy mailto:dmxout@gmail.com
- * Copyright (C) 2020-2023 by Arjan van Vught mailto:info@orangepi-dmx.nl
+ * Copyright (C) 2020-2024 by Arjan van Vught mailto:info@gd32-dmx.org
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -44,18 +44,35 @@ enum class CmdIndex: uint32_t {
GET,
DHCP,
DATE,
+ PHY,
+#if !defined (DISABLE_RTC)
HWCLOCK,
-#ifndef NDEBUG
+#endif
+#if defined (DEBUG_I2C)
I2CDETECT,
+#endif
DUMP,
MEM,
+#if defined (ENABLE_NTP_CLIENT)
NTP,
+#endif
+#if defined (CONFIG_SHELL_GPS)
GPS,
+#endif
+#if (PHY_TYPE == RTL8201F)
+ PHY_TYPE_RTL8201F,
#endif
HELP
};
static constexpr auto BUFLEN = 196;
static constexpr auto MAXARG = 4;
+
+namespace msg {
+namespace error {
+static constexpr char INVALID[] = "Invalid command.\n";
+static constexpr char INTERNAL[] = "Internal error.\n";
+} // namespace error
+} // namespace msg
} // namespace shell
class Shell {
@@ -75,34 +92,33 @@ class Shell {
int Printf(const char* fmt, ...);
// shell.cpp
const char *ReadLine(uint32_t& nLength);
- uint16_t ValidateCmd(uint32_t nLength, shell::CmdIndex &nCmdIndex);
- void ValidateArg(uint16_t nOffset, uint32_t nLength);
+ uint32_t ValidateCmd(const uint32_t nLength, shell::CmdIndex &nCmdIndex);
+ void ValidateArg(uint32_t nOffset, const uint32_t nLength);
// shellcmd.cpp
- uint32_t hexadecimalToDecimal(const char *pHexValue, uint32_t nLength);
void CmdReboot();
void CmdInfo();
void CmdSet();
void CmdGet();
void CmdDhcp();
void CmdDate();
+ void CmdPhy();
void CmdHwClock();
-#ifndef NDEBUG
void CmdI2cDetect();
void CmdDump();
void CmdMem();
void CmdNtp();
void CmdGps();
-#endif
+ void CmdPhyTypeRTL8201F();
void CmdHelp();
private:
- bool m_bIsEndOfLine { false };
- uint16_t m_nLength { 0 };
char m_Buffer[shell::BUFLEN];
uint32_t m_Argc { 0 };
+ uint32_t m_nLength { 0 };
char *m_Argv[shell::MAXARG] { nullptr };
uint16_t m_nArgvLength[shell::MAXARG];
bool m_bShownPrompt { false };
+ bool m_bIsEndOfLine { false };
// Firmware specific BEGIN
#if defined (LTC_READER)
diff --git a/lib-remoteconfig/src/gd32/shellcmd.cpp b/lib-remoteconfig/src/gd32/shellcmd.cpp
new file mode 100644
index 000000000..9fac3ea3a
--- /dev/null
+++ b/lib-remoteconfig/src/gd32/shellcmd.cpp
@@ -0,0 +1,31 @@
+/**
+ * @file shellcmd.cpp
+ *
+ */
+/* Copyright (C) 2020 by hippy mailto:dmxout@gmail.com
+ * Copyright (C) 2020-2024 by Arjan van Vught mailto:info@gd32-dmx.org
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "shell/shell.h"
+
+void Shell::CmdDump() {
+ Puts(shell::msg::error::INVALID);
+}
diff --git a/lib-remoteconfig/src/h3/shellcmd.cpp b/lib-remoteconfig/src/h3/shellcmd.cpp
new file mode 100755
index 000000000..b3eae5dff
--- /dev/null
+++ b/lib-remoteconfig/src/h3/shellcmd.cpp
@@ -0,0 +1,85 @@
+/**
+ * @file shellcmd.cpp
+ *
+ */
+/* Copyright (C) 2020 by hippy mailto:dmxout@gmail.com
+ * Copyright (C) 2020-2024 by Arjan van Vught mailto:info@gd32-dmx.org
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include
+#include
+
+#include "shell/shell.h"
+
+#include "debug.h"
+
+extern "C" {
+void h3_board_dump(void);
+void h3_dump_memory_mapping(void);
+void h3_ccu_pll_dump(void);
+void arm_dump_memmap(void);
+void arm_dump_page_table(void);
+}
+
+namespace shell {
+namespace dump {
+namespace arg {
+static constexpr char BOARD[] = "board";
+static constexpr char MMAP[] = "mmap";
+static constexpr char PLL[] = "pll";
+static constexpr char LINKER[] = "linker";
+} // namespace arg
+namespace length {
+static constexpr auto BOARD = sizeof(arg::BOARD) - 1;
+static constexpr auto MMAP = sizeof(arg::MMAP) - 1;
+static constexpr auto PLL = sizeof(arg::PLL) - 1;
+static constexpr auto LINKER = sizeof(arg::LINKER) - 1;
+} // namespace length
+} // namespace dump
+} // namespace shell
+
+using namespace shell;
+
+void Shell::CmdDump() {
+ const auto nArgv0Length = m_nArgvLength[0];
+
+ if ((nArgv0Length == dump::length::BOARD) && (memcmp(m_Argv[0], dump::arg::BOARD, dump::length::BOARD) == 0)) {
+ h3_board_dump();
+ return;
+ }
+
+ if ((nArgv0Length == dump::length::MMAP) && (memcmp(m_Argv[0], dump::arg::MMAP, dump::length::MMAP) == 0)) {
+ h3_dump_memory_mapping();
+ return;
+ }
+
+ if ((nArgv0Length == dump::length::PLL) && (memcmp(m_Argv[0], dump::arg::PLL, dump::length::PLL) == 0)) {
+ h3_ccu_pll_dump();
+ return;
+ }
+
+ if ((nArgv0Length == dump::length::LINKER) && (memcmp(m_Argv[0], dump::arg::LINKER, dump::length::LINKER) == 0)) {
+ arm_dump_memmap();
+ return;
+ }
+
+ Puts(msg::error::INVALID);
+}
diff --git a/lib-remoteconfig/src/remoteconfigparams.cpp b/lib-remoteconfig/src/remoteconfigparams.cpp
index 8ce8b9ab4..b78b21385 100644
--- a/lib-remoteconfig/src/remoteconfigparams.cpp
+++ b/lib-remoteconfig/src/remoteconfigparams.cpp
@@ -2,7 +2,7 @@
* @file remoteconfigparams.cpp
*
*/
-/* Copyright (C) 2019-2023 by Arjan van Vught mailto:info@orangepi-dmx.nl
+/* Copyright (C) 2019-2024 by Arjan van Vught mailto:info@gd32-dmx.org
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -37,13 +37,26 @@
#include "remoteconfig.h"
#include "remoteconfigconst.h"
-
#include "readconfigfile.h"
#include "sscan.h"
#include "propertiesbuilder.h"
#include "debug.h"
+struct ParamMask {
+ const char *pParam;
+ uint32_t nMask;
+};
+
+// Array of structs: parameter and corresponding mask
+constexpr ParamMask paramMasks[] = {
+ { RemoteConfigConst::PARAMS_DISABLE, remoteconfigparams::Mask::DISABLE },
+ { RemoteConfigConst::PARAMS_DISABLE_WRITE, remoteconfigparams::Mask::DISABLE_WRITE },
+ { RemoteConfigConst::PARAMS_ENABLE_REBOOT, remoteconfigparams::Mask::ENABLE_REBOOT },
+ { RemoteConfigConst::PARAMS_ENABLE_UPTIME, remoteconfigparams::Mask::ENABLE_UPTIME },
+ { RemoteConfigConst::PARAMS_ENABLE_FACTORY, remoteconfigparams::Mask::ENABLE_FACTORY },
+};
+
RemoteConfigParams::RemoteConfigParams() {
DEBUG_ENTRY
@@ -72,7 +85,7 @@ void RemoteConfigParams::Load() {
DEBUG_EXIT
}
-void RemoteConfigParams::Load(const char* pBuffer, uint32_t nLength) {
+void RemoteConfigParams::Load(const char *pBuffer, uint32_t nLength) {
DEBUG_ENTRY
assert(pBuffer != nullptr);
@@ -103,34 +116,25 @@ void RemoteConfigParams::SetBool(const uint8_t nValue, const uint32_t nMask) {
void RemoteConfigParams::callbackFunction(const char *pLine) {
assert(pLine != nullptr);
- uint8_t nValue8;
-
- if (Sscan::Uint8(pLine, RemoteConfigConst::PARAMS_DISABLE, nValue8) == Sscan::OK) {
- SetBool(nValue8, remoteconfigparams::Mask::DISABLE);
- return;
- }
-
- if (Sscan::Uint8(pLine, RemoteConfigConst::PARAMS_DISABLE_WRITE, nValue8) == Sscan::OK) {
- SetBool(nValue8, remoteconfigparams::Mask::DISABLE_WRITE);
- return;
- }
-
- if (Sscan::Uint8(pLine, RemoteConfigConst::PARAMS_ENABLE_REBOOT, nValue8) == Sscan::OK) {
- SetBool(nValue8, remoteconfigparams::Mask::ENABLE_REBOOT);
- return;
- }
-
- if (Sscan::Uint8(pLine, RemoteConfigConst::PARAMS_ENABLE_UPTIME, nValue8) == Sscan::OK) {
- SetBool(nValue8, remoteconfigparams::Mask::ENABLE_UPTIME);
- return;
- }
-
- if (Sscan::Uint8(pLine, RemoteConfigConst::PARAMS_ENABLE_FACTORY, nValue8) == Sscan::OK) {
- SetBool(nValue8, remoteconfigparams::Mask::ENABLE_FACTORY);
- return;
- }
+ // Helper lambda for setting masks
+ auto trySetMask = [&](const char* param, const uint32_t mask) {
+ uint8_t nValue8;
+ if (Sscan::Uint8(pLine, param, nValue8) == Sscan::OK) {
+ SetBool(nValue8, mask);
+ return true;
+ }
+ return false;
+ };
+
+ // Loop through parameters and masks
+ for (const auto& paramMask : paramMasks) {
+ if (trySetMask(paramMask.pParam, paramMask.nMask)) {
+ return;
+ }
+ }
uint32_t nLength = remoteconfig::DISPLAY_NAME_LENGTH - 1;
+
if (Sscan::Char(pLine, RemoteConfigConst::PARAMS_DISPLAY_NAME, m_Params.aDisplayName, nLength) == Sscan::OK) {
m_Params.aDisplayName[nLength] = '\0';
m_Params.nSetList |= remoteconfigparams::Mask::DISPLAY_NAME;
@@ -151,11 +155,10 @@ void RemoteConfigParams::Builder(const struct remoteconfigparams::Params *pRemot
PropertiesBuilder builder(RemoteConfigConst::PARAMS_FILE_NAME, pBuffer, nLength);
- builder.Add(RemoteConfigConst::PARAMS_DISABLE, isMaskSet(remoteconfigparams::Mask::DISABLE));
- builder.Add(RemoteConfigConst::PARAMS_DISABLE_WRITE, isMaskSet(remoteconfigparams::Mask::DISABLE_WRITE));
- builder.Add(RemoteConfigConst::PARAMS_ENABLE_REBOOT, isMaskSet(remoteconfigparams::Mask::ENABLE_REBOOT));
- builder.Add(RemoteConfigConst::PARAMS_ENABLE_UPTIME, isMaskSet(remoteconfigparams::Mask::ENABLE_UPTIME));
- builder.Add(RemoteConfigConst::PARAMS_ENABLE_FACTORY, isMaskSet(remoteconfigparams::Mask::ENABLE_FACTORY));
+ // Loop through parameters and masks for building properties
+ for (const auto& paramMask : paramMasks) {
+ builder.Add(paramMask.pParam, isMaskSet(paramMask.nMask));
+ }
builder.Add(RemoteConfigConst::PARAMS_DISPLAY_NAME, m_Params.aDisplayName, isMaskSet(remoteconfigparams::Mask::DISPLAY_NAME));
@@ -165,7 +168,7 @@ void RemoteConfigParams::Builder(const struct remoteconfigparams::Params *pRemot
return;
}
-void RemoteConfigParams::Set(RemoteConfig* pRemoteConfig) {
+void RemoteConfigParams::Set(RemoteConfig *pRemoteConfig) {
assert(pRemoteConfig != nullptr);
pRemoteConfig->SetDisable(isMaskSet(remoteconfigparams::Mask::DISABLE));
@@ -188,10 +191,10 @@ void RemoteConfigParams::staticCallbackFunction(void *p, const char *s) {
void RemoteConfigParams::Dump() {
printf("%s::%s \'%s\':\n", __FILE__, __FUNCTION__, RemoteConfigConst::PARAMS_FILE_NAME);
- printf(" %s=%d\n", RemoteConfigConst::PARAMS_DISABLE, isMaskSet(remoteconfigparams::Mask::DISABLE));
- printf(" %s=%d\n", RemoteConfigConst::PARAMS_DISABLE_WRITE, isMaskSet(remoteconfigparams::Mask::DISABLE_WRITE));
- printf(" %s=%d\n", RemoteConfigConst::PARAMS_ENABLE_REBOOT, isMaskSet(remoteconfigparams::Mask::ENABLE_REBOOT));
- printf(" %s=%d\n", RemoteConfigConst::PARAMS_ENABLE_UPTIME, isMaskSet(remoteconfigparams::Mask::ENABLE_UPTIME));
- printf(" %s=%d\n", RemoteConfigConst::PARAMS_ENABLE_FACTORY, isMaskSet(remoteconfigparams::Mask::ENABLE_FACTORY));
+
+ for (const auto& paramMask : paramMasks) {
+ printf(" %s=%d\n", paramMask.pParam, isMaskSet(paramMask.nMask));
+ }
+
printf(" %s=%s\n", RemoteConfigConst::PARAMS_DISPLAY_NAME, m_Params.aDisplayName);
}
diff --git a/lib-remoteconfig/src/shell/shell.cpp b/lib-remoteconfig/src/shell/shell.cpp
old mode 100644
new mode 100755
index 6fa14811c..845b27ed6
--- a/lib-remoteconfig/src/shell/shell.cpp
+++ b/lib-remoteconfig/src/shell/shell.cpp
@@ -3,7 +3,7 @@
*
*/
/* Copyright (C) 2020 by hippy mailto:dmxout@gmail.com
- * Copyright (C) 2020-2023 by Arjan van Vught mailto:info@orangepi-dmx.nl
+ * Copyright (C) 2020-2024 by Arjan van Vught mailto:info@gd32-dmx.org
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -31,30 +31,43 @@
#include "shell/shell.h"
+#if defined (GD32) // PHY_TYPE is defined here
+# include "gd32.h"
+#endif
+
#include "debug.h"
-struct TCommands {
+struct ShellCommands {
const char *pName;
const uint32_t nArgc;
};
-static constexpr TCommands cmd_table[] = {
+static constexpr ShellCommands cmd_table[] = {
{ "reboot", 0 },
{ "info", 0 },
- { "set", 2},
- { "get", 2},
- { "dhcp", 0},
- { "date", 0},
- { "hwclock", 1},
-#ifndef NDEBUG
- { "i2cdetect" , 0},
- { "dump" , 1},
- { "mem" , 2},
- { "ntp" , 1},
- { "gps" , 1},
+ { "set", 2 },
+ { "get", 2 },
+ { "dhcp", 0 },
+ { "date", 0 },
+ { "phy", 0 },
+#if !defined (DISABLE_RTC)
+ { "hwclock", 1 },
#endif
- { "?", 0 }
-};
+#if defined (DEBUG_I2C)
+ { "i2cdetect", 0 },
+#endif
+ { "dump", 1 },
+ { "mem", 2 },
+#if defined (ENABLE_NTP_CLIENT)
+ { "ntp", 1 },
+#endif
+#if defined (CONFIG_SHELL_GPS)
+ { "gps", 1 },
+#endif
+#if (PHY_TYPE == RTL8201F)
+ { "rtl8201f" , 2},
+#endif
+ { "?", 0 } };
namespace shell {
static constexpr auto TABLE_SIZE = sizeof(cmd_table) / sizeof(cmd_table[0]);
@@ -65,10 +78,8 @@ static constexpr char CMD_WRONG_ARGUMENTS[] = "Wrong arguments\n";
} // namespace msg
} // namespace shell
-using namespace shell;
-
Shell::Shell() {
- DEBUG_PRINTF("TABLE_SIZE=%d", TABLE_SIZE);
+ DEBUG_PRINTF("TABLE_SIZE=%d", shell::TABLE_SIZE);
}
int Shell::Printf(const char* fmt, ...) {
@@ -86,8 +97,8 @@ int Shell::Printf(const char* fmt, ...) {
return i;
}
-uint16_t Shell::ValidateCmd(uint32_t nLength, CmdIndex &nCmdIndex) {
- uint16_t i;
+uint32_t Shell::ValidateCmd(const uint32_t nLength, shell::CmdIndex &nCmdIndex) {
+ uint32_t i;
m_Argc = 0;
@@ -98,17 +109,17 @@ uint16_t Shell::ValidateCmd(uint32_t nLength, CmdIndex &nCmdIndex) {
}
}
- for (uint32_t j = 0; j < TABLE_SIZE; j++) {
+ for (uint32_t j = 0; j < shell::TABLE_SIZE; j++) {
if (0 == strcmp(m_Buffer, cmd_table[j].pName)) {
- nCmdIndex = static_cast(j);
- return static_cast(i + 1);
+ nCmdIndex = static_cast< shell::CmdIndex>(j);
+ return i + 1;
}
}
return 0;
}
-void Shell::ValidateArg(uint16_t nOffset, uint32_t nLength) {
+void Shell::ValidateArg(uint32_t nOffset, const uint32_t nLength) {
if (nOffset > nLength) {
return;
}
@@ -121,11 +132,11 @@ void Shell::ValidateArg(uint16_t nOffset, uint32_t nLength) {
return;
}
- uint16_t nArgvStart = nOffset;
+ auto nArgvStart = nOffset;
m_Argv[0] = &m_Buffer[nOffset++];
m_Argc = 1;
- uint16_t i, j = 1;
+ uint32_t i, j = 1;
for (i = nOffset; i < nLength; i++) {
if ((m_Buffer[i] > ' ') && (m_Buffer[i] < 127)) {
@@ -133,13 +144,13 @@ void Shell::ValidateArg(uint16_t nOffset, uint32_t nLength) {
}
if ((m_Buffer[i] == ' ') || (m_Buffer[i] == '\t')) {
- if (j < MAXARG) {
+ if (j < shell::MAXARG) {
m_nArgvLength[j - 1] = static_cast(i - nArgvStart);
}
while (i < nLength && ((m_Buffer[i] == ' ') || (m_Buffer[i] == '\t'))) {
m_Buffer[i++] = '\0';
}
- if (j < MAXARG) {
+ if (j < shell::MAXARG) {
nArgvStart = i;
m_Argv[j++] = &m_Buffer[i];
}
@@ -147,7 +158,7 @@ void Shell::ValidateArg(uint16_t nOffset, uint32_t nLength) {
}
}
- if (j < MAXARG) {
+ if (j < shell::MAXARG) {
m_nArgvLength[j - 1] = static_cast(i - nArgvStart);
}
@@ -161,11 +172,18 @@ void Shell::ValidateArg(uint16_t nOffset, uint32_t nLength) {
void Shell::CmdHelp() {
Puts("http://www.orangepi-dmx.org/orange-pi-dmx512-rdm/uart0-shell\n");
+
+ uint32_t i = 0;
+ for (auto& cmd : cmd_table) {
+ Printf("%2u: %s <%u>\n", i++, cmd.pName, cmd.nArgc);
+ }
+
+ Puts("");
}
void Shell::Run() {
if (__builtin_expect((!m_bShownPrompt), 1)) {
- Puts(msg::CMD_PROMPT);
+ Puts(shell::msg::CMD_PROMPT);
m_bShownPrompt = true;
}
@@ -179,64 +197,78 @@ void Shell::Run() {
m_bShownPrompt = false; // next time round, we show the prompt.
- uint16_t nOffset;
- CmdIndex nCmdIndex;
+ uint32_t nOffset;
+ shell::CmdIndex nCmdIndex;
if ((nOffset = ValidateCmd(nLength, nCmdIndex)) == 0) {
- Printf("%s %s\n", msg::CMD_NOT_FOUND, m_Buffer);
+ Printf("%s %s\n", shell::msg::CMD_NOT_FOUND, m_Buffer);
return;
}
ValidateArg(nOffset, nLength);
if (m_Argc != cmd_table[static_cast(nCmdIndex)].nArgc) {
- Puts(msg::CMD_WRONG_ARGUMENTS);
+ Puts( shell::msg::CMD_WRONG_ARGUMENTS);
return;
}
switch (nCmdIndex) {
- case CmdIndex::REBOOT:
- CmdReboot();
- break;
- case CmdIndex::INFO:
- CmdInfo();
- break;
- case CmdIndex::SET:
- CmdSet();
- break;
- case CmdIndex::GET:
- CmdGet();
- break;
- case CmdIndex::DHCP:
- CmdDhcp();
- break;
- case CmdIndex::DATE:
- CmdDate();
- break;
- case CmdIndex::HWCLOCK:
- CmdHwClock();
- break;
-#ifndef NDEBUG
- case CmdIndex::I2CDETECT:
- CmdI2cDetect();
- break;
- case CmdIndex::DUMP:
- CmdDump();
- break;
- case CmdIndex::MEM:
- CmdMem();
- break;
- case CmdIndex::NTP:
- CmdNtp();
- break;
- case CmdIndex::GPS:
- CmdGps();
- break;
+ case shell::CmdIndex::REBOOT:
+ CmdReboot();
+ break;
+ case shell::CmdIndex::INFO:
+ CmdInfo();
+ break;
+ case shell::CmdIndex::SET:
+ CmdSet();
+ break;
+ case shell::CmdIndex::GET:
+ CmdGet();
+ break;
+ case shell::CmdIndex::DHCP:
+ CmdDhcp();
+ break;
+ case shell::CmdIndex::DATE:
+ CmdDate();
+ break;
+ case shell::CmdIndex::PHY:
+ CmdPhy();
+ break;
+#if !defined(DISABLE_RTC)
+ case shell::CmdIndex::HWCLOCK:
+ CmdHwClock();
+ break;
#endif
- case CmdIndex::HELP:
- CmdHelp();
- break;
- default:
- break;
+#if defined (DEBUG_I2C)
+ case shell::CmdIndex::I2CDETECT:
+ CmdI2cDetect();
+ break;
+#endif
+ case shell::CmdIndex::DUMP:
+ CmdDump();
+ break;
+ case shell::CmdIndex::MEM:
+ CmdMem();
+ break;
+#if defined (ENABLE_NTP_CLIENT)
+ case shell::CmdIndex::NTP:
+ CmdNtp();
+ break;
+#endif
+#if defined (CONFIG_SHELL_GPS)
+ case shell::CmdIndex::GPS:
+ CmdGps();
+ break;
+#endif
+#if (PHY_TYPE == RTL8201F)
+ case shell::CmdIndex::PHY_TYPE_RTL8201F:
+ CmdPhyTypeRTL8201F();
+ break;
+#endif
+ case shell::CmdIndex::HELP:
+ CmdHelp();
+ break;
+ default:
+ break;
}
}
diff --git a/lib-remoteconfig/src/shell/shellcmd.cpp b/lib-remoteconfig/src/shell/shellcmd.cpp
old mode 100644
new mode 100755
index 53c27cbbb..f82b55cd3
--- a/lib-remoteconfig/src/shell/shellcmd.cpp
+++ b/lib-remoteconfig/src/shell/shellcmd.cpp
@@ -35,6 +35,7 @@
#include "remoteconfig.h"
#include "network.h"
+#include "emac/phy.h"
#include "hardware.h"
#include "firmwareversion.h"
@@ -49,87 +50,118 @@
#endif
// Firmware specific BEGIN
-#include "debug.h"
+#if defined (DEBUG_I2C)
+# include "../lib-hal/debug/i2c/i2cdetect.h"
+#endif
-#ifndef NDEBUG
-# include "../debug/i2cdetect.h"
+#if defined (ENABLE_NTP_CLIENT)
# include "net/apps/ntpclient.h"
+#endif
+
+#if defined (CONFIG_SHELL_GPS)
# include "gps.h"
-extern "C" {
-void h3_board_dump(void);
-void h3_dump_memory_mapping(void);
-void h3_ccu_pll_dump(void);
-void arm_dump_memmap(void);
-void arm_dump_page_table(void);
-}
#endif
-// TODO We can reshuffle namespaces here for removing duplicates?
+#if (PHY_TYPE == RTL8201F)
+# include "emac/phy/rtl8201f.h"
+#endif
+
+#if defined (GD32) // PHY_TYPE is defined here
+# include "gd32.h"
+#endif
+
+#include "debug.h"
namespace shell {
+// Centralize common arguments and lengths
+namespace common_args {
+static constexpr char PRINT[] = "print";
+} // namespace common_args
+
+namespace common_lengths {
+static constexpr auto PRINT = sizeof(common_args::PRINT) - 1;
+} // namespace common_lengths
namespace set {
namespace arg {
static constexpr char IP[] = "ip";
static constexpr char HOSTNAME[] = "hostname";
+#if defined (LTC_READER)
static constexpr char LTC[] = "ltc";
+#endif
} // namespace arg
namespace length {
static constexpr auto IP = sizeof(arg::IP) - 1;
static constexpr auto HOSTNAME = sizeof(arg::HOSTNAME) - 1;
+#if defined (LTC_READER)
static constexpr auto LTC = sizeof(arg::LTC) - 1;
+#endif
} // namespace length
} // namespace set
-namespace dump {
-namespace arg {
-static constexpr char BOARD[] = "board";
-static constexpr char MMAP[] = "mmap";
-static constexpr char PLL[] = "pll";
-static constexpr char LINKER[] = "linker";
-} // namespace arg
-namespace length {
-static constexpr auto BOARD = sizeof(arg::BOARD) - 1;
-static constexpr auto MMAP = sizeof(arg::MMAP) - 1;
-static constexpr auto PLL = sizeof(arg::PLL) - 1;
-static constexpr auto LINKER = sizeof(arg::LINKER) - 1;
-} // namespace length
-} // namespace dump
-
namespace networktime {
namespace arg {
-static constexpr char PRINT[] = "print";
+// Reuse common_args::PRINT
+using common_args::PRINT;
} // namespace arg
namespace length {
-static constexpr auto PRINT = sizeof(arg::PRINT) - 1;
+// Reuse common_lengths::PRINT
+using common_lengths::PRINT;
} // namespace length
} // namespace networktime
+#if !defined(DISABLE_RTC)
namespace hwclock {
namespace arg {
-static constexpr char HCTOSYS[] = "hctosys"; // Set the System Clock from the Hardware Clock
-static constexpr char SYSTOHC[] = "systohc"; // Set the Hardware Clock from the System Clock
-static constexpr char PRINT[] = "print";
+static constexpr char HCTOSYS[] = "hctosys"; // Set the System Clock from the Hardware Clock
+static constexpr char SYSTOHC[] = "systohc"; // Set the Hardware Clock from the System Clock
+// Reuse common_args::PRINT
+using common_args::PRINT;
} // namespace arg
namespace length {
static constexpr auto HCTOSYS = sizeof(arg::HCTOSYS) - 1;
static constexpr auto SYSTOHC = sizeof(arg::SYSTOHC) - 1;
-static constexpr auto PRINT = sizeof(arg::PRINT) - 1;
+// Reuse common_lengths::PRINT
+using common_lengths::PRINT;
} // namespace length
} // namespace hwclock
+#endif
+#if defined (CONFIG_SHELL_GPS)
namespace gps {
namespace arg {
static constexpr char DATE[] = "date";
static constexpr char LOCALTIME[] = "localtime";
-static constexpr char PRINT[] = "print";
+// Reuse common_args::PRINT
+using common_args::PRINT;
} // namespace arg
namespace length {
static constexpr auto DATE = sizeof(arg::DATE) - 1;
static constexpr auto LOCALTIME = sizeof(arg::LOCALTIME) - 1;
-static constexpr auto PRINT = sizeof(arg::PRINT) - 1;
+// Reuse common_lengths::PRINT
+using common_lengths::PRINT;
} // namespace length
} // namespace gps
+#endif
+
+#if (PHY_TYPE == RTL8201F)
+namespace rtl8201f {
+namespace arg {
+static constexpr char RXTIMING[] = "rxtiming";
+static constexpr char TXTIMING[] = "txtiming";
+static constexpr char TIMING[] = "timing";
+// Reuse common_args::PRINT
+using common_args::PRINT;
+} // namespace arg
+namespace length {
+static constexpr auto RXTIMING = sizeof(arg::RXTIMING) - 1;
+static constexpr auto TXTIMING = sizeof(arg::TXTIMING) - 1;
+static constexpr auto TIMING = sizeof(arg::TIMING) - 1;
+// Reuse common_lengths::PRINT
+using common_lengths::PRINT;
+} // namespace length
+} // namespace rtl8201f
+#endif
namespace file {
static constexpr char EXT[] = ".txt";
@@ -148,38 +180,17 @@ static constexpr char DHCP[] = "DHCP enabled\n";
static constexpr char STORED[] = "Stored\n";
} // namespace info
namespace error {
-static constexpr char INVALID[] = "Invalid command.\n";
-static constexpr char INTERNAL[] = "Internal error.\n";
-static constexpr char DHCP[] = "DHCP failed.\n";
static constexpr char TXT[] = ".txt not found\n";
static constexpr char PROPERTY[] = "Property not found.\n";
+#if defined (LTC_READER)
static constexpr char LTC[] = "This source does not support the set command.\n";
+#endif
} // namespace error
} // namespace msg
-
} // namespace shell
using namespace shell;
-uint32_t Shell::hexadecimalToDecimal(const char *pHexValue, uint32_t nLength) {
- const auto *pSrc = pHexValue;
- uint32_t nValue = 0;
-
- while (nLength-- > 0) {
- const auto c = *pSrc;
-
- if (isxdigit(c) == 0) {
- break;
- }
-
- const auto nNibble = c > '9' ? static_cast((c | 0x20) - 'a' + 10) : static_cast(c - '0');
- nValue = (nValue << 4) | nNibble;
- pSrc++;
- }
-
- return nValue;
-}
-
void Shell::CmdReboot() {
RemoteConfig::Get()->Reboot();
}
@@ -347,69 +358,76 @@ void Shell::CmdDate() {
Puts(asctime(localtime(&rawtime)));
}
-void Shell::CmdHwClock() {
- const auto nArgv0Length = m_nArgvLength[0];
+void Shell::CmdPhy() {
+ net::PhyStatus phyStatus;
+ phy_customized_status(phyStatus);
- if ((nArgv0Length == hwclock::length::HCTOSYS) && (memcmp(m_Argv[0], hwclock::arg::HCTOSYS, hwclock::length::HCTOSYS) == 0)) {
- HwClock::Get()->HcToSys();
- return;
- }
+ Printf("Link %s, %d, %s\n",
+ phyStatus.link == net::Link::STATE_UP ? "Up" : "Down",
+ phyStatus.speed == net::Speed::SPEED10 ? 10 : 100,
+ phyStatus.duplex == net::Duplex::DUPLEX_HALF ? "HALF" : "FULL");
+}
- if ((nArgv0Length == hwclock::length::SYSTOHC) && (memcmp(m_Argv[0], hwclock::arg::SYSTOHC, hwclock::length::SYSTOHC) == 0)) {
- HwClock::Get()->SysToHc();
- return;
- }
+#ifndef NDEBUG
+static uint32_t hexadecimal_to_decimal(const char *pHexValue, uint32_t nLength) {
+ const auto *pSrc = pHexValue;
+ uint32_t nValue = 0;
- if ((nArgv0Length == hwclock::length::PRINT) && (memcmp(m_Argv[0], hwclock::arg::PRINT, hwclock::length::PRINT) == 0)) {
- HwClock::Get()->Print();
- return;
+ while (nLength-- > 0) {
+ const auto c = *pSrc;
+
+ if (isxdigit(c) == 0) {
+ break;
+ }
+
+ const auto nNibble = c > '9' ? static_cast((c | 0x20) - 'a' + 10) : static_cast(c - '0');
+ nValue = (nValue << 4) | nNibble;
+ pSrc++;
}
- Puts(msg::error::INVALID);
+ return nValue;
}
+#endif
-/*
- * Debug commands
- */
-
+void Shell::CmdMem() {
#ifndef NDEBUG
-void Shell::CmdI2cDetect() {
- I2cDetect i2cdetect;
+ const auto pAddress = reinterpret_cast(hexadecimal_to_decimal(m_Argv[0], m_nArgvLength[0]));
+ const auto nSize = hexadecimal_to_decimal(m_Argv[1], m_nArgvLength[1]);
+
+ debug_dump(pAddress, nSize);
+#endif
}
-void Shell::CmdDump() {
+#if !defined(DISABLE_RTC)
+void Shell::CmdHwClock() {
const auto nArgv0Length = m_nArgvLength[0];
- if ((nArgv0Length == dump::length::BOARD) && (memcmp(m_Argv[0], dump::arg::BOARD, dump::length::BOARD) == 0)) {
- h3_board_dump();
- return;
- }
-
- if ((nArgv0Length == dump::length::MMAP) && (memcmp(m_Argv[0], dump::arg::MMAP, dump::length::MMAP) == 0)) {
- h3_dump_memory_mapping();
+ if ((nArgv0Length == hwclock::length::HCTOSYS) && (memcmp(m_Argv[0], hwclock::arg::HCTOSYS, hwclock::length::HCTOSYS) == 0)) {
+ HwClock::Get()->HcToSys();
return;
}
- if ((nArgv0Length == dump::length::PLL) && (memcmp(m_Argv[0], dump::arg::PLL, dump::length::PLL) == 0)) {
- h3_ccu_pll_dump();
+ if ((nArgv0Length == hwclock::length::SYSTOHC) && (memcmp(m_Argv[0], hwclock::arg::SYSTOHC, hwclock::length::SYSTOHC) == 0)) {
+ HwClock::Get()->SysToHc();
return;
}
- if ((nArgv0Length == dump::length::LINKER) && (memcmp(m_Argv[0], dump::arg::LINKER, dump::length::LINKER) == 0)) {
- arm_dump_memmap();
+ if ((nArgv0Length == hwclock::length::PRINT) && (memcmp(m_Argv[0], hwclock::arg::PRINT, hwclock::length::PRINT) == 0)) {
+ HwClock::Get()->Print();
return;
}
Puts(msg::error::INVALID);
}
+#endif
-void Shell::CmdMem() {
- const auto pAddress = reinterpret_cast(hexadecimalToDecimal(m_Argv[0], m_nArgvLength[0]));
- const auto nSize = hexadecimalToDecimal(m_Argv[1], m_nArgvLength[1]);
-
- debug_dump(pAddress, static_cast(nSize));
+#if defined (DEBUG_I2C)
+void Shell::CmdI2cDetect() {
+ I2cDetect i2cdetect;
}
+#endif
+#if defined (ENABLE_NTP_CLIENT)
void Shell::CmdNtp() {
const auto nArgv0Length = m_nArgvLength[0];
@@ -420,7 +438,9 @@ void Shell::CmdNtp() {
Puts(msg::error::INVALID);
}
+#endif
+#if defined (CONFIG_SHELL_GPS)
void Shell::CmdGps() {
const auto nArgv0Length = m_nArgvLength[0];
@@ -444,3 +464,43 @@ void Shell::CmdGps() {
Puts(msg::error::INVALID);
}
#endif
+
+#if (PHY_TYPE == RTL8201F)
+void Shell::CmdPhyTypeRTL8201F() {
+ const auto nArgv0Length = m_nArgvLength[0];
+
+ if ((nArgv0Length == rtl8201f::length::RXTIMING) && (memcmp(m_Argv[0], rtl8201f::arg::RXTIMING, rtl8201f::length::RXTIMING) == 0)) {
+ if (m_nArgvLength[1] == 1) {
+ const auto c = m_Argv[1][0];
+ if (isxdigit(c) != 0) {
+ const uint32_t nRxTiming = c > '9' ? ((c | 0x20) - 'a' + 10) : (c - '0');
+ net::phy::rtl8201f_set_rxtiming(nRxTiming);
+ return;
+ }
+ }
+ }
+
+ if ((nArgv0Length == rtl8201f::length::TXTIMING) && (memcmp(m_Argv[0], rtl8201f::arg::TXTIMING, rtl8201f::length::TXTIMING) == 0)) {
+ if (m_nArgvLength[1] == 1) {
+ const auto c = m_Argv[1][0];
+ if (isxdigit(c) != 0) {
+ const uint32_t nTxTiming = c > '9' ? ((c | 0x20) - 'a' + 10) : (c - '0');
+ net::phy::rtl8201f_set_txtiming(nTxTiming);
+ return;
+ }
+ }
+ }
+
+ if ((nArgv0Length == rtl8201f::length::PRINT) && (memcmp(m_Argv[0], rtl8201f::arg::PRINT, rtl8201f::length::PRINT) == 0)) {
+ if ((m_nArgvLength[1] == rtl8201f::length::TIMING) && (memcmp(m_Argv[1], rtl8201f::arg::TIMING, rtl8201f::length::TIMING) == 0)) {
+ uint32_t nRxTiming;
+ uint32_t nTxTiming;
+ net::phy::rtl8201f_get_timings(nRxTiming, nTxTiming);
+ Printf("RX: 0x%X, TX: 0x%X\n", nRxTiming, nTxTiming);
+ return;
+ }
+ }
+
+ Puts(msg::error::INVALID);
+}
+#endif
diff --git a/lib-rgbpanel/.settings/language.settings.xml b/lib-rgbpanel/.settings/language.settings.xml
index 28ab8645d..b63fa50be 100644
--- a/lib-rgbpanel/.settings/language.settings.xml
+++ b/lib-rgbpanel/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/lib-showfile/.settings/language.settings.xml b/lib-showfile/.settings/language.settings.xml
index b374e27cc..9ff657d4d 100644
--- a/lib-showfile/.settings/language.settings.xml
+++ b/lib-showfile/.settings/language.settings.xml
@@ -4,8 +4,8 @@
-
-
+
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-showfile/Rules.mk b/lib-showfile/Rules.mk
index f4e3e7a80..21bb2b9fc 100755
--- a/lib-showfile/Rules.mk
+++ b/lib-showfile/Rules.mk
@@ -1,7 +1,7 @@
$(info [${CURDIR}])
$(info $$MAKE_FLAGS [${MAKE_FLAGS}])
-EXTRA_INCLUDES+=../lib-properties/include ../lib-network/include
+EXTRA_INCLUDES+=../lib-properties/include ../lib-lightset/include ../lib-network/include
ifneq ($(MAKE_FLAGS),)
ifeq (,$(findstring CONFIG_SHOWFILE_USE_CUSTOM_DISPLAY,$(MAKE_FLAGS)))
diff --git a/lib-tcnet/.settings/language.settings.xml b/lib-tcnet/.settings/language.settings.xml
index 2fabd17cd..0c488fa65 100644
--- a/lib-tcnet/.settings/language.settings.xml
+++ b/lib-tcnet/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-tlc59711/.settings/language.settings.xml b/lib-tlc59711/.settings/language.settings.xml
index 48afb8159..93035a968 100644
--- a/lib-tlc59711/.settings/language.settings.xml
+++ b/lib-tlc59711/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
@@ -29,7 +29,7 @@
-
+
diff --git a/lib-tlc59711dmx/.settings/language.settings.xml b/lib-tlc59711dmx/.settings/language.settings.xml
index e0ce03150..f5f2aff32 100644
--- a/lib-tlc59711dmx/.settings/language.settings.xml
+++ b/lib-tlc59711dmx/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-usb/.settings/language.settings.xml b/lib-usb/.settings/language.settings.xml
index 9fec115f4..f8753ed40 100644
--- a/lib-usb/.settings/language.settings.xml
+++ b/lib-usb/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-widget/.settings/language.settings.xml b/lib-widget/.settings/language.settings.xml
index 9fec115f4..f8753ed40 100644
--- a/lib-widget/.settings/language.settings.xml
+++ b/lib-widget/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-ws28xx/.settings/language.settings.xml b/lib-ws28xx/.settings/language.settings.xml
index 418c01870..77bf344a0 100644
--- a/lib-ws28xx/.settings/language.settings.xml
+++ b/lib-ws28xx/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-ws28xx/include/gd32/gpio/pixelmulti_config.h b/lib-ws28xx/include/gd32/gpio/pixelmulti_config.h
index fdacc4d00..a6bf29c17 100644
--- a/lib-ws28xx/include/gd32/gpio/pixelmulti_config.h
+++ b/lib-ws28xx/include/gd32/gpio/pixelmulti_config.h
@@ -34,6 +34,8 @@
# include "board_gd32f450vi.h"
#elif defined (BOARD_16X4U_PIXEL)
# include "board_gd32f450vi.h"
+#elif defined (BOARD_GD32F470VG)
+# include "board_gd32f470vg.h"
#elif defined (BOARD_GD32F207C_EVAL)
# include "board_gd32f207c_eval.h"
#elif defined (BOARD_GD32F470Z_EVAL)
diff --git a/lib-ws28xxdisplay/.settings/language.settings.xml b/lib-ws28xxdisplay/.settings/language.settings.xml
index 72d40ecd8..9820bf6b1 100644
--- a/lib-ws28xxdisplay/.settings/language.settings.xml
+++ b/lib-ws28xxdisplay/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/lib-ws28xxdmx/.settings/language.settings.xml b/lib-ws28xxdmx/.settings/language.settings.xml
index 601ac1912..7a852214f 100644
--- a/lib-ws28xxdmx/.settings/language.settings.xml
+++ b/lib-ws28xxdmx/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/lib-ws28xxdmx/src/dmxmulti/ws28xxdmxmulti._cpp b/lib-ws28xxdmx/src/dmxmulti/ws28xxdmxmulti._cpp
deleted file mode 100755
index 35524818a..000000000
--- a/lib-ws28xxdmx/src/dmxmulti/ws28xxdmxmulti._cpp
+++ /dev/null
@@ -1,189 +0,0 @@
-/**
- * @file ws28xxdmxmulti.cpp
- *
- */
-/* Copyright (C) 2019-2024 by Arjan van Vught mailto:info@orangepi-dmx.nl
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
-
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
-
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- */
-
-#if defined (DEBUG_PIXELDMX)
-# undef NDEBUG
-#endif
-
-#pragma GCC push_options
-#pragma GCC optimize ("O3")
-#pragma GCC optimize ("-funroll-loops")
-#pragma GCC optimize ("-fprefetch-loop-arrays")
-
-#include
-#include
-#include
-
-#include "ws28xxdmxmulti.h"
-#include "ws28xxmulti.h"
-#include "ws28xx.h"
-
-#include "pixeldmxparams.h"
-#include "pixeldmxconfiguration.h"
-
-#if defined (PIXELDMXSTARTSTOP_GPIO)
-# include "hal_gpio.h"
-#endif
-
-#include "debug.h"
-
-WS28xxDmxMulti::WS28xxDmxMulti(PixelDmxConfiguration& pixelDmxConfiguration): m_pixelDmxConfiguration(pixelDmxConfiguration){
- DEBUG_ENTRY
-
- m_pixelDmxConfiguration.Validate(ws28xxdmxmulti::MAX_PORTS , m_nChannelsPerPixel, m_PortInfo);
-
- m_pWS28xxMulti = new WS28xxMulti(pixelDmxConfiguration);
- assert(m_pWS28xxMulti != nullptr);
- m_pWS28xxMulti->Blackout();
-
-#if defined (PIXELDMXSTARTSTOP_GPIO)
- FUNC_PREFIX(gpio_fsel(PIXELDMXSTARTSTOP_GPIO, GPIO_FSEL_OUTPUT));
- FUNC_PREFIX(gpio_clr(PIXELDMXSTARTSTOP_GPIO));
-#endif
-
- DEBUG_EXIT
-}
-
-WS28xxDmxMulti::~WS28xxDmxMulti() {
- delete m_pWS28xxMulti;
- m_pWS28xxMulti = nullptr;
-}
-
-void WS28xxDmxMulti::Start(const uint32_t nPortIndex) {
- DEBUG_PRINTF("%u", nPortIndex);
-
- if (m_bIsStarted == 0) {
-#if defined (PIXELDMXSTARTSTOP_GPIO)
- FUNC_PREFIX(gpio_set(PIXELDMXSTARTSTOP_GPIO));
-#endif
- }
-
- m_bIsStarted |= (1U << nPortIndex);
-}
-
-void WS28xxDmxMulti::Stop(const uint32_t nPortIndex) {
- DEBUG_PRINTF("%u", nPortIndex);
-
- if (m_bIsStarted & (1U << nPortIndex)) {
- m_bIsStarted &= ~(1U << nPortIndex);
- }
-
- if (m_bIsStarted == 0) {
-#if defined (PIXELDMXSTARTSTOP_GPIO)
- FUNC_PREFIX(gpio_clr(PIXELDMXSTARTSTOP_GPIO));
-#endif
- }
-}
-
-void WS28xxDmxMulti::SetData(const uint32_t nPortIndex, const uint8_t* pData, uint32_t nLength) {
- assert(pData != nullptr);
- assert(nLength <= lightset::dmx::UNIVERSE_SIZE);
-
-#if defined (NODE_DDP_DISPLAY)
- const auto nOutIndex = (nPortIndex / 4);
- const auto nSwitch = nPortIndex - (nOutIndex * 4);
-#else
- const auto nUniverses = m_pixelDmxConfiguration.GetUniverses();
- const auto nOutIndex = (nPortIndex / nUniverses);
- const auto nSwitch = nPortIndex - (nOutIndex * nUniverses);
-#endif
-
- const auto nGroups = m_pixelDmxConfiguration.GetGroups();
- const auto beginIndex = m_PortInfo.nBeginIndexPort[nSwitch];
- const auto endIndex = std::min(nGroups, (beginIndex + (nLength / m_nChannelsPerPixel)));
-
- uint32_t d = 0;
-
- const auto nGroupingCount = m_pixelDmxConfiguration.GetGroupingCount();
-
- if (m_nChannelsPerPixel == 3) {
- // Define a lambda to handle pixel setting based on color order
- auto setPixelColor3 = [&](uint32_t r, uint32_t g, uint32_t b) {
- for (uint32_t j = beginIndex; (j < endIndex) && (d < nLength); j++) {
- auto const nPixelIndexStart = j * nGroupingCount;
- for (uint32_t k = 0; k < nGroupingCount; k++) {
- m_pWS28xxMulti->SetPixel(nOutIndex, nPixelIndexStart + k, r, g, b);
- }
- d += 3; // Increment by 3 since we're processing 3 channels per pixel
- }
- };
-
- switch (m_pixelDmxConfiguration.GetMap()) {
- case pixel::Map::RGB:
- setPixelColor3(pData[d + 0], pData[d + 1], pData[d + 2]);
- break;
- case pixel::Map::RBG:
- setPixelColor3(pData[d + 0], pData[d + 2], pData[d + 1]);
- break;
- case pixel::Map::GRB:
- setPixelColor3(pData[d + 1], pData[d + 0], pData[d + 2]);
- break;
- case pixel::Map::GBR:
- setPixelColor3(pData[d + 2], pData[d + 0], pData[d + 1]);
- break;
- case pixel::Map::BRG:
- setPixelColor3(pData[d + 1], pData[d + 2], pData[d + 0]);
- break;
- case pixel::Map::BGR:
- setPixelColor3(pData[d + 2], pData[d + 1], pData[d + 0]);
- break;
- default:
- assert(0);
- __builtin_unreachable();
- break;
- }
- } else {
- assert(m_nChannelsPerPixel == 4);
- for (uint32_t j = beginIndex; (j < endIndex) && (d < nLength); j++) {
- auto const nPixelIndexStart = (j * nGroupingCount);
- for (uint32_t k = 0; k < nGroupingCount; k++) {
- m_pWS28xxMulti->SetPixel(nOutIndex, nPixelIndexStart + k, pData[d], pData[d + 1], pData[d + 2], pData[d + 3]);
- }
- d = d + 4;
- }
- }
-}
-
-void WS28xxDmxMulti::Blackout(bool bBlackout) {
- m_bBlackout = bBlackout;
-
- while (m_pWS28xxMulti->IsUpdating()) {
- // wait for completion
- }
-
- if (bBlackout) {
- m_pWS28xxMulti->Blackout();
- } else {
- m_pWS28xxMulti->Update();
- }
-}
-
-void WS28xxDmxMulti::FullOn() {
- while (m_pWS28xxMulti->IsUpdating()) {
- // wait for completion
- }
-
- m_pWS28xxMulti->FullOn();
-}
diff --git a/lib-ws28xxdmx/src/dmxmulti/ws28xxdmxmulti.cpp b/lib-ws28xxdmx/src/dmxmulti/ws28xxdmxmulti.cpp
index 2c41033b9..66a7cc087 100755
--- a/lib-ws28xxdmx/src/dmxmulti/ws28xxdmxmulti.cpp
+++ b/lib-ws28xxdmx/src/dmxmulti/ws28xxdmxmulti.cpp
@@ -126,83 +126,75 @@ void WS28xxDmxMulti::SetData(const uint32_t nPortIndex, const uint8_t* pData, ui
if (nChannelsPerPixel == 3) {
// Define a lambda to handle pixel setting based on color order
- auto setPixelsColor3 = [&](uint32_t r, uint32_t g, uint32_t b) {
+ auto setPixelsColourRTZ = [&](const uint32_t nPortIndex, const uint32_t nPixelIndex, const uint32_t r, const uint32_t g, const uint32_t b) {
#if defined(CONFIG_PIXELDMX_ENABLE_GAMMATABLE)
const auto pGammaTable = m_pWS28xxMulti->m_PixelConfiguration.GetGammaTable();
r = pGammaTable[r];
g = pGammaTable[g];
b = pGammaTable[b];
#endif
- if (isRTZProtocol) {
- for (uint32_t j = beginIndex; (j < endIndex) && (d < nLength); j++) {
- auto const nPixelIndexStart = j * nGroupingCount;
- for (uint32_t k = 0; k < nGroupingCount; k++) {
- m_pWS28xxMulti->SetColourRTZ(nOutIndex, nPixelIndexStart + k, r, g, b);
- }
- d += 3; // Increment by 3 since we're processing 3 channels per pixel
- }
- } else {
- switch (pixelType) {
- case pixel::Type::WS2801:
- for (uint32_t j = beginIndex; (j < endIndex) && (d < nLength); j++) {
- auto const nPixelIndexStart = j * nGroupingCount;
- for (uint32_t k = 0; k < nGroupingCount; k++) {
- m_pWS28xxMulti->SetColourWS2801(nOutIndex, nPixelIndexStart + k, r, g, b);
- }
- d += 3; // Increment by 3 since we're processing 3 channels per pixel
- }
- break;
- case pixel::Type::APA102:
- case pixel::Type::SK9822:
- for (uint32_t j = beginIndex; (j < endIndex) && (d < nLength); j++) {
- auto const nPixelIndexStart = j * nGroupingCount;
- for (uint32_t k = 0; k < nGroupingCount; k++) {
- m_pWS28xxMulti->SetPixel4Bytes(nOutIndex, 1 + nPixelIndexStart + k, pixelDmxConfiguration.GetGlobalBrightness(), b, g, r);
- }
- d += 3; // Increment by 3 since we're processing 3 channels per pixel
- }
- break;
- case pixel::Type::P9813:
- for (uint32_t j = beginIndex; (j < endIndex) && (d < nLength); j++) {
- auto const nPixelIndexStart = j * nGroupingCount;
- for (uint32_t k = 0; k < nGroupingCount; k++) {
- const auto nFlag = static_cast(0xC0 | ((~b & 0xC0) >> 2) | ((~r & 0xC0) >> 4) | ((~r & 0xC0) >> 6));
- m_pWS28xxMulti->SetPixel4Bytes(nOutIndex, 1 + nPixelIndexStart + k, nFlag, b, g, r);
- }
- d += 3; // Increment by 3 since we're processing 3 channels per pixel
- }
- break;
- default:
- assert(0);
- __builtin_unreachable();
- break;
- }
- }
+ m_pWS28xxMulti->SetColourRTZ(nPortIndex, nPixelIndex, r, g, b);
};
- switch (pixelDmxConfiguration.GetMap()) {
- case pixel::Map::RGB:
- setPixelsColor3(pData[d + 0], pData[d + 1], pData[d + 2]);
- break;
- case pixel::Map::RBG:
- setPixelsColor3(pData[d + 0], pData[d + 2], pData[d + 1]);
- break;
- case pixel::Map::GRB:
- setPixelsColor3(pData[d + 1], pData[d + 0], pData[d + 2]);
- break;
- case pixel::Map::GBR:
- setPixelsColor3(pData[d + 2], pData[d + 0], pData[d + 1]);
- break;
- case pixel::Map::BRG:
- setPixelsColor3(pData[d + 1], pData[d + 2], pData[d + 0]);
- break;
- case pixel::Map::BGR:
- setPixelsColor3(pData[d + 2], pData[d + 1], pData[d + 0]);
- break;
- default:
- assert(0);
- __builtin_unreachable();
+ // Define a lambda to handle pixel setting based on color order
+ auto setPixelsColour3 = [&](const uint32_t nPortIndex, const uint32_t nPixelIndex, const uint32_t r, const uint32_t g, const uint32_t b) {
+#if defined(CONFIG_PIXELDMX_ENABLE_GAMMATABLE)
+ const auto pGammaTable = m_pWS28xxMulti->m_PixelConfiguration.GetGammaTable();
+ r = pGammaTable[r];
+ g = pGammaTable[g];
+ b = pGammaTable[b];
+#endif
+
+ switch (pixelType) {
+ case pixel::Type::WS2801:
+ m_pWS28xxMulti->SetColourWS2801(nPortIndex, nPixelIndex, r, g, b);
+ break;
+ case pixel::Type::APA102:
+ case pixel::Type::SK9822:
+ m_pWS28xxMulti->SetPixel4Bytes(nPortIndex, 1 + nPixelIndex, pixelDmxConfiguration.GetGlobalBrightness(), b, g, r);
+ break;
+ case pixel::Type::P9813: {
+ const auto nFlag = static_cast(0xC0 | ((~b & 0xC0) >> 2) | ((~r & 0xC0) >> 4) | ((~r & 0xC0) >> 6));
+ m_pWS28xxMulti->SetPixel4Bytes(nPortIndex, 1 + nPixelIndex, nFlag, b, g, r);
+ }
break;
+ default:
+ assert(0);
+ __builtin_unreachable();
+ break;
+ }
+ };
+
+ constexpr uint32_t channelMap[6][3] = {
+ {0, 1, 2}, // RGB
+ {0, 2, 1}, // RBG
+ {1, 0, 2}, // GRB
+ {2, 0, 1}, // GBR
+ {1, 2, 0}, // BRG
+ {2, 1, 0} // BGR
+ };
+
+ const auto mapIndex = static_cast(pixelDmxConfiguration.GetMap());
+ // Ensure mapIndex is within valid bounds
+ assert(mapIndex < sizeof(channelMap) / sizeof(channelMap[0])); // Runtime check
+ auto const& map = channelMap[mapIndex];
+
+ if (isRTZProtocol) {
+ for (uint32_t j = beginIndex; (j < endIndex) && (d < nLength); j++) {
+ auto const nPixelIndexStart = j * nGroupingCount;
+ for (uint32_t k = 0; k < nGroupingCount; k++) {
+ setPixelsColourRTZ(nOutIndex, nPixelIndexStart + k, pData[d + map[0]], pData[d + map[1]], pData[d + map[2]]);
+ }
+ d += 3; // Increment by 3 since we're processing 3 channels per pixel
+ }
+ } else {
+ for (uint32_t j = beginIndex; (j < endIndex) && (d < nLength); j++) {
+ auto const nPixelIndexStart = j * nGroupingCount;
+ for (uint32_t k = 0; k < nGroupingCount; k++) {
+ setPixelsColour3(nOutIndex, nPixelIndexStart + k, pData[d + map[0]], pData[d + map[1]], pData[d + map[2]]);
+ }
+ d += 3; // Increment by 3 since we're processing 3 channels per pixel
+ }
}
} else {
assert(nChannelsPerPixel == 4);
diff --git a/linux_artnet/.settings/language.settings.xml b/linux_artnet/.settings/language.settings.xml
index 286dc1005..6564e402d 100644
--- a/linux_artnet/.settings/language.settings.xml
+++ b/linux_artnet/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/linux_e131/.settings/language.settings.xml b/linux_e131/.settings/language.settings.xml
index 286dc1005..6564e402d 100644
--- a/linux_e131/.settings/language.settings.xml
+++ b/linux_e131/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/linux_osc/.settings/language.settings.xml b/linux_osc/.settings/language.settings.xml
index 286dc1005..6564e402d 100644
--- a/linux_osc/.settings/language.settings.xml
+++ b/linux_osc/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_dmx_monitor/.settings/language.settings.xml b/opi_dmx_monitor/.settings/language.settings.xml
index f59168be8..9d4402bc6 100644
--- a/opi_dmx_monitor/.settings/language.settings.xml
+++ b/opi_dmx_monitor/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
diff --git a/opi_dmx_monitor/include/software_version.h b/opi_dmx_monitor/include/software_version.h
index 1e6e3d163..3e246e5df 100644
--- a/opi_dmx_monitor/include/software_version.h
+++ b/opi_dmx_monitor/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "2.7";
+constexpr char SOFTWARE_VERSION[] = "2.8";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_dmx_usb_pro/.settings/language.settings.xml b/opi_dmx_usb_pro/.settings/language.settings.xml
index acb67b46e..595c3c763 100644
--- a/opi_dmx_usb_pro/.settings/language.settings.xml
+++ b/opi_dmx_usb_pro/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_dmx_usb_pro/include/software_version.h b/opi_dmx_usb_pro/include/software_version.h
index 3e246e5df..5d0ab9767 100644
--- a/opi_dmx_usb_pro/include/software_version.h
+++ b/opi_dmx_usb_pro/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "2.8";
+constexpr char SOFTWARE_VERSION[] = "2.9";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_artnet_dmx/.settings/language.settings.xml b/opi_emac_artnet_dmx/.settings/language.settings.xml
index 1181ae0f1..1114a7306 100644
--- a/opi_emac_artnet_dmx/.settings/language.settings.xml
+++ b/opi_emac_artnet_dmx/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_artnet_dmx/include/software_version.h b/opi_emac_artnet_dmx/include/software_version.h
index f36d12ec5..5562eb079 100644
--- a/opi_emac_artnet_dmx/include/software_version.h
+++ b/opi_emac_artnet_dmx/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "4.7";
+constexpr char SOFTWARE_VERSION[] = "4.8";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_artnet_dmx_multi/.settings/language.settings.xml b/opi_emac_artnet_dmx_multi/.settings/language.settings.xml
index 1181ae0f1..1114a7306 100644
--- a/opi_emac_artnet_dmx_multi/.settings/language.settings.xml
+++ b/opi_emac_artnet_dmx_multi/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_artnet_dmx_multi/include/software_version.h b/opi_emac_artnet_dmx_multi/include/software_version.h
index 03b15753c..f9b0c9c21 100644
--- a/opi_emac_artnet_dmx_multi/include/software_version.h
+++ b/opi_emac_artnet_dmx_multi/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "4.0";
+constexpr char SOFTWARE_VERSION[] = "4.1";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_artnet_monitor/.settings/language.settings.xml b/opi_emac_artnet_monitor/.settings/language.settings.xml
index 1181ae0f1..1114a7306 100644
--- a/opi_emac_artnet_monitor/.settings/language.settings.xml
+++ b/opi_emac_artnet_monitor/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_artnet_monitor/firmware/main.cpp b/opi_emac_artnet_monitor/firmware/main.cpp
index dc14bbd34..8ec74a7b3 100644
--- a/opi_emac_artnet_monitor/firmware/main.cpp
+++ b/opi_emac_artnet_monitor/firmware/main.cpp
@@ -92,8 +92,6 @@ int main() {
console_set_fg_color(CONSOLE_WHITE);
console_set_top_row(2);
-
-
NtpClient ntpClient;
ntpClient.Start();
ntpClient.Print();
diff --git a/opi_emac_artnet_monitor/include/software_version.h b/opi_emac_artnet_monitor/include/software_version.h
index 613f7331d..a6c2bcd99 100644
--- a/opi_emac_artnet_monitor/include/software_version.h
+++ b/opi_emac_artnet_monitor/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "3.1";
+constexpr char SOFTWARE_VERSION[] = "3.2";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_artnet_pixel/.settings/language.settings.xml b/opi_emac_artnet_pixel/.settings/language.settings.xml
index 687bfa1b8..0ca9813fe 100644
--- a/opi_emac_artnet_pixel/.settings/language.settings.xml
+++ b/opi_emac_artnet_pixel/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_artnet_pixel/include/software_version.h b/opi_emac_artnet_pixel/include/software_version.h
index 5562eb079..7ec209076 100644
--- a/opi_emac_artnet_pixel/include/software_version.h
+++ b/opi_emac_artnet_pixel/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "4.8";
+constexpr char SOFTWARE_VERSION[] = "4.9";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_artnet_pixel_dmx/.settings/language.settings.xml b/opi_emac_artnet_pixel_dmx/.settings/language.settings.xml
index 6df7f0b3a..f506b2d4b 100755
--- a/opi_emac_artnet_pixel_dmx/.settings/language.settings.xml
+++ b/opi_emac_artnet_pixel_dmx/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_artnet_pixel_dmx/include/software_version.h b/opi_emac_artnet_pixel_dmx/include/software_version.h
index 767352b85..87675180e 100644
--- a/opi_emac_artnet_pixel_dmx/include/software_version.h
+++ b/opi_emac_artnet_pixel_dmx/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "2.2";
+constexpr char SOFTWARE_VERSION[] = "2.3";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_artnet_pixel_dmx_multi/.settings/language.settings.xml b/opi_emac_artnet_pixel_dmx_multi/.settings/language.settings.xml
index 33b55b219..66ad31a18 100755
--- a/opi_emac_artnet_pixel_dmx_multi/.settings/language.settings.xml
+++ b/opi_emac_artnet_pixel_dmx_multi/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_artnet_pixel_dmx_multi/include/software_version.h b/opi_emac_artnet_pixel_dmx_multi/include/software_version.h
index 70a7f41cb..6208c6b76 100644
--- a/opi_emac_artnet_pixel_dmx_multi/include/software_version.h
+++ b/opi_emac_artnet_pixel_dmx_multi/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "2.2";
+constexpr char SOFTWARE_VERSION[] = "2.3";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_artnet_pixel_multi/.settings/language.settings.xml b/opi_emac_artnet_pixel_multi/.settings/language.settings.xml
index 072b44258..388ff4ff2 100644
--- a/opi_emac_artnet_pixel_multi/.settings/language.settings.xml
+++ b/opi_emac_artnet_pixel_multi/.settings/language.settings.xml
@@ -4,8 +4,8 @@
-
-
+
+
diff --git a/opi_emac_artnet_pixel_multi/include/software_version.h b/opi_emac_artnet_pixel_multi/include/software_version.h
index 2b5c09491..d25e610ac 100644
--- a/opi_emac_artnet_pixel_multi/include/software_version.h
+++ b/opi_emac_artnet_pixel_multi/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "3.3";
+constexpr char SOFTWARE_VERSION[] = "3.4";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_artnet_rdm_l6470/.settings/language.settings.xml b/opi_emac_artnet_rdm_l6470/.settings/language.settings.xml
index 1181ae0f1..1114a7306 100644
--- a/opi_emac_artnet_rdm_l6470/.settings/language.settings.xml
+++ b/opi_emac_artnet_rdm_l6470/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_artnet_rdm_l6470/include/software_version.h b/opi_emac_artnet_rdm_l6470/include/software_version.h
index 5d0ab9767..d62e76e4b 100644
--- a/opi_emac_artnet_rdm_l6470/include/software_version.h
+++ b/opi_emac_artnet_rdm_l6470/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "2.9";
+constexpr char SOFTWARE_VERSION[] = "3.0";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_artnet_rdm_pca9685/.settings/language.settings.xml b/opi_emac_artnet_rdm_pca9685/.settings/language.settings.xml
index 44ab003c7..180d32e4b 100755
--- a/opi_emac_artnet_rdm_pca9685/.settings/language.settings.xml
+++ b/opi_emac_artnet_rdm_pca9685/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_artnet_rdm_pca9685/include/software_version.h b/opi_emac_artnet_rdm_pca9685/include/software_version.h
index fb86beff7..54ea749d2 100755
--- a/opi_emac_artnet_rdm_pca9685/include/software_version.h
+++ b/opi_emac_artnet_rdm_pca9685/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "1.4";
+constexpr char SOFTWARE_VERSION[] = "1.5";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_artnet_serial/.settings/language.settings.xml b/opi_emac_artnet_serial/.settings/language.settings.xml
index 1181ae0f1..1114a7306 100644
--- a/opi_emac_artnet_serial/.settings/language.settings.xml
+++ b/opi_emac_artnet_serial/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_artnet_serial/include/software_version.h b/opi_emac_artnet_serial/include/software_version.h
index 661f54433..1e13010f5 100644
--- a/opi_emac_artnet_serial/include/software_version.h
+++ b/opi_emac_artnet_serial/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "2.6";
+constexpr char SOFTWARE_VERSION[] = "2.7";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_ddp_pixel_dmx_multi/.settings/language.settings.xml b/opi_emac_ddp_pixel_dmx_multi/.settings/language.settings.xml
index 2ee77a4e4..43c43544f 100755
--- a/opi_emac_ddp_pixel_dmx_multi/.settings/language.settings.xml
+++ b/opi_emac_ddp_pixel_dmx_multi/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_ddp_pixel_dmx_multi/include/software_version.h b/opi_emac_ddp_pixel_dmx_multi/include/software_version.h
index c5152360d..767352b85 100644
--- a/opi_emac_ddp_pixel_dmx_multi/include/software_version.h
+++ b/opi_emac_ddp_pixel_dmx_multi/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "2.1";
+constexpr char SOFTWARE_VERSION[] = "2.2";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_ddp_pixel_multi/.settings/language.settings.xml b/opi_emac_ddp_pixel_multi/.settings/language.settings.xml
index 2ee77a4e4..43c43544f 100755
--- a/opi_emac_ddp_pixel_multi/.settings/language.settings.xml
+++ b/opi_emac_ddp_pixel_multi/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_ddp_pixel_multi/include/software_version.h b/opi_emac_ddp_pixel_multi/include/software_version.h
index 767352b85..87675180e 100644
--- a/opi_emac_ddp_pixel_multi/include/software_version.h
+++ b/opi_emac_ddp_pixel_multi/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "2.2";
+constexpr char SOFTWARE_VERSION[] = "2.3";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_e131_artnet/.settings/language.settings.xml b/opi_emac_e131_artnet/.settings/language.settings.xml
index 18c8d9d16..b28610ce6 100644
--- a/opi_emac_e131_artnet/.settings/language.settings.xml
+++ b/opi_emac_e131_artnet/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_e131_artnet/include/software_version.h b/opi_emac_e131_artnet/include/software_version.h
index 80dc9877d..b6fed7c5a 100644
--- a/opi_emac_e131_artnet/include/software_version.h
+++ b/opi_emac_e131_artnet/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "2.8";
+constexpr char SOFTWARE_VERSION[] = "2.9";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_e131_dmx/.settings/language.settings.xml b/opi_emac_e131_dmx/.settings/language.settings.xml
index 18c8d9d16..b28610ce6 100644
--- a/opi_emac_e131_dmx/.settings/language.settings.xml
+++ b/opi_emac_e131_dmx/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_e131_dmx/include/software_version.h b/opi_emac_e131_dmx/include/software_version.h
index a5522bb98..3fd825717 100644
--- a/opi_emac_e131_dmx/include/software_version.h
+++ b/opi_emac_e131_dmx/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "4.3";
+constexpr char SOFTWARE_VERSION[] = "4.4";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_e131_dmx_multi/.settings/language.settings.xml b/opi_emac_e131_dmx_multi/.settings/language.settings.xml
index 18c8d9d16..b28610ce6 100644
--- a/opi_emac_e131_dmx_multi/.settings/language.settings.xml
+++ b/opi_emac_e131_dmx_multi/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_e131_dmx_multi/include/software_version.h b/opi_emac_e131_dmx_multi/include/software_version.h
index d25e610ac..c1088d59a 100644
--- a/opi_emac_e131_dmx_multi/include/software_version.h
+++ b/opi_emac_e131_dmx_multi/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "3.4";
+constexpr char SOFTWARE_VERSION[] = "3.5";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_e131_monitor/.settings/language.settings.xml b/opi_emac_e131_monitor/.settings/language.settings.xml
index 18c8d9d16..b28610ce6 100644
--- a/opi_emac_e131_monitor/.settings/language.settings.xml
+++ b/opi_emac_e131_monitor/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_e131_monitor/include/software_version.h b/opi_emac_e131_monitor/include/software_version.h
index 613f7331d..a6c2bcd99 100644
--- a/opi_emac_e131_monitor/include/software_version.h
+++ b/opi_emac_e131_monitor/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "3.1";
+constexpr char SOFTWARE_VERSION[] = "3.2";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_e131_pixel/.settings/language.settings.xml b/opi_emac_e131_pixel/.settings/language.settings.xml
index f98e6b990..eff48f0b7 100644
--- a/opi_emac_e131_pixel/.settings/language.settings.xml
+++ b/opi_emac_e131_pixel/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_e131_pixel/include/software_version.h b/opi_emac_e131_pixel/include/software_version.h
index 3fd825717..144db8a79 100644
--- a/opi_emac_e131_pixel/include/software_version.h
+++ b/opi_emac_e131_pixel/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "4.4";
+constexpr char SOFTWARE_VERSION[] = "4.5";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_e131_pixel_dmx/.settings/language.settings.xml b/opi_emac_e131_pixel_dmx/.settings/language.settings.xml
index afc2c550e..53a5fc57e 100755
--- a/opi_emac_e131_pixel_dmx/.settings/language.settings.xml
+++ b/opi_emac_e131_pixel_dmx/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_e131_pixel_dmx/include/software_version.h b/opi_emac_e131_pixel_dmx/include/software_version.h
index 767352b85..87675180e 100644
--- a/opi_emac_e131_pixel_dmx/include/software_version.h
+++ b/opi_emac_e131_pixel_dmx/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "2.2";
+constexpr char SOFTWARE_VERSION[] = "2.3";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_e131_pixel_dmx_multi/.settings/language.settings.xml b/opi_emac_e131_pixel_dmx_multi/.settings/language.settings.xml
index 9206d991a..0a0ed661b 100755
--- a/opi_emac_e131_pixel_dmx_multi/.settings/language.settings.xml
+++ b/opi_emac_e131_pixel_dmx_multi/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_e131_pixel_dmx_multi/include/software_version.h b/opi_emac_e131_pixel_dmx_multi/include/software_version.h
index 767352b85..87675180e 100644
--- a/opi_emac_e131_pixel_dmx_multi/include/software_version.h
+++ b/opi_emac_e131_pixel_dmx_multi/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "2.2";
+constexpr char SOFTWARE_VERSION[] = "2.3";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_e131_pixel_multi/.settings/language.settings.xml b/opi_emac_e131_pixel_multi/.settings/language.settings.xml
index f6b801d90..e8869aef1 100644
--- a/opi_emac_e131_pixel_multi/.settings/language.settings.xml
+++ b/opi_emac_e131_pixel_multi/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_e131_pixel_multi/include/software_version.h b/opi_emac_e131_pixel_multi/include/software_version.h
index 2b5c09491..d25e610ac 100644
--- a/opi_emac_e131_pixel_multi/include/software_version.h
+++ b/opi_emac_e131_pixel_multi/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "3.3";
+constexpr char SOFTWARE_VERSION[] = "3.4";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_llrp_tftpd/.settings/language.settings.xml b/opi_emac_llrp_tftpd/.settings/language.settings.xml
index 85b17cef6..6e6961a6a 100644
--- a/opi_emac_llrp_tftpd/.settings/language.settings.xml
+++ b/opi_emac_llrp_tftpd/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_llrp_tftpd/firmware/main.cpp b/opi_emac_llrp_tftpd/firmware/main.cpp
index 3858e14e5..5364ff7b6 100755
--- a/opi_emac_llrp_tftpd/firmware/main.cpp
+++ b/opi_emac_llrp_tftpd/firmware/main.cpp
@@ -76,7 +76,6 @@ int main() {
FlashCodeInstall spiFlashInstall;
fw.Print("RDMNet LLRP device only");
-
NtpClient ntpClient;
ntpClient.Start();
diff --git a/opi_emac_llrp_tftpd/include/software_version.h b/opi_emac_llrp_tftpd/include/software_version.h
index 5d0ab9767..d62e76e4b 100755
--- a/opi_emac_llrp_tftpd/include/software_version.h
+++ b/opi_emac_llrp_tftpd/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "2.9";
+constexpr char SOFTWARE_VERSION[] = "3.0";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_ltc_smpte/.settings/language.settings.xml b/opi_emac_ltc_smpte/.settings/language.settings.xml
index acb67b46e..595c3c763 100644
--- a/opi_emac_ltc_smpte/.settings/language.settings.xml
+++ b/opi_emac_ltc_smpte/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_ltc_smpte/include/software_version.h b/opi_emac_ltc_smpte/include/software_version.h
index 1b93e9d9a..fa4c22cf4 100644
--- a/opi_emac_ltc_smpte/include/software_version.h
+++ b/opi_emac_ltc_smpte/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "4.6";
+constexpr char SOFTWARE_VERSION[] = "4.7";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_osc_client/.settings/language.settings.xml b/opi_emac_osc_client/.settings/language.settings.xml
index 41450214c..ab3736ed8 100644
--- a/opi_emac_osc_client/.settings/language.settings.xml
+++ b/opi_emac_osc_client/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_osc_client/include/software_version.h b/opi_emac_osc_client/include/software_version.h
index d62e76e4b..613f7331d 100644
--- a/opi_emac_osc_client/include/software_version.h
+++ b/opi_emac_osc_client/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "3.0";
+constexpr char SOFTWARE_VERSION[] = "3.1";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_osc_dmx/.settings/language.settings.xml b/opi_emac_osc_dmx/.settings/language.settings.xml
index 41450214c..ab3736ed8 100644
--- a/opi_emac_osc_dmx/.settings/language.settings.xml
+++ b/opi_emac_osc_dmx/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_osc_dmx/include/software_version.h b/opi_emac_osc_dmx/include/software_version.h
index d25e610ac..c1088d59a 100644
--- a/opi_emac_osc_dmx/include/software_version.h
+++ b/opi_emac_osc_dmx/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "3.4";
+constexpr char SOFTWARE_VERSION[] = "3.5";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_osc_monitor/.settings/language.settings.xml b/opi_emac_osc_monitor/.settings/language.settings.xml
index 41450214c..ab3736ed8 100644
--- a/opi_emac_osc_monitor/.settings/language.settings.xml
+++ b/opi_emac_osc_monitor/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_osc_monitor/include/software_version.h b/opi_emac_osc_monitor/include/software_version.h
index 613f7331d..a6c2bcd99 100644
--- a/opi_emac_osc_monitor/include/software_version.h
+++ b/opi_emac_osc_monitor/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "3.1";
+constexpr char SOFTWARE_VERSION[] = "3.2";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_osc_pixel/.settings/language.settings.xml b/opi_emac_osc_pixel/.settings/language.settings.xml
index 41450214c..ab3736ed8 100644
--- a/opi_emac_osc_pixel/.settings/language.settings.xml
+++ b/opi_emac_osc_pixel/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_osc_pixel/include/software_version.h b/opi_emac_osc_pixel/include/software_version.h
index 4c9ec8e65..2b6aa83e3 100644
--- a/opi_emac_osc_pixel/include/software_version.h
+++ b/opi_emac_osc_pixel/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "3.6";
+constexpr char SOFTWARE_VERSION[] = "3.7";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_pp_pixel_multi/.settings/language.settings.xml b/opi_emac_pp_pixel_multi/.settings/language.settings.xml
index 2ee77a4e4..43c43544f 100755
--- a/opi_emac_pp_pixel_multi/.settings/language.settings.xml
+++ b/opi_emac_pp_pixel_multi/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_pp_pixel_multi/include/software_version.h b/opi_emac_pp_pixel_multi/include/software_version.h
index 1eda41ac5..61587ab68 100644
--- a/opi_emac_pp_pixel_multi/include/software_version.h
+++ b/opi_emac_pp_pixel_multi/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "1.8";
+constexpr char SOFTWARE_VERSION[] = "1.9";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_showfile_artnet/.settings/language.settings.xml b/opi_emac_showfile_artnet/.settings/language.settings.xml
index 8cc4991c1..2ebf545f9 100755
--- a/opi_emac_showfile_artnet/.settings/language.settings.xml
+++ b/opi_emac_showfile_artnet/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_showfile_artnet/include/software_version.h b/opi_emac_showfile_artnet/include/software_version.h
index 98022402d..2ecf18fe7 100755
--- a/opi_emac_showfile_artnet/include/software_version.h
+++ b/opi_emac_showfile_artnet/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "1.3";
+constexpr char SOFTWARE_VERSION[] = "1.4";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_emac_showfile_e131/.settings/language.settings.xml b/opi_emac_showfile_e131/.settings/language.settings.xml
index 8cc4991c1..2ebf545f9 100755
--- a/opi_emac_showfile_e131/.settings/language.settings.xml
+++ b/opi_emac_showfile_e131/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_emac_showfile_e131/include/software_version.h b/opi_emac_showfile_e131/include/software_version.h
index 98022402d..2ecf18fe7 100755
--- a/opi_emac_showfile_e131/include/software_version.h
+++ b/opi_emac_showfile_e131/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "1.3";
+constexpr char SOFTWARE_VERSION[] = "1.4";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_midi_monitor/.settings/language.settings.xml b/opi_midi_monitor/.settings/language.settings.xml
index d75828d83..19b0ce1b8 100644
--- a/opi_midi_monitor/.settings/language.settings.xml
+++ b/opi_midi_monitor/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_midi_monitor/include/software_version.h b/opi_midi_monitor/include/software_version.h
index 5d0ab9767..d62e76e4b 100644
--- a/opi_midi_monitor/include/software_version.h
+++ b/opi_midi_monitor/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "2.9";
+constexpr char SOFTWARE_VERSION[] = "3.0";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_rdm_responder/.settings/language.settings.xml b/opi_rdm_responder/.settings/language.settings.xml
index e4dd18efe..490d0b48a 100644
--- a/opi_rdm_responder/.settings/language.settings.xml
+++ b/opi_rdm_responder/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_rdm_responder/include/software_version.h b/opi_rdm_responder/include/software_version.h
index f3fd1eefc..c1b1a6d75 100644
--- a/opi_rdm_responder/include/software_version.h
+++ b/opi_rdm_responder/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "3.0";
+constexpr char SOFTWARE_VERSION[] = "3.1";
#endif /* SOFTWARE_VERSION_H_ */
diff --git a/opi_rdm_responder_l6470/.settings/language.settings.xml b/opi_rdm_responder_l6470/.settings/language.settings.xml
index 97757dcde..82bc9a37a 100644
--- a/opi_rdm_responder_l6470/.settings/language.settings.xml
+++ b/opi_rdm_responder_l6470/.settings/language.settings.xml
@@ -5,7 +5,7 @@
-
+
diff --git a/opi_rdm_responder_l6470/include/software_version.h b/opi_rdm_responder_l6470/include/software_version.h
index 3e246e5df..5d0ab9767 100644
--- a/opi_rdm_responder_l6470/include/software_version.h
+++ b/opi_rdm_responder_l6470/include/software_version.h
@@ -26,6 +26,6 @@
#ifndef SOFTWARE_VERSION_H_
#define SOFTWARE_VERSION_H_
-constexpr char SOFTWARE_VERSION[] = "2.8";
+constexpr char SOFTWARE_VERSION[] = "2.9";
#endif /* SOFTWARE_VERSION_H_ */