135 lines
3.0 KiB
C++
135 lines
3.0 KiB
C++
|
|
/*
|
||
|
|
* Copyright (c) 2014, Freescale Semiconductor, Inc.
|
||
|
|
* Copyright 2016-2017 NXP
|
||
|
|
* All rights reserved.
|
||
|
|
*
|
||
|
|
*
|
||
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifndef _EMBEDDED_RPC__TRANSPORT_H_
|
||
|
|
#define _EMBEDDED_RPC__TRANSPORT_H_
|
||
|
|
|
||
|
|
#include "erpc_common.h"
|
||
|
|
#include "erpc_crc16.hpp"
|
||
|
|
#include "erpc_message_buffer.hpp"
|
||
|
|
|
||
|
|
#include <cstring>
|
||
|
|
|
||
|
|
/*!
|
||
|
|
* @addtogroup infra_transport
|
||
|
|
* @{
|
||
|
|
* @file
|
||
|
|
*/
|
||
|
|
|
||
|
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
// Classes
|
||
|
|
////////////////////////////////////////////////////////////////////////////////
|
||
|
|
|
||
|
|
namespace erpc {
|
||
|
|
|
||
|
|
/*!
|
||
|
|
* @brief Abstract interface for transport layer.
|
||
|
|
*
|
||
|
|
* @ingroup infra_transport
|
||
|
|
*/
|
||
|
|
class Transport
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
/*!
|
||
|
|
* @brief Constructor.
|
||
|
|
*/
|
||
|
|
Transport(void) {}
|
||
|
|
|
||
|
|
/*!
|
||
|
|
* @brief Transport destructor
|
||
|
|
*/
|
||
|
|
virtual ~Transport(void) {}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @brief Size of data placed in MessageBuffer before serializing eRPC data.
|
||
|
|
*
|
||
|
|
* @return uint8_t Amount of bytes, reserved before serialized data.
|
||
|
|
*/
|
||
|
|
virtual uint8_t reserveHeaderSize(void) { return 0; }
|
||
|
|
|
||
|
|
/*!
|
||
|
|
* @brief Prototype for receiving message.
|
||
|
|
*
|
||
|
|
* Each transport layer need define this function.
|
||
|
|
*
|
||
|
|
* @param[out] message Will return pointer to received message buffer.
|
||
|
|
*
|
||
|
|
* @return based on receive implementation.
|
||
|
|
*/
|
||
|
|
virtual erpc_status_t receive(MessageBuffer *message) = 0;
|
||
|
|
|
||
|
|
/*!
|
||
|
|
* @brief Prototype for send message.
|
||
|
|
*
|
||
|
|
* Each transport layer need define this function.
|
||
|
|
*
|
||
|
|
* @param[in] message Pass message buffer to send.
|
||
|
|
*
|
||
|
|
* @return based on send implementation.
|
||
|
|
*/
|
||
|
|
virtual erpc_status_t send(MessageBuffer *message) = 0;
|
||
|
|
|
||
|
|
/*!
|
||
|
|
* @brief Poll for an incoming message.
|
||
|
|
*
|
||
|
|
* This function should return true if are some messages to process by server,
|
||
|
|
* the return value should be tested before calling receive function to avoid
|
||
|
|
* waiting for a new message (receive can be implemented as blocking function).
|
||
|
|
*
|
||
|
|
* @retval True when a message is available to process, else false.
|
||
|
|
*/
|
||
|
|
virtual bool hasMessage(void) { return true; }
|
||
|
|
|
||
|
|
/*!
|
||
|
|
* @brief This functions sets the CRC-16 implementation.
|
||
|
|
*
|
||
|
|
* @param[in] crcImpl Object containing crc-16 compute function.
|
||
|
|
*/
|
||
|
|
virtual void setCrc16(Crc16 *crcImpl) { (void)crcImpl; }
|
||
|
|
|
||
|
|
/*!
|
||
|
|
* @brief This functions gets the CRC-16 object.
|
||
|
|
*
|
||
|
|
* @return Crc16* Pointer to CRC-16 object containing crc-16 compute function.
|
||
|
|
*/
|
||
|
|
virtual Crc16 *getCrc16(void) { return NULL; }
|
||
|
|
};
|
||
|
|
|
||
|
|
/*!
|
||
|
|
* @brief Abstract interface for transport factory.
|
||
|
|
*
|
||
|
|
* @ingroup infra_transport
|
||
|
|
*/
|
||
|
|
class TransportFactory
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
/*!
|
||
|
|
* @brief Constructor.
|
||
|
|
*/
|
||
|
|
TransportFactory(void) {}
|
||
|
|
|
||
|
|
/*!
|
||
|
|
* @brief TransportFactory destructor
|
||
|
|
*/
|
||
|
|
virtual ~TransportFactory(void) {}
|
||
|
|
|
||
|
|
/*!
|
||
|
|
* @brief Return created transport object.
|
||
|
|
*
|
||
|
|
* @return Pointer to created transport object.
|
||
|
|
*/
|
||
|
|
virtual Transport *create(void) = 0;
|
||
|
|
};
|
||
|
|
|
||
|
|
} // namespace erpc
|
||
|
|
|
||
|
|
/*! @} */
|
||
|
|
|
||
|
|
#endif // _EMBEDDED_RPC__TRANSPORT_H_
|