Make Request constants public

Manually constructing a RawRequest is more convenient sometimes.
This commit is contained in:
David Hoppenbrouwers
2022-09-08 23:57:33 +02:00
parent c7f80c5737
commit 7f6eb97569

View File

@ -3,27 +3,6 @@
pub mod descriptor; pub mod descriptor;
#[allow(dead_code)]
const GET_STATUS: u8 = 0;
#[allow(dead_code)]
const CLEAR_FEATURE: u8 = 1;
#[allow(dead_code)]
const SET_FEATURE: u8 = 3;
#[allow(dead_code)]
const SET_ADDRESS: u8 = 5;
const GET_DESCRIPTOR: u8 = 6;
#[allow(dead_code)]
const SET_DESCRIPTOR: u8 = 7;
#[allow(dead_code)]
const GET_CONFIGURATION: u8 = 8;
const SET_CONFIGURATION: u8 = 9;
#[allow(dead_code)]
const GET_INTERFACE: u8 = 10;
#[allow(dead_code)]
const SET_INTERFACE: u8 = 11;
#[allow(dead_code)]
const SYNC_FRAME: u8 = 12;
#[derive(Debug)] #[derive(Debug)]
pub enum Request { pub enum Request {
GetDescriptor { ty: descriptor::GetDescriptor }, GetDescriptor { ty: descriptor::GetDescriptor },
@ -44,44 +23,49 @@ pub struct RawRequest {
} }
impl RawRequest { impl RawRequest {
pub fn direction_in(&self) -> bool {
self.request_type & request_type::DIR_IN != 0
}
}
mod request_type {
pub const DIR_OUT: u8 = 0 << 7; pub const DIR_OUT: u8 = 0 << 7;
pub const DIR_IN: u8 = 1 << 7; pub const DIR_IN: u8 = 1 << 7;
pub const TYPE_STANDARD: u8 = 0 << 5; pub const TYPE_STANDARD: u8 = 0 << 5;
#[allow(dead_code)]
pub const TYPE_CLASS: u8 = 1 << 5; pub const TYPE_CLASS: u8 = 1 << 5;
#[allow(dead_code)]
pub const TYPE_VENDOR: u8 = 2 << 5; pub const TYPE_VENDOR: u8 = 2 << 5;
pub const RECIPIENT_DEVICE: u8 = 0; pub const RECIPIENT_DEVICE: u8 = 0;
pub const RECIPIENT_INTERFACE: u8 = 1; pub const RECIPIENT_INTERFACE: u8 = 1;
#[allow(dead_code)]
pub const RECIPIENT_ENDPOINT: u8 = 2; pub const RECIPIENT_ENDPOINT: u8 = 2;
#[allow(dead_code)]
pub const RECIPIENT_OTHER: u8 = 3; pub const RECIPIENT_OTHER: u8 = 3;
pub const GET_STATUS: u8 = 0;
pub const CLEAR_FEATURE: u8 = 1;
pub const SET_FEATURE: u8 = 3;
pub const SET_ADDRESS: u8 = 5;
pub const GET_DESCRIPTOR: u8 = 6;
pub const SET_DESCRIPTOR: u8 = 7;
pub const GET_CONFIGURATION: u8 = 8;
pub const SET_CONFIGURATION: u8 = 9;
pub const GET_INTERFACE: u8 = 10;
pub const SET_INTERFACE: u8 = 11;
pub const SYNC_FRAME: u8 = 12;
pub fn direction_in(&self) -> bool {
self.request_type & Self::DIR_IN != 0
}
} }
impl Request { impl From<Request> for RawRequest {
pub fn into_raw(self) -> RawRequest { fn from(r: Request) -> Self {
use request_type::*;
let w_value = |ty, i| u16::from(ty) << 8 | u16::from(i); let w_value = |ty, i| u16::from(ty) << 8 | u16::from(i);
match self { match r {
Self::GetDescriptor { ty } => { Request::GetDescriptor { ty } => {
use descriptor::GetDescriptor::*; use descriptor::GetDescriptor::*;
RawRequest { RawRequest {
request_type: DIR_IN request_type: Self::DIR_IN
| TYPE_STANDARD | Self::TYPE_STANDARD
| match ty { | match ty {
Device | Configuration { .. } | String { .. } => RECIPIENT_DEVICE, Device | Configuration { .. } | String { .. } => Self::RECIPIENT_DEVICE,
Report => RECIPIENT_INTERFACE, Report => Self::RECIPIENT_INTERFACE,
}, },
request: GET_DESCRIPTOR, request: Self::GET_DESCRIPTOR,
value: match ty { value: match ty {
Device => w_value(descriptor::DEVICE, 0), Device => w_value(descriptor::DEVICE, 0),
Configuration { index } => w_value(descriptor::CONFIGURATION, index), Configuration { index } => w_value(descriptor::CONFIGURATION, index),
@ -91,9 +75,9 @@ impl Request {
index: 0, index: 0,
} }
} }
Self::SetConfiguration { value } => RawRequest { Request::SetConfiguration { value } => RawRequest {
request_type: DIR_OUT | TYPE_STANDARD | RECIPIENT_DEVICE, request_type: Self::DIR_OUT | Self::TYPE_STANDARD | Self::RECIPIENT_DEVICE,
request: SET_CONFIGURATION, request: Self::SET_CONFIGURATION,
value: value.into(), value: value.into(),
index: 0, index: 0,
}, },