MCPcopy Create free account
hub / github.com/CANopenNode/CANopenNode / CO_fifo_write

Function CO_fifo_write

301/CO_fifo.c:78–116  ·  view source on GitHub ↗

Circular FIFO buffer example for fifo->bufSize = 7 (usable size = 6): ****** * * * 0 * * * * * * 1 rp==wp readPtr writePtr * * * 2 * * * * * *

Source from the content-addressed store, hash-verified

76 * buffer in buff in buff full *
77 ******************************************************************************/
78size_t
79CO_fifo_write(CO_fifo_t* fifo, const uint8_t* buf, size_t count, uint16_t* crc) {
80 size_t i;
81 uint8_t* bufDest;
82
83 if ((fifo == NULL) || (fifo->buf == NULL) || (buf == NULL)) {
84 return 0;
85 }
86
87 bufDest = &fifo->buf[fifo->writePtr];
88 for (i = count; i > 0U; i--) {
89 size_t writePtrNext = fifo->writePtr + 1U;
90
91 /* is circular buffer full */
92 if ((writePtrNext == fifo->readPtr) || ((writePtrNext == fifo->bufSize) && (fifo->readPtr == 0U))) {
93 break;
94 }
95
96 *bufDest = *buf;
97
98#if ((CO_CONFIG_FIFO)&CO_CONFIG_FIFO_CRC16_CCITT) != 0
99 if (crc != NULL) {
100 crc16_ccitt_single(crc, *buf);
101 }
102#endif
103
104 /* increment variables */
105 if (writePtrNext == fifo->bufSize) {
106 fifo->writePtr = 0;
107 bufDest = &fifo->buf[0];
108 } else {
109 fifo->writePtr++;
110 bufDest++;
111 }
112 buf++;
113 }
114
115 return count - i;
116}
117
118size_t
119CO_fifo_read(CO_fifo_t* fifo, uint8_t* buf, size_t count, bool_t* eof) {

Callers 14

CO_GTWA_writeFunction · 0.85
CO_fifo_cpyTok2U8Function · 0.85
CO_fifo_cpyTok2U16Function · 0.85
CO_fifo_cpyTok2U32Function · 0.85
CO_fifo_cpyTok2U64Function · 0.85
CO_fifo_cpyTok2I8Function · 0.85
CO_fifo_cpyTok2I16Function · 0.85
CO_fifo_cpyTok2I32Function · 0.85
CO_fifo_cpyTok2I64Function · 0.85
CO_fifo_cpyTok2R32Function · 0.85
CO_fifo_cpyTok2R64Function · 0.85
CO_SDOclient_receiveFunction · 0.85

Calls 1

crc16_ccitt_singleFunction · 0.85

Tested by

no test coverage detected