feat: Heltec V3 native USB, remove all dead_code suppressions

- heltec_v3 now uses USB OTG (requires hardware mod: solder R29/R3)
- heltec_v3_uart added as fallback for stock boards
- Removed every #[allow(dead_code)] — fixed root causes instead:
  - Comm types (UsbParts/UartParts) moved to individual board files
  - USB/UART init removed from hal (boards call esp-hal directly)
  - SH1106 driver gated on boards that use it
  - UART task sends DisplayCommand::Reset at startup (variant now used)
  - ErrorCode::CrcError removed (SX1262 drops bad-CRC silently)
- check/clippy now use --release (no more Xtensa dev-mode warnings)
- Updated README with hardware mod docs and board table
This commit is contained in:
swaits committed 2026-04-07 10:52:58 -06:00
1 parent 6db287c241
commit 2b9e236f32
10 files changed
+61 -79

No files matched your search

+16 -5
View File
@@ -7,17 +7,22 @@
//! For stock (unmodified) V3 boards, use the `heltec_v3_uart` feature instead.
use esp_hal::gpio::{Level, Output, OutputConfig};
use static_cell::StaticCell;
use super::esp32s3;
use super::traits::{BoardParts, LoRaBoard};
use crate::hal::esp32s3 as mcu;
#[allow(unused_imports)] // Re-exported for other modules (display, radio, host tasks)
pub use super::esp32s3::{
create_display, DisplayDriver, DisplayI2c, DisplayParts, RadioDriver, RadioParts, UsbDriver,
UsbParts,
create_display, DisplayDriver, DisplayParts, RadioDriver, RadioParts,
};
pub type UsbDriver = esp_hal::otg_fs::asynch::Driver<'static>;
pub struct UsbParts {
pub driver: UsbDriver,
}
pub struct Board {
p: esp_hal::peripherals::Peripherals,
}
@@ -53,9 +58,15 @@ impl LoRaBoard for Board {
let radio = esp32s3::init_radio(spi_bus, p.GPIO8, p.GPIO12, p.GPIO14, p.GPIO13);
// Note: switches internal USB PHY from Serial-JTAG to OTG.
// espflash --monitor will stop working after this point.
let usb_inst = esp_hal::otg_fs::Usb::new(p.USB0, p.GPIO20, p.GPIO19);
static EP_OUT_BUF: StaticCell<[u8; 1024]> = StaticCell::new();
let ep_out_buf = EP_OUT_BUF.init([0u8; 1024]);
let host = UsbParts {
driver: mcu::init_usb(p.USB0, p.GPIO20, p.GPIO19),
driver: esp_hal::otg_fs::asynch::Driver::new(
usb_inst,
ep_out_buf,
esp_hal::otg_fs::asynch::Config::default(),
),
};
// SSD1306 display reset: pulse GPIO21 low->high before I2C init