@@ -67,32 +67,34 @@ void CDC_TransmitQueue_Enqueue(CDC_TransmitQueue_TypeDef *queue,
6767{
6868 uint32_t sizeToEnd = CDC_TRANSMIT_QUEUE_BUFFER_SIZE - queue -> write ;
6969 if (sizeToEnd > size ) {
70- memcpy (& queue -> buffer [ queue -> write ], & buffer [ 0 ] , size );
70+ memcpy (queue -> buffer + queue -> write , buffer , size );
7171 } else {
72- memcpy (& queue -> buffer [ queue -> write ], & buffer [ 0 ] , sizeToEnd );
73- memcpy (& queue -> buffer [ 0 ], & buffer [ sizeToEnd ] , size - sizeToEnd );
72+ memcpy (queue -> buffer + queue -> write , buffer , sizeToEnd );
73+ memcpy (queue -> buffer , buffer + sizeToEnd , size - sizeToEnd );
7474 }
75- queue -> write = (uint16_t )((queue -> write + size ) %
76- CDC_TRANSMIT_QUEUE_BUFFER_SIZE );
75+ queue -> write = (queue -> write + size ) % CDC_TRANSMIT_QUEUE_BUFFER_SIZE ;
7776}
7877
7978// Read flat block from queue biggest as possible, but max QUEUE_MAX_PACKET_SIZE
8079uint8_t * CDC_TransmitQueue_ReadBlock (CDC_TransmitQueue_TypeDef * queue ,
81- uint16_t * size )
80+ uint32_t * size )
8281{
8382 if (queue -> write >= queue -> read ) {
8483 * size = queue -> write - queue -> read ;
8584 } else {
8685 * size = CDC_TRANSMIT_QUEUE_BUFFER_SIZE - queue -> read ;
8786 }
87+ if (* size > CDC_TRANSMIT_MAX_BUFFER_SIZE ) {
88+ * size = CDC_TRANSMIT_MAX_BUFFER_SIZE ;
89+ }
90+
8891 queue -> reserved = * size ;
8992 return & queue -> buffer [queue -> read ];
9093}
9194
9295void CDC_TransmitQueue_CommitRead (CDC_TransmitQueue_TypeDef * queue )
9396{
94- queue -> read = (queue -> read + queue -> reserved ) %
95- CDC_TRANSMIT_QUEUE_BUFFER_SIZE ;
97+ queue -> read = (queue -> read + queue -> reserved ) % CDC_TRANSMIT_QUEUE_BUFFER_SIZE ;
9698}
9799
98100// Initialize read and write position of queue.
@@ -106,23 +108,23 @@ void CDC_ReceiveQueue_Init(CDC_ReceiveQueue_TypeDef *queue)
106108// Reserve block in queue and return pointer to it.
107109uint8_t * CDC_ReceiveQueue_ReserveBlock (CDC_ReceiveQueue_TypeDef * queue )
108110{
109- const uint16_t limit =
110- CDC_RECEIVE_QUEUE_BUFFER_SIZE - CDC_QUEUE_MAX_PACKET_SIZE ;
111- volatile uint16_t read = queue -> read ;
111+ const uint32_t limit =
112+ CDC_RECEIVE_QUEUE_BUFFER_SIZE - CDC_RECEIVE_MAX_BUFFER_SIZE ;
113+ volatile uint32_t read = queue -> read ;
112114
113115 if (read <= queue -> write ) {
114116 // if write is limited only by buffer size.
115117 if (queue -> write < limit || (queue -> write == limit && read > 0 )) {
116118 // if size in the rest of buffer is enough for full packet plus 1 byte
117119 // or if it tight enough and write position can be set to 0
118120 return queue -> buffer + queue -> write ;
119- } else if (read > CDC_QUEUE_MAX_PACKET_SIZE ) {
121+ } else if (read > CDC_RECEIVE_MAX_BUFFER_SIZE ) {
120122 // if size in the rest is not enough, but enough size in head
121123 queue -> length = queue -> write ;
122124 queue -> write = 0 ;
123125 return queue -> buffer + queue -> write ;
124126 }
125- } else if (queue -> write + CDC_QUEUE_MAX_PACKET_SIZE < read ) {
127+ } else if (queue -> write + CDC_RECEIVE_MAX_BUFFER_SIZE < read ) {
126128 // write position must be less than read position
127129 // after reading largest possible packet
128130 return queue -> buffer + queue -> write ;
@@ -132,7 +134,7 @@ uint8_t *CDC_ReceiveQueue_ReserveBlock(CDC_ReceiveQueue_TypeDef *queue)
132134
133135// Commits block in queue and make it available for reading
134136void CDC_ReceiveQueue_CommitBlock (CDC_ReceiveQueue_TypeDef * queue ,
135- uint16_t size )
137+ uint32_t size )
136138{
137139 queue -> write += size ;
138140 if (queue -> write >= queue -> length ) {
@@ -148,8 +150,8 @@ int CDC_ReceiveQueue_ReadSize(CDC_ReceiveQueue_TypeDef *queue)
148150{
149151 // reading length after write make guarantee, that length >= write
150152 // and determined reading size will be smaller or equal than real one.
151- volatile uint16_t write = queue -> write ;
152- volatile uint16_t length = queue -> length ;
153+ volatile uint32_t write = queue -> write ;
154+ volatile uint32_t length = queue -> length ;
153155 if (write >= queue -> read ) {
154156 return write - queue -> read ;
155157 }
@@ -159,8 +161,8 @@ int CDC_ReceiveQueue_ReadSize(CDC_ReceiveQueue_TypeDef *queue)
159161// Read one byte from queue.
160162int CDC_ReceiveQueue_Dequeue (CDC_ReceiveQueue_TypeDef * queue )
161163{
162- volatile uint16_t write = queue -> write ;
163- volatile uint16_t length = queue -> length ;
164+ volatile uint32_t write = queue -> write ;
165+ volatile uint32_t length = queue -> length ;
164166 if (queue -> read == length ) {
165167 queue -> read = 0 ;
166168 }
@@ -177,8 +179,8 @@ int CDC_ReceiveQueue_Dequeue(CDC_ReceiveQueue_TypeDef *queue)
177179// Peek byte from queue.
178180int CDC_ReceiveQueue_Peek (CDC_ReceiveQueue_TypeDef * queue )
179181{
180- volatile uint16_t write = queue -> write ;
181- volatile uint16_t length = queue -> length ;
182+ volatile uint32_t write = queue -> write ;
183+ volatile uint32_t length = queue -> length ;
182184 if (queue -> read >= length ) {
183185 queue -> read = 0 ;
184186 }
@@ -188,12 +190,12 @@ int CDC_ReceiveQueue_Peek(CDC_ReceiveQueue_TypeDef *queue)
188190 return queue -> buffer [queue -> read ];
189191}
190192
191- uint16_t CDC_ReceiveQueue_Read (CDC_ReceiveQueue_TypeDef * queue ,
192- uint8_t * buffer , uint16_t size )
193+ uint32_t CDC_ReceiveQueue_Read (CDC_ReceiveQueue_TypeDef * queue ,
194+ uint8_t * buffer , uint32_t size )
193195{
194- volatile uint16_t write = queue -> write ;
195- volatile uint16_t length = queue -> length ;
196- uint16_t available ;
196+ volatile uint32_t write = queue -> write ;
197+ volatile uint32_t length = queue -> length ;
198+ uint32_t available ;
197199
198200 if (queue -> read >= length ) {
199201 queue -> read = 0 ;
@@ -216,11 +218,11 @@ uint16_t CDC_ReceiveQueue_Read(CDC_ReceiveQueue_TypeDef *queue,
216218}
217219
218220bool CDC_ReceiveQueue_ReadUntil (CDC_ReceiveQueue_TypeDef * queue ,
219- uint8_t terminator , uint8_t * buffer , uint16_t size , uint16_t * fetched )
221+ uint8_t terminator , uint8_t * buffer , uint32_t size , uint32_t * fetched )
220222{
221- volatile uint16_t write = queue -> write ;
222- volatile uint16_t length = queue -> length ;
223- uint16_t available ;
223+ volatile uint32_t write = queue -> write ;
224+ volatile uint32_t length = queue -> length ;
225+ uint32_t available ;
224226
225227 if (queue -> read >= length ) {
226228 queue -> read = 0 ;
@@ -235,10 +237,10 @@ bool CDC_ReceiveQueue_ReadUntil(CDC_ReceiveQueue_TypeDef *queue,
235237 }
236238
237239 uint8_t * start = & queue -> buffer [queue -> read ];
238- for (uint16_t i = 0 ; i < size ; i ++ ) {
240+ for (uint32_t i = 0 ; i < size ; i ++ ) {
239241 uint8_t ch = start [i ];
240242 if (ch == terminator ) {
241- queue -> read += (uint16_t )(i + 1 );
243+ queue -> read += (uint32_t )(i + 1 );
242244 if (queue -> read >= length ) {
243245 queue -> read = 0 ;
244246 }
0 commit comments