Beamlib  3.0.1
This is the Beam C++ class library.
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
32 class BoapMcPacket {
33 public:
35  char data[256 - sizeof(BoapMcPacketHead)];
36 };
37 
38 /*******************************************************************************
39  * Base for all client interface objects
40  *******************************************************************************
41  */
43 public:
44  BoapMcClientObject(BComms& comms);
45  virtual ~BoapMcClientObject();
46 
49 
50 protected:
54 
60 };
61 
63 public:
64  BoapMcSignalObject(BComms& comms);
65 
66 protected:
67  BError performSend(BoapMcPacket& tx); // Performs a send to the named service
69 };
70 
71 
72 /*******************************************************************************
73  * Base for server communications objects
74  *******************************************************************************
75  */
77 public:
79  virtual ~BoapMcServiceObject();
80 
81  virtual BError process(BoapMcPacket& rx, BoapMcPacket& tx);
82  virtual BError processEvent(BoapMcPacket& rx);
83 protected:
86 };
87 
88 /*******************************************************************************
89  * Base for bidirectional communications objects
90  *******************************************************************************
91  */
92 class BoapMcComms {
93 public:
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);
107  virtual BError processPacket(BoapMcPacket& rx, BoapMcPacket& tx);
108 
109 protected:
110  // Communications functions
111  BError performCall();
112  BError performSend();
113 
114  BError packetSend(BoapMcPacket& packet);
115  BError packetRecv(BoapMcPacket& packet);
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
Mutex class. Note these are recursive Mutexes and so you need to make sure the number of unlocks equa...
Definition: BMutex.h:14
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
BoapMcClientObject(BComms &comms)
Definition: BoapMc.cpp:46
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
BoapMcComms(Bool threaded=0, BUInt rxQueueSize=4)
Definition: BoapMc.cpp:160
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
BoapMcSignalObject(BComms &comms)
Definition: BoapMc.cpp:116
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