M module-bsp/board/linux/cellular/linux_cellular.cpp => module-bsp/board/linux/cellular/linux_cellular.cpp +9 -3
@@ 2,6 2,7 @@
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "linux_cellular.hpp"
+#include <module-bsp/bsp/cellular/CellularResult.hpp>
#include <iostream>
#include <algorithm>
@@ 101,17 102,22 @@ namespace bsp
cpp_freertos::LockGuard lock(serOutMutex);
+ auto buffer = static_cast<bsp::cellular::CellularDMAResultStruct *>(buf);
+
int ret;
for (;;) {
- ret = ::read(fd, buf, nbytes);
+ ret = ::read(fd, buffer->data, nbytes);
if (ret != -1 || errno != EINTR)
break;
}
-
+ if (ret > 0) {
+ buffer->resultCode = bsp::cellular::CellularResultCode::ReceivedAndIdle;
+ buffer->dataSize = ret;
+ }
#if _LINUX_UART_DEBUG
if (ret > 0) {
LOG_PRINTF("[RX] ");
- uint8_t *ptr = (uint8_t *)buf;
+ uint8_t *ptr = (uint8_t *)buffer->data;
for (size_t i = 0; i < ret; i++)
LOG_PRINTF("%02X ", (uint8_t)*ptr++);
LOG_PRINTF("\n");
M module-bsp/bsp/cellular/CellularResult.hpp => module-bsp/bsp/cellular/CellularResult.hpp +3 -3
@@ 48,9 48,9 @@ namespace bsp::cellular
CellularResultCode resultCode = CellularResultCode::Uninitialized;
std::vector<uint8_t> data;
- [[nodiscard]] auto serialize() const -> std::unique_ptr<uint8_t>
+ [[nodiscard]] auto serialize() const -> std::unique_ptr<uint8_t[]>
{
- auto serialized = std::unique_ptr<uint8_t>(new uint8_t[data.size() + sizeof(resultCode)]);
+ auto serialized = std::make_unique< uint8_t[]>(data.size() + sizeof(resultCode));
serialized.get()[0] = static_cast<unsigned char>(resultCode);
if (data.size() > 0) {
@@ 126,7 126,7 @@ namespace bsp::cellular
return &result;
}
- auto getSerialized() const -> std::unique_ptr<uint8_t>
+ auto getSerialized() const -> std::unique_ptr<uint8_t[]>
{
return result.serialize();
}