diff --git a/.vscode/settings.json b/.vscode/settings.json index 99f1db0..797999e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -66,6 +66,7 @@ "iomanip": "cpp", "shared_mutex": "cpp", "cfenv": "cpp", - "typeindex": "cpp" + "typeindex": "cpp", + "*.tpp": "cpp" } } \ No newline at end of file diff --git a/Plugins/Thermx/CMakeFiles/thermix.dir/Factory.cpp.o b/Plugins/Thermx/CMakeFiles/thermix.dir/Factory.cpp.o index 6fdcae9..0d78f37 100644 Binary files a/Plugins/Thermx/CMakeFiles/thermix.dir/Factory.cpp.o and b/Plugins/Thermx/CMakeFiles/thermix.dir/Factory.cpp.o differ diff --git a/Plugins/Thermx/CMakeFiles/thermix.dir/Factory.cpp.o.d b/Plugins/Thermx/CMakeFiles/thermix.dir/Factory.cpp.o.d index 5808746..fe2a5cd 100644 --- a/Plugins/Thermx/CMakeFiles/thermix.dir/Factory.cpp.o.d +++ b/Plugins/Thermx/CMakeFiles/thermix.dir/Factory.cpp.o.d @@ -160,7 +160,9 @@ CMakeFiles/thermix.dir/Factory.cpp.o: \ /usr/include/c++/11/array /usr/include/c++/11/bits/uses_allocator.h \ /usr/include/c++/11/bits/invoke.h \ /usr/include/c++/11/bits/stl_multimap.h \ - /usr/include/c++/11/bits/erase_if.h \ + /usr/include/c++/11/bits/erase_if.h /usr/include/c++/11/atomic \ + /usr/include/c++/11/bits/atomic_base.h \ + /usr/include/c++/11/bits/atomic_lockfree_defines.h \ /home/kanken/code/ARHS-Thermx/Plugins/Thermx/../../../AHRS_core/src/model/hardware/hw/extendables/../serial.hpp \ /usr/include/string.h /usr/include/strings.h /usr/include/c++/11/thread \ /usr/include/c++/11/bits/std_thread.h /usr/include/c++/11/bits/refwrap.h \ @@ -284,8 +286,6 @@ CMakeFiles/thermix.dir/Factory.cpp.o: \ /usr/include/c++/11/bits/stl_raw_storage_iter.h \ /usr/include/c++/11/bits/align.h /usr/include/c++/11/bit \ /usr/include/c++/11/bits/shared_ptr_atomic.h \ - /usr/include/c++/11/bits/atomic_base.h \ - /usr/include/c++/11/bits/atomic_lockfree_defines.h \ /usr/include/c++/11/backward/auto_ptr.h \ /usr/include/c++/11/pstl/glue_memory_defs.h \ /usr/local/include/opencv4/opencv2/core/neon_utils.hpp \ @@ -309,7 +309,6 @@ CMakeFiles/thermix.dir/Factory.cpp.o: \ /usr/local/include/opencv4/opencv2/core/optim.hpp \ /usr/local/include/opencv4/opencv2/core/ovx.hpp \ /usr/local/include/opencv4/opencv2/core/cvdef.h \ - /usr/include/c++/11/atomic \ /home/kanken/code/ARHS-Thermx/Plugins/Thermx/../../../AHRS_core/src/pipeline/abstract/../../model/perfcheckers/framerate.hpp \ /home/kanken/code/ARHS-Thermx/Plugins/Thermx/../../../AHRS_core/src/pipeline/abstract/../../model/controllers/ui/uiController.hpp \ /home/kanken/code/ARHS-Thermx/Plugins/Thermx/../../../AHRS_core/src/pipeline/abstract/../../model/controllers/ui/../../hardware/cameras/_cam.hpp \ diff --git a/Plugins/Thermx/CMakeFiles/thermix.dir/ThermxController.cpp.o b/Plugins/Thermx/CMakeFiles/thermix.dir/ThermxController.cpp.o index b8a053c..3ec76d6 100644 Binary files a/Plugins/Thermx/CMakeFiles/thermix.dir/ThermxController.cpp.o and b/Plugins/Thermx/CMakeFiles/thermix.dir/ThermxController.cpp.o differ diff --git a/Plugins/Thermx/CMakeFiles/thermix.dir/ThermxController.cpp.o.d b/Plugins/Thermx/CMakeFiles/thermix.dir/ThermxController.cpp.o.d index bb84f4f..5e58363 100644 --- a/Plugins/Thermx/CMakeFiles/thermix.dir/ThermxController.cpp.o.d +++ b/Plugins/Thermx/CMakeFiles/thermix.dir/ThermxController.cpp.o.d @@ -160,7 +160,9 @@ CMakeFiles/thermix.dir/ThermxController.cpp.o: \ /usr/include/c++/11/array /usr/include/c++/11/bits/uses_allocator.h \ /usr/include/c++/11/bits/invoke.h \ /usr/include/c++/11/bits/stl_multimap.h \ - /usr/include/c++/11/bits/erase_if.h \ + /usr/include/c++/11/bits/erase_if.h /usr/include/c++/11/atomic \ + /usr/include/c++/11/bits/atomic_base.h \ + /usr/include/c++/11/bits/atomic_lockfree_defines.h \ /home/kanken/code/ARHS-Thermx/Plugins/Thermx/../../../AHRS_core/src/model/hardware/hw/extendables/../serial.hpp \ /usr/include/string.h /usr/include/strings.h /usr/include/c++/11/thread \ /usr/include/c++/11/bits/std_thread.h /usr/include/c++/11/bits/refwrap.h \ @@ -284,8 +286,6 @@ CMakeFiles/thermix.dir/ThermxController.cpp.o: \ /usr/include/c++/11/bits/stl_raw_storage_iter.h \ /usr/include/c++/11/bits/align.h /usr/include/c++/11/bit \ /usr/include/c++/11/bits/shared_ptr_atomic.h \ - /usr/include/c++/11/bits/atomic_base.h \ - /usr/include/c++/11/bits/atomic_lockfree_defines.h \ /usr/include/c++/11/backward/auto_ptr.h \ /usr/include/c++/11/pstl/glue_memory_defs.h \ /usr/local/include/opencv4/opencv2/core/neon_utils.hpp \ @@ -309,7 +309,6 @@ CMakeFiles/thermix.dir/ThermxController.cpp.o: \ /usr/local/include/opencv4/opencv2/core/optim.hpp \ /usr/local/include/opencv4/opencv2/core/ovx.hpp \ /usr/local/include/opencv4/opencv2/core/cvdef.h \ - /usr/include/c++/11/atomic \ /home/kanken/code/ARHS-Thermx/Plugins/Thermx/../../../AHRS_core/src/pipeline/abstract/../../model/perfcheckers/framerate.hpp \ /home/kanken/code/ARHS-Thermx/Plugins/Thermx/../../../AHRS_core/src/pipeline/abstract/../../model/controllers/ui/uiController.hpp \ /home/kanken/code/ARHS-Thermx/Plugins/Thermx/../../../AHRS_core/src/pipeline/abstract/../../model/controllers/ui/../../hardware/cameras/_cam.hpp \ diff --git a/Plugins/Thermx/CMakeFiles/thermix.dir/ThermxRenderer.cpp.o b/Plugins/Thermx/CMakeFiles/thermix.dir/ThermxRenderer.cpp.o index 0f922e5..7ed9b69 100644 Binary files a/Plugins/Thermx/CMakeFiles/thermix.dir/ThermxRenderer.cpp.o and b/Plugins/Thermx/CMakeFiles/thermix.dir/ThermxRenderer.cpp.o differ diff --git a/Plugins/Thermx/CMakeFiles/thermix.dir/compiler_depend.internal b/Plugins/Thermx/CMakeFiles/thermix.dir/compiler_depend.internal index 5547b18..14ce42c 100644 --- a/Plugins/Thermx/CMakeFiles/thermix.dir/compiler_depend.internal +++ b/Plugins/Thermx/CMakeFiles/thermix.dir/compiler_depend.internal @@ -200,6 +200,9 @@ CMakeFiles/thermix.dir/Factory.cpp.o /usr/include/c++/11/bits/invoke.h /usr/include/c++/11/bits/stl_multimap.h /usr/include/c++/11/bits/erase_if.h + /usr/include/c++/11/atomic + /usr/include/c++/11/bits/atomic_base.h + /usr/include/c++/11/bits/atomic_lockfree_defines.h /home/kanken/code/AHRS_core/src/model/hardware/hw/serial.hpp /usr/include/string.h /usr/include/strings.h @@ -352,8 +355,6 @@ CMakeFiles/thermix.dir/Factory.cpp.o /usr/include/c++/11/bits/align.h /usr/include/c++/11/bit /usr/include/c++/11/bits/shared_ptr_atomic.h - /usr/include/c++/11/bits/atomic_base.h - /usr/include/c++/11/bits/atomic_lockfree_defines.h /usr/include/c++/11/backward/auto_ptr.h /usr/include/c++/11/pstl/glue_memory_defs.h /usr/local/include/opencv4/opencv2/core/neon_utils.hpp @@ -378,7 +379,6 @@ CMakeFiles/thermix.dir/Factory.cpp.o /usr/local/include/opencv4/opencv2/core/optim.hpp /usr/local/include/opencv4/opencv2/core/ovx.hpp /usr/local/include/opencv4/opencv2/core/cvdef.h - /usr/include/c++/11/atomic /home/kanken/code/AHRS_core/src/model/perfcheckers/framerate.hpp /home/kanken/code/AHRS_core/src/model/controllers/ui/uiController.hpp /home/kanken/code/AHRS_core/src/model/hardware/cameras/_cam.hpp @@ -849,6 +849,9 @@ CMakeFiles/thermix.dir/ThermxController.cpp.o /usr/include/c++/11/bits/invoke.h /usr/include/c++/11/bits/stl_multimap.h /usr/include/c++/11/bits/erase_if.h + /usr/include/c++/11/atomic + /usr/include/c++/11/bits/atomic_base.h + /usr/include/c++/11/bits/atomic_lockfree_defines.h /home/kanken/code/AHRS_core/src/model/hardware/hw/serial.hpp /usr/include/string.h /usr/include/strings.h @@ -1001,8 +1004,6 @@ CMakeFiles/thermix.dir/ThermxController.cpp.o /usr/include/c++/11/bits/align.h /usr/include/c++/11/bit /usr/include/c++/11/bits/shared_ptr_atomic.h - /usr/include/c++/11/bits/atomic_base.h - /usr/include/c++/11/bits/atomic_lockfree_defines.h /usr/include/c++/11/backward/auto_ptr.h /usr/include/c++/11/pstl/glue_memory_defs.h /usr/local/include/opencv4/opencv2/core/neon_utils.hpp @@ -1027,7 +1028,6 @@ CMakeFiles/thermix.dir/ThermxController.cpp.o /usr/local/include/opencv4/opencv2/core/optim.hpp /usr/local/include/opencv4/opencv2/core/ovx.hpp /usr/local/include/opencv4/opencv2/core/cvdef.h - /usr/include/c++/11/atomic /home/kanken/code/AHRS_core/src/model/perfcheckers/framerate.hpp /home/kanken/code/AHRS_core/src/model/controllers/ui/uiController.hpp /home/kanken/code/AHRS_core/src/model/hardware/cameras/_cam.hpp diff --git a/Plugins/Thermx/CMakeFiles/thermix.dir/compiler_depend.make b/Plugins/Thermx/CMakeFiles/thermix.dir/compiler_depend.make index 35f15ea..0e672ae 100644 --- a/Plugins/Thermx/CMakeFiles/thermix.dir/compiler_depend.make +++ b/Plugins/Thermx/CMakeFiles/thermix.dir/compiler_depend.make @@ -199,6 +199,9 @@ CMakeFiles/thermix.dir/Factory.cpp.o: Factory.cpp \ /usr/include/c++/11/bits/invoke.h \ /usr/include/c++/11/bits/stl_multimap.h \ /usr/include/c++/11/bits/erase_if.h \ + /usr/include/c++/11/atomic \ + /usr/include/c++/11/bits/atomic_base.h \ + /usr/include/c++/11/bits/atomic_lockfree_defines.h \ /home/kanken/code/AHRS_core/src/model/hardware/hw/serial.hpp \ /usr/include/string.h \ /usr/include/strings.h \ @@ -351,8 +354,6 @@ CMakeFiles/thermix.dir/Factory.cpp.o: Factory.cpp \ /usr/include/c++/11/bits/align.h \ /usr/include/c++/11/bit \ /usr/include/c++/11/bits/shared_ptr_atomic.h \ - /usr/include/c++/11/bits/atomic_base.h \ - /usr/include/c++/11/bits/atomic_lockfree_defines.h \ /usr/include/c++/11/backward/auto_ptr.h \ /usr/include/c++/11/pstl/glue_memory_defs.h \ /usr/local/include/opencv4/opencv2/core/neon_utils.hpp \ @@ -377,7 +378,6 @@ CMakeFiles/thermix.dir/Factory.cpp.o: Factory.cpp \ /usr/local/include/opencv4/opencv2/core/optim.hpp \ /usr/local/include/opencv4/opencv2/core/ovx.hpp \ /usr/local/include/opencv4/opencv2/core/cvdef.h \ - /usr/include/c++/11/atomic \ /home/kanken/code/AHRS_core/src/model/perfcheckers/framerate.hpp \ /home/kanken/code/AHRS_core/src/model/controllers/ui/uiController.hpp \ /home/kanken/code/AHRS_core/src/model/hardware/cameras/_cam.hpp \ @@ -847,6 +847,9 @@ CMakeFiles/thermix.dir/ThermxController.cpp.o: ThermxController.cpp \ /usr/include/c++/11/bits/invoke.h \ /usr/include/c++/11/bits/stl_multimap.h \ /usr/include/c++/11/bits/erase_if.h \ + /usr/include/c++/11/atomic \ + /usr/include/c++/11/bits/atomic_base.h \ + /usr/include/c++/11/bits/atomic_lockfree_defines.h \ /home/kanken/code/AHRS_core/src/model/hardware/hw/serial.hpp \ /usr/include/string.h \ /usr/include/strings.h \ @@ -999,8 +1002,6 @@ CMakeFiles/thermix.dir/ThermxController.cpp.o: ThermxController.cpp \ /usr/include/c++/11/bits/align.h \ /usr/include/c++/11/bit \ /usr/include/c++/11/bits/shared_ptr_atomic.h \ - /usr/include/c++/11/bits/atomic_base.h \ - /usr/include/c++/11/bits/atomic_lockfree_defines.h \ /usr/include/c++/11/backward/auto_ptr.h \ /usr/include/c++/11/pstl/glue_memory_defs.h \ /usr/local/include/opencv4/opencv2/core/neon_utils.hpp \ @@ -1025,7 +1026,6 @@ CMakeFiles/thermix.dir/ThermxController.cpp.o: ThermxController.cpp \ /usr/local/include/opencv4/opencv2/core/optim.hpp \ /usr/local/include/opencv4/opencv2/core/ovx.hpp \ /usr/local/include/opencv4/opencv2/core/cvdef.h \ - /usr/include/c++/11/atomic \ /home/kanken/code/AHRS_core/src/model/perfcheckers/framerate.hpp \ /home/kanken/code/AHRS_core/src/model/controllers/ui/uiController.hpp \ /home/kanken/code/AHRS_core/src/model/hardware/cameras/_cam.hpp \ @@ -2058,12 +2058,6 @@ ThermxController.cpp: /usr/local/include/opencv4/opencv2/flann/defines.h: -ThermxRenderer.hpp: - -/usr/local/include/opencv4/opencv2/core/cuda.inl.hpp: - -/usr/lib/gcc/x86_64-linux-gnu/11/include/immintrin.h: - /usr/include/x86_64-linux-gnu/c++/11/bits/time_members.h: /usr/include/c++/11/bits/fs_fwd.h: @@ -2208,12 +2202,10 @@ ThermxRenderer.hpp: /usr/include/c++/11/bits/exception.h: -/usr/include/x86_64-linux-gnu/c++/11/bits/messages_members.h: - -/usr/include/c++/11/bits/basic_ios.h: - /usr/include/c++/11/bits/uniform_int_dist.h: +/usr/include/c++/11/bits/atomic_lockfree_defines.h: + /usr/include/c++/11/bits/stl_iterator_base_funcs.h: /usr/include/c++/11/bits/streambuf.tcc: @@ -2404,6 +2396,8 @@ ThermxRenderer.hpp: /usr/include/x86_64-linux-gnu/bits/wctype-wchar.h: +/usr/lib/gcc/x86_64-linux-gnu/11/include/adxintrin.h: + /usr/include/x86_64-linux-gnu/c++/11/bits/atomic_word.h: /home/kanken/code/AHRS_core/src/model/patterns/commands/commands.hpp: @@ -2562,6 +2556,10 @@ ThermxRenderer.cpp: /usr/include/oneapi/tbb/detail/_utils.h: +/usr/include/c++/11/bits/atomic_base.h: + +/home/kanken/code/AHRS_core/src/model/hardware/hw/extendables/Device.hpp: + /usr/include/c++/11/bits/stl_function.h: /usr/local/include/opencv4/opencv2/core/cvstd.inl.hpp: @@ -2698,8 +2696,6 @@ ThermxRenderer.cpp: /usr/include/pthread.h: -/usr/include/c++/11/bits/locale_facets_nonio.tcc: - /usr/include/c++/11/bits/stl_pair.h: /usr/include/c++/11/ext/atomicity.h: @@ -2720,12 +2716,6 @@ ThermxRenderer.cpp: /usr/include/c++/11/ext/new_allocator.h: -/usr/include/c++/11/bits/char_traits.h: - -/usr/include/libintl.h: - -/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h: - /usr/include/c++/11/bits/locale_facets.h: /usr/include/tbb/parallel_reduce.h: @@ -2740,6 +2730,24 @@ ThermxRenderer.cpp: /usr/lib/gcc/x86_64-linux-gnu/11/include/fxsrintrin.h: +/usr/include/c++/11/bits/basic_ios.h: + +/usr/include/x86_64-linux-gnu/c++/11/bits/messages_members.h: + +ThermxRenderer.hpp: + +/usr/local/include/opencv4/opencv2/core/cuda.inl.hpp: + +/usr/lib/gcc/x86_64-linux-gnu/11/include/immintrin.h: + +/usr/include/c++/11/bits/char_traits.h: + +/usr/include/x86_64-linux-gnu/bits/thread-shared-types.h: + +/usr/include/libintl.h: + +/usr/include/c++/11/bits/locale_facets_nonio.tcc: + /usr/include/c++/11/bits/locale_conv.h: /usr/include/c++/11/bits/quoted_string.h: @@ -2904,12 +2912,6 @@ ThermxRenderer.cpp: /usr/include/c++/11/bits/regex.h: -/home/kanken/code/AHRS_core/src/model/hardware/hw/extendables/Device.hpp: - -/usr/include/c++/11/bits/atomic_base.h: - -/usr/include/c++/11/bits/atomic_lockfree_defines.h: - /usr/include/x86_64-linux-gnu/bits/types/__FILE.h: /usr/include/c++/11/backward/auto_ptr.h: @@ -2948,8 +2950,6 @@ ThermxRenderer.cpp: /usr/lib/gcc/x86_64-linux-gnu/11/include/avx512vpopcntdqintrin.h: -/usr/lib/gcc/x86_64-linux-gnu/11/include/adxintrin.h: - /home/kanken/code/AHRS_core/src/model/perfcheckers/framerate.hpp: /home/kanken/code/AHRS_core/src/model/controllers/ui/uiController.hpp: diff --git a/Plugins/Thermx/CMakeLists.txt b/Plugins/Thermx/CMakeLists.txt index 29a3052..4be5e58 100644 --- a/Plugins/Thermx/CMakeLists.txt +++ b/Plugins/Thermx/CMakeLists.txt @@ -8,8 +8,12 @@ set(thermx_src ThermxRenderer.cpp Factory.cpp ) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY /home/kanken/code/AHRS_core/src/plugins/) +#SET(GCC_COVERAGE_COMPILE_FLAGS "-fsanitize=undefined,address") +#SET(GCC_COVERAGE_LINK_FLAGS "-fsanitize=undefined,address") + +#SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}") +#SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}") find_package( OpenCV REQUIRED ) find_package(OpenGL REQUIRED) diff --git a/Plugins/Thermx/ThermxController.cpp b/Plugins/Thermx/ThermxController.cpp index d01b324..3fc9905 100644 --- a/Plugins/Thermx/ThermxController.cpp +++ b/Plugins/Thermx/ThermxController.cpp @@ -13,25 +13,47 @@ std::vector split(std::string str, std::string c){ } void ThermxController::getData(){ - mn::CppLinuxSerial::SerialPort serialPort; std::string s; - serialPort.Write("@"); + if(!(serialPort->GetState() == mn::CppLinuxSerial::State::OPEN)){ + //std::cout << "port was closed, opening..." <Open(); + } + //std::cout << "port is open, sending @" << std::endl; + serialPort->Write("@"); + //std::cout << "done" << std::endl; while(s.find('@') == std::string::npos){ std::string readData; - serialPort.Read(readData); + serialPort->Read(readData); s += readData; } + //std::cout << "done receiving data" << std::endl; s = s.substr(0,s.length()-2); + //std::cout << "trimmed data" << std::endl; std::vector splitted = split(s, "|"); + //std::cout << "split data " << splitted.size() << std::endl; + while(splitted.size() < 32*24){ + splitted.push_back("0.0"); + } + //std::cout << "filled data " << splitted.size() << std::endl; float arr[24][32]; + treated.clear(); + treated.reserve(32*24); int i = 0; int j = 0; for(std::string str : splitted){ arr[j][i] = std::stof(str); + treated.push_back(arr[j][i]); i++; if(i >= 32){ i = 0; j++; } } - _trx->refreshData(arr); + //std::cout << "data sent to array" << std::endl; + if(_trx == NULL){ + //std::cout << "renderer was null?" << std::endl; + }else{ + _trx->refreshData(treated); + } + //std::cout << "data refreshed" << std::endl; + working = false; } \ No newline at end of file diff --git a/Plugins/Thermx/ThermxController.hpp b/Plugins/Thermx/ThermxController.hpp index cb96af7..92d5f0c 100644 --- a/Plugins/Thermx/ThermxController.hpp +++ b/Plugins/Thermx/ThermxController.hpp @@ -4,14 +4,21 @@ class ThermxController : public SerialDevice{ protected: float out_buf[24][32]; ThermxRenderer* _trx; + vector treated; public: - ThermxController(ThermxRenderer* trx) : SerialDevice("/dev/ttyACM"), _trx(trx){ + ThermxController(ThermxRenderer* trx) : SerialDevice("ttyACM"){ + _trx = trx; ic = new IdentifiyCommand(this); this->_tagidentifier = "821ce9ba-a697-487b-a402-32e29b9d599d"; this->_displayName = "thermal camera module"; this->_baudrate = 460800; + this->workDelayMs = 1000/16; } + void doPortWork() override{ + getData(); + } + void getData(); }; diff --git a/Plugins/Thermx/ThermxRenderer.cpp b/Plugins/Thermx/ThermxRenderer.cpp index 70e9af6..12943fe 100644 --- a/Plugins/Thermx/ThermxRenderer.cpp +++ b/Plugins/Thermx/ThermxRenderer.cpp @@ -2,6 +2,7 @@ #define GL_GLEXT_PROTOTYPES #include #include + float RandomFloat(float a, float b) { float random = ((float) rand()) / (float) RAND_MAX; float diff = b - a; @@ -10,30 +11,50 @@ float RandomFloat(float a, float b) { } ThermxRenderer::ThermxRenderer(){ + data = std::vector(); + data.reserve(32*24); for(int i = 0; i < 24; i ++){ for(int j = 0; j < 32; j++){ - data[i][j] = RandomFloat(0.0,40.0); + data.push_back(RandomFloat(0.0,40.0)); } } refreshData(data); } -void ThermxRenderer::refreshData(float newData[24][32]){ +void ThermxRenderer::refreshData(vector newData){ try{ - const std::lock_guard lock(dataMutex); - min = max = data[0][0]; - for(int i = 0; i < 24; i ++){ - for(int j = 0; j < 32; j++){ - float t = data[i][j]; - if(t > max) max = t; - if(t < min) min = t; + //std::cout << "copying data" << std::endl; + dataMutex.lock(); + data.clear(); + data = newData; + + //std::cout << "setting minmax " << newData.size() << std::endl; + int size = data.size(); + //std::cout << data[0]; + //std::cout << "didn't segfault" << std::endl; + max = newData.at(0); + //std::cout << "set minmax" << std::endl; + for(int i = 0; i < 24; i++){ + for(int j = 0; j < 32; j++){ + if(i*32+j >= newData.size()) break; + float t = newData.at(i*32+j); + if(t > max) max = t; + if(t < min) min = t; + } } - } - std::copy(&newData[0][0], &newData[0][0]+24*32,&data[0][0]); - const std::lock_guard llock(matMutex); - draw(); + center = newData.at((24/2)*32+(32/2)); + + data.at((24/2)*32+(32/2)) = 0; + dataMutex.unlock(); + //std::cout << "drawing data" << std::endl; + //matMutex.lock(); + draw(); + //matMutex.unlock(); + //std::cout << "done refreshing data" << std::endl; + + //std::cout << "didn't crash" << std::endl; }catch(exception e){ - std::cout << "thermx render exception: " << e.what() << std::endl; + //std::cout << "thermx render exception: " << e.what() << std::endl; } }; @@ -43,9 +64,11 @@ void ThermxRenderer::draw(){ UcurrentData = cv::UMat(cv::Size(32, 24), CV_8UC3, cv::Scalar(0,0,0)); currentData = cv::Mat(cv::Size(32, 24), CV_8UC3, cv::Scalar(0,0,0)); Mat greyActual = cv::Mat(cv::Size(32, 24), CV_8UC1, cv::Scalar(0)); //black heightxwidth umat - for(int i = 0; i < 24; i ++){ - for(int j = 0; j < 32; j++){ - float t = data[i][j]; + + for(int i = 0; i < 24; i++){ + for(int j = 0; j < 32; j++){ + if(i*32+j >= data.size()) break; + float t = data.at(i*32+j); t -= min; t /= (max - min); //0.0 -> 1.0 int k = t*255; //0 -> 255 @@ -53,16 +76,30 @@ void ThermxRenderer::draw(){ } } applyColorMap(greyActual,currentData,COLORMAP_INFERNO); //pass from grayscale to thermal vision + + for(int i = 0; i < 24; i++){ + for(int j = 0; j < 32; j++){ + if(i*32+j >= data.size()) break; + float t = data.at(i*32+j); + if(t > 34 && t < 40) + currentData.at(i, j) = Vec3b(255,0,0); + } + } currentData.copyTo(UcurrentData); } void ThermxRenderer::processFrame(cv::UMat& input, cv::Point2d& cursorPos){ if(!input.rows <= 0 && !input.cols <= 0){ + ////std::cout << "drawing frame..." << std::endl; cv::UMat output; - cv::resize(UcurrentData, output, cv::Size(input.cols, input.rows), cv::InterpolationFlags::INTER_MAX); - //std::cout << input.cols << input.rows << input.type() << output.rows << output.cols << output.type()<<"\n"; + //matMutex.lock(); + cv::resize(UcurrentData, output, cv::Size(input.cols, input.rows), cv::InterpolationFlags::INTER_NEAREST); + //matMutex.unlock(); + ////std::cout << input.cols << input.rows << input.type() << output.rows << output.cols << output.type()<<"\n"; cv::UMat k(input.size(), input.type()); - cv::addWeighted(input, 1.0, output, 0.3, 0.0, k); + cv::addWeighted(input, 1.0, output, 1.0, 0.0, k); + float fi = center; + cv::putText(k, cv::format("%.2f", fi), Point2i(400,250),cv::FONT_HERSHEY_DUPLEX, 2, cv::Scalar(100, 100, 100), 1, cv::LineTypes::FILLED, false); input = k; } } \ No newline at end of file diff --git a/Plugins/Thermx/ThermxRenderer.hpp b/Plugins/Thermx/ThermxRenderer.hpp index 28b720d..5dcd7bb 100644 --- a/Plugins/Thermx/ThermxRenderer.hpp +++ b/Plugins/Thermx/ThermxRenderer.hpp @@ -1,9 +1,9 @@ #include "../../../AHRS_core/src/pipeline/abstract/pipelineNode.hpp" class ThermxRenderer : public SubNode{ protected: - float data[24][32]; float min = 0; float max = 0; + std::atomic center = 0; int height = 640; int width = 480; cv::Mat currentData = cv::Mat(cv::Size(32, 24), CV_8UC3, cv::Scalar(0,0,0)); @@ -14,7 +14,8 @@ class ThermxRenderer : public SubNode{ void draw(); void drawGL(); public: + vector data; ThermxRenderer(); void processFrame(cv::UMat& input, cv::Point2d& cursorPos) override; - void refreshData(float newData[24][32]); + void refreshData(vector newData); }; \ No newline at end of file