# ESP32-C5 C-ITS Core Common data structures and helper functions to receive and send C-ITS (V2X) data on an ESP32-C5. ## Usage ### Communicate with C-ITS Devices Setup the connection like this in your `main` function: ```rust // Setup WiFi // sadly, it doesn't work any more when we move `esp_radio::wifi::new` to `setup_wifi_sniffer` let (mut wifi_controller, interfaces) = esp_radio::wifi::new( peripherals.WIFI, 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) { println!("Failed to set WiFi to 5GHz only: {err}"); } if let Err(err) = wifi_controller.set_max_tx_power(WIFI_TXPOWER * 4) { println!("Failed to set WiFi TX power: {err}"); } critical_section::with(|cs| { WIFI_RX_QUEUE.borrow(cs).replace(Some(ArrayQueue::new(2))); }); let mut wlan_iface = interfaces.sniffer; radio::setup_wifi_sniffer(WIFI_CHANNEL, &mut wlan_iface, handle_frame) .expect("Fatal error initializing 802.11p sniffer"); println!("WiFi promiscuous mode on channel {WIFI_CHANNEL} running"); let mac = esp_hal::efuse::base_mac_address(); println!("WiFi MAC: {mac}"); ``` With a frame handler like this: ```rust fn handle_frame(frame: esp_radio::wifi::sniffer::PromiscuousPkt<'_>) { match esp32_cits_core::rx::is_broadcast_frame(&frame) { Err(err) => { warn!("{err}"); return; } Ok(false) => { // drop frame return; } Ok(true) => { // continue } } println!("Received frame with {} bytes", frame.len); // parse message match c_its_parser::de::decode(frame.data, c_its_parser::Headers::IEEE802LlcGnBtp) { Ok(its_message) => { println!("New message: {its_message:?}"); // do something with the data }, Err(err) => println!("Failed to parse ITS message: {err}"), } } ``` ### Sending Implement `tx::GnItsPayload` and then call `encode_packet()`. Then send frame with `radio::send_80211_bcast_frame()`. ### Run Unit Tests on Host The unit tests in this project are meant to be run on the host: ``` cargo test --target host-tuple --no-default-features -F std ```