~aleteoryx/muditaos

ee5b62a14e339e058de58eab354fa626111b3b3d — Kuba Kleczkowski 4 years ago 25e8829
[EGD-6651] Fix communication with modem on Linux

Fixed cellular bsp on Linux, so now emulator is able
to comunicate with modem. Fixed memory leak in CellularResult struct.
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();
        }