diff --git a/include/user/senseApiDesc.h b/include/user/senseApiDesc.h index b309831..3bad024 100644 --- a/include/user/senseApiDesc.h +++ b/include/user/senseApiDesc.h @@ -8,49 +8,17 @@ #include #include #include -#include #include +#include #include #include #include #include -#define CL_TARGET_OPENCL_VERSION 120 -#include - -class OptionParser; namespace smo { -namespace compute { -class ClBuffer; -class ComputeDevice; -} // namespace compute - namespace stim_buff { -/** - * @brief Threading model descriptor for senseApi libraries. - * - * This structure provides senseApi libraries with access to the information and - * resources they need to operate with SMO's threading model. - */ -struct SmoThreadingModelDesc -{ - /** - * @brief sh_ptr to ComponentThread for device-independent state mgt. - * - * This ComponentThread should be used by senseApis for state management - * that's independent of any particular device or attachment spec. - * SMO will usually pass in the Marionette thread here. - * - * State management that's tied to a particular attachment spec should be - * done on the ComponentThread passed to attachDeviceCReq. The attach and - * detach coroutines run on the thread named by ExplicitPostTarget (post-TO); - * SMO orchestration stays on the marionette thread. - */ - std::shared_ptr componentThread; -}; - struct StimBuffDeviceOpResult { bool success = false; @@ -69,87 +37,6 @@ using sal_mlo_detachDeviceCReqFn = sscl::co::ExplicitPostTarget postTarget, const std::shared_ptr& desc); -/** - * @brief Hooks provided by Salmanoff to senseApi libraries. - - * This structure contains function pointers that senseApi libraries can use - * to interact with Salmanoff's functionality, such as searching for commonLibs. - */ -struct SmoCallbacks -{ - /** - * @brief Search for a library in Salmanoff's search paths - * @param libraryPath The relative filename of the library to search for - * @return Optional containing the full path if found, nullopt if not found - * - * This function searches for the given library in the same search paths - * that Salmanoff uses when loading senseApi libraries (user-specified - * paths via -p option, current directory, and executable directory). - */ - std::optional (*searchForLibInSmoSearchPaths)( - const std::string& libraryPath); - - /** - * @brief Get the current ComponentThread instance - * @return Shared pointer to the current ComponentThread - * - * This function provides access to the current ComponentThread instance, - * equivalent to calling sscl::ComponentThread::getSelf(). - */ - std::shared_ptr (*ComponentThread_getSelf)(void); - - /** - * @brief Get the OptionParser singleton instance - * @return Reference to the OptionParser singleton - * - * This function provides access to the OptionParser singleton instance, - * equivalent to calling OptionParser::getOptions(). - */ - OptionParser& (*OptionParser_getOptions)(void); - - /** - * @brief Create a USE_HOST_PTR buffer on all OpenCL contexts - * @param hostPtr Host pointer to the memory - * @param size Size of the buffer in bytes - * @param flags Additional OpenCL memory flags - * @return Shared pointer to ClBuffer managing buffers on all devices - */ - std::shared_ptr - (*ComputeManager_createUseHostPtrBuffer)( - void* hostPtr, size_t size, cl_mem_flags flags); - - /** - * @brief Release USE_HOST_PTR buffers from all contexts - * @param buffer Shared pointer to ClBuffer to release - */ - void (*ComputeManager_releaseUseHostPtrBuffer)( - std::shared_ptr buffer); - - /** - * @brief Get a compute device - * @return Shared pointer to ComputeDevice, or nullptr if no devices available - */ - std::shared_ptr - (*ComputeManager_getDevice)(void); - - /** - * @brief Release a compute device - * @param device Shared pointer to ComputeDevice to release - */ - void (*ComputeManager_releaseDevice)( - std::shared_ptr device); - - std::shared_ptr - (*ComparatorManager_getComparatorType)( - cologex::ComparatorTypeId typeId); - - std::unique_ptr (*Comparator_getNewInstance)( - const std::shared_ptr& - comparatorType); -}; - -const SmoCallbacks& getSmoCallbacks(); - struct Sal_Mgmt_LibOps { /* When Salmanoff loads a stim buff API lib, it calls this function to initialize diff --git a/include/user/smoHooks.h b/include/user/smoHooks.h new file mode 100644 index 0000000..3e2cd7c --- /dev/null +++ b/include/user/smoHooks.h @@ -0,0 +1,130 @@ +#ifndef _USER_SMO_HOOKS_H +#define _USER_SMO_HOOKS_H + +#include +#include +#include +#include +#include +#define CL_TARGET_OPENCL_VERSION 120 +#include + +class OptionParser; + +namespace smo { + +namespace compute { +class ClBuffer; +class ComputeDevice; +} // namespace compute + +namespace stim_buff { + +/** + * @brief Threading model descriptor for senseApi libraries. + * + * This structure provides senseApi libraries with access to the information and + * resources they need to operate with SMO's threading model. + */ +struct SmoThreadingModelDesc +{ + /** + * @brief sh_ptr to ComponentThread for device-independent state mgt. + * + * This ComponentThread should be used by senseApis for state management + * that's independent of any particular device or attachment spec. + * SMO will usually pass in the Marionette thread here. + * + * State management that's tied to a particular attachment spec should be + * done on the ComponentThread passed to attachDeviceCReq. The attach and + * detach coroutines run on the thread named by ExplicitPostTarget (post-TO); + * SMO orchestration stays on the marionette thread. + */ + std::shared_ptr componentThread; +}; + +/** + * @brief Hooks provided by Salmanoff to senseApi libraries. + * + * This structure contains function pointers that senseApi libraries can use + * to interact with Salmanoff's functionality, such as searching for commonLibs. + */ +struct SmoCallbacks +{ + /** + * @brief Search for a library in Salmanoff's search paths + * @param libraryPath The relative filename of the library to search for + * @return Optional containing the full path if found, nullopt if not found + * + * This function searches for the given library in the same search paths + * that Salmanoff uses when loading senseApi libraries (user-specified + * paths via -p option, current directory, and executable directory). + */ + std::optional (*searchForLibInSmoSearchPaths)( + const std::string& libraryPath); + + /** + * @brief Get the current ComponentThread instance + * @return Shared pointer to the current ComponentThread + * + * This function provides access to the current ComponentThread instance, + * equivalent to calling sscl::ComponentThread::getSelf(). + */ + std::shared_ptr (*ComponentThread_getSelf)(void); + + /** + * @brief Get the OptionParser singleton instance + * @return Reference to the OptionParser singleton + * + * This function provides access to the OptionParser singleton instance, + * equivalent to calling OptionParser::getOptions(). + */ + OptionParser& (*OptionParser_getOptions)(void); + + /** + * @brief Create a USE_HOST_PTR buffer on all OpenCL contexts + * @param hostPtr Host pointer to the memory + * @param size Size of the buffer in bytes + * @param flags Additional OpenCL memory flags + * @return Shared pointer to ClBuffer managing buffers on all devices + */ + std::shared_ptr + (*ComputeManager_createUseHostPtrBuffer)( + void* hostPtr, size_t size, cl_mem_flags flags); + + /** + * @brief Release USE_HOST_PTR buffers from all contexts + * @param buffer Shared pointer to ClBuffer to release + */ + void (*ComputeManager_releaseUseHostPtrBuffer)( + std::shared_ptr buffer); + + /** + * @brief Get a compute device + * @return Shared pointer to ComputeDevice, or nullptr if no devices available + */ + std::shared_ptr + (*ComputeManager_getDevice)(void); + + /** + * @brief Release a compute device + * @param device Shared pointer to ComputeDevice to release + */ + void (*ComputeManager_releaseDevice)( + std::shared_ptr device); + + std::shared_ptr + (*ComparatorManager_getComparatorType)( + cologex::ComparatorTypeId typeId); + + std::unique_ptr (*Comparator_getNewInstance)( + const std::shared_ptr& + comparatorType); +}; + +const SmoCallbacks& getSmoCallbacks(); + +} // namespace stim_buff +} // namespace smo + +#endif // _USER_SMO_HOOKS_H diff --git a/smocore/comparatorLibs/comparatorApiManager.cpp b/smocore/comparatorLibs/comparatorApiManager.cpp index 0b95e44..baaf9d5 100644 --- a/smocore/comparatorLibs/comparatorApiManager.cpp +++ b/smocore/comparatorLibs/comparatorApiManager.cpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include namespace smo { namespace comparator_lib { diff --git a/smocore/stimBuffApis/stimBuffApiManager.cpp b/smocore/stimBuffApis/stimBuffApiManager.cpp index 15db801..4d996c0 100644 --- a/smocore/stimBuffApis/stimBuffApiManager.cpp +++ b/smocore/stimBuffApis/stimBuffApiManager.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include