#include #include #include #include #include #include "SocketServer.h" #include "CameraController.h" std::atomic g_running(true); void signalHandler(int signal) { std::cout << "\nReceived signal " << signal << ", shutting down..." << std::endl; g_running = false; } int main() { // Setup signal handlers for clean shutdown signal(SIGINT, signalHandler); signal(SIGTERM, signalHandler); // List available cameras std::vector devList; int deviceCount = VxDiscoverCameraDevices(devList); if (deviceCount == 0) { std::cout << "No cameras found" << std::endl; return -1; } std::cout << "Found " << deviceCount << " camera(s):" << std::endl; for (size_t i = 0; i < devList.size(); i++) { std::cout << "[" << i << "] " << devList[i] << std::endl; } // Open camera auto cam = VxInitialCameraDevice(0); if (!cam || VxOpen(cam) != 0) { std::cout << "Failed to initialize/open camera" << std::endl; return -1; } // Get and set default format std::vector fmtList; if (VxGetFormatList(cam, fmtList) != 0) { std::cout << "Failed to get format list" << std::endl; VxClose(cam); return -1; } if (VxSetFormat(cam, fmtList[0]) != 0) { std::cout << "Failed to set format" << std::endl; VxClose(cam); return -1; } std::cout << "Initial format: " << fmtList[0].width << "x" << fmtList[0].height << " @ " << fmtList[0].framerate << " fps" << std::endl; // Create camera controller auto controller = std::make_shared(cam); // Start Unix domain socket server const std::string socketPath = "/tmp/vizion_control.sock"; SocketServer server(socketPath); if (!server.start([controller](const std::string& cmd) { return controller->processCommand(cmd); })) { std::cout << "Failed to start socket server" << std::endl; VxClose(cam); return -1; } std::cout << "\nVizion Streamer is running." << std::endl; std::cout << "Control socket: " << socketPath << std::endl; std::cout << "Press Ctrl+C to exit.\n" << std::endl; // Main loop - keep running until signaled to stop while (g_running) { std::this_thread::sleep_for(std::chrono::milliseconds(100)); } // Cleanup std::cout << "Shutting down..." << std::endl; server.stop(); VxClose(cam); std::cout << "Shutdown complete." << std::endl; return 0; }