eRPC API Reference  Rev. 1.7.2
NXP Semiconductors
erpc_message_buffer.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014-2016, Freescale Semiconductor, Inc.
3  * Copyright 2016 NXP
4  * All rights reserved.
5  *
6  *
7  * SPDX-License-Identifier: BSD-3-Clause
8  */
9 
10 #ifndef _EMBEDDED_RPC__MESSAGE_BUFFER_H_
11 #define _EMBEDDED_RPC__MESSAGE_BUFFER_H_
12 
13 #include "erpc_common.h"
14 #include <cstddef>
15 #include <stdint.h>
16 
23 // Classes
26 
27 namespace erpc {
37 {
38 public:
45  : m_buf(0)
46  , m_len(0)
47  , m_used(0)
48  {
49  }
50 
59  MessageBuffer(uint8_t *buffer, uint16_t length)
60  : m_buf(buffer)
61  , m_len(length)
62  , m_used(0)
63  {
64  }
65 
74  void set(uint8_t *buffer, uint16_t length)
75  {
76  m_buf = buffer;
77  m_len = length;
78  m_used = 0;
79  }
80 
86  uint8_t *get(void) { return m_buf; }
87 
93  const uint8_t *get(void) const { return m_buf; }
94 
100  uint16_t getLength(void) const { return m_len; }
101 
107  uint16_t getUsed(void) const { return m_used; }
108 
114  uint16_t getFree(void) const { return m_len - m_used; }
115 
121  void setUsed(uint16_t used) { m_used = used; }
122 
132  erpc_status_t read(uint16_t offset, void *data, uint32_t length);
133 
143  erpc_status_t write(uint16_t offset, const void *data, uint32_t length);
144 
152  erpc_status_t copy(const MessageBuffer *other);
153 
159  void swap(MessageBuffer *other);
160 
164  operator uint8_t *(void) { return m_buf; }
165 
169  operator const uint8_t *(void)const { return m_buf; }
170 
176  uint8_t &operator[](int index) { return m_buf[index]; }
177 
183  const uint8_t &operator[](int index) const { return m_buf[index]; }
184 
188  class Cursor
189  {
190  public:
196  Cursor(void)
197  : m_buffer(NULL)
198  , m_pos(NULL)
199  , m_remaining(0)
200  {
201  }
202 
211  : m_buffer(buffer)
212  , m_pos(buffer->get())
213  , m_remaining(buffer->getLength())
214  {
215  }
216 
222  void set(MessageBuffer *buffer);
223 
231  uint8_t *get(void) { return m_pos; }
232 
240  const uint8_t *get(void) const { return m_pos; }
241 
247  uint16_t getRemaining(void) const { return m_remaining; }
248 
258  erpc_status_t read(void *data, uint32_t length);
259 
269  erpc_status_t write(const void *data, uint32_t length);
270 
274  operator uint8_t *(void) { return m_pos; }
275 
279  operator const uint8_t *(void)const { return m_pos; }
280 
286  uint8_t &operator[](int index) { return m_pos[index]; }
287 
293  const uint8_t &operator[](int index) const { return m_pos[index]; }
294 
302  Cursor &operator+=(uint16_t n)
303  {
304  m_pos += n;
305  m_remaining -= n;
306  return *this;
307  }
308 
316  Cursor &operator-=(uint16_t n)
317  {
318  m_pos -= n;
319  m_remaining += n;
320  return *this;
321  }
322 
329  {
330  ++m_pos;
331  --m_remaining;
332  return *this;
333  }
334 
341  {
342  --m_pos;
343  ++m_remaining;
344  return *this;
345  }
346 
347  private:
348  MessageBuffer *m_buffer;
349  uint8_t *m_pos;
350  uint16_t m_remaining;
351  };
352 
353 private:
354  uint8_t *volatile m_buf;
355  uint16_t volatile m_len;
356  uint16_t volatile m_used;
357 };
358 
365 {
366 public:
373 
377  virtual ~MessageBufferFactory(void) {}
378 
384  virtual MessageBuffer create(void) = 0;
385 
391  virtual bool createServerBuffer(void) { return true; }
392 
401  virtual erpc_status_t prepareServerBufferForSend(MessageBuffer *message);
402 
408  virtual void dispose(MessageBuffer *buf) = 0;
409 };
410 
411 } // namespace erpc
412 
415 #endif // _EMBEDDED_RPC__MESSAGE_BUFFER_H_
uint16_t getRemaining(void) const
Return remaining free space in current buffer.
Definition: erpc_message_buffer.h:247
erpc_status_t read(uint16_t offset, void *data, uint32_t length)
This function read data from local buffer.
Definition: erpc_message_buffer.cpp:21
const uint8_t & operator[](int index) const
Array operator return value of buffer at given index.
Definition: erpc_message_buffer.h:293
int32_t erpc_status_t
Type used for all status and error return values.
Definition: erpc_common.h:86
Cursor(MessageBuffer *buffer)
Constructor.
Definition: erpc_message_buffer.h:210
erpc_status_t copy(const MessageBuffer *other)
This function copy given message buffer to local instance.
Definition: erpc_message_buffer.cpp:51
MessageBuffer(void)
Constructor.
Definition: erpc_message_buffer.h:44
void setUsed(uint16_t used)
This function sets length of used space of buffer.
Definition: erpc_message_buffer.h:121
virtual ~MessageBufferFactory(void)
ClientManager destructor.
Definition: erpc_message_buffer.h:377
Cursor within a MessageBuffer.
Definition: erpc_message_buffer.h:188
uint8_t & operator[](int index)
Array operator return value of buffer at given index.
Definition: erpc_message_buffer.h:176
uint16_t getUsed(void) const
This function returns length of used space of buffer.
Definition: erpc_message_buffer.h:107
erpc_status_t read(void *data, uint32_t length)
Read data from current buffer.
Definition: erpc_message_buffer.cpp:82
Cursor & operator--(void)
Substract -1 operator.
Definition: erpc_message_buffer.h:340
uint8_t * get(void)
Return position in buffer.
Definition: erpc_message_buffer.h:231
MessageBufferFactory(void)
Constructor.
Definition: erpc_message_buffer.h:372
uint8_t & operator[](int index)
Array operator return value of buffer at given index.
Definition: erpc_message_buffer.h:286
Cursor & operator++(void)
Sum +1 operator.
Definition: erpc_message_buffer.h:328
uint16_t getLength(void) const
This function returns length of buffer.
Definition: erpc_message_buffer.h:100
uint16_t getFree(void) const
This function returns length of free space of buffer.
Definition: erpc_message_buffer.h:114
Represents a memory buffer containing a message.
Definition: erpc_message_buffer.h:36
Definition: erpc_arbitrated_client_manager.h:25
void swap(MessageBuffer *other)
This function swap message buffer attributes between given instance and local instance.
Definition: erpc_message_buffer.cpp:60
Cursor(void)
Constructor.
Definition: erpc_message_buffer.h:196
virtual bool createServerBuffer(void)
This function inform server if it has to create buffer for received message.
Definition: erpc_message_buffer.h:391
MessageBuffer(uint8_t *buffer, uint16_t length)
Constructor.
Definition: erpc_message_buffer.h:59
erpc_status_t write(const void *data, uint32_t length)
Read data from current buffer.
Definition: erpc_message_buffer.cpp:97
Abstract interface for message buffer factory.
Definition: erpc_message_buffer.h:364
Cursor & operator-=(uint16_t n)
Substract operator return local buffer.
Definition: erpc_message_buffer.h:316
erpc_status_t write(uint16_t offset, const void *data, uint32_t length)
This function write data to local buffer.
Definition: erpc_message_buffer.cpp:36
Cursor & operator+=(uint16_t n)
Sum operator return local buffer.
Definition: erpc_message_buffer.h:302
const uint8_t & operator[](int index) const
Array operator return value of buffer at given index.
Definition: erpc_message_buffer.h:183