sbgECom Library  4.0.1987-stable
C library to 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 
71 SBG_INLINE void sbgSplitBufferInitForRead(SbgSplitBuffer *pSplitBuffer, const void *pBuffer, size_t bufferSize, size_t subBufferSize)
72 {
73  //
74  // Test input arguments
75  //
76  assert(pSplitBuffer);
77 
78  //
79  // Initialize split buffer parameters
80  //
81  pSplitBuffer->pLinkedBuffer = (uint8_t*)pBuffer;
82  pSplitBuffer->linkedBufferSize = bufferSize;
83  pSplitBuffer->subBufferSize = subBufferSize;
84 
85  //
86  // Compute sub buffer number
87  //
88  pSplitBuffer->subBufferNbr = (bufferSize + (subBufferSize - 1)) / subBufferSize;
89 }
90 
98 SBG_INLINE void sbgSplitBufferInitForWrite(SbgSplitBuffer *pSplitBuffer, void *pBuffer, size_t bufferSize, size_t subBufferSize)
99 {
100  //
101  // Test input arguments
102  //
103  assert(pSplitBuffer);
104 
105  //
106  // Initialize split buffer parameters
107  //
108  pSplitBuffer->pLinkedBuffer = (uint8_t*)pBuffer;
109  pSplitBuffer->linkedBufferSize = bufferSize;
110  pSplitBuffer->subBufferSize = subBufferSize;
111 
112  //
113  // Compute sub buffer number
114  //
115  pSplitBuffer->subBufferNbr = (bufferSize + (subBufferSize - 1)) / subBufferSize;
116 }
117 
124 {
125  //
126  // Test input arguments
127  //
128  assert(pSplitBuffer);
129 
130  //
131  // Return subBufferNbr parameter
132  //
133  return pSplitBuffer->subBufferNbr;
134 }
135 
142 SBG_INLINE void *sbgSplitBufferGetSubBuffer(const SbgSplitBuffer *pSplitBuffer, size_t subBufferIdx)
143 {
144  //
145  // Test input arguments
146  //
147  assert(pSplitBuffer);
148 
149  //
150  // Test input parameters
151  //
152  if (subBufferIdx < pSplitBuffer->subBufferNbr)
153  {
154  //
155  // Return pointer to buffer
156  //
157  return ((uint8_t*)pSplitBuffer->pLinkedBuffer + pSplitBuffer->subBufferSize*subBufferIdx);
158  }
159  else
160  {
161  //
162  // Invalid index
163  //
164  return NULL;
165  }
166 }
167 
174 SBG_INLINE size_t sbgSplitBufferGetSubBufferOffset(const SbgSplitBuffer *pSplitBuffer, size_t subBufferIdx)
175 {
176  //
177  // Test input arguments
178  //
179  assert(pSplitBuffer);
180 
181  //
182  // Test input parameters
183  //
184  if (subBufferIdx < pSplitBuffer->subBufferNbr)
185  {
186  //
187  // Return pointer to buffer
188  //
189  return (pSplitBuffer->subBufferSize * subBufferIdx);
190  }
191  else
192  {
193  //
194  // Invalid index
195  //
196  return 0;
197  }
198 }
199 
206 SBG_INLINE size_t sbgSplitBufferGetSubBufferSize(const SbgSplitBuffer *pSplitBuffer, size_t subBufferIdx)
207 {
208  size_t subBufferSize = 0;
209 
210  //
211  // Test input arguments
212  //
213  assert(pSplitBuffer);
214 
215  //
216  // Test input parameters
217  //
218  if (pSplitBuffer->subBufferNbr > 0)
219  {
220  //
221  // Test that the sub buffer index is not the last one
222  //
223  if (subBufferIdx < (pSplitBuffer->subBufferNbr-1))
224  {
225  //
226  // We can just return the sub buffer size because it's not the last sub buffer
227  //
228  subBufferSize = pSplitBuffer->subBufferSize;
229  }
230  else if (subBufferIdx == (pSplitBuffer->subBufferNbr-1) )
231  {
232  //
233  // It's the last sub buffer so return the remaining size
234  //
235  subBufferSize = pSplitBuffer->linkedBufferSize - (subBufferIdx * pSplitBuffer->subBufferSize);
236  }
237  }
238 
239  //
240  // Return computed size
241  //
242  return subBufferSize;
243 }
244 
245 //----------------------------------------------------------------------//
246 //- Footer (close extern C block) -//
247 //----------------------------------------------------------------------//
248 #ifdef __cplusplus
249 }
250 #endif
251 
252 #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:123
SBG_INLINE void sbgSplitBufferInitForRead(SbgSplitBuffer *pSplitBuffer, const void *pBuffer, size_t bufferSize, size_t subBufferSize)
Definition: sbgSplitBuffer.h:71
SBG_INLINE size_t sbgSplitBufferGetSubBufferSize(const SbgSplitBuffer *pSplitBuffer, size_t subBufferIdx)
Definition: sbgSplitBuffer.h:206
SBG_INLINE void * sbgSplitBufferGetSubBuffer(const SbgSplitBuffer *pSplitBuffer, size_t subBufferIdx)
Definition: sbgSplitBuffer.h:142
SBG_INLINE void sbgSplitBufferInitForWrite(SbgSplitBuffer *pSplitBuffer, void *pBuffer, size_t bufferSize, size_t subBufferSize)
Definition: sbgSplitBuffer.h:98
struct _SbgSplitBuffer SbgSplitBuffer
SBG_INLINE size_t sbgSplitBufferGetSubBufferOffset(const SbgSplitBuffer *pSplitBuffer, size_t subBufferIdx)
Definition: sbgSplitBuffer.h:174
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