~aleteoryx/muditaos

55ee585837895d9de729735421144a7e3af88d27 — Lefucjusz 2 years ago d605589
[CP-2184] Fix Pure not connecting to MC after leaving tethering

Fix of the issue that after disconnecting tethering Pure
would not connect back to Center, only USB cable
reconnection would resolve the issue.
M module-services/service-desktop/WorkerDesktop.cpp => module-services/service-desktop/WorkerDesktop.cpp +12 -2
@@ 77,7 77,7 @@ void WorkerDesktop::closeWorker(void)

    bsp::usbDeinit();

    this->close();
    close();

    cpuSentinel->ReleaseMinimumFrequency();
    auto sentinelRemoveMsg = std::make_shared<sys::SentinelRemovalMessage>("WorkerDesktop");


@@ 93,6 93,8 @@ void WorkerDesktop::closeWorker(void)
void WorkerDesktop::reset()
{
    initialized = false;
    configured  = false;

    bsp::usbDeinit();

    const bsp::usbInitParams initParams = {receiveQueue,


@@ 166,6 168,7 @@ bool WorkerDesktop::handleReceiveQueueMessage(std::shared_ptr<sys::WorkerQueue> 
    delete receivedMsg;
    return true;
}

bool WorkerDesktop::handleSendQueueMessage(std::shared_ptr<sys::WorkerQueue> &queue)
{
    if (!initialized) {


@@ 179,12 182,13 @@ bool WorkerDesktop::handleSendQueueMessage(std::shared_ptr<sys::WorkerQueue> &qu

    const std::uint32_t dataSent = bsp::usbCDCSend(sendMsg);
    if (dataSent != sendMsg->length()) {
        LOG_ERROR("Data not sent! Data sent: %" PRIu32 "B, Msg length: %zuB", dataSent, sendMsg->length());
        LOG_ERROR("Data not sent! Data sent: %" PRIu32 "B, msg length: %zuB", dataSent, sendMsg->length());
    }

    delete sendMsg;
    return true;
}

bool WorkerDesktop::handleServiceQueueMessage(std::shared_ptr<sys::WorkerQueue> &queue)
{
    if (!initialized) {


@@ 205,6 209,7 @@ bool WorkerDesktop::handleServiceQueueMessage(std::shared_ptr<sys::WorkerQueue> 
    }
    return true;
}

bool WorkerDesktop::handleIrqQueueMessage(std::shared_ptr<sys::WorkerQueue> &queue)
{
    bsp::USBDeviceStatus notification = bsp::USBDeviceStatus::Disconnected;


@@ 224,12 229,14 @@ bool WorkerDesktop::handleIrqQueueMessage(std::shared_ptr<sys::WorkerQueue> &que
        LOG_DEBUG("USB status: Configured");
        ownerService->bus.sendMulticast(std::make_shared<sdesktop::usb::USBConfigured>(),
                                        sys::BusChannel::USBNotifications);
        configured = true;
        break;

    case bsp::USBDeviceStatus::Disconnected:
        LOG_DEBUG("USB status: Disconnected");
        ownerService->bus.sendMulticast(std::make_shared<sdesktop::usb::USBDisconnected>(),
                                        sys::BusChannel::USBNotifications);
        configured = false;
        break;

    case bsp::USBDeviceStatus::DataReceived:


@@ 238,6 245,9 @@ bool WorkerDesktop::handleIrqQueueMessage(std::shared_ptr<sys::WorkerQueue> &que

    case bsp::USBDeviceStatus::Reset:
        LOG_DEBUG("USB status: Reset");
        if (configured) {
            reset();
        }
        break;

    default:

M module-services/service-desktop/WorkerDesktop.hpp => module-services/service-desktop/WorkerDesktop.hpp +1 -0
@@ 47,6 47,7 @@ class WorkerDesktop : public sys::Worker
    bool handleSignallingQueueMessage(std::shared_ptr<sys::WorkerQueue> &queue);

    std::atomic<bool> initialized = false;
    std::atomic<bool> configured  = false;

    xQueueHandle receiveQueue;
    xQueueHandle irqQueue;