Beamlib 3.3.2
This is the Beam C++ class library.
Loading...
Searching...
No Matches
BoapMc.h
Go to the documentation of this file.
1/*******************************************************************************
2 * BoapMc.h BoapMc RPC protocol
3 * T.Barnaby, BEAM Ltd, 2012-11-14
4 * Copyright (c) 2022 All Right Reserved, Beam Ltd, https://www.beam.ltd.uk
5 * For license see LICENSE.txt at the root of the beamlib source tree.
6 *******************************************************************************
7 */
8#ifndef BoapMc_HH
9#define BoapMc_HH
10
11#include <BTypes.h>
12#include <BMutex.h>
13#include <BSemaphore.h>
14#include <BQueue.h>
15#include <BFifo.h>
16#include <BComms.h>
17
18// Main BOAP Types
20
21// BoapMc packet header
29} __attribute__((aligned(8),packed));
30
31// BoapMc packet
33public:
35 char data[256 - sizeof(BoapMcPacketHead)];
36};
37
38/*******************************************************************************
39 * Base for all client interface objects
40 *******************************************************************************
41 */
43public:
45 virtual ~BoapMcClientObject();
46
49
50protected:
54
60};
61
63public:
65
66protected:
67 BError performSend(BoapMcPacket& tx); // Performs a send to the named service
69};
70
71
72/*******************************************************************************
73 * Base for server communications objects
74 *******************************************************************************
75 */
77public:
79 virtual ~BoapMcServiceObject();
80
81 virtual BError process(BoapMcPacket& rx, BoapMcPacket& tx);
82 virtual BError processEvent(BoapMcPacket& rx);
83protected:
86};
87
88/*******************************************************************************
89 * Base for bidirectional communications objects
90 *******************************************************************************
91 */
93public:
94 BoapMcComms(Bool threaded = 0, BUInt rxQueueSize = 4);
95 virtual ~BoapMcComms();
96
97 void setCommsMode(Bool slave, BUInt txQueueSize);
98 void setComms(BComms& comms);
99 void setComms(BComms* comms);
102 BUInt32 setTimeout(BUInt32 timeoutUs);
103
104 virtual BError processRx(BTimeout timeoutUs = BTimeoutForever);
105 virtual BError processRequests(BTimeout timeoutUs = BTimeoutForever);
106 virtual BError processRequest(BTimeout timeoutUs = BTimeoutForever);
108
109protected:
110 // Communications functions
113
116
133
137};
138
139
140#endif
uint16_t BUInt16
Definition: BTypes.h:22
const BTimeout BTimeoutForever
Definition: BTypes.h:46
BUInt32 BUInt
Definition: BTypes.h:33
uint32_t BUInt32
Definition: BTypes.h:24
bool Bool
Definition: BTypes.h:18
uint8_t BUInt8
Definition: BTypes.h:20
BUInt32 BTimeout
Definition: BTypes.h:45
BUInt8 addressFrom
Definition: BoapMc.h:2
class BoapMcPacket __attribute__
BUInt8 addressTo
Definition: BoapMc.h:1
BoapMcType
Definition: BoapMc.h:19
@ BoapMcTypeRequest
Definition: BoapMc.h:19
@ BoapMcTypeReply
Definition: BoapMc.h:19
A base class for communications classes having a generic API.
Definition: BComms.h:17
Error return class. This class is used to return the error status from a function....
Definition: BError.h:31
A template first in first out data buffer to store any object types.
Definition: BFifo.h:25
Mutex class. Note these are recursive Mutexes and so you need to make sure the number of unlocks equa...
Definition: BMutex.h:14
Provides a thread save queue of objects that can be used to communicate between threads.
Definition: BQueue.h:20
Integer counting semaphore.
Definition: BSemaphore.h:54
Base Semaphore class.
Definition: BSemaphore.h:16
Definition: BoapMc.h:42
BUInt8 oaddressFrom
Definition: BoapMc.h:58
BoapMcPacket opacket
Definition: BoapMc.h:59
BError performSend()
Performs a send to the named service.
Definition: BoapMc.cpp:64
BComms & ocomms
Definition: BoapMc.h:56
BUInt8 oaddressTo
Definition: BoapMc.h:57
virtual ~BoapMcClientObject()
Definition: BoapMc.cpp:52
BError performCall()
Performs a RPC call to the named service.
Definition: BoapMc.cpp:103
void setAddress(BUInt8 addressTo, BUInt8 addressFrom)
Definition: BoapMc.cpp:55
BUInt32 getApiVersion()
Returns the API version.
Definition: BoapMc.cpp:60
BError performRecv()
Performs a receive.
Definition: BoapMc.cpp:76
BUInt32 oapiVersion
Definition: BoapMc.h:55
Definition: BoapMc.h:92
virtual BError processRx(BTimeout timeoutUs=BTimeoutForever)
Process any RX packets queuing them as needed.
Definition: BoapMc.cpp:206
void setComms(BComms &comms)
Sets the communications interface to use.
Definition: BoapMc.cpp:180
BoapMcPacket opacketTx
Packet TX buffer for calls.
Definition: BoapMc.h:127
virtual BError processPacket(BoapMcPacket &rx, BoapMcPacket &tx)
Process a recieved packet.
Definition: BoapMc.cpp:297
BFifo< BoapMcPacket > opacketTxQueue
Packet TX Queue.
Definition: BoapMc.h:134
void setAddress(BUInt8 addressTo, BUInt8 addressFrom)
Sets the to and from addresses.
Definition: BoapMc.cpp:188
BSemaphore opacketRxSema
Wait RX semaphore.
Definition: BoapMc.h:129
BoapMcPacket opacketReqRx
Packet RX buffer for requests.
Definition: BoapMc.h:131
BUInt32 getApiVersion()
Returns the API version.
Definition: BoapMc.cpp:193
virtual ~BoapMcComms()
Definition: BoapMc.cpp:171
BError packetRecv(BoapMcPacket &packet)
Receives a packet.
Definition: BoapMc.cpp:382
virtual BError processRequest(BTimeout timeoutUs=BTimeoutForever)
Check and process any request.
Definition: BoapMc.cpp:252
BComms * ocomms
Definition: BoapMc.h:120
BoapMcPacket opacketRx
Packet RX buffer for calls.
Definition: BoapMc.h:128
BUInt32 oapiVersion
Definition: BoapMc.h:121
BoapMcPacket opacketReqTx
Packet TX buffer for requests.
Definition: BoapMc.h:130
BUInt32 otimeout
The timeout in us for calls.
Definition: BoapMc.h:123
BUInt8 oaddressFrom
Definition: BoapMc.h:125
BSemaphore opacketTxSema
Wait for TX semaphore.
Definition: BoapMc.h:136
BError packetSend(BoapMcPacket &packet)
Receives a packet.
Definition: BoapMc.cpp:338
BError performCall()
Performs a RPC call to the remote side.
Definition: BoapMc.cpp:307
BMutex olockTx
Lock for TX.
Definition: BoapMc.h:119
BoapMcPacket opacket
Packet RX buffer.
Definition: BoapMc.h:126
BUInt32 setTimeout(BUInt32 timeoutUs)
Sets the call timeout returning the current value.
Definition: BoapMc.cpp:197
BUInt8 oaddressTo
Definition: BoapMc.h:124
Bool othreaded
Definition: BoapMc.h:117
BSemaphoreCount opacketTxQueueWriteNum
Packet TX Queue number.
Definition: BoapMc.h:135
Bool oslave
Set slave mode.
Definition: BoapMc.h:122
BQueue< BoapMcPacket > opacketReqQueue
Packet RX buffer queue for requests.
Definition: BoapMc.h:132
void setCommsMode(Bool slave, BUInt txQueueSize)
Sets slave mode.
Definition: BoapMc.cpp:174
BError performSend()
Performs a RPC send to the remote side.
Definition: BoapMc.cpp:333
BMutex olockCall
Lock for RPC calls. Only one at a time.
Definition: BoapMc.h:118
virtual BError processRequests(BTimeout timeoutUs=BTimeoutForever)
Check and process all requests.
Definition: BoapMc.cpp:238
Definition: BoapMc.h:32
BoapMcPacketHead head
Definition: BoapMc.h:34
char data[256 - sizeof(BoapMcPacketHead)]
Definition: BoapMc.h:35
Definition: BoapMc.h:76
virtual BError processEvent(BoapMcPacket &rx)
Definition: BoapMc.cpp:149
BoapMcServiceObject()
Definition: BoapMc.cpp:130
BError sendEvent(BoapMcPacket &tx)
Definition: BoapMc.cpp:143
BUInt32 oapiVersion
Definition: BoapMc.h:85
virtual BError process(BoapMcPacket &rx, BoapMcPacket &tx)
Definition: BoapMc.cpp:137
virtual ~BoapMcServiceObject()
Definition: BoapMc.cpp:134
Definition: BoapMc.h:62
BError performSend(BoapMcPacket &tx)
Definition: BoapMc.cpp:119
BComms & ocomms
Definition: BoapMc.h:68
Definition: BoapMc.h:22
BUInt16 checksum
Definition: BoapMc.h:28
BUInt8 addressTo
Definition: BoapMc.h:24
BUInt8 cmd
Definition: BoapMc.h:26
BUInt8 addressFrom
Definition: BoapMc.h:25
BUInt8 length
Definition: BoapMc.h:23
BUInt16 error
Definition: BoapMc.h:27