Skip to content

Commit 5a4f5a7

Browse files
committed
Remove the incomplete transfer code
I've implemented it upstream in stm32-rs/synopsys-usb-otg#29
1 parent 2151c2f commit 5a4f5a7

File tree

1 file changed

+1
-64
lines changed

1 file changed

+1
-64
lines changed

src/uac/simple_stereo_output.rs

Lines changed: 1 addition & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -341,69 +341,6 @@ impl<B: UsbBus> UsbClass<B> for SimpleStereoOutput<'_, B> {
341341
}
342342

343343
fn poll(&mut self) {
344-
// The synopsys crate (and usb-device above that) doesn't support
345-
// reporting incomplete isochronous IN transfers. We've got to trap them
346-
// ourselves and follow the procedure from the reference manual to reset
347-
// the endpoint. Once that's done, we can immediately re-attempt to
348-
// transmit.
349-
//
350-
// Tokens Interrupts Action
351-
//
352-
// SOF
353-
// ...
354-
// IN 1
355-
// EP1 TXFE
356-
// ...
357-
// EOPF &
358-
// IISOIXFR Disable & reset endpoint;
359-
// Fill EP1 TX FIFO (write to endpoint)
360-
// ...
361-
// SOF
362-
// ...
363-
// IN Core transmits from TX FIFO
364-
// XFRC Fill EP1 TX FIFO (write to endpoint)
365-
// ...
366-
// SOF
367-
// ...
368-
// IN Core transmits from TX FIFO
369-
// XFRC Fill EP1 TX FIFO (write to endpoint)
370-
// ...
371-
//
372-
let otg_device = unsafe { &*pac::OTG_FS_DEVICE::ptr() };
373-
let otg_global = unsafe { &*pac::OTG_FS_GLOBAL::ptr() };
374-
if otg_global.gintsts.read().iisoixfr().bit_is_set() {
375-
defmt::warn!("GINTSTS: {:b}", otg_global.gintsts.read().bits());
376-
defmt::warn!("DIEPINT0: {:b}", otg_device.diepint0.read().bits());
377-
defmt::warn!("DIEPINT1: {:b}", otg_device.diepint1.read().bits());
378-
otg_global.gintsts.write(|w| w.iisoixfr().set_bit());
379-
380-
// TODO OTG FS DIEPINTx is meant to have NAK at bit 13
381-
//if otg_device.diepint1.read().nak().bit_is_set() {
382-
if otg_device.diepint1.read().bits().bitand(1 << 13) > 0 {
383-
// Set the endpoint to NAK mode
384-
otg_device.diepctl1.modify(|_,w| w.snak().set_bit());
385-
while otg_device.diepint1.read().inepne().bit_is_clear() {}
386-
387-
// Disable the endpoint
388-
otg_device.diepctl1.modify(|_,w| w
389-
.snak().set_bit()
390-
.epdis().set_bit()
391-
);
392-
while otg_device.diepint1.read().epdisd().bit_is_clear() {}
393-
otg_device.diepint1.modify(|_,w| w.epdisd().set_bit());
394-
assert!(otg_device.diepctl1.read().epena().bit_is_clear());
395-
assert!(otg_device.diepctl1.read().epdis().bit_is_clear());
396-
397-
// Flush the TX FIFO
398-
otg_global.grstctl.modify(|_,w| unsafe {
399-
w.txfflsh().set_bit().txfnum().bits(0x01)
400-
});
401-
while otg_global.grstctl.read().txfflsh().bit_is_set() {}
402-
403-
// We're ready to retry sending the feedback packet again
404-
self.audio_feedback_needed = true;
405-
}
406-
}
407344
}
408345

409346
fn control_out(&mut self, xfer: ControlOut<B>) {
@@ -456,9 +393,9 @@ impl<B: UsbBus> UsbClass<B> for SimpleStereoOutput<'_, B> {
456393
self.mute = xfer.data()[0] != 0;
457394
return xfer.accept().unwrap();
458395
} else if cs_request.control_selector == FU_VOLUME_CONTROL {
459-
defmt::info!("usb audio :: Set Volume = {:?}", xfer.data());
460396
let data = xfer.data();
461397
self.volume = i16::from_le_bytes([data[0], data[1]]);
398+
defmt::info!("usb audio :: Set Volume = {:?}", self.volume);
462399
return xfer.accept().unwrap();
463400
}
464401
}

0 commit comments

Comments
 (0)