Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

format and simplify oranization #1

Open
wants to merge 19 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,6 @@ license = "MIT"

[dependencies]
embedded-hal = "0.2.2"
nb = "1.0.0"
usb-device = "0.2.3"
midi-convert = "0.1.1"
midi-types = "0.1.4"

[dependencies.num_enum]
version = "0.5.1"
default-features = false
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ fn main() -> ! {
let mut buffer = [0; 64];

if let Ok(size) = midi.read(&mut buffer) {
let buffer_reader = MidiPacketBufferReader::new(&buffer, size);
let buffer_reader = MidiPacketBufferReader::new(&buffer[0..size]);
for packet in buffer_reader.into_iter() {
if let Ok(packet) = packet {
match packet.message {
Expand Down
66 changes: 35 additions & 31 deletions src/data/usb_midi/cable_number.rs → src/cable_number.rs
Original file line number Diff line number Diff line change
@@ -1,62 +1,66 @@
use core::convert::TryFrom;
use crate::data::byte::u4::U4;

/// The Cable Number (CN) is a value ranging from 0x0 to 0xF
/// indicating the number assignment of the Embedded MIDI Jack associated
/// The Cable Number (CN) is a value ranging from 0x0 to 0xF
/// indicating the number assignment of the Embedded MIDI Jack associated
/// with the endpoint that is transferring the data
#[derive(Debug,Clone,Copy,Eq, PartialEq)]
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
#[repr(u8)]
pub enum CableNumber {
Cable0 = 0x0, Cable1 = 0x1, Cable2 = 0x2, Cable3 = 0x3,
Cable4 = 0x4, Cable5 = 0x5, Cable6 = 0x6, Cable7 = 0x7,
Cable8 = 0x8, Cable9 = 0x9, Cable10 = 0xA, Cable11 = 0xB,
Cable12 = 0xC, Cable13 = 0xD, Cable14 = 0xE, Cable15 = 0xF
Cable0 = 0x0,
Cable1 = 0x1,
Cable2 = 0x2,
Cable3 = 0x3,
Cable4 = 0x4,
Cable5 = 0x5,
Cable6 = 0x6,
Cable7 = 0x7,
Cable8 = 0x8,
Cable9 = 0x9,
Cable10 = 0xA,
Cable11 = 0xB,
Cable12 = 0xC,
Cable13 = 0xD,
Cable14 = 0xE,
Cable15 = 0xF,
}

#[derive(Debug,Clone,Copy,Eq, PartialEq)]
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct InvalidCableNumber(u8);

impl TryFrom<u8> for CableNumber {
type Error = InvalidCableNumber;
fn try_from(value:u8) -> Result<Self,Self::Error> {
fn try_from(value: u8) -> Result<Self, Self::Error> {
match value {
x if x == CableNumber::Cable0 as u8 => Ok(CableNumber::Cable0),
x if x == CableNumber::Cable1 as u8 => Ok(CableNumber::Cable1),
x if x == CableNumber::Cable2 as u8 => Ok(CableNumber::Cable2),
x if x == CableNumber::Cable3 as u8 => Ok(CableNumber::Cable3),
x if x == CableNumber::Cable4 as u8 => Ok(CableNumber::Cable4),
x if x == CableNumber::Cable5 as u8 => Ok(CableNumber::Cable5),
x if x == CableNumber::Cable6 as u8 => Ok(CableNumber::Cable6),
x if x == CableNumber::Cable7 as u8 => Ok(CableNumber::Cable7),
x if x == CableNumber::Cable8 as u8 => Ok(CableNumber::Cable8),
x if x == CableNumber::Cable9 as u8 => Ok(CableNumber::Cable9),
x if x == CableNumber::Cable0 as u8 => Ok(CableNumber::Cable0),
x if x == CableNumber::Cable1 as u8 => Ok(CableNumber::Cable1),
x if x == CableNumber::Cable2 as u8 => Ok(CableNumber::Cable2),
x if x == CableNumber::Cable3 as u8 => Ok(CableNumber::Cable3),
x if x == CableNumber::Cable4 as u8 => Ok(CableNumber::Cable4),
x if x == CableNumber::Cable5 as u8 => Ok(CableNumber::Cable5),
x if x == CableNumber::Cable6 as u8 => Ok(CableNumber::Cable6),
x if x == CableNumber::Cable7 as u8 => Ok(CableNumber::Cable7),
x if x == CableNumber::Cable8 as u8 => Ok(CableNumber::Cable8),
x if x == CableNumber::Cable9 as u8 => Ok(CableNumber::Cable9),
x if x == CableNumber::Cable10 as u8 => Ok(CableNumber::Cable10),
x if x == CableNumber::Cable11 as u8 => Ok(CableNumber::Cable11),
x if x == CableNumber::Cable12 as u8 => Ok(CableNumber::Cable12),
x if x == CableNumber::Cable13 as u8 => Ok(CableNumber::Cable13),
x if x == CableNumber::Cable14 as u8 => Ok(CableNumber::Cable14),
x if x == CableNumber::Cable15 as u8 => Ok(CableNumber::Cable15),
_ => Err(InvalidCableNumber(value))
_ => Err(InvalidCableNumber(value)),
}
}

}

impl From<CableNumber> for u8{
fn from(value:CableNumber) -> u8 {
impl From<CableNumber> for u8 {
fn from(value: CableNumber) -> u8 {
value as u8
}
}

impl From<CableNumber> for U4{
fn from(value:CableNumber) -> U4 {
U4::from_overflowing_u8(u8::from(value))
}
}

#[cfg(test)]
mod tests {

use super::*;
macro_rules! cable_test {
($($id:ident:$value:expr,)*) => {
Expand Down
54 changes: 25 additions & 29 deletions src/data/usb_midi/code_index_number.rs → src/code_index_number.rs
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
use core::convert::TryFrom;
use crate::data::byte::u4::U4;
use crate::midi_types::MidiMessage;
use core::convert::TryFrom;

/// The Code Index Number(CIN) indicates the classification
/// The Code Index Number(CIN) indicates the classification
/// of the bytes in the MIDI_x fields
pub struct CodeIndexNumber(u8);
pub struct InvalidCodeIndexNumber(u8);

impl TryFrom<u8> for CodeIndexNumber {
type Error = InvalidCodeIndexNumber;
fn try_from(value:u8) -> Result<Self,Self::Error> {
fn try_from(value: u8) -> Result<Self, Self::Error> {
if value > 0xF {
Err(InvalidCodeIndexNumber(value))
} else {
Expand All @@ -18,52 +17,49 @@ impl TryFrom<u8> for CodeIndexNumber {
}
}

impl From<CodeIndexNumber> for U4{
fn from(value:CodeIndexNumber) -> U4{
U4::from_overflowing_u8(value.0)
impl From<CodeIndexNumber> for u8 {
fn from(value: CodeIndexNumber) -> u8 {
value.0
}
}



impl CodeIndexNumber {

/// Miscellaneous function codes. Reserved for future extensions
pub const MISC_FUNCTION : CodeIndexNumber = CodeIndexNumber(0x00);
pub const MISC_FUNCTION: CodeIndexNumber = CodeIndexNumber(0x00);
/// Cable events. Reserved for future expansion.
pub const CABLE_EVENTS : CodeIndexNumber = CodeIndexNumber(0x1);
pub const CABLE_EVENTS: CodeIndexNumber = CodeIndexNumber(0x1);
/// Two-byte System Common messages like MTC, SongSelect, etc.
pub const SYSTEM_COMMON_LEN2 :CodeIndexNumber = CodeIndexNumber(0x2);
pub const SYSTEM_COMMON_LEN2: CodeIndexNumber = CodeIndexNumber(0x2);
/// Three-byte System Common messages like SPP, etc.
pub const SYSTEM_COMMON_LEN3 :CodeIndexNumber = CodeIndexNumber(0x3);
pub const SYSTEM_COMMON_LEN3: CodeIndexNumber = CodeIndexNumber(0x3);
/// SysEx starts or continues
pub const SYSEX_STARTS : CodeIndexNumber = CodeIndexNumber(0x4);
pub const SYSEX_CONTINUES : CodeIndexNumber = CodeIndexNumber::SYSEX_STARTS;
pub const SYSEX_STARTS: CodeIndexNumber = CodeIndexNumber(0x4);
pub const SYSEX_CONTINUES: CodeIndexNumber = CodeIndexNumber::SYSEX_STARTS;
/// Single-byte System Common Message or SysEx ends with following single byte.
pub const SYSTEM_COMMON_LEN1 : CodeIndexNumber= CodeIndexNumber(0x5);
pub const SYSTEM_COMMON_LEN1: CodeIndexNumber = CodeIndexNumber(0x5);
/// SysEx ends with the following byte
pub const SYSEX_ENDS_NEXT1 :CodeIndexNumber = CodeIndexNumber::SYSTEM_COMMON_LEN1;
pub const SYSEX_ENDS_NEXT1: CodeIndexNumber = CodeIndexNumber::SYSTEM_COMMON_LEN1;
/// SysEx ends with following two bytes
pub const SYSEX_ENDS_NEXT2 : CodeIndexNumber = CodeIndexNumber(0x6);
pub const SYSEX_ENDS_NEXT2: CodeIndexNumber = CodeIndexNumber(0x6);
/// SysEx ends with following three bytes
pub const SYSEX_ENDS_NEXT3 : CodeIndexNumber = CodeIndexNumber(0x7);
pub const SYSEX_ENDS_NEXT3: CodeIndexNumber = CodeIndexNumber(0x7);
/// Note - Off
pub const NOTE_OFF : CodeIndexNumber = CodeIndexNumber(0x8);
pub const NOTE_OFF: CodeIndexNumber = CodeIndexNumber(0x8);
/// Note - On
pub const NOTE_ON : CodeIndexNumber = CodeIndexNumber(0x9);
pub const NOTE_ON: CodeIndexNumber = CodeIndexNumber(0x9);
/// Poly-KeyPress
pub const POLY_KEYPRESS : CodeIndexNumber = CodeIndexNumber(0xA);
pub const POLY_KEYPRESS: CodeIndexNumber = CodeIndexNumber(0xA);
/// Control Change
pub const CONTROL_CHANGE : CodeIndexNumber = CodeIndexNumber(0xB);
pub const CONTROL_CHANGE: CodeIndexNumber = CodeIndexNumber(0xB);
/// Program Change
pub const PROGRAM_CHANGE : CodeIndexNumber = CodeIndexNumber(0xC);
pub const PROGRAM_CHANGE: CodeIndexNumber = CodeIndexNumber(0xC);
/// Channel Pressure
pub const CHANNEL_PRESSURE : CodeIndexNumber = CodeIndexNumber(0xD);
pub const CHANNEL_PRESSURE: CodeIndexNumber = CodeIndexNumber(0xD);
/// Pitch Bend Change
pub const PITCHBEND_CHANGE : CodeIndexNumber = CodeIndexNumber(0xE);
pub const PITCHBEND_CHANGE: CodeIndexNumber = CodeIndexNumber(0xE);
/// Single Byte
pub const SINGLE_BYTE : CodeIndexNumber= CodeIndexNumber(0xF);
pub const SINGLE_BYTE: CodeIndexNumber = CodeIndexNumber(0xF);

pub fn find_from_message(value: &MidiMessage) -> CodeIndexNumber {
match value {
MidiMessage::NoteOn(..) => CodeIndexNumber::NOTE_ON,
Expand Down
1 change: 0 additions & 1 deletion src/data/byte/mod.rs

This file was deleted.

46 changes: 0 additions & 46 deletions src/data/byte/u4.rs

This file was deleted.

3 changes: 0 additions & 3 deletions src/data/mod.rs

This file was deleted.

16 changes: 0 additions & 16 deletions src/data/usb/constants.rs

This file was deleted.

1 change: 0 additions & 1 deletion src/data/usb/mod.rs

This file was deleted.

36 changes: 0 additions & 36 deletions src/data/usb_midi/midi_packet_reader.rs

This file was deleted.

4 changes: 0 additions & 4 deletions src/data/usb_midi/mod.rs

This file was deleted.

Loading