From 2c50668e7e74ed67d182440022407466963b7d25 Mon Sep 17 00:00:00 2001 From: Jannik Beyerstedt Date: Fri, 31 Jul 2026 12:04:46 +0200 Subject: [PATCH] 802.11-TX: Reduce transmit power, add notes about legal requirements --- Readme.md | 19 +++++++++++++++++++ src/main.rs | 5 +++++ 2 files changed, 24 insertions(+) diff --git a/Readme.md b/Readme.md index c8dcf5c..1dda26f 100644 --- a/Readme.md +++ b/Readme.md @@ -32,6 +32,25 @@ Just prints a line for each received CAM. Generates and transmits a CAM when a GNSS update was received. Depends on the `gnss` feature. +Note: In germany, using the 5875 to 5915 MHz frequency band is only permitted for C-ITS use cases which implement transmit power reduction measures with at least 30 dB reduction range (or equivalent measures) and have a maximum EIRP of 33 dBm. +This is based on EU regulation 2014/53/EU, so it applies to other EU countries in similar ways. +The relevant harmonized standard is ETSI EN 302 571 which mandates (excerpt of most relevant points): + +- a maximum power spectral density of 23 dBm/Mhz EIRP +- transmit power control (TCP) in a range from 3 dBm up to the maximum output power of the equipment + * used for CEN DSRC and HDR DSRC interference mitigation by implementing measures from ETSI TS 102 792 + + Mode A or B: Output power less than 10 dBm EIRP and less than -65 or -45 dBm/MHz EIRP in CEN DSRC band -> **needs to be measured** + + Mode C: Maximum transmission time of less than 1 ms and at least a few 100 ms between transmission (realistically) -> **can't be ensured with big messages** + + Mode D: "any" realistically possible transmission time, but at least 500 ms between transmissions for ~5 ITS stations/ 1000ms for 10 ITS stations -> **safe to assume when we only send CAMs at 1 Hz** + + But modes C and D also need to: + - use protected zone information from CAM messages + - use a protected zone database, e.g. from www.asecap-pzdb.com + * used for dynamic congestion control (DCC) + + mandatory mechanism described in ETSI EN 302 571, chapter 4.2.10 + +This is **not** implemented in this application! +**So legally, you're not allowed to send with this.** + ### UART Enable UART I/O protocol according to [docs/uart-protocol.md](./docs/uart-protocol.md). diff --git a/src/main.rs b/src/main.rs index 772adb6..64ed528 100644 --- a/src/main.rs +++ b/src/main.rs @@ -51,6 +51,7 @@ mod screen; mod v2x_tx; const WIFI_CHANNEL: radio::Channel = 180; +const WIFI_TXPOWER: i8 = 10; // dBm, 2..20 #[cfg(feature = "spat")] const SPAT_RATE_LIMIT: u8 = 5; // keep every n-th message #[cfg(any(feature = "cam_tx", feature = "uart"))] @@ -163,9 +164,13 @@ async fn main(spawner: Spawner) -> ! { esp_radio::wifi::ControllerConfig::default(), ) .expect("Failed to initialize Wi-Fi controller"); + if let Err(err) = wifi_controller.set_band_mode(esp_radio::wifi::BandMode::_5G) { error!("Failed to set WiFi to 5GHz only: {err}"); } + if let Err(err) = wifi_controller.set_max_tx_power(WIFI_TXPOWER * 4) { + error!("Failed to set WiFi TX power: {err}"); + } critical_section::with(|cs| { WIFI_RX_QUEUE.borrow(cs).replace(Some(ArrayQueue::new(2)));