Skip to content

Commit 5a50ee5

Browse files
committed
refactor boardConfigurationProtocol
refactor packetmanager Serial Agent init clear packet even if recognized
1 parent 73f1a33 commit 5a50ee5

File tree

6 files changed

+49
-49
lines changed

6 files changed

+49
-49
lines changed

src/ConfiguratorAgents/agents/BLE/BLEAgent.h

+10-10
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
#error "Board not supported for BLE configuration"
4646
#endif
4747

48-
class BLEAgentClass : public ConfiguratorAgent, BoardConfigurationProtocol {
48+
class BLEAgentClass : public ConfiguratorAgent, private BoardConfigurationProtocol {
4949
public:
5050
BLEAgentClass();
5151
AgentConfiguratorStates begin();
@@ -83,10 +83,10 @@ class BLEAgentClass : public ConfiguratorAgent, BoardConfigurationProtocol {
8383
static void bleOutputStreamSubscribed(BLEDevice central, BLECharacteristic characteristic);
8484

8585
/*BoardConfigurationProtocol pure virtual methods implementation*/
86-
bool hasReceivedBytes();
87-
size_t receivedBytes();
88-
uint8_t readByte();
89-
int writeBytes(const uint8_t *data, size_t len);
86+
bool received();
87+
size_t available();
88+
uint8_t read();
89+
int write(const uint8_t *data, size_t len);
9090
void handleDisconnectRequest();
9191
void clearInputBuffer();
9292
};
@@ -202,7 +202,7 @@ inline bool BLEAgentClass::receivedMsgAvailable() {
202202
}
203203

204204
inline bool BLEAgentClass::sendMsg(ProvisioningOutputMessage &msg) {
205-
return BoardConfigurationProtocol::sendNewMsg(msg);
205+
return BoardConfigurationProtocol::sendMsg(msg);
206206
}
207207

208208
inline bool BLEAgentClass::isPeerConnected() {
@@ -220,27 +220,27 @@ inline void BLEAgentClass::bleOutputStreamSubscribed(BLEDevice central, BLEChara
220220
DEBUG_INFO("BLEAgentClass Connected event, central: %s", central.address().c_str());
221221
}
222222

223-
inline bool BLEAgentClass::hasReceivedBytes() {
223+
inline bool BLEAgentClass::received() {
224224
bool res = _inputStreamCharacteristic.written();
225225
if (res) {
226226
_readByte = 0;
227227
}
228228
return res;
229229
}
230230

231-
inline size_t BLEAgentClass::receivedBytes() {
231+
inline size_t BLEAgentClass::available() {
232232
return _inputStreamCharacteristic.valueLength();
233233
}
234234

235-
inline uint8_t BLEAgentClass::readByte() {
235+
inline uint8_t BLEAgentClass::read() {
236236
const uint8_t *charValue = _inputStreamCharacteristic.value();
237237
if (_readByte < _inputStreamCharacteristic.valueLength()) {
238238
return charValue[_readByte++];
239239
}
240240
return 0;
241241
}
242242

243-
inline int BLEAgentClass::writeBytes(const uint8_t *data, size_t len) {
243+
inline int BLEAgentClass::write(const uint8_t *data, size_t len) {
244244
return _outputStreamCharacteristic.write(data, len);
245245
}
246246

src/ConfiguratorAgents/agents/BoardConfigurationProtocol/BoardConfigurationProtocol.cpp

+7-7
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ bool BoardConfigurationProtocol::getMsg(ProvisioningInputMessage &msg) {
4848
return true;
4949
}
5050

51-
bool BoardConfigurationProtocol::sendNewMsg(ProvisioningOutputMessage &msg) {
51+
bool BoardConfigurationProtocol::sendMsg(ProvisioningOutputMessage &msg) {
5252
bool res = false;
5353
switch (msg.type) {
5454
case MessageOutputType::STATUS:
@@ -94,15 +94,15 @@ BoardConfigurationProtocol::TransmissionResult BoardConfigurationProtocol::sendA
9494
transmitStream();
9595
}
9696

97-
if (!hasReceivedBytes()) {
97+
if (!received()) {
9898
return transmissionRes;
9999
}
100100

101-
int receivedDataLen = receivedBytes();
101+
int receivedDataLen = available();
102102

103103
for (int i = 0; i < receivedDataLen; i++) {
104104
PacketManager::ReceivingState res;
105-
uint8_t val = readByte();
105+
uint8_t val = read();
106106

107107
res = PacketManager::PacketReceiver::getInstance().handleReceivedByte(_packet, val);
108108
if (res == PacketManager::ReceivingState::ERROR) {
@@ -126,11 +126,11 @@ BoardConfigurationProtocol::TransmissionResult BoardConfigurationProtocol::sendA
126126
break;
127127
case PacketManager::MessageType::TRANSMISSION_CONTROL:
128128
{
129-
if (_packet.Payload.len() == 1 && _packet.Payload[0] == 0x03) {
129+
if (_packet.Payload.len() == 1 && _packet.Payload[0] == (uint8_t)PacketManager::TransmissionControlMessage::NACK) {
130130
for (std::list<OutputPacketBuffer>::iterator packet = _outputMessagesList.begin(); packet != _outputMessagesList.end(); ++packet) {
131131
packet->startProgress();
132132
}
133-
} else if (_packet.Payload.len() == 1 && _packet.Payload[0] == 0x02) {
133+
} else if (_packet.Payload.len() == 1 && _packet.Payload[0] == (uint8_t)PacketManager::TransmissionControlMessage::DISCONNECT) {
134134
handleDisconnectRequest();
135135
}
136136
}
@@ -344,7 +344,7 @@ BoardConfigurationProtocol::TransmissionResult BoardConfigurationProtocol::trans
344344
for (std::list<OutputPacketBuffer>::iterator packet = _outputMessagesList.begin(); packet != _outputMessagesList.end(); ++packet) {
345345
if (packet->hasBytesToSend()) {
346346
res = TransmissionResult::NOT_COMPLETED;
347-
packet->incrementBytesSent(writeBytes(packet->get_ptrAt(packet->bytesSent()), packet->bytesToSend()));
347+
packet->incrementBytesSent(write(packet->get_ptrAt(packet->bytesSent()), packet->bytesToSend()));
348348
#if BCP_DEBUG_PACKET == 1
349349
DEBUG_DEBUG("BoardConfigurationProtocol::%s transferred: %d of %d", __FUNCTION__, packet->bytesSent(), packet->len());
350350
#endif

src/ConfiguratorAgents/agents/BoardConfigurationProtocol/BoardConfigurationProtocol.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
class BoardConfigurationProtocol {
1515
public:
1616
bool getMsg(ProvisioningInputMessage &msg);
17-
bool sendNewMsg(ProvisioningOutputMessage &msg);
17+
bool sendMsg(ProvisioningOutputMessage &msg);
1818
bool msgAvailable();
1919

2020
protected:
@@ -29,10 +29,10 @@ class BoardConfigurationProtocol {
2929
void clear();
3030
void checkOutputPacketValidity();
3131
/*Pure virtual methods that depends on physical interface*/
32-
virtual bool hasReceivedBytes() = 0;
33-
virtual size_t receivedBytes() = 0;
34-
virtual uint8_t readByte() = 0;
35-
virtual int writeBytes(const uint8_t *data, size_t len) = 0;
32+
virtual bool received() = 0;
33+
virtual size_t available() = 0;
34+
virtual uint8_t read() = 0;
35+
virtual int write(const uint8_t *data, size_t len) = 0;
3636
virtual void handleDisconnectRequest() = 0;
3737
virtual bool isPeerConnected() = 0;
3838
virtual void clearInputBuffer() = 0;

src/ConfiguratorAgents/agents/BoardConfigurationProtocol/PacketManager.cpp

+6-9
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ namespace PacketManager {
6767
}
6868

6969
if (millis() - packet.LastByteReceivedTs > BYTES_VALIDITY_MS) {
70-
clearInputBuffers(packet);
70+
clear(packet);
7171
}
7272

7373
packet.LastByteReceivedTs = millis();
@@ -76,7 +76,7 @@ namespace PacketManager {
7676
case ReceivingState::WAITING_HEADER: _state = handle_WaitingHeader (packet,byte); break;
7777
case ReceivingState::WAITING_PAYLOAD: _state = handle_WaitingPayload(packet,byte); break;
7878
case ReceivingState::WAITING_END: _state = handle_WaitingEnd (packet,byte); break;
79-
default: break;
79+
default: break;
8080
}
8181

8282
if (_state == ReceivingState::RECEIVED) {
@@ -87,15 +87,14 @@ namespace PacketManager {
8787
}
8888
}
8989

90+
if (_state == ReceivingState::ERROR) {
91+
clear(packet);
92+
}
93+
9094
return _state;
9195
}
9296

9397
void PacketReceiver::clear(Packet_t &packet) {
94-
clearInputBuffers(packet);
95-
_state = ReceivingState::WAITING_HEADER;
96-
}
97-
98-
void PacketReceiver::clearInputBuffers(Packet_t &packet) {
9998
packet.LastByteReceivedTs = 0;
10099
packet.Header.clear();
101100
packet.Payload.reset();
@@ -157,7 +156,6 @@ namespace PacketManager {
157156

158157
if (packet.Header.receivedAll()) {
159158
if (!checkBeginPacket(packet)) {
160-
clearInputBuffers(packet);
161159
return ReceivingState::ERROR;
162160
}
163161

@@ -193,7 +191,6 @@ namespace PacketManager {
193191
return ReceivingState::RECEIVED;
194192
} else {
195193
//Error
196-
clearInputBuffers(packet);
197194
return ReceivingState::ERROR;
198195
}
199196
}

src/ConfiguratorAgents/agents/BoardConfigurationProtocol/PacketManager.h

+9-5
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,19 @@
1212

1313
namespace PacketManager {
1414
enum class ReceivingState { WAITING_HEADER,
15-
WAITING_PAYLOAD,
16-
WAITING_END,
17-
RECEIVED,
18-
ERROR };
15+
WAITING_PAYLOAD,
16+
WAITING_END,
17+
RECEIVED,
18+
ERROR };
1919

2020
enum class MessageType { DATA = 2,
2121
TRANSMISSION_CONTROL = 3 };
2222

23+
enum class TransmissionControlMessage : uint8_t{
24+
CONNECT = 0x01,
25+
DISCONNECT = 0x02,
26+
NACK = 0x03 };
27+
2328
/*
2429
* The packet structure
2530
* 0x55 0xaa <type> <len> <payload> <crc> 0xaa 0x55
@@ -56,7 +61,6 @@ namespace PacketManager {
5661
ReceivingState handle_WaitingHeader(Packet_t &packet, uint8_t byte);
5762
ReceivingState handle_WaitingPayload(Packet_t &packet, uint8_t byte);
5863
ReceivingState handle_WaitingEnd(Packet_t &packet, uint8_t byte);
59-
void clearInputBuffers(Packet_t &packet);
6064
bool checkBeginPacket(Packet_t &packet);
6165
bool checkEndPacket(Packet_t &packet);
6266
bool checkCRC(Packet_t &packet);

src/ConfiguratorAgents/agents/Serial/SerialAgent.h

+12-13
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#include "ConfiguratorAgents/agents/BoardConfigurationProtocol/cbor/CBORInstances.h"
1515
#include "Utility/LEDFeedback/LEDFeedback.h"
1616

17-
class SerialAgentClass : public ConfiguratorAgent, BoardConfigurationProtocol { //TODO put private BoardConfigurationProtocol
17+
class SerialAgentClass : public ConfiguratorAgent, private BoardConfigurationProtocol {
1818
public:
1919
SerialAgentClass();
2020
AgentConfiguratorStates begin();
@@ -37,10 +37,10 @@ class SerialAgentClass : public ConfiguratorAgent, BoardConfigurationProtocol {
3737
AgentConfiguratorStates handlePeerConnected();
3838

3939
/*BoardConfigurationProtocol pure virtual methods implementation*/
40-
bool hasReceivedBytes();
41-
size_t receivedBytes();
42-
uint8_t readByte();
43-
int writeBytes(const uint8_t *data, size_t len);
40+
bool received();
41+
size_t available();
42+
uint8_t read();
43+
int write(const uint8_t *data, size_t len);
4444
void handleDisconnectRequest();
4545
void clearInputBuffer();
4646
};
@@ -109,7 +109,7 @@ inline bool SerialAgentClass::receivedMsgAvailable() {
109109
}
110110

111111
inline bool SerialAgentClass::sendMsg(ProvisioningOutputMessage &msg) {
112-
return BoardConfigurationProtocol::sendNewMsg(msg);
112+
return BoardConfigurationProtocol::sendMsg(msg);
113113
}
114114

115115
inline bool SerialAgentClass::isPeerConnected() {
@@ -127,15 +127,14 @@ inline ConfiguratorAgent::AgentConfiguratorStates SerialAgentClass::handleInit()
127127
PacketManager::ReceivingState res = PacketManager::PacketReceiver::getInstance().handleReceivedByte(_packet, byte);
128128
if (res == PacketManager::ReceivingState::RECEIVED) {
129129
if (_packet.Type == PacketManager::MessageType::TRANSMISSION_CONTROL) {
130-
if (_packet.Payload.len() == 1 && _packet.Payload[0] == 0x01) {//TODO use define
130+
if (_packet.Payload.len() == 1 && _packet.Payload[0] == (uint8_t)PacketManager::TransmissionControlMessage::CONNECT) {
131131
//CONNECT
132132
nextState = AgentConfiguratorStates::PEER_CONNECTED;
133-
PacketManager::PacketReceiver::getInstance().clear(_packet);
134133
}
135134
}
135+
PacketManager::PacketReceiver::getInstance().clear(_packet);
136136
} else if (res == PacketManager::ReceivingState::ERROR) {
137137
DEBUG_DEBUG("SerialAgentClass::%s Error receiving packet", __FUNCTION__);
138-
PacketManager::PacketReceiver::getInstance().clear(_packet);
139138
clearInputBuffer();
140139
}
141140
}
@@ -163,19 +162,19 @@ inline ConfiguratorAgent::AgentConfiguratorStates SerialAgentClass::handlePeerCo
163162
return nextState;
164163
}
165164

166-
inline bool SerialAgentClass::hasReceivedBytes() {
165+
inline bool SerialAgentClass::received() {
167166
return Serial.available() > 0;
168167
}
169168

170-
inline size_t SerialAgentClass::receivedBytes() {
169+
inline size_t SerialAgentClass::available() {
171170
return Serial.available();
172171
}
173172

174-
inline uint8_t SerialAgentClass::readByte() {
173+
inline uint8_t SerialAgentClass::read() {
175174
return Serial.read();
176175
}
177176

178-
inline int SerialAgentClass::writeBytes(const uint8_t *data, size_t len) {
177+
inline int SerialAgentClass::write(const uint8_t *data, size_t len) {
179178
return Serial.write(data, len);
180179
}
181180

0 commit comments

Comments
 (0)