Skip to content

Commit 8a0de0c

Browse files
committed
refactor BoardConfigurationProtocol and Agents
happy linter
1 parent aaaadbc commit 8a0de0c

File tree

7 files changed

+150
-111
lines changed

7 files changed

+150
-111
lines changed

src/ConfiguratorAgents/agents/BLE/BLEAgent.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,21 @@ ConfiguratorAgent::AgentConfiguratorStates BLEAgentClass::poll() {
133133
}
134134

135135
bool BLEAgentClass::getReceivedMsg(ProvisioningInputMessage &msg) {
136-
bool res = BoardConfigurationProtocol::getReceivedMsg(msg);
136+
bool res = BoardConfigurationProtocol::getMsg(msg);
137137
if (receivedMsgAvailable() == false) {
138138
_state = AgentConfiguratorStates::PEER_CONNECTED;
139139
}
140140
return res;
141141
}
142142

143+
bool BLEAgentClass::receivedMsgAvailable() {
144+
return BoardConfigurationProtocol::msgAvailable();
145+
}
146+
147+
bool BLEAgentClass::sendMsg(ProvisioningOutputMessage &msg) {
148+
return BoardConfigurationProtocol::sendNewMsg(msg);
149+
}
150+
143151
bool BLEAgentClass::isPeerConnected() {
144152
return _outputStreamCharacteristic.subscribed() && (_state == AgentConfiguratorStates::PEER_CONNECTED || _state == AgentConfiguratorStates::RECEIVED_DATA);
145153
}

src/ConfiguratorAgents/agents/BLE/BLEAgent.h

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,19 @@
1010
#include <list>
1111
#include "Arduino.h"
1212
#include <ArduinoBLE.h>
13+
#include "ConfiguratorAgents/agents/ConfiguratorAgent.h"
1314
#include "ConfiguratorAgents/agents/BoardConfigurationProtocol/BoardConfigurationProtocol.h"
1415

