-
Notifications
You must be signed in to change notification settings - Fork 100
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add KNX-IP support for the rp2040 plattform
Some general optimizations reagrding KNX-IP Squashed commit of the following: commit 2911448 Merge: 8ac6aec 3c29d16 Author: Dom <[email protected]> Date: Wed Dec 20 10:04:32 2023 +0100 Merge pull request #13 from OpenKNX/fix_serialnumber Fix serialnumber commit 8ac6aec Author: Ing-Dom <[email protected]> Date: Thu Dec 14 12:28:02 2023 +0100 fix macAddress reading for Wifi commit 9db2cd5 Author: Ing-Dom <[email protected]> Date: Tue Dec 12 13:08:53 2023 +0100 remove LARGE_BUFFERS and clean up header files of ETHERNET_GENERIC commit 2f229ae Author: Ing-Dom <[email protected]> Date: Tue Dec 12 00:56:32 2023 +0100 temporary fix, solution needed for tunneling commit f6e7e61 Author: Ing-Dom <[email protected]> Date: Mon Dec 11 13:54:26 2023 +0100 unified approach for different ip stacks with rp2040 plattform commit 4723eda Author: Marco Scholl <[email protected]> Date: Mon Dec 11 08:34:25 2023 +0100 wip commit 5bf3e61 Author: Ing-Dom <[email protected]> Date: Thu Dec 7 14:53:42 2023 +0100 ip and not ip in one rp2040 plattform commit aaca34a Merge: fd97f59 d44606d Author: Dom <[email protected]> Date: Wed Dec 6 15:30:17 2023 +0100 Merge branch 'thelsing:master' into rp2040_lwip commit fd97f59 Author: Marco Scholl <[email protected]> Date: Thu Nov 30 23:19:13 2023 +0100 dd sime ifdef to allow build without ip interface commit c665a79 Author: Ing-Dom <[email protected]> Date: Tue Nov 14 10:03:48 2023 +0100 stub for handling SearchRequestExt to prevent console messages commit 50745be Author: Ing-Dom <[email protected]> Date: Tue Nov 14 00:02:49 2023 +0100 adding ip support for rp2040 plattform
- Loading branch information
Showing
7 changed files
with
224 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,7 +4,7 @@ Plattform for Raspberry Pi Pico and other RP2040 boards | |
by SirSydom <[email protected]> 2021-2022 | ||
made to work with arduino-pico - "Raspberry Pi Pico Arduino core, for all RP2040 boards" | ||
by Earl E. Philhower III https://github.com/earlephilhower/arduino-pico V1.11.0 | ||
by Earl E. Philhower III https://github.com/earlephilhower/arduino-pico | ||
RTTI must be set to enabled in the board options | ||
|
@@ -17,6 +17,10 @@ EEPROM Emulation from arduino-pico core (max 4k) can be use by defining USE_RP20 | |
A RAM-buffered Flash can be use by defining USE_RP2040_LARGE_EEPROM_EMULATION | ||
For usage of KNX-IP you have to define either | ||
- KNX_IP_W5500 (use the arduino-pico core's w5500 lwip stack) | ||
- KNX_IP_WIFI (use the arduino-pico core's PiPicoW lwip stack) | ||
- KNX_IP_GENERIC (use the Ethernet_Generic stack) | ||
----------------------------------------------------*/ | ||
|
||
|
@@ -45,8 +49,11 @@ A RAM-buffered Flash can be use by defining USE_RP2040_LARGE_EEPROM_EMULATION | |
#endif | ||
#endif | ||
|
||
#ifndef KNX_SERIAL | ||
#define KNX_SERIAL Serial1 | ||
#ifdef KNX_IP_W5500 | ||
extern Wiznet5500lwIP KNX_NETIF; | ||
#elif defined(KNX_IP_WIFI) | ||
#elif defined(KNX_IP_GENERIC) | ||
|
||
#endif | ||
|
||
RP2040ArduinoPlatform::RP2040ArduinoPlatform() | ||
|
@@ -234,6 +241,126 @@ void RP2040ArduinoPlatform::writeBufferedEraseBlock() | |
} | ||
} | ||
#endif | ||
|
||
#if defined(KNX_NETIF) | ||
uint32_t RP2040ArduinoPlatform::currentIpAddress() | ||
{ | ||
|
||
return KNX_NETIF.localIP(); | ||
} | ||
uint32_t RP2040ArduinoPlatform::currentSubnetMask() | ||
{ | ||
return KNX_NETIF.subnetMask(); | ||
} | ||
uint32_t RP2040ArduinoPlatform::currentDefaultGateway() | ||
{ | ||
return KNX_NETIF.gatewayIP(); | ||
} | ||
void RP2040ArduinoPlatform::macAddress(uint8_t* addr) | ||
{ | ||
#if defined(KNX_IP_W5500) | ||
addr = KNX_NETIF.getNetIf()->hwaddr; | ||
#elif defined(KNX_IP_WIFI) | ||
uint8_t macaddr[6] = {0,0,0,0,0,0}; | ||
addr = KNX_NETIF.macAddress(macaddr); | ||
#elif defined(KNX_IP_GENERIC) | ||
KNX_NETIF.MACAddress(addr); | ||
#endif | ||
} | ||
|
||
// multicast | ||
void RP2040ArduinoPlatform::setupMultiCast(uint32_t addr, uint16_t port) | ||
{ | ||
mcastaddr = IPAddress(htonl(addr)); | ||
_port = port; | ||
uint8_t result = _udp.beginMulticast(mcastaddr, port); | ||
(void) result; | ||
|
||
#ifdef KNX_IP_GENERIC | ||
//if(!_unicast_socket_setup) | ||
// _unicast_socket_setup = UDP_UNICAST.begin(3671); | ||
#endif | ||
|
||
#ifdef KNX_LOG_IP | ||
print("Setup Mcast addr: "); | ||
print(mcastaddr.toString().c_str()); | ||
print(" on port: "); | ||
print(port); | ||
print(" result "); | ||
println(result); | ||
#endif | ||
} | ||
|
||
void RP2040ArduinoPlatform::closeMultiCast() | ||
{ | ||
_udp.stop(); | ||
} | ||
|
||
bool RP2040ArduinoPlatform::sendBytesMultiCast(uint8_t* buffer, uint16_t len) | ||
{ | ||
#ifdef KNX_LOG_IP | ||
printHex("<- ",buffer, len); | ||
#endif | ||
//ToDo: check if Ethernet is able to receive | ||
_udp.beginPacket(mcastaddr, _port); | ||
_udp.write(buffer, len); | ||
_udp.endPacket(); | ||
return true; | ||
} | ||
|
||
int RP2040ArduinoPlatform::readBytesMultiCast(uint8_t* buffer, uint16_t maxLen) | ||
{ | ||
int len = _udp.parsePacket(); | ||
if (len == 0) | ||
return 0; | ||
|
||
if (len > maxLen) | ||
{ | ||
print("udp buffer to small. was "); | ||
print(maxLen); | ||
print(", needed "); | ||
println(len); | ||
fatalError(); | ||
} | ||
|
||
_udp.read(buffer, len); | ||
#ifdef KNX_LOG_IP | ||
print("Remote IP: "); | ||
print(_udp.remoteIP().toString().c_str()); | ||
|
||
printHex("-> ", buffer, len); | ||
#endif | ||
return len; | ||
} | ||
|
||
// unicast | ||
bool RP2040ArduinoPlatform::sendBytesUniCast(uint32_t addr, uint16_t port, uint8_t* buffer, uint16_t len) | ||
{ | ||
IPAddress ucastaddr(htonl(addr)); | ||
|
||
#ifdef KNX_LOG_IP | ||
print("sendBytesUniCast to:"); | ||
println(ucastaddr.toString().c_str()); | ||
#endif | ||
|
||
#ifdef KNX_IP_GENERIC | ||
if(!_unicast_socket_setup) | ||
_unicast_socket_setup = UDP_UNICAST.begin(3671); | ||
#endif | ||
|
||
if (UDP_UNICAST.beginPacket(ucastaddr, port) == 1) | ||
{ | ||
UDP_UNICAST.write(buffer, len); | ||
if (UDP_UNICAST.endPacket() == 0) | ||
println("sendBytesUniCast endPacket fail"); | ||
} | ||
else | ||
println("sendBytesUniCast beginPacket fail"); | ||
|
||
return true; | ||
} | ||
#endif | ||
|
||
#endif | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters