Skip to content

Commit

Permalink
Modify project structure to have a single interfaces submodule
Browse files Browse the repository at this point in the history
  • Loading branch information
CihanBosnali committed Jan 10, 2024
1 parent 76c5daf commit 3dcdb2e
Show file tree
Hide file tree
Showing 20 changed files with 107 additions and 100 deletions.
10 changes: 2 additions & 8 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,7 @@ MODULE_OBJS :=
include config.mk

# example: include a folder
DIR := $(SRC_DIR)/sample_submodule
include $(DIR)/rules.mk

DIR := $(SRC_DIR)/grass_killer
include $(DIR)/rules.mk

DIR := $(SRC_DIR)/webcam_interface
DIR := $(SRC_DIR)/interfaces
include $(DIR)/rules.mk

mkobjdir:
Expand Down Expand Up @@ -46,4 +40,4 @@ doc:
mkdir -p $(DOCS_OUTPUT_DIR)
cd $(DOCS_DIR) && doxygen $(DOCS_DIR)/doxygen-config

.PHONY: mkobjdir mkbuilddir $(MODULES) $(BUILD_MODULES) $(CLEAN_MODULES) $(TEST_MODULES) binary test_ALL
.PHONY: mkobjdir mkbuilddir $(MODULES) $(BUILD_MODULES) $(CLEAN_MODULES) $(TEST_MODULES) binary test_ALL
2 changes: 1 addition & 1 deletion config.mk
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ DOCS_OUTPUT_DIR := $(DOCS_DIR)/doxygen_output
define build
$(eval DRK := $(shell echo "$@" | cut -c 7-))
$(CXX) $(CXXFLAGS) $(INCLUDE_DIRS:%=-I%) -c $(DRK)/$(1) -o $(OBJS_DIR)/$(basename $(1)).o
endef
endef
6 changes: 0 additions & 6 deletions include/arg.hpp

This file was deleted.

6 changes: 0 additions & 6 deletions include/grass_killer.hpp

This file was deleted.

9 changes: 9 additions & 0 deletions include/interfaces.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#ifndef WEBCAM_INTERFACE_HPP
#define WEBCAM_INTERFACE_HPP

#include <opencv2/opencv.hpp>
namespace interfaces {
int start_webcam(cv::VideoCapture &c);
int start_websocket(cv::Mat *frame);
}
#endif
9 changes: 0 additions & 9 deletions include/main.hpp

This file was deleted.

6 changes: 0 additions & 6 deletions include/submodule.hpp

This file was deleted.

6 changes: 0 additions & 6 deletions include/webcam_interface.hpp

This file was deleted.

7 changes: 0 additions & 7 deletions src/grass_killer/grass_killer.cpp

This file was deleted.

9 changes: 0 additions & 9 deletions src/grass_killer/rules.mk

This file was deleted.

Empty file added src/interfaces/depthint.cpp
Empty file.
Empty file added src/interfaces/gpsint.cpp
Empty file.
Empty file added src/interfaces/lidarint.cpp
Empty file.
11 changes: 11 additions & 0 deletions src/interfaces/rules.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
GENERATED_OBJS := webcamint.o websocketint.o

include submodule.general.mk

build_$(DIR):
$(call build,webcamint.cpp)
$(call build,websocketint.cpp)
clean_$(DIR):
test_$(DIR):
@echo testing the module $(DIR)!
test_webcam_interface: test_$(DIR)
16 changes: 16 additions & 0 deletions src/interfaces/webcamint.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#include <iostream>
#include <opencv2/opencv.hpp>
#include "../../include/interfaces.hpp"

namespace interfaces {
int start_webcam(cv::VideoCapture &c) {
cv::VideoCapture cap(0);
if (!cap.isOpened()) {
std::cerr << "WEBCAMINT: Couldn't open the webcam." << std::endl;
return -1;
}
c = cap;
std::cout << "WEBCAMINT: Successfully opened the webcam." << std::endl;
return 0;
}
}
57 changes: 57 additions & 0 deletions src/interfaces/websocketint.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#include <iostream>
#include <websocketpp/config/asio_no_tls.hpp>
#include <websocketpp/server.hpp>
#include <thread>
#include <opencv2/opencv.hpp>
#include "../../include/interfaces.hpp"

namespace interfaces {

typedef websocketpp::server<websocketpp::config::asio> server;

void handle_connection(websocketpp::connection_hdl hdl, server& s, cv::Mat* frame) {
try {
while (true) {
// Check if frame is empty
if (!(*frame).empty()) {
// Convert OpenCV frame to byte vector
std::vector<uchar> buffer;
cv::imencode(".jpg", *frame, buffer);

// Send the frame as a binary message via WebSocket
s.send(hdl, buffer.data(), buffer.size(), websocketpp::frame::opcode::binary);
}
else {
std::cerr << "Couldn't capture frame from webcam." << std::endl;
break;
}
}
} catch (websocketpp::exception const & e) {
std::cout << "Caught websocket exception: " << e.what() << std::endl;
}
}

int start_websocket(cv::Mat* frame) {
// Create a WebSocket server
server s;

// Clear all access log channels to prevent frames being logged
// If frames are logged, then it makes the WebSocket server very slow
s.clear_access_channels(websocketpp::log::alevel::all);

// Define WebSocket server connection handler
s.set_open_handler([&s, frame](websocketpp::connection_hdl hdl) {
std::thread video_thread(handle_connection, hdl, std::ref(s), frame);
video_thread.detach();
});

// Listen on port 6969
s.init_asio();
s.listen(6969);
s.start_accept();
s.run();

std::cout << "WEBSOCKETINT: Successfully started the websocket." << std::endl;
return 0;
}
}
23 changes: 11 additions & 12 deletions src/main.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
#include "submodule.hpp"
#include "main.hpp"
#include "arg.hpp"
#include "grass_killer.hpp"
#include "webcam_interface.hpp"
#include "../include/interfaces.hpp"
#include <opencv2/opencv.hpp>

using namespace std;

Expand All @@ -12,15 +9,17 @@ using namespace std;
\param argc number of arguments
\param argv argument vector
\return nothing
\return exit status
*/
int main(int argc, char* argv[])
{
int value = getValue();
value += argValue();
cout << helloworld << value << endl;
kill_some_grass();
cv::VideoCapture webcam_cap;
cv::Mat web_frame;
interfaces::start_webcam(webcam_cap);
interfaces::start_websocket(&web_frame);

webcam();
while (1) {
webcam_cap >> web_frame;
}
return 0;
}
}
9 changes: 0 additions & 9 deletions src/sample_submodule/arg.cpp

This file was deleted.

11 changes: 0 additions & 11 deletions src/sample_submodule/rules.mk

This file was deleted.

10 changes: 0 additions & 10 deletions src/sample_submodule/submodule.cpp

This file was deleted.

0 comments on commit 3dcdb2e

Please sign in to comment.