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}