eRPC API Reference  Rev. 1.12.0
NXP Semiconductors
erpc_transport_arbitrator.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016, Freescale Semiconductor, Inc.
3  * Copyright 2016-2017 NXP
4  * All rights reserved.
5  *
6  *
7  * SPDX-License-Identifier: BSD-3-Clause
8  */
9 #if !defined(__embedded_rpc__transport_arbitrator__)
10 #define __embedded_rpc__transport_arbitrator__
11 
12 #include "erpc_client_manager.h"
13 #include "erpc_codec.hpp"
14 #include "erpc_threading.h"
15 #include "erpc_transport.hpp"
16 
23 // Classes
26 
27 namespace erpc {
28 class Codec;
29 
41 {
42 public:
44  typedef uintptr_t client_token_t;
45 
49  TransportArbitrator(void);
50 
54  virtual ~TransportArbitrator(void);
55 
61  virtual uint8_t reserveHeaderSize(void) override;
62 
72  virtual erpc_status_t receive(MessageBuffer *message) override;
73 
83  virtual erpc_status_t send(MessageBuffer *message) override;
84 
91  virtual bool hasMessage(void) override;
92 
98  virtual void setCrc16(Crc16 *crcImpl) override;
99 
105  virtual Crc16 *getCrc16(void) override;
106 
112  void setSharedTransport(Transport *shared);
113 
120 
126  void setCodec(Codec *codec);
127 
133  Codec *getCodec(void);
134 
146  client_token_t prepareClientReceive(RequestContext &request);
147 
158  erpc_status_t clientReceive(client_token_t token);
159 
164  {
167  bool m_isValid;
173  PendingClientInfo(void);
174 
178  ~PendingClientInfo(void);
179  };
180 
181 protected:
184 
188 
195 
202 
209 
215  void freeClientList(PendingClientInfo *list);
216 
217 private:
218  // Disable copy ctor.
220  TransportArbitrator &operator=(const TransportArbitrator &other);
221 };
222 
223 } // namespace erpc
224 
227 #endif // defined(__embedded_rpc__transport_arbitrator__)
228 // EOF
Abstract interface for transport layer.
Definition: erpc_transport.hpp:36
Interposer to share transport between client and server.
Definition: erpc_transport_arbitrator.hpp:40
~PendingClientInfo(void)
Destructor.
Definition: erpc_transport_arbitrator.cpp:281
enum _erpc_status erpc_status_t
Type used for all status and error return values.
Definition: erpc_common.h:85
erpc_status_t clientReceive(client_token_t token)
Receive method for the client.
Definition: erpc_transport_arbitrator.cpp:186
PendingClientInfo * createPendingClient(void)
Create a Pending Client object.
Definition: erpc_transport_arbitrator.cpp:201
void setSharedTransport(Transport *shared)
This function set shared client/server transport.
Definition: erpc_transport_arbitrator.cpp:155
virtual Crc16 * getCrc16(void) override
This functions gets the CRC-16 object.
Definition: erpc_transport_arbitrator.cpp:149
Abstract serialization encoder/decoder interface.
Definition: erpc_codec.hpp:53
client_token_t prepareClientReceive(RequestContext &request)
Add a client request to the client list.
Definition: erpc_transport_arbitrator.cpp:175
Transport * getSharedTransport(void)
This function returns shared client/server transport.
Definition: erpc_transport_arbitrator.cpp:160
PendingClientInfo * addPendingClient(void)
This function adds pending client.
Definition: erpc_transport_arbitrator.cpp:204
Request info for a client trying to receive a response.
Definition: erpc_transport_arbitrator.hpp:163
PendingClientInfo(void)
Constructor.
Definition: erpc_transport_arbitrator.cpp:276
bool m_isValid
Definition: erpc_transport_arbitrator.hpp:167
Transport * m_sharedTransport
Transport being shared through this arbitrator.
Definition: erpc_transport_arbitrator.hpp:182
void freeClientList(PendingClientInfo *list)
This function removes pending client list.
Definition: erpc_transport_arbitrator.cpp:263
PendingClientInfo * m_clientFreeList
Unused client receive info structs.
Definition: erpc_transport_arbitrator.hpp:186
Codec * getCodec(void)
This function get codec.
Definition: erpc_transport_arbitrator.cpp:170
virtual uint8_t reserveHeaderSize(void) override
Size of data placed in MessageBuffer before serializing eRPC data.
Definition: erpc_transport_arbitrator.cpp:43
Represents a memory buffer containing a message.
Definition: erpc_message_buffer.hpp:37
Definition: erpc_arbitrated_client_manager.hpp:25
PendingClientInfo * m_next
Definition: erpc_transport_arbitrator.hpp:168
void removePendingClient(PendingClientInfo *info)
This function removes pending client.
Definition: erpc_transport_arbitrator.cpp:230
virtual ~TransportArbitrator(void)
Destructor.
Definition: erpc_transport_arbitrator.cpp:36
Class for compute crc16.
Definition: erpc_crc16.hpp:29
RequestContext * m_request
Definition: erpc_transport_arbitrator.hpp:165
virtual void setCrc16(Crc16 *crcImpl) override
This functions sets the CRC-16 implementation.
Definition: erpc_transport_arbitrator.cpp:142
PendingClientInfo * m_clientList
Active client receive requests.
Definition: erpc_transport_arbitrator.hpp:185
Codec * m_codec
Codec used to read incoming message headers.
Definition: erpc_transport_arbitrator.hpp:183
void setCodec(Codec *codec)
This function set codec.
Definition: erpc_transport_arbitrator.cpp:165
Mutex m_clientListMutex
Mutex guarding the client active and free lists.
Definition: erpc_transport_arbitrator.hpp:187
virtual erpc_status_t receive(MessageBuffer *message) override
Prototype for receiving message.
Definition: erpc_transport_arbitrator.cpp:48
Semaphore m_sem
Definition: erpc_transport_arbitrator.hpp:166
TransportArbitrator(void)
Constructor.
Definition: erpc_transport_arbitrator.cpp:31
virtual erpc_status_t send(MessageBuffer *message) override
Prototype for send message.
Definition: erpc_transport_arbitrator.cpp:129
uintptr_t client_token_t
Represents a single client's receive request.
Definition: erpc_transport_arbitrator.hpp:44
Mutex.
Definition: erpc_threading.h:339
virtual bool hasMessage(void) override
Check if the underlying shared transport has a message.
Definition: erpc_transport_arbitrator.cpp:135
Simple semaphore class.
Definition: erpc_threading.h:442
Encapsulates all information about a request.
Definition: erpc_client_manager.h:184