kopia lustrzana https://github.com/meshtastic/firmware
				
				
				
			Add UDP multicast support on linux. (#6342)
* Add UDP multicast support on linux. Closes #6326 We tested it an it works. This is really hacky to say the least. * Add libuv to Linux packaging * Trunkadunk * Correct ref * Add libuv1-dev to setup-native --------- Co-authored-by: vidplace7 <vidplace7@gmail.com> Co-authored-by: Ben Meadors <benmmeadors@gmail.com>pull/6351/head
							rodzic
							
								
									f41afb14b1
								
							
						
					
					
						commit
						d1068fd1e4
					
				|  | @ -29,6 +29,7 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ | |||
|     gpg \ | ||||
|     gnupg2 \ | ||||
|     libusb-1.0-0-dev \ | ||||
|     libuv1-dev \ | ||||
|     libi2c-dev \ | ||||
|     libxcb-xkb-dev \ | ||||
|     libxkbcommon-dev \ | ||||
|  |  | |||
|  | @ -11,4 +11,4 @@ runs: | |||
|     - name: Install libs needed for native build | ||||
|       shell: bash | ||||
|       run: | | ||||
|         sudo apt-get install -y libbluetooth-dev libgpiod-dev libyaml-cpp-dev openssl libssl-dev libulfius-dev liborcania-dev libusb-1.0-0-dev libi2c-dev | ||||
|         sudo apt-get install -y libbluetooth-dev libgpiod-dev libyaml-cpp-dev openssl libssl-dev libulfius-dev liborcania-dev libusb-1.0-0-dev libi2c-dev libuv1-dev | ||||
|  |  | |||
|  | @ -13,7 +13,7 @@ ENV TZ=Etc/UTC | |||
| ENV PIP_ROOT_USER_ACTION=ignore | ||||
| RUN apt-get update && apt-get install --no-install-recommends -y \ | ||||
|         wget g++ zip git ca-certificates \ | ||||
|         libgpiod-dev libyaml-cpp-dev libbluetooth-dev libi2c-dev \ | ||||
|         libgpiod-dev libyaml-cpp-dev libbluetooth-dev libi2c-dev libuv1-dev \ | ||||
|         libusb-1.0-0-dev libulfius-dev liborcania-dev libssl-dev pkg-config \ | ||||
|     && apt-get clean && rm -rf /var/lib/apt/lists/* \ | ||||
|     && pip install --no-cache-dir -U platformio \ | ||||
|  | @ -38,7 +38,7 @@ ENV TZ=Etc/UTC | |||
| USER root | ||||
| 
 | ||||
| RUN apt-get update && apt-get --no-install-recommends -y install \ | ||||
|         libc-bin libc6 libgpiod2 libyaml-cpp0.7 libi2c0 libulfius2.7 libusb-1.0-0-dev liborcania2.3 libssl3 \ | ||||
|         libc-bin libc6 libgpiod2 libyaml-cpp0.7 libi2c0 libuv1 libusb-1.0-0-dev liborcania2.3 libulfius2.7 libssl3 \ | ||||
|     && apt-get clean && rm -rf /var/lib/apt/lists/* \ | ||||
|     && mkdir -p /var/lib/meshtasticd \ | ||||
|     && mkdir -p /etc/meshtasticd/config.d \ | ||||
|  |  | |||
|  | @ -9,7 +9,7 @@ FROM python:3.13-alpine3.21 AS builder | |||
| ENV PIP_ROOT_USER_ACTION=ignore | ||||
| RUN apk --no-cache add \ | ||||
|         bash g++ libstdc++-dev linux-headers zip git ca-certificates libgpiod-dev yaml-cpp-dev bluez-dev \ | ||||
|         libusb-dev i2c-tools-dev openssl-dev pkgconf argp-standalone \ | ||||
|         libusb-dev i2c-tools-dev libuv-dev openssl-dev pkgconf argp-standalone \ | ||||
|     && rm -rf /var/cache/apk/* \ | ||||
|     && pip install --no-cache-dir -U platformio \ | ||||
|     && mkdir /tmp/firmware | ||||
|  | @ -32,7 +32,7 @@ FROM alpine:3.21 | |||
| USER root | ||||
| 
 | ||||
| RUN apk --no-cache add \ | ||||
|         libstdc++ libgpiod yaml-cpp libusb i2c-tools \ | ||||
|         libstdc++ libgpiod yaml-cpp libusb i2c-tools libuv \ | ||||
|     && rm -rf /var/cache/apk/* \ | ||||
|     && mkdir -p /var/lib/meshtasticd \ | ||||
|     && mkdir -p /etc/meshtasticd/config.d \ | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| ; The Portduino based 'native' environment. Currently supported on Linux targets with real LoRa hardware (or simulated). | ||||
| [portduino_base] | ||||
| platform = https://github.com/meshtastic/platform-native.git#562d189828f09fbf4c4093b3c0104bae9d8e9ff9 | ||||
| platform = https://github.com/meshtastic/platform-native.git#df71ed0040e9aad767a002829330965b78fc452a | ||||
| framework = arduino | ||||
| 
 | ||||
| build_src_filter =  | ||||
|  | @ -34,10 +34,12 @@ build_flags = | |||
|   -Isrc/platform/portduino | ||||
|   -DRADIOLIB_EEPROM_UNSUPPORTED | ||||
|   -DPORTDUINO_LINUX_HARDWARE | ||||
|   -DHAS_UDP_MULTICAST | ||||
|   -lpthread | ||||
|   -lstdc++fs | ||||
|   -lbluetooth | ||||
|   -lgpiod | ||||
|   -lyaml-cpp | ||||
|   -li2c | ||||
|   -luv | ||||
|   -std=c++17 | ||||
|  |  | |||
|  | @ -17,6 +17,7 @@ Build-Depends: debhelper-compat (= 13), | |||
|                libbluetooth-dev, | ||||
|                libusb-1.0-0-dev, | ||||
|                libi2c-dev, | ||||
|                libuv1-dev, | ||||
|                openssl, | ||||
|                libssl-dev, | ||||
|                libulfius-dev, | ||||
|  |  | |||
|  | @ -36,6 +36,7 @@ BuildRequires: pkgconfig(libgpiod) | |||
| BuildRequires: pkgconfig(bluez) | ||||
| BuildRequires: pkgconfig(libusb-1.0) | ||||
| BuildRequires: libi2c-devel | ||||
| BuildRequires: pkgconfig(libuv) | ||||
| # Web components: | ||||
| BuildRequires: pkgconfig(openssl) | ||||
| BuildRequires: pkgconfig(liborcania) | ||||
|  |  | |||
|  | @ -822,6 +822,11 @@ void setup() | |||
| #ifdef HAS_UDP_MULTICAST | ||||
|     LOG_DEBUG("Start multicast thread"); | ||||
|     udpThread = new UdpMulticastThread(); | ||||
| #ifdef ARCH_PORTDUINO | ||||
|     // FIXME: portduino does not ever call onNetworkConnected so call it here because I don't know what happen if I call
 | ||||
|     // onNetworkConnected there
 | ||||
|     udpThread->start(); | ||||
| #endif | ||||
| #endif | ||||
|     service = new MeshService(); | ||||
|     service->init(); | ||||
|  |  | |||
|  | @ -23,7 +23,12 @@ class UdpMulticastThread : public concurrency::OSThread | |||
|     void start() | ||||
|     { | ||||
|         if (udp.listenMulticast(udpIpAddress, UDP_MULTICAST_DEFAUL_PORT, 64)) { | ||||
| #if !defined(ARCH_PORTDUINO) | ||||
|             // FIXME(PORTDUINO): arduino lacks IPAddress::toString()
 | ||||
|             LOG_DEBUG("UDP Listening on IP: %s", WiFi.localIP().toString().c_str()); | ||||
| #else | ||||
|             LOG_DEBUG("UDP Listening"); | ||||
| #endif | ||||
|             udp.onPacket([this](AsyncUDPPacket packet) { onReceive(packet); }); | ||||
|         } else { | ||||
|             LOG_DEBUG("Failed to listen on UDP"); | ||||
|  | @ -33,7 +38,10 @@ class UdpMulticastThread : public concurrency::OSThread | |||
|     void onReceive(AsyncUDPPacket packet) | ||||
|     { | ||||
|         size_t packetLength = packet.length(); | ||||
| #ifndef ARCH_PORTDUINO | ||||
|         // FIXME(PORTDUINO): arduino lacks IPAddress::toString()
 | ||||
|         LOG_DEBUG("UDP broadcast from: %s, len=%u", packet.remoteIP().toString().c_str(), packetLength); | ||||
| #endif | ||||
|         meshtastic_MeshPacket mp; | ||||
|         LOG_DEBUG("Decoding MeshPacket from UDP len=%u", packetLength); | ||||
|         bool isPacketDecoded = pb_decode_from_bytes(packet.data(), packetLength, &meshtastic_MeshPacket_msg, &mp); | ||||
|  | @ -48,9 +56,14 @@ class UdpMulticastThread : public concurrency::OSThread | |||
| 
 | ||||
|     bool onSend(const meshtastic_MeshPacket *mp) | ||||
|     { | ||||
|         if (!mp || WiFi.status() != WL_CONNECTED) { | ||||
|         if (!mp || !udp) { | ||||
|             return false; | ||||
|         } | ||||
| #if !defined(ARCH_PORTDUINO) | ||||
|         if (WiFi.status() != WL_CONNECTED) { | ||||
|             return false; | ||||
|         } | ||||
| #endif | ||||
|         LOG_DEBUG("Broadcasting packet over UDP (id=%u)", mp->id); | ||||
|         uint8_t buffer[meshtastic_MeshPacket_size]; | ||||
|         size_t encodedLength = pb_encode_to_bytes(buffer, sizeof(buffer), &meshtastic_MeshPacket_msg, mp); | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 Jorropo
						Jorropo