usb_pd/
lib.rs

1#![no_std]
2
3use core::ops::Not;
4
5pub mod callback;
6pub mod header;
7pub mod message;
8pub mod pdo;
9pub mod sink;
10pub mod source;
11pub mod token;
12
13pub type Instant = fugit::Instant<u64, 1, 1000>;
14pub type Duration = fugit::Duration<u64, 1, 1000>;
15
16#[derive(Clone, Copy, PartialEq, Eq)]
17pub enum CcPin {
18    CC1,
19    CC2,
20}
21
22impl Not for CcPin {
23    type Output = CcPin;
24
25    fn not(self) -> Self::Output {
26        match self {
27            CcPin::CC1 => CcPin::CC2,
28            CcPin::CC2 => CcPin::CC1,
29        }
30    }
31}
32
33#[derive(Clone, Copy)]
34pub enum PowerRole {
35    Source,
36    Sink,
37}
38
39impl From<bool> for PowerRole {
40    fn from(value: bool) -> Self {
41        match value {
42            false => Self::Sink,
43            true => Self::Source,
44        }
45    }
46}
47
48impl From<PowerRole> for bool {
49    fn from(role: PowerRole) -> bool {
50        match role {
51            PowerRole::Sink => false,
52            PowerRole::Source => true,
53        }
54    }
55}
56
57#[derive(Clone, Copy)]
58pub enum DataRole {
59    Ufp,
60    Dfp,
61}
62
63impl From<bool> for DataRole {
64    fn from(value: bool) -> Self {
65        match value {
66            false => Self::Ufp,
67            true => Self::Dfp,
68        }
69    }
70}
71
72impl From<DataRole> for bool {
73    fn from(role: DataRole) -> bool {
74        match role {
75            DataRole::Ufp => false,
76            DataRole::Dfp => true,
77        }
78    }
79}