diff --git a/hcore/deviceManager/deviceManager.cpp b/hcore/deviceManager/deviceManager.cpp index a8b31b5..efa637e 100644 --- a/hcore/deviceManager/deviceManager.cpp +++ b/hcore/deviceManager/deviceManager.cpp @@ -8,11 +8,11 @@ #include #include -std::vector> +std::vector> DeviceManager::interoceptorDeviceSpecs; -std::vector> +std::vector> DeviceManager::extrospectorDeviceSpecs; -std::vector> +std::vector> DeviceManager::senseDeviceSpecs; const std::string DeviceManager::stringifyDeviceSpecs(void) diff --git a/hcore/deviceManager/deviceSpecp.yy b/hcore/deviceManager/deviceSpecp.yy index 8c862e7..33f10ac 100644 --- a/hcore/deviceManager/deviceSpecp.yy +++ b/hcore/deviceManager/deviceSpecp.yy @@ -34,32 +34,6 @@ void yyerror(const char *message) + std::string(message)); } -void mirrorDeviceSpecs() { - for (const auto& interoSpec : DeviceManager::interoceptorDeviceSpecs) { - auto it = std::find_if( - DeviceManager::senseDeviceSpecs.begin(), - DeviceManager::senseDeviceSpecs.end(), - [&interoSpec](const SenseDeviceSpec& spec) { - return spec == *interoSpec; - }); - if (it == DeviceManager::senseDeviceSpecs.end()) { - DeviceManager::senseDeviceSpecs.push_back(*interoSpec); - } - } - - for (const auto& extroSpec : DeviceManager::extrospectorDeviceSpecs) { - auto it = std::find_if( - DeviceManager::senseDeviceSpecs.begin(), - DeviceManager::senseDeviceSpecs.end(), - [&extroSpec](const SenseDeviceSpec& spec) { - return spec == *extroSpec; - }); - if (it == DeviceManager::senseDeviceSpecs.end()) { - DeviceManager::senseDeviceSpecs.push_back(*extroSpec); - } - } -} - %} %union { @@ -84,7 +58,7 @@ void mirrorDeviceSpecs() { %% file: /* NOTHING */ - | sensor_specs { mirrorDeviceSpecs(); } + | sensor_specs ; sensor_specs: @@ -99,22 +73,26 @@ sensor_spec: interoceptor_spec: KEYWORD_SPECTYPE_INTEROSPECTOR PIPE spec_body { - auto spec = std::make_unique( + auto spec = std::make_shared( *static_cast($3)); spec->sensorType = $1; - DeviceManager::interoceptorDeviceSpecs.push_back(std::move(spec)); + DeviceManager::interoceptorDeviceSpecs.push_back(spec); + DeviceManager::senseDeviceSpecs.push_back(spec); + delete $3; } ; extrospector_spec: KEYWORD_SPECTYPE_EXTROSPECTOR PIPE spec_body { - auto spec = std::make_unique( + auto spec = std::make_shared( *static_cast($3)); spec->sensorType = $1; - DeviceManager::extrospectorDeviceSpecs.push_back(std::move(spec)); + DeviceManager::extrospectorDeviceSpecs.push_back(spec); + DeviceManager::senseDeviceSpecs.push_back(spec); + delete $3; } ; diff --git a/hcore/include/deviceManager/deviceManager.h b/hcore/include/deviceManager/deviceManager.h index fac09b8..e9db949 100644 --- a/hcore/include/deviceManager/deviceManager.h +++ b/hcore/include/deviceManager/deviceManager.h @@ -31,11 +31,11 @@ private: public: std::string allDeviceSpecs; - static std::vector> + static std::vector> interoceptorDeviceSpecs; - static std::vector> + static std::vector> extrospectorDeviceSpecs; - static std::vector> + static std::vector> senseDeviceSpecs; }; diff --git a/hcore/senseApis/senseApiManager.cpp b/hcore/senseApis/senseApiManager.cpp index 9f40804..e9e1005 100644 --- a/hcore/senseApis/senseApiManager.cpp +++ b/hcore/senseApis/senseApiManager.cpp @@ -207,8 +207,7 @@ void SenseApiManager::finalizeAllSenseApiLibs(void) } } -void SenseApiManager::attachSenseDevice( - const SenseDeviceSpec& spec) +void SenseApiManager::attachSenseDevice(const SenseDeviceSpec& spec) { auto libOpt = getSenseApiLibByApiName(spec.api); if (!libOpt) @@ -228,8 +227,7 @@ void SenseApiManager::attachSenseDevice( lib.getSenseApiDesc()->sal_mgmt_libOps->attachDeviceReq(&cSpec); } -void SenseApiManager::detachSenseDevice( - const SenseDeviceSpec& spec) +void SenseApiManager::detachSenseDevice(const SenseDeviceSpec& spec) { auto libOpt = getSenseApiLibByApiName(spec.api); if (!libOpt) @@ -252,14 +250,14 @@ void SenseApiManager::detachSenseDevice( void SenseApiManager::attachAllSenseDevicesFromSpecs(void) { for (const auto& spec : DeviceManager::senseDeviceSpecs) { - attachSenseDevice(spec.get()); + attachSenseDevice(*spec); } } void SenseApiManager::detachAllSenseDevices(void) { for (const auto& spec : DeviceManager::senseDeviceSpecs) { - detachSenseDevice(spec.get()); + detachSenseDevice(*spec); } } diff --git a/main.cpp b/main.cpp index dc26c45..a9ee36e 100644 --- a/main.cpp +++ b/main.cpp @@ -93,6 +93,7 @@ static int initializeHarikoff(int argc, char **argv, char **envp) std::cout << sense_api::SenseApiManager::getInstance().stringifyLibs() << std::endl; sense_api::SenseApiManager::getInstance().initializeAllSenseApiLibs(); + sense_api::SenseApiManager::getInstance().attachAllSenseDevicesFromSpecs(); /* Start the threads */ for (const auto& [id, componentThread] diff --git a/senseApis/xcbXorg/xcbXorg.cpp b/senseApis/xcbXorg/xcbXorg.cpp index 110851d..34ce5a7 100644 --- a/senseApis/xcbXorg/xcbXorg.cpp +++ b/senseApis/xcbXorg/xcbXorg.cpp @@ -82,7 +82,7 @@ int xcbXorg_finalizeInd(void) static sal_mlo_attachDeviceReqFn xcbXorg_attachDeviceReq; int xcbXorg_attachDeviceReq(const CSenseDeviceSpec *const desc) { - std::cout << __func__ << "\n"; + std::cout << __func__ << ": Attaching device spec: " << *desc << "\n"; return 0; }