pub struct EndDetector { /* private fields */ }Expand description
Track-end detection that survives real drive behaviour.
The naive check (“GetStat shows neither playing nor seeking N times in
a row, so the track ended”) advances spuriously on hardware: after a
Stop-then-Play restart the drive reports status 0x00 for one to two
seconds while the motor stops and re-spins, before the seek even
engages. An emulator answers instantly and never shows that window,
which is how the bug reached a burned disc.
This detector only ARMS once it has seen the drive actually playing the
current track; call rearm whenever a new Play
handshake begins. Feed it every GetStat poll; it answers true exactly
once per genuine end of track.
Implementations§
Source§impl EndDetector
impl EndDetector
Sourcepub const fn new(threshold: u8) -> Self
pub const fn new(threshold: u8) -> Self
threshold is how many consecutive quiet polls mean “ended”.
Sourcepub fn rearm(&mut self)
pub fn rearm(&mut self)
A new Play handshake is starting: disarm until the drive is seen playing again, so its stop/spin-up window cannot read as an end.
Sourcepub fn poll(&mut self, status: Option<u8>) -> bool
pub fn poll(&mut self, status: Option<u8>) -> bool
Feed one GetStat status byte (None for a command timeout).
Returns true when the current track has genuinely ended, once;
the detector disarms itself for the caller’s restart.
Sourcepub fn quiet_polls(&self) -> u8
pub fn quiet_polls(&self) -> u8
Consecutive quiet polls so far, for debug overlays.
Trait Implementations§
Source§impl Clone for EndDetector
impl Clone for EndDetector
Source§fn clone(&self) -> EndDetector
fn clone(&self) -> EndDetector
1.0.0§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for EndDetector
impl Debug for EndDetector
impl Copy for EndDetector
Auto Trait Implementations§
impl Freeze for EndDetector
impl RefUnwindSafe for EndDetector
impl Send for EndDetector
impl Sync for EndDetector
impl Unpin for EndDetector
impl UnsafeUnpin for EndDetector
impl UnwindSafe for EndDetector
Blanket Implementations§
§impl<T> Any for Twhere
T: 'static + ?Sized,
impl<T> Any for Twhere
T: 'static + ?Sized,
§impl<T> Borrow<T> for Twhere
T: ?Sized,
impl<T> Borrow<T> for Twhere
T: ?Sized,
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)