forked from EmbeddedRPC/erpc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
erpc_spi_master_transport.hpp
97 lines (81 loc) · 2.58 KB
/
erpc_spi_master_transport.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
* Copyright (c) 2014-2016, Freescale Semiconductor, Inc.
* Copyright 2016 NXP
* All rights reserved.
*
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef _EMBEDDED_RPC__SPI_MASTER_TRANSPORT_H_
#define _EMBEDDED_RPC__SPI_MASTER_TRANSPORT_H_
#include "erpc_framed_transport.hpp"
#include <cstdlib>
extern "C" {
#include "fsl_spi.h"
}
/*!
* @addtogroup spi_master_transport
* @{
* @file
*/
////////////////////////////////////////////////////////////////////////////////
// Classes
////////////////////////////////////////////////////////////////////////////////
namespace erpc {
/*!
* @brief Very basic transport to send/receive messages via SPI.
*
* @ingroup spi_master_transport
*/
class SpiMasterTransport : public FramedTransport
{
public:
/*!
* @brief Constructor.
*
* @param[in] spiBaseAddr DSPI peripheral base address.
* @param[in] baudRate Baudrate.
* @param[in] srcClock_Hz Source clock.
*/
SpiMasterTransport(SPI_Type *spiBaseAddr, uint32_t baudRate, uint32_t srcClock_Hz);
/*!
* @brief Destructor.
*/
virtual ~SpiMasterTransport(void);
/*!
* @brief Initialize SPI peripheral configuration structure with values specified in SpiTransport constructor.
*
* @retval kErpcStatus_Success Always returns success status.
*/
virtual erpc_status_t init(void);
protected:
SPI_Type *m_spiBaseAddr; /*!< Base address of SPI peripheral used in this transport layer */
uint32_t m_baudRate; /*!< Baud rate of SPI peripheral used in this transport layer */
uint32_t m_srcClock_Hz; /*!< Source clock of SPI peripheral used in this transport layer */
private:
using FramedTransport::underlyingReceive;
using FramedTransport::underlyingSend;
/*!
* @brief Receive data from SPI peripheral.
*
* @param[inout] data Preallocated buffer for receiving data.
* @param[in] size Size of data to read.
*
* @retval kErpcStatus_ReceiveFailed SPI failed to receive data.
* @retval kErpcStatus_Success Successfully received all data.
*/
virtual erpc_status_t underlyingReceive(uint8_t *data, uint32_t size) override;
/*!
* @brief Write data to SPI peripheral.
*
* @param[in] data Buffer to send.
* @param[in] size Size of data to send.
*
* @retval kErpcStatus_SendFailed SPI failed to send data.
* @retval kErpcStatus_Success Successfully sent all data.
*/
virtual erpc_status_t underlyingSend(const uint8_t *data, uint32_t size) override;
};
} // namespace erpc
/*! @} */
#endif // _EMBEDDED_RPC__SPI_MASTER_TRANSPORT_H_