Compare commits
3 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
00b78e59cb | ||
|
|
105d3123f4 | ||
| 759e6e0d04 |
1 changed files with 34 additions and 4 deletions
38
src/main.rs
38
src/main.rs
|
|
@ -76,6 +76,7 @@ esp_bootloader_esp_idf::esp_app_desc!();
|
|||
#[cfg(feature = "_gnss")]
|
||||
static GNSS_UPDATE: Mutex<RefCell<Option<applogic::GnssFix>>> = Mutex::new(RefCell::new(None));
|
||||
static WIFI_RX_QUEUE: Mutex<RefCell<Option<ArrayQueue<Vec<u8>>>>> = Mutex::new(RefCell::new(None));
|
||||
static mut USER_LED: Option<esp_hal::gpio::Output<'static>> = None;
|
||||
#[cfg(feature = "_uart")]
|
||||
static UART_RX_BUF: Mutex<RefCell<Option<Vec<u8>>>> = Mutex::new(RefCell::new(None));
|
||||
#[cfg(feature = "_uart")]
|
||||
|
|
@ -176,6 +177,13 @@ async fn main(spawner: Spawner) -> ! {
|
|||
error!("Failed to set WiFi TX power: {err}");
|
||||
}
|
||||
|
||||
unsafe {
|
||||
USER_LED = Some(esp_hal::gpio::Output::new(
|
||||
peripherals.GPIO27,
|
||||
esp_hal::gpio::Level::Low,
|
||||
esp_hal::gpio::OutputConfig::default(),
|
||||
));
|
||||
}
|
||||
critical_section::with(|cs| {
|
||||
WIFI_RX_QUEUE.borrow(cs).replace(Some(ArrayQueue::new(2)));
|
||||
});
|
||||
|
|
@ -546,6 +554,12 @@ fn handle_frame(frame: esp_radio::wifi::sniffer::PromiscuousPkt<'_>) {
|
|||
}
|
||||
|
||||
// info!("Received frame with {} bytes", frame.len);
|
||||
unsafe {
|
||||
#[allow(static_mut_refs)]
|
||||
if let Some(ref mut led) = USER_LED.as_mut() {
|
||||
led.toggle();
|
||||
}
|
||||
}
|
||||
|
||||
// parse GN headers
|
||||
match c_its_parser::pcap::remove_wlan_headers(frame.data)
|
||||
|
|
@ -560,6 +574,7 @@ fn handle_frame(frame: esp_radio::wifi::sniffer::PromiscuousPkt<'_>) {
|
|||
Ok(packet) => {
|
||||
// drop hopped (for now)
|
||||
if packet.decoded.is_hopped() {
|
||||
esp_println::print!("."); // TODO: debug only!
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -568,9 +583,15 @@ fn handle_frame(frame: esp_radio::wifi::sniffer::PromiscuousPkt<'_>) {
|
|||
// drop all unsupported message IDs and rate-limit SPATEMs
|
||||
if match message_id {
|
||||
#[cfg(feature = "denm")]
|
||||
c_its_parser::standards::extensions::ItsMessageId::Denm => false,
|
||||
c_its_parser::standards::extensions::ItsMessageId::Denm => {
|
||||
esp_println::print!("D"); // TODO: debug only!
|
||||
false
|
||||
}
|
||||
#[cfg(feature = "cam")]
|
||||
c_its_parser::standards::extensions::ItsMessageId::Cam => false,
|
||||
c_its_parser::standards::extensions::ItsMessageId::Cam => {
|
||||
esp_println::print!("C"); // TODO: debug only!
|
||||
false
|
||||
}
|
||||
#[cfg(feature = "spat")]
|
||||
c_its_parser::standards::extensions::ItsMessageId::Spatem => {
|
||||
// reduce SPAT rate per station ID
|
||||
|
|
@ -586,7 +607,10 @@ fn handle_frame(frame: esp_radio::wifi::sniffer::PromiscuousPkt<'_>) {
|
|||
i.msg_count = i.msg_count.wrapping_add(1);
|
||||
|
||||
if (i.msg_count % SPAT_RATE_LIMIT) > 0 {
|
||||
esp_println::print!("s"); // TODO: debug only!
|
||||
drop_msg = true;
|
||||
} else {
|
||||
esp_println::print!("S"); // TODO: debug only!
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
@ -594,8 +618,14 @@ fn handle_frame(frame: esp_radio::wifi::sniffer::PromiscuousPkt<'_>) {
|
|||
drop_msg
|
||||
}
|
||||
#[cfg(feature = "spat")]
|
||||
c_its_parser::standards::extensions::ItsMessageId::Mapem => false,
|
||||
_ => true,
|
||||
c_its_parser::standards::extensions::ItsMessageId::Mapem => {
|
||||
esp_println::print!("M"); // TODO: debug only!
|
||||
false
|
||||
}
|
||||
_ => {
|
||||
esp_println::print!("?"); // TODO: debug only!
|
||||
true
|
||||
}
|
||||
} {
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue