From bf06b5bad8849237fdfcf6eff5492a8c893b6f5a Mon Sep 17 00:00:00 2001 From: Marek Niepieklo Date: Thu, 17 Jun 2021 16:27:44 +0200 Subject: [PATCH] [CP-206] Report Pure serial number in USB descriptors Added serial number to USB device descriptor --- module-bsp/board/linux/usb_cdc/usb_cdc.cpp | 6 +++--- module-bsp/board/rt1051/bsp/usb | 2 +- module-bsp/bsp/usb/usb.hpp | 9 ++++++++- module-services/service-desktop/ServiceDesktop.cpp | 13 ++++++++++++- module-services/service-desktop/WorkerDesktop.cpp | 10 +++++++--- .../service-desktop/ServiceDesktop.hpp | 1 + .../service-desktop/WorkerDesktop.hpp | 5 ++++- 7 files changed, 36 insertions(+), 10 deletions(-) diff --git a/module-bsp/board/linux/usb_cdc/usb_cdc.cpp b/module-bsp/board/linux/usb_cdc/usb_cdc.cpp index 08d362cb3c68ecd7b801f9458b0a35372324811a..6a3260786db87a63d7ba6779d49378e166053951 100644 --- a/module-bsp/board/linux/usb_cdc/usb_cdc.cpp +++ b/module-bsp/board/linux/usb_cdc/usb_cdc.cpp @@ -160,7 +160,7 @@ namespace bsp LOG_INFO("usbSuspend"); } - int usbInit(xQueueHandle receiveQueue, xQueueHandle irqQueue, USBDeviceListener *) + int usbInit(const bsp::usbInitParams &initParams) { fd = 0; @@ -203,8 +203,8 @@ namespace bsp tcsetattr(fd, TCSANOW, &newtio); xTaskHandle taskHandleReceive; - USBReceiveQueue = receiveQueue; - USBIrqQueue = irqQueue; + USBReceiveQueue = initParams.queueHandle; + USBIrqQueue = initParams.irqQueueHandle; BaseType_t task_error = xTaskCreate(&bsp::usbDeviceTask, "USBLinuxReceive", diff --git a/module-bsp/board/rt1051/bsp/usb b/module-bsp/board/rt1051/bsp/usb index 6ca41ce836f160f2253b7d9527124306bd1f9ca1..a2c9e2d9ab20427cd8675c7eccd2a12a0fd40ccb 160000 --- a/module-bsp/board/rt1051/bsp/usb +++ b/module-bsp/board/rt1051/bsp/usb @@ -1 +1 @@ -Subproject commit 6ca41ce836f160f2253b7d9527124306bd1f9ca1 +Subproject commit a2c9e2d9ab20427cd8675c7eccd2a12a0fd40ccb diff --git a/module-bsp/bsp/usb/usb.hpp b/module-bsp/bsp/usb/usb.hpp index ae16d1750ee14c1d5d7f6c5c5b6b3a25d4ed7714..537b722d03cbc53fd7de8e482da4cf78073413c7 100644 --- a/module-bsp/bsp/usb/usb.hpp +++ b/module-bsp/bsp/usb/usb.hpp @@ -39,7 +39,14 @@ namespace bsp virtual void rawDataReceived(void *dataPtr, uint32_t dataLen) = 0; }; - int usbInit(xQueueHandle, xQueueHandle, USBDeviceListener *deviceListener = nullptr); + struct usbInitParams { + xQueueHandle queueHandle; + xQueueHandle irqQueueHandle; + USBDeviceListener *deviceListener; + const char *serialNumber; + }; + + int usbInit(const usbInitParams &initParams); int usbCDCReceive(void *ptr); int usbCDCSend(std::string *sendMsg); int usbCDCSendRaw(const char *dataPtr, size_t dataLen); diff --git a/module-services/service-desktop/ServiceDesktop.cpp b/module-services/service-desktop/ServiceDesktop.cpp index 8a36ec33fc541d493be37ce585e96ef048cd035f..29e2114caa6d41a69f8f208504a2c251c65a285f 100644 --- a/module-services/service-desktop/ServiceDesktop.cpp +++ b/module-services/service-desktop/ServiceDesktop.cpp @@ -77,13 +77,24 @@ ServiceDesktop::~ServiceDesktop() LOG_INFO("[ServiceDesktop] Cleaning resources"); } +auto ServiceDesktop::getSerialNumber() const -> std::string +{ + return settings->getValue(std::string("factory_data/serial"), settings::SettingsScope::Global); +} + sys::ReturnCodes ServiceDesktop::InitHandler() { settings = std::make_unique(); settings->init(service::ServiceProxy(shared_from_this())); usbSecurityModel = std::make_unique(this, settings.get()); - desktopWorker = std::make_unique(this, *usbSecurityModel.get()); + + auto serialNumber = getSerialNumber(); + + LOG_DEBUG("Serial Number: %s", serialNumber.c_str()); + + desktopWorker = std::make_unique(this, *usbSecurityModel.get(), serialNumber); + const bool ret = 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}, diff --git a/module-services/service-desktop/WorkerDesktop.cpp b/module-services/service-desktop/WorkerDesktop.cpp index 8a1341654b2beab56fc2acc1c94a51bc30d2d284..2db904a2f6d51e33e03a0f05aa33458972dce06e 100644 --- a/module-services/service-desktop/WorkerDesktop.cpp +++ b/module-services/service-desktop/WorkerDesktop.cpp @@ -21,9 +21,11 @@ inline constexpr auto uploadFailedMessage = "file upload terminated before all data transferred"; -WorkerDesktop::WorkerDesktop(sys::Service *ownerServicePtr, const sdesktop::USBSecurityModel &securityModel) +WorkerDesktop::WorkerDesktop(sys::Service *ownerServicePtr, + const sdesktop::USBSecurityModel &securityModel, + const std::string serialNumber) : sys::Worker(ownerServicePtr, sdesktop::worker_stack), fileDes(nullptr), securityModel(securityModel), - ownerService(ownerServicePtr), parser(ownerServicePtr) + serialNumber(serialNumber), ownerService(ownerServicePtr), parser(ownerServicePtr) {} bool WorkerDesktop::init(std::list queues) @@ -41,7 +43,9 @@ bool WorkerDesktop::init(std::list queues) usbSuspendTimer = sys::TimerFactory::createSingleShotTimer( ownerService, "usbSuspend", constants::usbSuspendTimeout, [this](sys::Timer &) { suspendUsb(); }); - return (bsp::usbInit(receiveQueue, irqQueue, this) < 0) ? false : true; + bsp::usbInitParams initParams = {receiveQueue, irqQueue, this, serialNumber.c_str()}; + + return (bsp::usbInit(initParams) < 0) ? false : true; } bool WorkerDesktop::deinit(void) diff --git a/module-services/service-desktop/service-desktop/ServiceDesktop.hpp b/module-services/service-desktop/service-desktop/ServiceDesktop.hpp index b83926f466c999ca0e2320f116583977e8eb1d6c..4708f6bf6f4c88f1c3c29adcd8e0553c2b8e342f 100644 --- a/module-services/service-desktop/service-desktop/ServiceDesktop.hpp +++ b/module-services/service-desktop/service-desktop/ServiceDesktop.hpp @@ -110,6 +110,7 @@ class ServiceDesktop : public sys::Service } private: + auto getSerialNumber() const -> std::string; std::unique_ptr usbSecurityModel; std::unique_ptr settings; sys::TimerHandle transferTimer; diff --git a/module-services/service-desktop/service-desktop/WorkerDesktop.hpp b/module-services/service-desktop/service-desktop/WorkerDesktop.hpp index c4c63c1163086be057b5f47fbc0ee0120f0b2a41..385ba4651f958ed8c29d779cd7ffb067fa6fbccb 100644 --- a/module-services/service-desktop/service-desktop/WorkerDesktop.hpp +++ b/module-services/service-desktop/service-desktop/WorkerDesktop.hpp @@ -32,7 +32,9 @@ class WorkerDesktop : public sys::Worker, public bsp::USBDeviceListener CancelTransfer, }; - WorkerDesktop(sys::Service *ownerServicePtr, const sdesktop::USBSecurityModel &securityModel); + WorkerDesktop(sys::Service *ownerServicePtr, + const sdesktop::USBSecurityModel &securityModel, + const std::string serialNumber); virtual bool init(std::list queues) override; virtual bool deinit() override; @@ -73,6 +75,7 @@ class WorkerDesktop : public sys::Worker, public bsp::USBDeviceListener std::filesystem::path filePath; std::atomic rawModeEnabled = false; const sdesktop::USBSecurityModel &securityModel; + const std::string serialNumber; sys::Service *ownerService = nullptr; parserFSM::StateMachine parser; sys::TimerHandle usbSuspendTimer;