diff --git a/include/f1x/openauto/autoapp/USB/USBApp.hpp b/include/f1x/openauto/autoapp/USB/USBApp.hpp index 76c6955..6b0a81b 100644 --- a/include/f1x/openauto/autoapp/USB/USBApp.hpp +++ b/include/f1x/openauto/autoapp/USB/USBApp.hpp @@ -19,6 +19,7 @@ #pragma once #include +#include #include #include @@ -36,7 +37,8 @@ class USBApp: public projection::IAndroidAutoEntityEventHandler, public std::ena public: typedef std::shared_ptr Pointer; - USBApp(boost::asio::io_service& ioService, projection::IAndroidAutoEntityFactory& androidAutoEntityFactory, aasdk::usb::IUSBHub::Pointer usbHub); + USBApp(boost::asio::io_service& ioService, projection::IAndroidAutoEntityFactory& androidAutoEntityFactory, + aasdk::usb::IUSBHub::Pointer usbHub, aasdk::usb::IConnectedAccessoriesEnumerator::Pointer connectedAccessoriesEnumerator); void start(); void stop(); @@ -45,6 +47,7 @@ public: private: using std::enable_shared_from_this::shared_from_this; + void enumerateDevices(); void waitForDevice(); void aoapDeviceHandler(aasdk::usb::DeviceHandle deviceHandle); void onUSBHubError(const aasdk::error::Error& error); @@ -53,6 +56,7 @@ private: boost::asio::io_service::strand strand_; projection::IAndroidAutoEntityFactory& androidAutoEntityFactory_; aasdk::usb::IUSBHub::Pointer usbHub_; + aasdk::usb::IConnectedAccessoriesEnumerator::Pointer connectedAccessoriesEnumerator_; projection::IAndroidAutoEntity::Pointer androidAutoEntity_; bool isStopped_; }; diff --git a/src/autoapp/USB/USBApp.cpp b/src/autoapp/USB/USBApp.cpp index 7f1af9a..d535ccf 100644 --- a/src/autoapp/USB/USBApp.cpp +++ b/src/autoapp/USB/USBApp.cpp @@ -29,11 +29,13 @@ namespace autoapp namespace usb { -USBApp::USBApp(boost::asio::io_service& ioService, projection::IAndroidAutoEntityFactory& androidAutoEntityFactory, aasdk::usb::IUSBHub::Pointer usbHub) +USBApp::USBApp(boost::asio::io_service& ioService, projection::IAndroidAutoEntityFactory& androidAutoEntityFactory, + aasdk::usb::IUSBHub::Pointer usbHub, aasdk::usb::IConnectedAccessoriesEnumerator::Pointer connectedAccessoriesEnumerator) : ioService_(ioService) , strand_(ioService_) , androidAutoEntityFactory_(androidAutoEntityFactory) , usbHub_(std::move(usbHub)) + , connectedAccessoriesEnumerator_(std::move(connectedAccessoriesEnumerator)) , isStopped_(false) { @@ -43,6 +45,7 @@ void USBApp::start() { strand_.dispatch([this, self = this->shared_from_this()]() { this->waitForDevice(); + this->enumerateDevices(); }); } @@ -84,6 +87,19 @@ void USBApp::aoapDeviceHandler(aasdk::usb::DeviceHandle deviceHandle) } } +void USBApp::enumerateDevices() +{ + auto promise = aasdk::usb::IConnectedAccessoriesEnumerator::Promise::defer(strand_); + promise->then([this, self = this->shared_from_this()](auto result) { + OPENAUTO_LOG(info) << "[USBApp] Devices enumeration result: " << result; + }, + [this, self = this->shared_from_this()](auto e) { + OPENAUTO_LOG(error) << "[USBApp] Devices enumeration failed: " << e.what(); + }); + + connectedAccessoriesEnumerator_->enumerate(std::move(promise)); +} + void USBApp::waitForDevice() { OPENAUTO_LOG(info) << "[USBApp] Waiting for device..."; diff --git a/src/autoapp/USB/USBMain.cpp b/src/autoapp/USB/USBMain.cpp index 4242920..6c3602f 100644 --- a/src/autoapp/USB/USBMain.cpp +++ b/src/autoapp/USB/USBMain.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -42,8 +43,11 @@ USBMain::USBMain(libusb_context* context) , serviceFactory_(ioService_, configuration_) , androidAutoEntityFactory_(usbWrapper_, ioService_, configuration_, serviceFactory_) { - aasdk::usb::IUSBHub::Pointer usbHub(std::make_shared(usbWrapper_, ioService_, queryChainFactory_)); - usbApp_ = std::make_shared(ioService_, androidAutoEntityFactory_, std::move(usbHub)); + auto usbHub(std::make_shared(usbWrapper_, ioService_, queryChainFactory_)); + auto ConnectedAccessoriesEnumerator(std::make_shared(usbWrapper_, ioService_, queryChainFactory_)); + + usbApp_ = std::make_shared(ioService_, androidAutoEntityFactory_, + std::move(usbHub), std::move(ConnectedAccessoriesEnumerator)); } int USBMain::exec(int argc, char* argv[])