M module-services/service-desktop/ServiceDesktop.cpp => module-services/service-desktop/ServiceDesktop.cpp +7 -6
@@ 85,12 85,12 @@ sys::ReturnCodes ServiceDesktop::InitHandler()
desktopWorker = std::make_unique<WorkerDesktop>(this, *usbSecurityModel.get(), serialNumber);
- const bool ret =
+ initialized =
desktopWorker->init({{sdesktop::RECEIVE_QUEUE_BUFFER_NAME, sizeof(std::string *), sdesktop::cdc_queue_len},
{sdesktop::SEND_QUEUE_BUFFER_NAME, sizeof(std::string *), sdesktop::cdc_queue_object_size},
{sdesktop::IRQ_QUEUE_BUFFER_NAME, 1, sdesktop::irq_queue_object_size}});
- if (ret == false) {
+ if (initialized == false) {
LOG_ERROR("!!! service-desktop InitHandler failed to initialize worker, service-desktop won't work");
return sys::ReturnCodes::Failure;
}
@@ 207,16 207,17 @@ sys::ReturnCodes ServiceDesktop::InitHandler()
sys::ReturnCodes ServiceDesktop::DeinitHandler()
{
LOG_ERROR(".. deinit ..");
- settings->deinit();
- desktopWorker->deinit();
+ if (initialized) {
+ settings->deinit();
+ desktopWorker->deinit();
+ }
return sys::ReturnCodes::Success;
}
void ServiceDesktop::ProcessCloseReason(sys::CloseReason closeReason)
{
LOG_ERROR(".. close with reason ..");
- settings->deinit();
- desktopWorker->deinit();
+ DeinitHandler();
sendCloseReadyMessage(this);
}
M module-services/service-desktop/WorkerDesktop.cpp => module-services/service-desktop/WorkerDesktop.cpp +13 -1
@@ 31,6 31,10 @@ WorkerDesktop::WorkerDesktop(sys::Service *ownerServicePtr,
bool WorkerDesktop::init(std::list<sys::WorkerQueueInfo> queues)
{
+ if (initialized) {
+ return true;
+ }
+
Worker::init(queues);
irqQueue = Worker::getQueueHandleByName(sdesktop::IRQ_QUEUE_BUFFER_NAME);
@@ 46,11 50,17 @@ bool WorkerDesktop::init(std::list<sys::WorkerQueueInfo> queues)
bsp::usbInitParams initParams = {receiveQueue, irqQueue, serialNumber.c_str()};
- return (bsp::usbInit(initParams) < 0) ? false : true;
+ initialized = (bsp::usbInit(initParams) < 0) ? false : true;
+
+ return initialized;
}
bool WorkerDesktop::deinit(void)
{
+ if (!initialized) {
+ return false;
+ }
+
unsigned int maxcount = 10;
while (parser.getCurrentState() != parserFSM::State::NoMsg && --maxcount > 0) {
vTaskDelay(300);
@@ 65,6 75,8 @@ bool WorkerDesktop::deinit(void)
Worker::deinit();
LOG_DEBUG("deinit end");
+ initialized = false;
+
return true;
}
M module-services/service-desktop/service-desktop/ServiceDesktop.hpp => module-services/service-desktop/service-desktop/ServiceDesktop.hpp +1 -0
@@ 117,6 117,7 @@ class ServiceDesktop : public sys::Service
std::unique_ptr<sdesktop::bluetooth::BluetoothMessagesHandler> btMsgHandler;
static constexpr unsigned int DefaultLogFlushTimeoutInMs = 1000U;
+ bool initialized = false;
};
namespace sys
M module-services/service-desktop/service-desktop/WorkerDesktop.hpp => module-services/service-desktop/service-desktop/WorkerDesktop.hpp +1 -1
@@ 44,7 44,7 @@ class WorkerDesktop : public sys::Worker
void suspendUsb();
bool stateChangeWait();
-
+ bool initialized = false;
xQueueHandle receiveQueue;
xQueueHandle irqQueue;
const sdesktop::USBSecurityModel &securityModel;