sbgECom Library  5.1.708-stable
Interface SBG Systems IMU/AHRS/INS
sbgSplitBuffer.h
Go to the documentation of this file.
1 
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
42 extern "C" {
43 #endif
44 
45 //----------------------------------------------------------------------//
46 //- Structs definitions -//
47 //----------------------------------------------------------------------//
48 
52 typedef struct _SbgSplitBuffer
53 {
54  uint8_t *pLinkedBuffer;
56  size_t subBufferSize;
57  size_t subBufferNbr;
59 
60 //----------------------------------------------------------------------//
61 //- Public methods definitions -//
62 //----------------------------------------------------------------------//
63 
72 SBG_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 
100 SBG_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 
146 SBG_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 
179 SBG_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 
212 SBG_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 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 * sbgSplitBufferGetSubBuffer(const SbgSplitBuffer *pSplitBuffer, size_t subBufferIdx)
Definition: sbgSplitBuffer.h:146
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