Skip to content

Commit 7d0352f

Browse files
authored
Merge pull request #35 from bringauto/BAF-967/ignore_empty_commands_and_statuses
Baf 967/ignore empty commands and statuses
2 parents fbe4832 + 706d8db commit 7d0352f

File tree

9 files changed

+77
-30
lines changed

9 files changed

+77
-30
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.25 FATAL_ERROR)
22
PROJECT(ModuleGateway)
33
INCLUDE(GNUInstallDirs)
44

5-
SET(BRINGAUTO_MODULE_GATEWAY_VERSION 1.1.13)
5+
SET(BRINGAUTO_MODULE_GATEWAY_VERSION 1.2.0)
66
ADD_COMPILE_DEFINITIONS(MODULE_GATEWAY_VERSION="${BRINGAUTO_MODULE_GATEWAY_VERSION}")
77
SET(CMAKE_INSTALL_RPATH "$ORIGIN/../${CMAKE_INSTALL_LIBDIR}")
88
SET(CMAKE_CXX_STANDARD 20)

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ RUN cmake .. -DCMAKE_BUILD_TYPE=Release -DBRINGAUTO_GET_PACKAGES_ONLY=ON
1414

1515
FROM bringauto/cpp-build-environment:latest AS mission_module_builder
1616

17-
ARG MISSION_MODULE_VERSION=v1.2.9
17+
ARG MISSION_MODULE_VERSION=v1.2.11
1818

1919
# Install mission module dependencies
2020
WORKDIR /home/bringauto/modules/
@@ -40,7 +40,7 @@ RUN cmake -DCMAKE_BUILD_TYPE=Release -DBRINGAUTO_INSTALL=ON -DCMAKE_INSTALL_PREF
4040

4141
FROM bringauto/cpp-build-environment:latest AS io_module_builder
4242

43-
ARG IO_MODULE_VERSION=v1.3.0
43+
ARG IO_MODULE_VERSION=v1.3.1
4444

4545
# Install io module dependencies
4646
WORKDIR /home/bringauto/modules

include/bringauto/modules/Buffer.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,15 @@ struct Buffer final {
5353
return raw_buffer_.data != nullptr && raw_buffer_.size_in_bytes > 0;
5454
}
5555

56+
/**
57+
* @brief Determine if buffer is empty.
58+
*
59+
* @return true if size of buffer is 0, false otherwise
60+
*/
61+
[[nodiscard]] bool isEmpty() const {
62+
return raw_buffer_.size_in_bytes == 0;
63+
}
64+
5665
private:
5766

