iLLD_TC27xC
1.0
Ifx_CircularBuffer.c
Go to the documentation of this file.
1
/**
2
* \file Ifx_CircularBuffer.c
3
* \brief Circular buffer functions in C language.
4
*
5
* \version iLLD_0_1_0_10
6
* \copyright Copyright (c) 2013 Infineon Technologies AG. All rights reserved.
7
*
8
*
9
* IMPORTANT NOTICE
10
*
11
*
12
* Infineon Technologies AG (Infineon) is supplying this file for use
13
* exclusively with Infineon's microcontroller products. This file can be freely
14
* distributed within development tools that are supporting such microcontroller
15
* products.
16
*
17
* THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED
18
* OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
19
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
20
* INFINEON SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL,
21
* OR CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
22
*
23
*/
24
25
#include "
Ifx_CircularBuffer.h
"
26
27
#if (IFX_CFG_CIRCULARBUFFER_C)
28
29
uint32
Ifx_CircularBuffer_get32
(
Ifx_CircularBuffer
*buffer)
30
{
31
uint32
data = ((
uint32
*)buffer->
base
)[buffer->
index
];
32
33
buffer->
index
+= 4;
34
35
if
(buffer->
index
>= buffer->
length
)
36
{
37
buffer->
index
= 0;
38
}
39
40
return
data;
41
}
42
43
44
uint16
Ifx_CircularBuffer_get16
(
Ifx_CircularBuffer
*buffer)
45
{
46
uint16
data = ((
uint16
*)buffer->
base
)[buffer->
index
];
47
48
buffer->
index
+= 2;
49
50
if
(buffer->
index
>= buffer->
length
)
51
{
52
buffer->
index
= 0;
53
}
54
55
return
data;
56
}
57
58
59
/** \brief Add a 32 bit value to the circular buffer, and post-increment the circular buffer pointer
60
*
61
* \param buffer Specifies circular buffer.
62
* \param data Specifies value to be added to the buffer.
63
*
64
* \return None.
65
*/
66
void
Ifx_CircularBuffer_addDataIncr
(
Ifx_CircularBuffer
*buffer,
uint32
data)
67
{
68
((
uint32
*)buffer->
base
)[buffer->
index
] = data;
69
buffer->
index
+= 4;
70
71
if
(buffer->
index
>= buffer->
length
)
72
{
73
buffer->
index
= 0;
74
}
75
}
76
77
78
void
*
Ifx_CircularBuffer_read8
(
Ifx_CircularBuffer
*buffer,
void
*data,
Ifx_SizeT
count)
79
{
80
uint8
*Dest = (
uint8
*)data;
81
82
do
83
{
84
count--;
85
*Dest = ((
uint8
*)buffer->
base
)[buffer->
index
];
86
Dest = &Dest[1];
87
buffer->
index
++;
88
89
if
(buffer->
index
>= buffer->
length
)
90
{
91
buffer->
index
= 0;
92
}
93
}
while
(count > 0);
94
95
return
Dest;
96
}
97
98
99
void
*
Ifx_CircularBuffer_read32
(
Ifx_CircularBuffer
*buffer,
void
*data,
Ifx_SizeT
count)
100
{
101
uint32
*Dest = (
uint32
*)data;
102
uint8
*base = buffer->
base
;
103
104
do
105
{
106
*Dest = *((
uint32
*)(&base[buffer->
index
]));
107
Dest = &Dest[1];
108
buffer->
index
= buffer->
index
+ 4;
109
110
if
(buffer->
index
>= buffer->
length
)
111
{
112
buffer->
index
= 0;
113
}
114
115
count--;
116
}
while
(count > 0);
117
118
return
Dest;
119
}
120
121
122
const
void
*
Ifx_CircularBuffer_write8
(
Ifx_CircularBuffer
*buffer,
const
void
*data,
Ifx_SizeT
count)
123
{
124
const
uint8
*source = (
const
uint8
*)data;
125
126
do
127
{
128
count--;
129
((
uint8
*)buffer->
base
)[buffer->
index
] = *source;
130
source = &source[1];
131
buffer->
index
++;
132
133
if
(buffer->
index
>= buffer->
length
)
134
{
135
buffer->
index
= 0;
136
}
137
}
while
(count > 0);
138
139
return
source;
140
}
141
142
143
const
void
*
Ifx_CircularBuffer_write32
(
Ifx_CircularBuffer
*buffer,
const
void
*data,
Ifx_SizeT
count)
144
{
145
const
uint32
*source = (
const
uint32
*)data;
146
uint8
*base = buffer->
base
;
147
148
do
149
{
150
*((
uint32
*)(&base[buffer->
index
])) = *source;
151
source = &source[1];
152
buffer->
index
= buffer->
index
+ 4;
153
154
if
(buffer->
index
>= buffer->
length
)
155
{
156
buffer->
index
= 0;
157
}
158
159
count--;
160
}
while
(count > 0);
161
162
return
source;
163
}
164
165
166
#endif
home
mclld
Libraries
release
iLLD_0_1_0_10
src
ifx
TC27xC
_Lib
DataHandling
Ifx_CircularBuffer.c
Generated by
1.8.4