voided warranty

esp-hal 1.2.0 i2s repro

    let audio_data: &[u8] = [....]; // Raw Data
    let sample_rate = Rate::from_hz(16000);
    let data_format = Data16Channel16;

    println!("Setup DMA buffer");
    // let (_, _, mut tx_buffer, tx_descriptors) = esp_hal::dma_buffers!(0, 4 * 4092);
    let mut i2s_buffer = esp_hal::dma_tx_stream_buffer!(4092 * 4, 2048);

    let i2s = esp_hal::i2s::master::I2s::new(
        peripherals.I2S0,
        peripherals.DMA_CH1,
        esp_hal::i2s::master::TdmConfig::new_tdm_philips()
            .with_sample_rate(sample_rate)
            //.with_data_format(esp_hal::i2s::master::DataFormat::Data16Channel16)
            //.with_data_format(esp_hal::i2s::master::DataFormat::Data32Channel32)
            .with_data_format(data_format)
            .with_signal_loopback(true),
    )
    .unwrap()
    .into_async();
    let i2s = i2s.with_mclk(peripherals.GPIO19);

    let mut idx = 0;
    i2s_buffer.push_with(|buf| {
        for b in buf.iter_mut() {
            *b = audio_data[idx];
            idx += 1;

            if idx >= audio_data.len() {
                idx = 0;
            }
        }
        buf.len()
    });

    println!("audio start");

    es8311.set_output_volume(65).unwrap();
    let mut transaction = i2s_tx.write(i2s_buffer).ok().unwrap();
    transaction.wait_for_available_async().await.unwrap();
    let avail = transaction.available_bytes();
    let mut audio_written = 0;
    let audio_len = audio_data.len();
    while audio_written < audio_len {
        if avail > 0 {
            let end = if audio_written + avail > audio_len {
                audio_len
            } else {
                audio_written + avail
            };
            let written = transaction.push(&audio_data[audio_written..end]);
            audio_written += written;
        }
    }
    let (_res, _i2s_tx, _i2s_buffer) = transaction.wait_async().await;