From af68184db91f92860f642609bfd1c39bedfbae42 Mon Sep 17 00:00:00 2001 From: Gregory M Foss Date: Mon, 4 Nov 2019 16:38:07 -0500 Subject: [PATCH] Adding simple processor thread interface (#8) * Adding simple sensor thread interface * Adding simple style guides (#7) * Adding simple style guides * Update style.hpp * [Broken]: For Display purposes only * IO Processor interface * Adding cpp file for IOProc and moving to includes * Adding simple sensor thread interface * [Broken]: For Display purposes only * IO Processor interface * Adding cpp file for IOProc and moving to includes * Fixing include gaurds * Removing unnecessary spaces in cmakelists --- breadcrumbs/CMakeLists.txt | 11 +++-- breadcrumbs/include/IOProcessor.hpp | 40 +++++++++++++++++ breadcrumbs/src/Breadcrumbs.cpp | 12 +++++- breadcrumbs/src/io/IOProcessor.cpp | 43 +++++++++++++++++++ .../io/out_procs/VirtualOutputProcessor.cpp | 8 ++++ .../io/out_procs/VirtualOutputProcessor.hpp | 17 ++++++++ 6 files changed, 127 insertions(+), 4 deletions(-) create mode 100644 breadcrumbs/include/IOProcessor.hpp create mode 100644 breadcrumbs/src/io/IOProcessor.cpp create mode 100644 breadcrumbs/src/io/out_procs/VirtualOutputProcessor.cpp create mode 100644 breadcrumbs/src/io/out_procs/VirtualOutputProcessor.hpp diff --git a/breadcrumbs/CMakeLists.txt b/breadcrumbs/CMakeLists.txt index 611a3e7..d214ccf 100644 --- a/breadcrumbs/CMakeLists.txt +++ b/breadcrumbs/CMakeLists.txt @@ -30,11 +30,16 @@ configure_file ( "${PROJECT_SOURCE_DIR}/CMakeConfig.h.in" "${CMAKE_INCLUDE_PATH}/CMakeConfig.h" ) - + # Adding public includes to include search path include_directories("${CMAKE_INCLUDE_PATH}") # Adding private include files from source tree include_directories("${CMAKE_SOURCE_DIR}") - + +# puts all .cpp files inside src to the SOURCES variable +# TODO: replace this with a script for collecting cpp files +file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/*.cpp") +message("Source files: ${SOURCES}") + # Adding executables -add_executable(Breadcrumbs ${CMAKE_SOURCE_DIR}/Breadcrumbs.cpp) +add_executable(Breadcrumbs ${SOURCES}) diff --git a/breadcrumbs/include/IOProcessor.hpp b/breadcrumbs/include/IOProcessor.hpp new file mode 100644 index 0000000..042c2ac --- /dev/null +++ b/breadcrumbs/include/IOProcessor.hpp @@ -0,0 +1,40 @@ +/* + * + * Stores the interface for building a sensor thread + * implementation. + * + */ + + +#ifndef SENSOR_INTERFACE_HPP +#define SENSOR_INTERFACE_HPP + + +#include +#include + + +class IOProcessor +{ +public: + // Thread routine for implementation to override + virtual VOID threadRuntime() = 0; + // Thread initialization, should not be called directly! + static DWORD threadInit(LPVOID pIOProcessor); + + // Async control + UINT8 startThread(LPVOID pThreadArgs); + BOOL waitForThread(); + + // Sync control + BOOLEAN bufferDataAvailable(); + SIZE_T getBufferData(LPCSTR* bufferKeyArray, LPCSTR* bufferValueArray); + VOID setDataStoreValue(LPCSTR key, LPCVOID value, SIZE_T valueSize); +protected: + LPCVOID threadArgs; + DWORD dwThreadId; + HANDLE hThread; + +}; + +#endif diff --git a/breadcrumbs/src/Breadcrumbs.cpp b/breadcrumbs/src/Breadcrumbs.cpp index 8f4ffc9..4d360ac 100644 --- a/breadcrumbs/src/Breadcrumbs.cpp +++ b/breadcrumbs/src/Breadcrumbs.cpp @@ -1,7 +1,17 @@ #include +#include "io/out_procs/VirtualOutputProcessor.hpp" + int main() { - printf("Hello world!\n"); + + int threadID = 0; + IOProcessor *processor; + processor = new VirtualOutputProcessor(); + processor->startThread(&threadID); + + processor->waitForThread(); + delete processor; + return 0; } diff --git a/breadcrumbs/src/io/IOProcessor.cpp b/breadcrumbs/src/io/IOProcessor.cpp new file mode 100644 index 0000000..7693957 --- /dev/null +++ b/breadcrumbs/src/io/IOProcessor.cpp @@ -0,0 +1,43 @@ + +#include "IOProcessor.hpp" + + +DWORD IOProcessor::threadInit(LPVOID pIOProcessor) +{ + ((IOProcessor*) pIOProcessor)->threadRuntime(); + return 0; +} + +UINT8 IOProcessor::startThread(LPVOID pThreadArgs) +{ + this->threadArgs = pThreadArgs; + hThread = CreateThread( + NULL, // default security attributes + 0, // use default stack size + threadInit, // thread function name + this, // argument to thread function + 0, // use default creation flags + &dwThreadId); // returns the thread identifier + return TRUE; +} + +BOOL IOProcessor::waitForThread() +{ + WaitForSingleObject(hThread, INFINITE); + return TRUE; +} + +BOOLEAN bufferDataAvailable() +{ + return FALSE; +} + +SIZE_T getBufferData(LPCSTR* bufferKeyArray, LPCSTR* bufferValueArray) +{ + return 0; +} + +VOID setDataStoreValue(LPCSTR key, LPCVOID value, SIZE_T valueSize) +{ + +} diff --git a/breadcrumbs/src/io/out_procs/VirtualOutputProcessor.cpp b/breadcrumbs/src/io/out_procs/VirtualOutputProcessor.cpp new file mode 100644 index 0000000..8237789 --- /dev/null +++ b/breadcrumbs/src/io/out_procs/VirtualOutputProcessor.cpp @@ -0,0 +1,8 @@ + +#include "VirtualOutputProcessor.hpp" + + +void VirtualOutputProcessor::threadRuntime() +{ + printf("VirtualOutputProcessor %d started.\n", *((int*) threadArgs)); +} diff --git a/breadcrumbs/src/io/out_procs/VirtualOutputProcessor.hpp b/breadcrumbs/src/io/out_procs/VirtualOutputProcessor.hpp new file mode 100644 index 0000000..b0d9feb --- /dev/null +++ b/breadcrumbs/src/io/out_procs/VirtualOutputProcessor.hpp @@ -0,0 +1,17 @@ + +#ifndef VIRTUAL_OUTPUT_PROCESSOR_HPP +#define VIRTUAL_OUTPUT_PROCESSOR_HPP + + +#include + +#include "IOProcessor.hpp" + + +class VirtualOutputProcessor : public IOProcessor +{ +public: + void threadRuntime(); +}; + +#endif