15-
class BLEAgentClass : public BoardConfigurationProtocol {
16+
class BLEAgentClass : public ConfiguratorAgent, BoardConfigurationProtocol {
1617
public:
1718
BLEAgentClass();
1819
AgentConfiguratorStates begin();
1920
AgentConfiguratorStates end();
2021
AgentConfiguratorStates poll();
2122
void disconnectPeer();
22-
bool getReceivedMsg(ProvisioningInputMessage &msg) override;
23+
bool receivedMsgAvailable();
24+
bool getReceivedMsg(ProvisioningInputMessage &msg);
25+
bool sendMsg(ProvisioningOutputMessage &msg);
2326
bool isPeerConnected();
2427
inline AgentTypes getAgentType() {
2528
return AgentTypes::BLE;
@@ -31,22 +34,28 @@ class BLEAgentClass : public BoardConfigurationProtocol {
3134

3235
static inline BLEEvent _bleEvent = BLEEvent::NONE;
3336
AgentConfiguratorStates _state = AgentConfiguratorStates::END;
34-
BLEService _confService; // Bluetooth® Low Energy LED Service
37+
BLEService _confService; // BLE Configuration Service
3538
BLECharacteristic _inputStreamCharacteristic;
3639
BLECharacteristic _outputStreamCharacteristic;
3740
String _localName;
3841
uint8_t _manufacturerData[8];
3942
size_t _readByte = 0;
43+
44+
/*BLEAgent private methods*/
4045
AgentConfiguratorStates handlePeerConnected();
4146
bool setLocalName();
4247
bool setManufacturerData();
48+
49+
/*ArduinoBLE events callback functions*/
4350
static void blePeripheralDisconnectHandler(BLEDevice central);
4451
static void bleOutputStreamSubscribed(BLEDevice central, BLECharacteristic characteristic);
45-
virtual bool hasReceivedBytes();
46-
virtual size_t receivedBytes();
47-
virtual uint8_t readByte();
48-
virtual int writeBytes(const uint8_t *data, size_t len);
49-
virtual void handleDisconnectRequest();
52+
53+
/*BoardConfigurationProtocol pure virtual methods implementation*/
54+
bool hasReceivedBytes();
55+
size_t receivedBytes();
56+
uint8_t readByte();
57+
int writeBytes(const uint8_t *data, size_t len);
58+
void handleDisconnectRequest();
5059
};
5160

5261
extern BLEAgentClass BLEAgent;

src/ConfiguratorAgents/agents/BoardConfigurationProtocol/BoardConfigurationProtocol.cpp

Lines changed: 100 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -10,75 +10,12 @@
1010
#include "CBORAdapter.h"
1111
#include "cbor/CBOR.h"
1212

13-
#define PACKET_VALIDITY_S 30000
13+
#define PACKET_VALIDITY_MS 30000
1414

15-
BoardConfigurationProtocol::TransmissionResult BoardConfigurationProtocol::sendAndReceive() {
16-
TransmissionResult transmissionRes = TransmissionResult::NOT_COMPLETED;
17-
if (!isPeerConnected()) {
18-
return TransmissionResult::PEER_NOT_AVAILABLE;
19-
}
20-
21-
if (hasReceivedBytes()) {
22-
int receivedDataLen = receivedBytes();
23-
24-
PacketManager::ReceivingState res;
25-
PacketManager::ReceivedData receivedData;
26-
27-
for (int i = 0; i < receivedDataLen; i++) {
28-
uint8_t val = readByte();
29-
res = Packet.handleReceivedByte(receivedData, val);
30-
if (res == PacketManager::ReceivingState::ERROR) {
31-
DEBUG_DEBUG("BoardConfigurationProtocol::%s Error receiving packet", __FUNCTION__);
32-
sendNak();
33-
transmissionRes = TransmissionResult::INVALID_DATA;
34-
break;
35-
} else if (res == PacketManager::ReceivingState::RECEIVED) {
36-
switch (receivedData.type) {
37-
case PacketManager::MessageType::DATA:
38-
{
39-
DEBUG_DEBUG("BoardConfigurationProtocol::%s Received data packet", __FUNCTION__);
40-
printPacket("payload", &receivedData.payload[0], receivedData.payload.len());
41-
_inputMessagesList.push_back(receivedData.payload);
42-
//Consider all sent data as received
43-
_outputMessagesList.clear();
44-
transmissionRes = TransmissionResult::DATA_RECEIVED;
45-
}
46-
break;
47-
case PacketManager::MessageType::TRANSMISSION_CONTROL:
48-
{
49-
if (receivedData.payload.len() == 1 && receivedData.payload[0] == 0x03) {
50-
51-
DEBUG_DEBUG("BoardConfigurationProtocol::%s Received NACK packet", __FUNCTION__);
52-
for (std::list<OutputPacketBuffer>::iterator packet = _outputMessagesList.begin(); packet != _outputMessagesList.end(); ++packet) {
53-
packet->startProgress();
54-
}
55-
} else if (receivedData.payload.len() == 1 && receivedData.payload[0] == 0x02) {
56-
DEBUG_DEBUG("BoardConfigurationProtocol::%s Received disconnect request", __FUNCTION__);
57-
handleDisconnectRequest();
58-
}
59-
}
60-
break;
61-
default:
62-
break;
63-
}
64-
}
65-
}
66-
}
67-
68-
if (_outputMessagesList.size() > 0) {
69-
checkOutputPacketValidity();
70-
transmitStream();
71-
}
72-
73-
return transmissionRes;
74-
}
75-
76-
bool BoardConfigurationProtocol::sendNak() {
77-
uint8_t data = 0x03;
78-
return sendData(PacketManager::MessageType::TRANSMISSION_CONTROL, &data, sizeof(data));
79-
}
80-
81-
bool BoardConfigurationProtocol::getReceivedMsg(ProvisioningInputMessage &msg) {
15+
/******************************************************************************
16+
* PUBLIC MEMBER FUNCTIONS
17+
******************************************************************************/
18+
bool BoardConfigurationProtocol::getMsg(ProvisioningInputMessage &msg) {
8219
if (_inputMessagesList.size() == 0) {
8320
return false;
8421
}
@@ -129,7 +66,7 @@ bool BoardConfigurationProtocol::getReceivedMsg(ProvisioningInputMessage &msg) {
12966
return true;
13067
}
13168

132-
bool BoardConfigurationProtocol::sendMsg(ProvisioningOutputMessage &msg) {
69+
bool BoardConfigurationProtocol::sendNewMsg(ProvisioningOutputMessage &msg) {
13370
bool res = false;
13471
switch (msg.type) {
13572
case MessageOutputType::STATUS:
@@ -153,16 +90,85 @@ bool BoardConfigurationProtocol::sendMsg(ProvisioningOutputMessage &msg) {
15390
return res;
15491
}
15592

156-
bool BoardConfigurationProtocol::receivedMsgAvailable() {
93+
bool BoardConfigurationProtocol::msgAvailable() {
15794
return _inputMessagesList.size() > 0;
15895
}
15996

97+
/******************************************************************************
98+
* PROTECTED MEMBER FUNCTIONS
99+
******************************************************************************/
100+
BoardConfigurationProtocol::TransmissionResult BoardConfigurationProtocol::sendAndReceive() {
101+
TransmissionResult transmissionRes = TransmissionResult::NOT_COMPLETED;
102+
if (!isPeerConnected()) {
103+
return TransmissionResult::PEER_NOT_AVAILABLE;
104+
}
105+
106+
if (hasReceivedBytes()) {
107+
int receivedDataLen = receivedBytes();
108+
109+
PacketManager::ReceivingState res;
110+
PacketManager::ReceivedData receivedData;
111+
112+
for (int i = 0; i < receivedDataLen; i++) {
113+
uint8_t val = readByte();
114+
res = Packet.handleReceivedByte(receivedData, val);
115+
if (res == PacketManager::ReceivingState::ERROR) {
116+
DEBUG_DEBUG("BoardConfigurationProtocol::%s Error receiving packet", __FUNCTION__);
117+
sendNak();
118+
transmissionRes = TransmissionResult::INVALID_DATA;
119+
break;
120+
} else if (res == PacketManager::ReceivingState::RECEIVED) {
121+
switch (receivedData.type) {
122+
case PacketManager::MessageType::DATA:
123+
{
124+
DEBUG_DEBUG("BoardConfigurationProtocol::%s Received data packet", __FUNCTION__);
125+
printPacket("payload", &receivedData.payload[0], receivedData.payload.len());
126+
_inputMessagesList.push_back(receivedData.payload);
127+
//Consider all sent data as received
128+
_outputMessagesList.clear();
129+
transmissionRes = TransmissionResult::DATA_RECEIVED;
130+
}
131+
break;
132+
case PacketManager::MessageType::TRANSMISSION_CONTROL:
133+
{
134+
if (receivedData.payload.len() == 1 && receivedData.payload[0] == 0x03) {
135+
136+
DEBUG_DEBUG("BoardConfigurationProtocol::%s Received NACK packet", __FUNCTION__);
137+
for (std::list<OutputPacketBuffer>::iterator packet = _outputMessagesList.begin(); packet != _outputMessagesList.end(); ++packet) {
138+
packet->startProgress();
139+
}
140+
} else if (receivedData.payload.len() == 1 && receivedData.payload[0] == 0x02) {
141+
DEBUG_DEBUG("BoardConfigurationProtocol::%s Received disconnect request", __FUNCTION__);
142+
handleDisconnectRequest();
143+
}
144+
}
145+
break;
146+
default:
147+
break;
148+
}
149+
}
150+
}
151+
}
152+
153+
if (_outputMessagesList.size() > 0) {
154+
checkOutputPacketValidity();
155+
transmitStream();
156+
}
157+
158+
return transmissionRes;
159+
}
160+
161+
bool BoardConfigurationProtocol::sendNak() {
162+
uint8_t data = 0x03;
163+
return sendData(PacketManager::MessageType::TRANSMISSION_CONTROL, &data, sizeof(data));
164+
}
165+
160166
bool BoardConfigurationProtocol::sendData(PacketManager::MessageType type, const uint8_t *data, size_t len) {
161167
OutputPacketBuffer outputMsg;
162-
outputMsg.setValidityTs(millis() + PACKET_VALIDITY_S);
168+
outputMsg.setValidityTs(millis() + PACKET_VALIDITY_MS);
163169

164-
if (!Packet.createPacket(outputMsg, type, data, len)) {
165-
DEBUG_WARNING("BLEConfiguratorAgent::%s Failed to create packet", __FUNCTION__);
170+
if (!PacketManager::createPacket(outputMsg, type, data, len)) {
171+
DEBUG_WARNING("BoardConfigurationProtocol::%s Failed to create packet", __FUNCTION__);
166172
return false;
167173
}
168174

@@ -181,6 +187,27 @@ bool BoardConfigurationProtocol::sendData(PacketManager::MessageType type, const
181187
return true;
182188
}
183189

190+
void BoardConfigurationProtocol::clear() {
191+
Packet.clear();
192+
_outputMessagesList.clear();
193+
_inputMessagesList.clear();
194+
}
195+
196+
void BoardConfigurationProtocol::checkOutputPacketValidity() {
197+
if (_outputMessagesList.size() == 0) {
198+
return;
199+
}
200+
_outputMessagesList.remove_if([](OutputPacketBuffer &packet) {
201+
if (packet.getValidityTs() != 0 && packet.getValidityTs() < millis()) {
202+
return true;
203+
}
204+
return false;
205+
});
206+
}
207+
208+
/******************************************************************************
209+
* PRIVATE MEMBER FUNCTIONS
210+
******************************************************************************/
184211
bool BoardConfigurationProtocol::sendStatus(StatusMessage msg) {
185212
bool res = false;
186213
size_t len = CBOR_DATA_STATUS_LEN;
@@ -328,24 +355,6 @@ BoardConfigurationProtocol::TransmissionResult BoardConfigurationProtocol::trans
328355
return res;
329356
}
330357

331-
void BoardConfigurationProtocol::clear() {
332-
Packet.clear();
333-
_outputMessagesList.clear();
334-
_inputMessagesList.clear();
335-
}
336-
337-
void BoardConfigurationProtocol::checkOutputPacketValidity() {
338-
if (_outputMessagesList.size() == 0) {
339-
return;
340-
}
341-
_outputMessagesList.remove_if([](OutputPacketBuffer &packet) {
342-
if (packet.getValidityTs() != 0 && packet.getValidityTs() < millis()) {
343-
return true;
344-
}
345-
return false;
346-
});
347-
}
348-
349358
void BoardConfigurationProtocol::printPacket(const char *label, const uint8_t *data, size_t len) {
350359
if (Debug.getDebugLevel() == DBG_VERBOSE) {
351360
DEBUG_VERBOSE("Print %s data:", label);

src/ConfiguratorAgents/agents/BoardConfigurationProtocol/BoardConfigurationProtocol.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,13 @@
99
#pragma once
1010
#include <list>
1111
#include "PacketManager.h"
12-
#include "ConfiguratorAgents/agents/ConfiguratorAgent.h"
1312
#include "ConfiguratorAgents/MessagesDefinitions.h"
1413

15-
class BoardConfigurationProtocol : public ConfiguratorAgent {
14+
class BoardConfigurationProtocol {
1615
public:
17-
virtual bool getReceivedMsg(ProvisioningInputMessage &msg);
18-
virtual bool sendMsg(ProvisioningOutputMessage &msg);
19-
virtual bool receivedMsgAvailable();
16+
bool getMsg(ProvisioningInputMessage &msg);
17+
bool sendNewMsg(ProvisioningOutputMessage &msg);
18+
bool msgAvailable();
2019

2120
protected:
2221
enum class TransmissionResult { INVALID_DATA = -2,
@@ -35,6 +34,7 @@ class BoardConfigurationProtocol : public ConfiguratorAgent {
3534
virtual uint8_t readByte() = 0;
3635
virtual int writeBytes(const uint8_t *data, size_t len) = 0;
3736
virtual void handleDisconnectRequest() = 0;
37+
virtual bool isPeerConnected() = 0;
3838

3939
private:
4040
bool sendStatus(StatusMessage msg);

src/ConfiguratorAgents/agents/BoardConfigurationProtocol/PacketManager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class PacketManager {
2525
} ReceivedData;
2626
PacketManager()
2727
: _tempInputMessageHeader{ 5 }, _tempInputMessageEnd{ 4 } {};
28-
bool createPacket(OutputPacketBuffer &msg, MessageType type, const uint8_t *data, size_t len);
28+
static bool createPacket(OutputPacketBuffer &msg, MessageType type, const uint8_t *data, size_t len);
2929
ReceivingState handleReceivedByte(ReceivedData &receivedData, uint8_t byte);
3030
void clear();
3131
private:

src/ConfiguratorAgents/agents/Serial/SerialAgent.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,21 @@ void SerialAgentClass::disconnectPeer() {
5959
}
6060

6161
bool SerialAgentClass::getReceivedMsg(ProvisioningInputMessage &msg) {
62-
bool res = BoardConfigurationProtocol::getReceivedMsg(msg);
62+
bool res = BoardConfigurationProtocol::getMsg(msg);
6363
if (receivedMsgAvailable() == false) {
6464
_state = AgentConfiguratorStates::PEER_CONNECTED;
6565
}
6666
return res;
6767
}
6868

69+
bool SerialAgentClass::receivedMsgAvailable() {
70+
return BoardConfigurationProtocol::msgAvailable();
71+
}
72+
73+
bool SerialAgentClass::sendMsg(ProvisioningOutputMessage &msg) {
74+
return BoardConfigurationProtocol::sendNewMsg(msg);
75+
}
76+
6977
bool SerialAgentClass::isPeerConnected() {
7078
return Serial && (_state == AgentConfiguratorStates::PEER_CONNECTED || _state == AgentConfiguratorStates::RECEIVED_DATA);
7179
}

0 commit comments

Comments
 (0)