5867
/**

source/bringauto/common_utils/ProtobufUtils.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ ProtobufUtils::createInternalServerCommandMessage(const InternalProtocol::Device
2424
const modules::Buffer &command) {
2525
InternalProtocol::InternalServer message {};
2626
auto deviceCommand = message.mutable_devicecommand();
27-
deviceCommand->set_commanddata(command.getStructBuffer().data, command.getStructBuffer().size_in_bytes);
27+
if (command.isAllocated()) {
28+
deviceCommand->set_commanddata(command.getStructBuffer().data, command.getStructBuffer().size_in_bytes);
29+
}
2830
auto device_ = deviceCommand->mutable_device();
2931
device_->CopyFrom(device);
3032
return message;
@@ -35,7 +37,9 @@ ProtobufUtils::createInternalClientStatusMessage(const InternalProtocol::Device
3537
const modules::Buffer &status) {
3638
InternalProtocol::InternalClient message {};
3739
auto deviceStatus = message.mutable_devicestatus();
38-
deviceStatus->set_statusdata(status.getStructBuffer().data, status.getStructBuffer().size_in_bytes);
40+
if (status.isAllocated()) {
41+
deviceStatus->set_statusdata(status.getStructBuffer().data, status.getStructBuffer().size_in_bytes);
42+
}
3943
auto device_ = deviceStatus->mutable_device();
4044
device_->CopyFrom(device);
4145
return message;
@@ -45,7 +49,9 @@ InternalProtocol::DeviceStatus ProtobufUtils::createDeviceStatus(const structure
4549
const modules::Buffer &status) {
4650
InternalProtocol::DeviceStatus deviceStatus {};
4751
deviceStatus.mutable_device()->CopyFrom(deviceId.convertToIPDevice());
48-
deviceStatus.set_statusdata(status.getStructBuffer().data, status.getStructBuffer().size_in_bytes);
52+
if (status.isAllocated()) {
53+
deviceStatus.set_statusdata(status.getStructBuffer().data, status.getStructBuffer().size_in_bytes);
54+
}
4955
return deviceStatus;
5056
}
5157

source/bringauto/external_client/ErrorAggregator.cpp

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,6 @@ ErrorAggregator::add_status_to_error_aggregator(const modules::Buffer& status, c
2626
return DEVICE_NOT_SUPPORTED;
2727
}
2828

29-
if(!status.isAllocated()) {
30-
settings::Logger::logWarning("Invalid status data for device: {}", device.convertToString());
31-
return NOT_OK;
32-
}
33-
3429
if(not devices_.contains(device)) {
3530
devices_.insert({ device, {}});
3631
}
@@ -54,12 +49,7 @@ int ErrorAggregator::get_last_status(modules::Buffer &status, const structures::
5449
return DEVICE_NOT_REGISTERED;
5550
}
5651

57-
auto &lastStatus = devices_[device].lastStatus;
58-
59-
if(!lastStatus.isAllocated()) {
60-
return NO_MESSAGE_AVAILABLE;
61-
}
62-
status = lastStatus;
52+
status = devices_[device].lastStatus;
6353
return OK;
6454
}
6555

source/bringauto/external_client/connection/ExternalConnection.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ void ExternalConnection::sendStatus(const InternalProtocol::DeviceStatus &status
6767

6868
const auto &statusData = status.statusdata();
6969
auto statusBuffer = moduleLibraryHandler->constructBuffer(statusData.size());
70-
common_utils::ProtobufUtils::copyStatusToBuffer(status, statusBuffer);
70+
if (!statusBuffer.isEmpty()) {
71+
common_utils::ProtobufUtils::copyStatusToBuffer(status, statusBuffer);
72+
}
7173
errorAggregator.add_status_to_error_aggregator(statusBuffer, deviceId);
7274
}
7375

@@ -378,7 +380,9 @@ void ExternalConnection::fillErrorAggregatorWithNotAckedStatuses() {
378380
const auto &statusData = notAckedStatus->getStatus().devicestatus().statusdata();
379381
auto statusBuffer = moduleLibrary_.moduleLibraryHandlers.at(device.module())->constructBuffer(
380382
statusData.size());
381-
common_utils::ProtobufUtils::copyStatusToBuffer(notAckedStatus->getStatus().devicestatus(), statusBuffer);
383+
if (!statusBuffer.isEmpty()) {
384+
common_utils::ProtobufUtils::copyStatusToBuffer(notAckedStatus->getStatus().devicestatus(), statusBuffer);
385+
}
382386

383387
auto deviceId = structures::DeviceIdentification(device);
384388
errorAggregators[device.module()].add_status_to_error_aggregator(statusBuffer, deviceId);
@@ -397,7 +401,9 @@ void ExternalConnection::fillErrorAggregator(const InternalProtocol::DeviceStatu
397401
const auto &statusData = deviceStatus.statusdata();
398402
auto statusBuffer = moduleLibrary_.moduleLibraryHandlers.at(moduleNum)->constructBuffer(
399403
statusData.size());
400-
common_utils::ProtobufUtils::copyStatusToBuffer(deviceStatus, statusBuffer);
404+
if (!statusBuffer.isEmpty()) {
405+
common_utils::ProtobufUtils::copyStatusToBuffer(deviceStatus, statusBuffer);
406+
}
401407

402408
auto deviceId = structures::DeviceIdentification(deviceStatus.device());
403409
auto &errorAggregator = errorAggregators.at(moduleNum);

source/bringauto/external_client/connection/messages/SentMessagesHandler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ void SentMessagesHandler::addNotAckedStatus(const ExternalProtocol::Status &stat
2424
int SentMessagesHandler::acknowledgeStatus(const ExternalProtocol::StatusResponse &statusResponse) {
2525
std::scoped_lock lock {ackMutex_};
2626
auto responseCounter = getStatusResponseCounter(statusResponse);
27-
for(auto i = 0; i < notAckedStatuses_.size(); ++i) {
27+
for(auto i = 0u; i < notAckedStatuses_.size(); ++i) {
2828
if(getStatusCounter(notAckedStatuses_[i]->getStatus()) == responseCounter) {
2929
notAckedStatuses_[i]->cancelTimer();
3030
notAckedStatuses_.erase(notAckedStatuses_.begin() + i);

source/bringauto/modules/ModuleHandler.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,11 +176,13 @@ void ModuleHandler::handleStatus(const ip::DeviceStatus &status) {
176176

177177
const auto &statusData = status.statusdata();
178178
auto statusBuffer = moduleHandler->constructBuffer(statusData.size());
179-
common_utils::ProtobufUtils::copyStatusToBuffer(status, statusBuffer);
179+
if (!statusBuffer.isEmpty()) {
180+
common_utils::ProtobufUtils::copyStatusToBuffer(status, statusBuffer);
181+
}
180182

181183
const auto deviceId = structures::DeviceIdentification(device);
182184

183-
if(!statusBuffer.isAllocated() || moduleHandler->statusDataValid(statusBuffer, deviceId.getDeviceType()) == NOT_OK) {
185+
if(moduleHandler->statusDataValid(statusBuffer, deviceId.getDeviceType()) == NOT_OK) {
184186
settings::Logger::logWarning("Invalid status data on device id: {}", deviceId.convertToString());
185187
return;
186188
}

source/bringauto/modules/ModuleManagerLibraryHandler.cpp

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,22 +75,40 @@ int ModuleManagerLibraryHandler::isDeviceTypeSupported(unsigned int device_type)
7575
int ModuleManagerLibraryHandler::sendStatusCondition(const Buffer current_status,
7676
const Buffer new_status,
7777
unsigned int device_type) {
78-
return sendStatusCondition_(current_status.getStructBuffer(), new_status.getStructBuffer(), device_type);
78+
struct ::buffer current_status_raw_buffer {};
79+
struct ::buffer new_status_raw_buffer {};
80+
81+
if (current_status.isAllocated()) {
82+
current_status_raw_buffer = current_status.getStructBuffer();
83+
}
84+
if (new_status.isAllocated()) {
85+
new_status_raw_buffer = new_status.getStructBuffer();
86+
}
87+
88+
return sendStatusCondition_(current_status_raw_buffer, new_status_raw_buffer, device_type);
7989
}
8090

8191
int ModuleManagerLibraryHandler::generateCommand(Buffer &generated_command,
8292
const Buffer new_status,
8393
const Buffer current_status,
8494
const Buffer current_command, unsigned int device_type) {
8595
struct ::buffer raw_buffer {};
96+
struct ::buffer new_status_raw_buffer {};
8697
struct ::buffer current_status_raw_buffer {};
98+
struct ::buffer current_command_raw_buffer {};
8799

100+
if (new_status.isAllocated()) {
101+
new_status_raw_buffer = new_status.getStructBuffer();
102+
}
88103
if (current_status.isAllocated()) {
89104
current_status_raw_buffer = current_status.getStructBuffer();
90105
}
106+
if (current_command.isAllocated()) {
107+
current_command_raw_buffer = current_command.getStructBuffer();
108+
}
91109

92-
int ret = generateCommand_(&raw_buffer, new_status.getStructBuffer(),
93-
current_status_raw_buffer, current_command.getStructBuffer(), device_type);
110+
int ret = generateCommand_(&raw_buffer, new_status_raw_buffer,
111+
current_status_raw_buffer, current_command_raw_buffer, device_type);
94112
if (ret == OK) {
95113
generated_command = constructBufferByTakeOwnership(raw_buffer);
96114
} else {
@@ -104,12 +122,16 @@ int ModuleManagerLibraryHandler::aggregateStatus(Buffer &aggregated_status,
104122
const Buffer new_status, unsigned int device_type) {
105123
struct ::buffer raw_buffer {};
106124
struct ::buffer current_status_raw_buffer {};
125+
struct ::buffer new_status_raw_buffer {};
107126

108127
if (current_status.isAllocated()) {
109128
current_status_raw_buffer = current_status.getStructBuffer();
110129
}
130+
if (new_status.isAllocated()) {
131+
new_status_raw_buffer = new_status.getStructBuffer();
132+
}
111133

112-
int ret = aggregateStatus_(&raw_buffer, current_status_raw_buffer, new_status.getStructBuffer(), device_type);
134+
int ret = aggregateStatus_(&raw_buffer, current_status_raw_buffer, new_status_raw_buffer, device_type);
113135
if (ret == OK) {
114136
aggregated_status = constructBufferByTakeOwnership(raw_buffer);
115137
} else {
@@ -124,12 +146,16 @@ int ModuleManagerLibraryHandler::aggregateError(Buffer &error_message,
124146

125147
struct ::buffer raw_buffer {};
126148
struct ::buffer current_error_raw_buffer {};
149+
struct ::buffer status_raw_buffer {};
127150

128151
if (current_error_message.isAllocated()) {
129152
current_error_raw_buffer = current_error_message.getStructBuffer();
130153
}
154+
if (status.isAllocated()) {
155+
status_raw_buffer = status.getStructBuffer();
156+
}
131157

132-
int ret = aggregateError_(&raw_buffer, current_error_raw_buffer, status.getStructBuffer(), device_type);
158+
int ret = aggregateError_(&raw_buffer, current_error_raw_buffer, status_raw_buffer, device_type);
133159
if (ret == OK) {
134160
error_message = constructBufferByTakeOwnership(raw_buffer);
135161
} else {
@@ -150,11 +176,19 @@ int ModuleManagerLibraryHandler::generateFirstCommand(Buffer &default_command, u
150176
}
151177

152178
int ModuleManagerLibraryHandler::statusDataValid(const Buffer status, unsigned int device_type) {
153-
return statusDataValid_(status.getStructBuffer(), device_type);
179+
struct ::buffer raw_buffer {};
180+
if (status.isAllocated()) {
181+
raw_buffer = status.getStructBuffer();
182+
}
183+
return statusDataValid_(raw_buffer, device_type);
154184
}
155185

156186
int ModuleManagerLibraryHandler::commandDataValid(const Buffer command, unsigned int device_type) {
157-
return commandDataValid_(command.getStructBuffer(), device_type);
187+
struct ::buffer raw_buffer {};
188+
if (command.isAllocated()) {
189+
raw_buffer = command.getStructBuffer();
190+
}
191+
return commandDataValid_(raw_buffer, device_type);
158192
}
159193

160194
int ModuleManagerLibraryHandler::allocate(struct buffer *buffer_pointer, size_t size_in_bytes){

0 commit comments

Comments
 (0)