atsamd_hal/sercom/uart/
charsize.rs1use super::DataReg;
4use crate::typelevel::Sealed;
5use num_traits::{AsPrimitive, PrimInt};
6
7pub trait CharSize: Sealed {
13    type Word: 'static + PrimInt + AsPrimitive<DataReg> + Copy;
15}
16
17pub trait FixedCharSize: CharSize {
19    const SIZE: CharSizeEnum;
21}
22
23pub type Word<C> = <C as CharSize>::Word;
25
26pub enum FiveBit {}
28
29pub enum SixBit {}
31
32pub enum SevenBit {}
34
35pub enum EightBit {}
37
38pub enum NineBit {}
40
41pub enum DynCharSize {}
43
44#[repr(u8)]
46pub enum CharSizeEnum {
47    FiveBit = 0x5,
48    SixBit = 0x6,
49    SevenBit = 0x7,
50    EightBit = 0x0,
51    NineBit = 0x1,
52}
53
54impl Sealed for FiveBit {}
55impl CharSize for FiveBit {
56    type Word = u8;
57}
58impl FixedCharSize for FiveBit {
59    const SIZE: CharSizeEnum = CharSizeEnum::FiveBit;
60}
61
62impl Sealed for SixBit {}
63impl CharSize for SixBit {
64    type Word = u8;
65}
66impl FixedCharSize for SixBit {
67    const SIZE: CharSizeEnum = CharSizeEnum::SixBit;
68}
69
70impl Sealed for SevenBit {}
71impl CharSize for SevenBit {
72    type Word = u8;
73}
74impl FixedCharSize for SevenBit {
75    const SIZE: CharSizeEnum = CharSizeEnum::SevenBit;
76}
77
78impl Sealed for EightBit {}
79impl CharSize for EightBit {
80    type Word = u8;
81}
82impl FixedCharSize for EightBit {
83    const SIZE: CharSizeEnum = CharSizeEnum::EightBit;
84}
85
86impl Sealed for NineBit {}
87impl CharSize for NineBit {
88    type Word = u16;
89}
90impl FixedCharSize for NineBit {
91    const SIZE: CharSizeEnum = CharSizeEnum::NineBit;
92}
93
94impl Sealed for DynCharSize {}
95impl CharSize for DynCharSize {
96    type Word = u16;
97}