Beam-lib  2.16.3
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) 2012 All Right Reserved, Beam Ltd, http://www.beam.ltd.uk
5  *******************************************************************************
6  */
7 #ifndef BoapMc_HH
8 #define BoapMc_HH
9 
10 #include <BTypes.h>
11 #include <BMutex.h>
12 #include <BSemaphore.h>
13 #include <BQueue.h>
14 #include <BFifo.h>
15 #include <BComms.h>
16 
17 // Main BOAP Types
19 
20 // BoapMc packet header
28 } __attribute__((aligned(8),packed));
29 
30 // BoapMc packet
31 class BoapMcPacket {
32 public:
34  char data[256 - sizeof(BoapMcPacketHead)];
35 };
36 
37 /*******************************************************************************
38  * Base for all client interface objects
39  *******************************************************************************
40  */
42 public:
43  BoapMcClientObject(BComms& comms);
44  virtual ~BoapMcClientObject();
45 
48 
49 protected:
53 
59 };
60 
62 public:
63  BoapMcSignalObject(BComms& comms);
64 
65 protected:
66  BError performSend(BoapMcPacket& tx); // Performs a send to the named service
68 };
69 
70 
71 /*******************************************************************************
72  * Base for server communications objects
73  *******************************************************************************
74  */
76 public:
78  virtual ~BoapMcServiceObject();
79 
80  virtual BError process(BoapMcPacket& rx, BoapMcPacket& tx);
81  virtual BError processEvent(BoapMcPacket& rx);
82 protected:
85 };
86 
87 /*******************************************************************************
88  * Base for bidirectional communications objects
89  *******************************************************************************
90  */
91 class BoapMcComms {
92 public:
93  BoapMcComms(Bool threaded = 0, BUInt rxQueueSize = 4);
94  virtual ~BoapMcComms();
95 
96  void setCommsMode(Bool slave, BUInt txQueueSize);
97  void setComms(BComms& comms);
98  void setComms(BComms* comms);
101  BUInt32 setTimeout(BUInt32 timeoutUs);
102 
103  virtual BError processRx(BTimeout timeoutUs = BTimeoutForever);
104  virtual BError processRequests(BTimeout timeoutUs = BTimeoutForever);
105  virtual BError processRequest(BTimeout timeoutUs = BTimeoutForever);
106  virtual BError processPacket(BoapMcPacket& rx, BoapMcPacket& tx);
107 
108 protected:
109  // Communications functions
110  BError performCall();
111  BError performSend();
112 
113  BError packetSend(BoapMcPacket& packet);
114  BError packetRecv(BoapMcPacket& packet);
115 
132 
136 };
137 
138 
139 #endif
virtual BError processRx(BTimeout timeoutUs=BTimeoutForever)
Process any RX packets queuing them as needed.
Definition: BoapMc.cpp:205
BUInt32 oapiVersion
Definition: BoapMc.h:84
class BoapMcPacket __attribute__
BUInt8 addressFrom
Definition: BoapMc.h:24
BUInt32 oapiVersion
Definition: BoapMc.h:120
Definition: BoapMc.h:41
BMutex olockCall
Lock for RPC calls. Only one at a time.
Definition: BoapMc.h:117
BUInt8 addressTo
Definition: BoapMc.h:383
BoapMcComms(Bool threaded=0, BUInt rxQueueSize=4)
Definition: BoapMc.cpp:159
BMutex olockTx
Lock for TX.
Definition: BoapMc.h:118
BError packetSend(BoapMcPacket &packet)
Receives a packet.
Definition: BoapMc.cpp:337
void setComms(BComms &comms)
Sets the communications interface to use.
Definition: BoapMc.cpp:179
virtual BError process(BoapMcPacket &rx, BoapMcPacket &tx)
Definition: BoapMc.cpp:136
BFifo< BoapMcPacket > opacketTxQueue
Packet TX Queue.
Definition: BoapMc.h:133
Definition: BoapMc.h:31
BError packetRecv(BoapMcPacket &packet)
Receives a packet.
Definition: BoapMc.cpp:381
Semaphore class.
Definition: BSemaphore.h:15
BUInt32 oapiVersion
Definition: BoapMc.h:54
BUInt32 otimeout
The timeout in us for calls.
Definition: BoapMc.h:122
Definition: BoapMc.h:21
BoapMcPacket opacketRx
Packet RX buffer for calls.
Definition: BoapMc.h:127
Definition: BoapMc.h:61
Bool oslave
Set slave mode.
Definition: BoapMc.h:121
Definition: BoapMc.h:75
BError sendEvent(BoapMcPacket &tx)
Definition: BoapMc.cpp:142
BUInt8 cmd
Definition: BoapMc.h:25
BUInt16 error
Definition: BoapMc.h:26
BUInt32 getApiVersion()
Returns the API version.
Definition: BoapMc.cpp:59
BError performCall()
Performs a RPC call to the named service.
Definition: BoapMc.cpp:102
BQueue< BoapMcPacket > opacketReqQueue
Packet RX buffer queue for requests.
Definition: BoapMc.h:131
bool Bool
Definition: BTypes.h:15
void setAddress(BUInt8 addressTo, BUInt8 addressFrom)
Definition: BoapMc.cpp:54
BSemaphore opacketTxSema
Wait for TX semaphore.
Definition: BoapMc.h:135
BUInt32 BTimeout
Definition: BTypes.h:42
virtual BError processEvent(BoapMcPacket &rx)
Definition: BoapMc.cpp:148
Definition: BoapMc.h:18
BoapMcPacket opacketReqRx
Packet RX buffer for requests.
Definition: BoapMc.h:130
BUInt8 oaddressFrom
Definition: BoapMc.h:124
Definition: BoapMc.h:18
virtual ~BoapMcComms()
Definition: BoapMc.cpp:170
BoapMcPacket opacket
Definition: BoapMc.h:58
virtual BError processRequest(BTimeout timeoutUs=BTimeoutForever)
Check and process any request.
Definition: BoapMc.cpp:251
virtual BError processPacket(BoapMcPacket &rx, BoapMcPacket &tx)
Process a recieved packet.
Definition: BoapMc.cpp:296
BError performSend()
Performs a RPC send to the remote side.
Definition: BoapMc.cpp:332
BError performRecv()
Performs a receive.
Definition: BoapMc.cpp:75
BoapMcSignalObject(BComms &comms)
Definition: BoapMc.cpp:115
BComms & ocomms
Definition: BoapMc.h:55
BUInt32 setTimeout(BUInt32 timeoutUs)
Sets the call timeout returning the current value.
Definition: BoapMc.cpp:196
BUInt8 oaddressFrom
Definition: BoapMc.h:57
BoapMcPacketHead head
Definition: BoapMc.h:33
BUInt8 oaddressTo
Definition: BoapMc.h:123
BSemaphore opacketRxSema
Wait RX semaphore.
Definition: BoapMc.h:128
BComms * ocomms
Definition: BoapMc.h:119
BUInt32 BUInt
Definition: BTypes.h:30
uint32_t BUInt32
Definition: BTypes.h:21
Definition: BComms.h:14
const BTimeout BTimeoutForever
Definition: BTypes.h:43
BoapMcPacket opacketReqTx
Packet TX buffer for requests.
Definition: BoapMc.h:129
BoapMcPacket opacketTx
Packet TX buffer for calls.
Definition: BoapMc.h:126
Definition: BoapMc.h:91
BUInt8 oaddressTo
Definition: BoapMc.h:56
BUInt8 addressTo
Definition: BoapMc.h:23
BUInt8 addressFrom
Definition: BoapMc.h:384
Definition: BMutex.h:14
Bool othreaded
Definition: BoapMc.h:116
uint16_t BUInt16
Definition: BTypes.h:19
uint8_t BUInt8
Definition: BTypes.h:17
virtual ~BoapMcClientObject()
Definition: BoapMc.cpp:51
BUInt16 checksum
Definition: BoapMc.h:27
BSemaphoreCount opacketTxQueueWriteNum
Packet TX Queue number.
Definition: BoapMc.h:134
BoapMcClientObject(BComms &comms)
Definition: BoapMc.cpp:45
BoapMcPacket opacket
Packet RX buffer.
Definition: BoapMc.h:125
void setCommsMode(Bool slave, BUInt txQueueSize)
Sets slave mode.
Definition: BoapMc.cpp:173
virtual BError processRequests(BTimeout timeoutUs=BTimeoutForever)
Check and process all requests.
Definition: BoapMc.cpp:237
Definition: BError.h:25
BError performSend(BoapMcPacket &tx)
Definition: BoapMc.cpp:118
void setAddress(BUInt8 addressTo, BUInt8 addressFrom)
Sets the to and from addresses.
Definition: BoapMc.cpp:187
BoapMcServiceObject()
Definition: BoapMc.cpp:129
BUInt8 length
Definition: BoapMc.h:22
BUInt32 getApiVersion()
Returns the API version.
Definition: BoapMc.cpp:192
Definition: BSemaphore.h:51
virtual ~BoapMcServiceObject()
Definition: BoapMc.cpp:133
char data[256 - sizeof(BoapMcPacketHead)]
Definition: BoapMc.h:34
BError performCall()
Performs a RPC call to the remote side.
Definition: BoapMc.cpp:306
BComms & ocomms
Definition: BoapMc.h:67
BoapMcType
Definition: BoapMc.h:18
BError performSend()
Performs a send to the named service.
Definition: BoapMc.cpp:63