usb: do not allow converting Directon to/from u8

This commit is contained in:
Dario Nieuwenhuis 2022-09-26 12:35:33 +02:00
parent 7f7c14b7bc
commit f4f5824972
2 changed files with 3 additions and 10 deletions

View file

@ -8,20 +8,13 @@ use core::future::Future;
///
/// The values of the enum also match the direction bit used in endpoint addresses and control
/// request types.
#[repr(u8)]
#[derive(Copy, Clone, Eq, PartialEq, Debug)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum Direction {
/// Host to device (OUT)
Out = 0x00,
Out,
/// Device to host (IN)
In = 0x80,
}
impl From<u8> for Direction {
fn from(value: u8) -> Self {
unsafe { core::mem::transmute(value & 0x80) }
}
In,
}
/// USB endpoint transfer type. The values of this enum can be directly cast into `u8` to get the

View file

@ -106,7 +106,7 @@ impl Request {
let recipient = rt & 0b11111;
Request {
direction: rt.into(),
direction: if rt & 0x80 == 0 { Direction::Out } else { Direction::In },
request_type: unsafe { mem::transmute((rt >> 5) & 0b11) },
recipient: if recipient <= 3 {
unsafe { mem::transmute(recipient) }