# 0.18.0

*December 25, 2024*

## General

- New MCUs:
  - Add esp32p4 OTG highspeed support
  - Add stm32 u0, c0, h7rs
- Better support dcache, make sure all usb-transferred buffer are cache line aligned and occupy full cache line
- Build ARM IAR with CircleCI
- Improve HIL with `dual/host_info_to_device_cdc` optional for pico/pico2, enable dwc2 dma test

## API Changes

- Change signature of `tusb_init(rhport, tusb_rhport_init_t*)`, `tusb_init(void)` is now deprecated but still available for backward compatibility
- Add new `tusb_int_handler(rhport, in_isr)`
- Add time-related APIs: `tusb_time_millis_api()` and `tusb_time_delay_ms_api()` for non-RTOS, required for some ports/configuration

### New configuration macros

- `CFG_TUD/TUH_MEM_DCACHE_ENABLE` enable data cache sync for endpoint buffer
- `CFG_TUD/TUH_MEM_DCACHE_LINE_SIZE` set cache line size
- `CFG_TUD/TUH_DWC2_SLAVE_ENABLE` enable dwc2 slave mode
- `CFG_TUD/TUH_DWC2_DMA_ENABLE` enable dwc2 dma mode

## Controller Driver (DCD & HCD)

### DWC2

- Add DMA support for both device and host controller
- Add host driver support including: full/high speed, control/bulk/interrupt (CBI) transfer, split CBI i.e FS/LS attached via highspeed hub, hub support

### RP2

- implement `dcd_edpt_iso_alloc()` and `dcd_edpt_iso_activate()` for isochronous endpoint

### iMXRT1170

- support M4 core

## Device Stack

- Vendor Fix  class reset
- NCM fix recursions in `tud_network_recv_renew()`
- Audio fix align issue of `_audiod_fct.alt_setting`
- UVC support format frame based
- Change `dcd_dcache_()` return type from void to bool
- HID add Usage Table for Physical Input Device Page (0x0F)

## Host Stack

- Fix an duplicated attach issue which cause USBH Defer Attach until current enumeration complete message

## Contributors

Thanks to everyone who contributed to this release: @bollenn, @chintal, @DavidEGrayson, @GuavTek, @hathach, @HiFiPhile, @lijunru-hub, @Maerdl, @pschatzmann, @rgrr, @roma-jam, @shdeb, @shuffle2, @subsonicpulse, @tannewt, @UweBonnes, @YixingShen.
