pub struct PollingParameterNumberMessageScanner { /* private fields */ }
Expand description
Scanner for detecting (N)RPN messages in a stream of short messages with polling.
Supports the following message sequences (x
and y
represent the bytes that make up the
parameter number, MSB represents either a data entry MSB or an increment/decrement value):
[x, y, MSB]
: Interpreted as 7-bit data entry or increment/decrement message.[x, y, MSB, LSB]
: Interpreted as 14-bit data entry message.[x, y, LSB, MSB]
: Interpreted as 14-bit data entry message.[x, y, MSB, MSB, ...]
: Interpreted as 7-bit data entry or increment/decrement messages.[x, y, MSB, LSB, MSB, LSB, ...]
: Interpreted as 14-bit data entry messages.[x, y, MSB, LSB, LSB, ...]
: Interpreted as 14-bit data entry messages.
Please note that this requires invoking the poll
method on a regular basis because a
timeout is used to wait for potentially relevant messages that might arrive a bit later.
Example
use helgoboss_midi::test_util::{control_change, channel, u7, u14};
use helgoboss_midi::{ParameterNumberMessage, PollingParameterNumberMessageScanner};
use std::time::Duration;
let mut scanner = PollingParameterNumberMessageScanner::new(Duration::from_millis(0));
let result_1 = scanner.feed(&control_change(2, 99, 3));
let result_2 = scanner.feed(&control_change(2, 98, 37));
let result_3 = scanner.feed(&control_change(2, 6, 126));
let result_4 = scanner.poll(channel(2));
assert_eq!(result_1, [None, None]);
assert_eq!(result_2, [None, None]);
assert_eq!(result_3, [None, None]);
assert_eq!(
result_4,
Some(ParameterNumberMessage::non_registered_7_bit(
channel(2),
u14(421),
u7(126)
))
);
Implementations
sourceimpl PollingParameterNumberMessageScanner
impl PollingParameterNumberMessageScanner
sourcepub fn new(timeout: Duration) -> PollingParameterNumberMessageScanner
pub fn new(timeout: Duration) -> PollingParameterNumberMessageScanner
Creates a new scanner.
The timeout determines how long to wait for the second value byte.
sourcepub fn feed(
&mut self,
msg: &impl ShortMessage
) -> [Option<ParameterNumberMessage>; 2]
pub fn feed(
&mut self,
msg: &impl ShortMessage
) -> [Option<ParameterNumberMessage>; 2]
Feeds the scanner a single short message.
Returns zero, one or two (N)RPN messages. Two if the scanner was currently waiting for a data entry LSB (after receiving an MSB) and encountering a data increment or decrement. In this case we have two complete messages to emit.
sourcepub fn poll(&mut self, channel: Channel) -> Option<ParameterNumberMessage>
pub fn poll(&mut self, channel: Channel) -> Option<ParameterNumberMessage>
Returns the (N)RPN message as soon as the timeout of waiting for the second value message has been exceeded.
Trait Implementations
sourceimpl Clone for PollingParameterNumberMessageScanner
impl Clone for PollingParameterNumberMessageScanner
sourcefn clone(&self) -> PollingParameterNumberMessageScanner
fn clone(&self) -> PollingParameterNumberMessageScanner
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl Default for PollingParameterNumberMessageScanner
impl Default for PollingParameterNumberMessageScanner
sourcefn default() -> PollingParameterNumberMessageScanner
fn default() -> PollingParameterNumberMessageScanner
Returns the “default value” for a type. Read more
sourceimpl PartialEq<PollingParameterNumberMessageScanner> for PollingParameterNumberMessageScanner
impl PartialEq<PollingParameterNumberMessageScanner> for PollingParameterNumberMessageScanner
sourcefn eq(&self, other: &PollingParameterNumberMessageScanner) -> bool
fn eq(&self, other: &PollingParameterNumberMessageScanner) -> bool
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
sourcefn ne(&self, other: &PollingParameterNumberMessageScanner) -> bool
fn ne(&self, other: &PollingParameterNumberMessageScanner) -> bool
This method tests for !=
.
impl Copy for PollingParameterNumberMessageScanner
impl Eq for PollingParameterNumberMessageScanner
impl StructuralEq for PollingParameterNumberMessageScanner
impl StructuralPartialEq for PollingParameterNumberMessageScanner
Auto Trait Implementations
impl RefUnwindSafe for PollingParameterNumberMessageScanner
impl Send for PollingParameterNumberMessageScanner
impl Sync for PollingParameterNumberMessageScanner
impl Unpin for PollingParameterNumberMessageScanner
impl UnwindSafe for PollingParameterNumberMessageScanner
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more