sbgECom Library  5.2.590-stable
Interface SBG Systems IMU/AHRS/INS
Loading...
Searching...
No Matches
sbgSplitBuffer.h
Go to the documentation of this file.
1
32
33#ifndef SBG_SPLIT_BUFFER_H
34#define SBG_SPLIT_BUFFER_H
35
36#include <sbgCommon.h>
37
38//----------------------------------------------------------------------//
39//- Header (open extern C block) -//
40//----------------------------------------------------------------------//
41#ifdef __cplusplus
42extern "C" {
43#endif
44
45//----------------------------------------------------------------------//
46//- Structs definitions -//
47//----------------------------------------------------------------------//
48
59
60//----------------------------------------------------------------------//
61//- Public methods definitions -//
62//----------------------------------------------------------------------//
63
72SBG_INLINE void sbgSplitBufferInitForRead(SbgSplitBuffer *pSplitBuffer, const void *pBuffer, size_t bufferSize, size_t subBufferSize)
73{
74 //
75 // Test input arguments
76 //
77 assert(pSplitBuffer);
78
79 //
80 // Initialize split buffer parameters
81 //
82 pSplitBuffer->pLinkedBuffer = (uint8_t*)pBuffer;
83 pSplitBuffer->linkedBufferSize = bufferSize;
84 pSplitBuffer->subBufferSize = subBufferSize;
85
86 //
87 // Compute sub buffer number
88 //
89 pSplitBuffer->subBufferNbr = (bufferSize + (subBufferSize - 1)) / subBufferSize;
90}
91
100SBG_INLINE void sbgSplitBufferInitForWrite(SbgSplitBuffer *pSplitBuffer, void *pBuffer, size_t bufferSize, size_t subBufferSize)
101{
102 //
103 // Test input arguments
104 //
105 assert(pSplitBuffer);
106
107 //
108 // Initialize split buffer parameters
109 //
110 pSplitBuffer->pLinkedBuffer = (uint8_t*)pBuffer;
111 pSplitBuffer->linkedBufferSize = bufferSize;
112 pSplitBuffer->subBufferSize = subBufferSize;
113
114 //
115 // Compute sub buffer number
116 //
117 pSplitBuffer->subBufferNbr = (bufferSize + (subBufferSize - 1)) / subBufferSize;
118}
119
127{
128 //
129 // Test input arguments
130 //
131 assert(pSplitBuffer);
132
133 //
134 // Return subBufferNbr parameter
135 //
136 return pSplitBuffer->subBufferNbr;
137}
138
146SBG_INLINE void *sbgSplitBufferGetSubBuffer(const SbgSplitBuffer *pSplitBuffer, size_t subBufferIdx)
147{
148 //
149 // Test input arguments
150 //
151 assert(pSplitBuffer);
152
153 //
154 // Test input parameters
155 //
156 if (subBufferIdx < pSplitBuffer->subBufferNbr)
157 {
158 //
159 // Return pointer to buffer
160 //
161 return ((uint8_t*)pSplitBuffer->pLinkedBuffer + pSplitBuffer->subBufferSize*subBufferIdx);
162 }
163 else
164 {
165 //
166 // Invalid index
167 //
168 return NULL;
169 }
170}
171
179SBG_INLINE size_t sbgSplitBufferGetSubBufferOffset(const SbgSplitBuffer *pSplitBuffer, size_t subBufferIdx)
180{
181 //
182 // Test input arguments
183 //
184 assert(pSplitBuffer);
185
186 //
187 // Test input parameters
188 //
189 if (subBufferIdx < pSplitBuffer->subBufferNbr)
190 {
191 //
192 // Return pointer to buffer
193 //
194 return (pSplitBuffer->subBufferSize * subBufferIdx);
195 }
196 else
197 {
198 //
199 // Invalid index
200 //
201 return 0;
202 }
203}
204
212SBG_INLINE size_t sbgSplitBufferGetSubBufferSize(const SbgSplitBuffer *pSplitBuffer, size_t subBufferIdx)
213{
214 size_t subBufferSize = 0;
215
216 //
217 // Test input arguments
218 //
219 assert(pSplitBuffer);
220
221 //
222 // Test input parameters
223 //
224 if (pSplitBuffer->subBufferNbr > 0)
225 {
226 //
227 // Test that the sub buffer index is not the last one
228 //
229 if (subBufferIdx < (pSplitBuffer->subBufferNbr-1))
230 {
231 //
232 // We can just return the sub buffer size because it's not the last sub buffer
233 //
234 subBufferSize = pSplitBuffer->subBufferSize;
235 }
236 else if (subBufferIdx == (pSplitBuffer->subBufferNbr-1) )
237 {
238 //
239 // It's the last sub buffer so return the remaining size
240 //
241 subBufferSize = pSplitBuffer->linkedBufferSize - (subBufferIdx * pSplitBuffer->subBufferSize);
242 }
243 }
244
245 //
246 // Return computed size
247 //
248 return subBufferSize;
249}
250
251//----------------------------------------------------------------------//
252//- Footer (close extern C block) -//
253//----------------------------------------------------------------------//
254#ifdef __cplusplus
255}
256#endif
257
258#endif // SBG_SPLIT_BUFFER_H
Main header for the SBG Systems common C library.
#define SBG_INLINE
Definition sbgDefines.h:227
SBG_INLINE size_t sbgSplitBufferGetSubBufferNbr(const SbgSplitBuffer *pSplitBuffer)
Definition sbgSplitBuffer.h:126
SBG_INLINE void * sbgSplitBufferGetSubBuffer(const SbgSplitBuffer *pSplitBuffer, size_t subBufferIdx)
Definition sbgSplitBuffer.h:146
SBG_INLINE void sbgSplitBufferInitForRead(SbgSplitBuffer *pSplitBuffer, const void *pBuffer, size_t bufferSize, size_t subBufferSize)
Definition sbgSplitBuffer.h:72
SBG_INLINE size_t sbgSplitBufferGetSubBufferSize(const SbgSplitBuffer *pSplitBuffer, size_t subBufferIdx)
Definition sbgSplitBuffer.h:212
SBG_INLINE void sbgSplitBufferInitForWrite(SbgSplitBuffer *pSplitBuffer, void *pBuffer, size_t bufferSize, size_t subBufferSize)
Definition sbgSplitBuffer.h:100
struct _SbgSplitBuffer SbgSplitBuffer
SBG_INLINE size_t sbgSplitBufferGetSubBufferOffset(const SbgSplitBuffer *pSplitBuffer, size_t subBufferIdx)
Definition sbgSplitBuffer.h:179
Definition sbgSplitBuffer.h:53
size_t subBufferNbr
Definition sbgSplitBuffer.h:57
uint8_t * pLinkedBuffer
Definition sbgSplitBuffer.h:54
size_t linkedBufferSize
Definition sbgSplitBuffer.h:55
size_t subBufferSize
Definition sbgSplitBuffer.h:56