@@ -29,6 +29,12 @@ class UsbUart : public modm::Uart
29
29
return tud_cdc_n_connected (ITF);
30
30
}
31
31
32
+ static inline void
33
+ flushWriteBuffer ()
34
+ {
35
+ tud_cdc_n_write_flush (ITF);
36
+ }
37
+
32
38
static inline bool
33
39
write (uint8_t c)
34
40
{
@@ -45,22 +51,26 @@ class UsbUart : public modm::Uart
45
51
return rc;
46
52
}
47
53
48
- static inline void
49
- flushWriteBuffer ()
54
+ static inline bool
55
+ isWriteFinished ()
50
56
{
51
- tud_cdc_n_write_flush (ITF );
57
+ return not transmitBufferSize ( );
52
58
}
53
59
54
60
static inline bool
55
61
read (uint8_t & c)
56
62
{
57
- return tud_cdc_n_read (ITF, &c, sizeof (uint8_t ));
63
+ if (receiveBufferSize ())
64
+ return tud_cdc_n_read (ITF, &c, sizeof (uint8_t ));
65
+ return false ;
58
66
}
59
67
60
68
static inline std::size_t
61
69
read (uint8_t *data, std::size_t length)
62
70
{
63
- return tud_cdc_n_read (ITF, data, length);
71
+ if (receiveBufferSize ())
72
+ return tud_cdc_n_read (ITF, data, length);
73
+ return 0 ;
64
74
}
65
75
66
76
static inline std::size_t
@@ -69,11 +79,37 @@ class UsbUart : public modm::Uart
69
79
return tud_cdc_n_available (ITF);
70
80
}
71
81
82
+ static inline std::size_t
83
+ discardReceiveBuffer ()
84
+ {
85
+ const std::size_t rxsize = receiveBufferSize ();
86
+ tud_cdc_n_read_flush (ITF);
87
+ return rxsize;
88
+ }
89
+
72
90
static inline std::size_t
73
91
transmitBufferSize ()
74
92
{
75
93
return tud_cdc_n_write_available (ITF);
76
94
}
95
+
96
+ static inline std::size_t
97
+ discardTransmitBuffer ()
98
+ {
99
+ const std::size_t txsize = transmitBufferSize ();
100
+ tud_cdc_n_write_clear (ITF);
101
+ return txsize;
102
+ }
103
+
104
+ static inline bool
105
+ hasError ()
106
+ {
107
+ return false ;
108
+ }
109
+
110
+ static inline void
111
+ clearError ()
112
+ {}
77
113
};
78
114
79
115
using UsbUart0 = UsbUart<0 >;
0 commit comments