@@ -67,32 +67,34 @@ void CDC_TransmitQueue_Enqueue(CDC_TransmitQueue_TypeDef *queue,
6767{
6868uint32_t sizeToEnd = CDC_TRANSMIT_QUEUE_BUFFER_SIZE - queue -> write ;
6969if (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{
8382if (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+
8891queue -> reserved = * size ;
8992return & 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
113115if (read <=queue -> write ) {
114116// if write is limited only by buffer size.
115117if (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
118120return 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
121123queue -> length = queue -> write ;
122124queue -> write = 0 ;
123125return 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
128130return 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{
137139queue -> write += size ;
138140if (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 ;
153155if (write >=queue -> read ) {
154156return 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 ;
164166if (queue -> read == length ) {
165167queue -> 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 ;
182184if (queue -> read >=length ) {
183185queue -> read = 0 ;
184186 }
@@ -188,12 +190,12 @@ int CDC_ReceiveQueue_Peek(CDC_ReceiveQueue_TypeDef *queue)
188190return 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
198200if (queue -> read >=length ) {
199201queue -> 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
225227if (queue -> read >=length ) {
226228queue -> read = 0 ;
@@ -235,10 +237,10 @@ bool CDC_ReceiveQueue_ReadUntil(CDC_ReceiveQueue_TypeDef *queue,
235237 }
236238
237239uint8_t * start = & queue -> buffer [queue -> read ];
238- for (uint16_t i = 0 ;i < size ;i ++ ) {
240+ for (uint32_t i = 0 ;i < size ;i ++ ) {
239241uint8_t ch = start [i ];
240242if (ch == terminator ) {
241- queue -> read += (uint16_t )(i + 1 );
243+ queue -> read += (uint32_t )(i + 1 );
242244if (queue -> read >=length ) {
243245queue -> read = 0 ;
244246 }