eRPC API Reference  Rev. 1.8.0
NXP Semiconductors
erpc_codec.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2014, Freescale Semiconductor, Inc.
3  * Copyright 2016-2017 NXP
4  * All rights reserved.
5  *
6  *
7  * SPDX-License-Identifier: BSD-3-Clause
8  */
9 
10 #ifndef _EMBEDDED_RPC__CODEC_H_
11 #define _EMBEDDED_RPC__CODEC_H_
12 
13 #include "erpc_common.h"
14 #include "erpc_message_buffer.h"
15 #include "erpc_transport.h"
16 
17 #include <cstring>
18 #include <stdint.h>
19 
26 // Classes
29 
30 namespace erpc {
34 typedef enum _message_type
35 {
36  kInvocationMessage = 0,
37  kOnewayMessage,
38  kReplyMessage,
39  kNotificationMessage
41 
42 typedef void *funPtr; // Pointer to functions
43 typedef funPtr *arrayOfFunPtr; // Pointer to array of functions
44 
52 class Codec
53 {
54 public:
60  Codec(void)
61  : m_buffer()
62  , m_cursor()
64  {
65  }
66 
70  virtual ~Codec(void) {}
71 
77  MessageBuffer *getBuffer(void) { return &m_buffer; }
78 
84  virtual void setBuffer(MessageBuffer &buf)
85  {
86  m_buffer = buf;
89  }
90 
92  virtual void reset(void)
93  {
96  }
97 
98  erpc_status_t getStatus(void) { return m_status; }
99 
100  void updateStatus(erpc_status_t status)
101  {
102  if (!m_status)
103  {
104  m_status = status;
105  }
106  }
107 
109 
110 
119  virtual void startWriteMessage(message_type_t type, uint32_t service, uint32_t request, uint32_t sequence) = 0;
120 
126  virtual void write(bool value) = 0;
127 
133  virtual void write(int8_t value) = 0;
134 
140  virtual void write(int16_t value) = 0;
141 
147  virtual void write(int32_t value) = 0;
148 
154  virtual void write(int64_t value) = 0;
155 
161  virtual void write(uint8_t value) = 0;
162 
168  virtual void write(uint16_t value) = 0;
169 
175  virtual void write(uint32_t value) = 0;
176 
182  virtual void write(uint64_t value) = 0;
183 
189  virtual void write(float value) = 0;
190 
196  virtual void write(double value) = 0;
197 
203  virtual void writePtr(uintptr_t value) = 0;
204 
211  virtual void writeString(uint32_t length, const char *value) = 0;
212 
219  virtual void writeBinary(uint32_t length, const uint8_t *value) = 0;
220 
226  virtual void startWriteList(uint32_t length) = 0;
227 
233  virtual void startWriteUnion(int32_t discriminator) = 0;
234 
240  virtual void writeNullFlag(bool isNull) = 0;
241 
249  virtual void writeCallback(arrayOfFunPtr callbacks, uint8_t callbacksCount, funPtr callback) = 0;
250 
257  virtual void writeCallback(funPtr callback1, funPtr callback2) = 0;
259 
261 
262 
271  virtual void startReadMessage(message_type_t *type, uint32_t *service, uint32_t *request, uint32_t *sequence) = 0;
272 
278  virtual void read(bool *value) = 0;
279 
285  virtual void read(int8_t *value) = 0;
286 
292  virtual void read(int16_t *value) = 0;
293 
299  virtual void read(int32_t *value) = 0;
300 
306  virtual void read(int64_t *value) = 0;
307 
313  virtual void read(uint8_t *value) = 0;
314 
320  virtual void read(uint16_t *value) = 0;
321 
327  virtual void read(uint32_t *value) = 0;
328 
334  virtual void read(uint64_t *value) = 0;
335 
341  virtual void read(float *value) = 0;
342 
348  virtual void read(double *value) = 0;
349 
355  virtual void readPtr(uintptr_t *value) = 0;
356 
363  virtual void readString(uint32_t *length, char **value) = 0;
364 
371  virtual void readBinary(uint32_t *length, uint8_t **value) = 0;
372 
378  virtual void startReadList(uint32_t *length) = 0;
379 
385  virtual void startReadUnion(int32_t *discriminator) = 0;
386 
392  virtual void readNullFlag(bool *isNull) = 0;
393 
401  virtual void readCallback(arrayOfFunPtr callbacks, uint8_t callbacksCount, funPtr *callback) = 0;
402 
409  virtual void readCallback(funPtr callbacks1, funPtr *callback2) = 0;
410 
411 protected:
415 };
416 
423 {
424 public:
428  CodecFactory(void) {}
429 
433  virtual ~CodecFactory(void) {}
434 
440  virtual Codec *create(void) = 0;
441 
447  virtual void dispose(Codec *codec) = 0;
448 };
449 
450 } // namespace erpc
451 
454 #endif // _EMBEDDED_RPC__CODEC_H_
virtual void startReadMessage(message_type_t *type, uint32_t *service, uint32_t *request, uint32_t *sequence)=0
Prototype for read header of message.
erpc_status_t m_status
Definition: erpc_codec.h:414
int32_t erpc_status_t
Type used for all status and error return values.
Definition: erpc_common.h:86
MessageBuffer * getBuffer(void)
Return message buffer used for read and write data.
Definition: erpc_codec.h:77
message_type_t
Types of messages that can be encoded.
Definition: erpc_codec.h:34
virtual void read(bool *value)=0
Prototype for read boolean value.
virtual void writePtr(uintptr_t value)=0
Prototype for write uintptr value.
virtual void writeCallback(arrayOfFunPtr callbacks, uint8_t callbacksCount, funPtr callback)=0
Writes an order ID of callback function.
No error occurred.
Definition: erpc_common.h:28
MessageBuffer::Cursor m_cursor
Definition: erpc_codec.h:413
virtual void writeBinary(uint32_t length, const uint8_t *value)=0
Prototype for write binary value.
Abstract serialization encoder/decoder interface.
Definition: erpc_codec.h:52
virtual ~Codec(void)
Codec destructor.
Definition: erpc_codec.h:70
virtual void readBinary(uint32_t *length, uint8_t **value)=0
Prototype for read binary value.
Cursor within a MessageBuffer.
Definition: erpc_message_buffer.h:189
virtual void writeNullFlag(bool isNull)=0
Writes a flag indicating whether the next value is null.
virtual void readPtr(uintptr_t *value)=0
Prototype for read uintptr value.
Abstract interface for codec factory.
Definition: erpc_codec.h:422
virtual void writeString(uint32_t length, const char *value)=0
Prototype for write string value.
virtual void startReadUnion(int32_t *discriminator)=0
Prototype for start read union.
virtual ~CodecFactory(void)
CodecFactory destructor.
Definition: erpc_codec.h:433
virtual void readCallback(arrayOfFunPtr callbacks, uint8_t callbacksCount, funPtr *callback)=0
Read an callback function id and return address of callback function.
virtual void readNullFlag(bool *isNull)=0
Reads a flag indicating whether the next value is null.
virtual void startReadList(uint32_t *length)=0
Prototype for start read list.
void set(MessageBuffer *buffer)
Set message buffer.
Definition: erpc_message_buffer.cpp:73
virtual void readString(uint32_t *length, char **value)=0
Prototype for read string value.
virtual void startWriteUnion(int32_t discriminator)=0
Prototype for start write union.
virtual void startWriteList(uint32_t length)=0
Prototype for start write list.
Represents a memory buffer containing a message.
Definition: erpc_message_buffer.h:37
virtual void startWriteMessage(message_type_t type, uint32_t service, uint32_t request, uint32_t sequence)=0
Prototype for write header of message.
Definition: erpc_arbitrated_client_manager.h:25
virtual void write(bool value)=0
Prototype for write boolean value.
virtual void setBuffer(MessageBuffer &buf)
Prototype for set message buffer used for read and write data.
Definition: erpc_codec.h:84
CodecFactory(void)
Constructor.
Definition: erpc_codec.h:428
virtual void reset(void)
Reset the codec to initial state.
Definition: erpc_codec.h:92
Codec(void)
Constructor.
Definition: erpc_codec.h:60
MessageBuffer m_buffer
Definition: erpc_codec.h:412