Overview
The Flc C++ library is a software controller for Fujinon lenses. These lenses provide control interface over serial port. The Flc library inherits Lens interface. It depends on libraries: Lens (provides interface and data structures to control lenses, source code included, Apache 2.0 license), Logger (provides function to print logs, source code included, Apache 2.0 license), SerialPort (provides functions to work with serial ports, source code included, Apache 2.0 license) and FujiProtocolParser (provides functions to encode control commands and decode responses from Fujinon lenses, source code included). The Flc library provides simple interface to be integrated in any C++ projects. The library repository (folder) provided by source code and doesn’t have third-party dependencies to be specially installed in OS (excepts test application which depends on OpenCV open source library to provide user interface). It is developed with C++17 standard and compatible with Linux and Windows.
Documentation
Documentation: GO TO DOCUMENTATION
Lens control interface
class Flc : public cr::lens::Lens
{
public:
/// Get class version.
static std::string getVersion();
/// Decode and execute command.
bool decodeAndExecuteCommand(uint8_t* data, int size) override;
/// Open controller serial port.
bool openLens(std::string initString) override;
/// Init lens by parameters structure.
bool initLens(cr::lens::LensParams& params) override;
/// Closes serial port and stops all threads.
void closeLens() override;
/// Get serial port status.
bool isLensOpen() override;
/// Get lens connection status.
bool isLensConnected() override;
/// Set lens parameter.
bool setParam(cr::lens::LensParam id, float value) override;
/// Get lens parameter.
float getParam(cr::lens::LensParam id) override;
/// Get the lens parameters.
void getParams(cr::lens::LensParams& params) override;
/// Execute lens command.
bool executeCommand(cr::lens::LensCommand id, float arg = 0) override;
/// Add video frame for auto focus purposes. Not supported.
void addVideoFrame(cr::video::Frame& frame) override;
};
Simple example
#include <iostream>
#include "Flc.h"
int main(void)
{
// Init camera controller.
cr::fuji::Flc controller;
if (!controller.openCamera("/dev/ttyUSB0;9600;50"))
return -1;
while (true)
{
// Main dialog.
int option = -1;
std::cout << "Options (1:Zoom tele, 2:Zoom wide, 3:Zoom stop) : ";
std::cin >> option;
// Get all lens params.
cr::lens::LensParams lensParams;
controller.getParams(lensParams);
switch (option)
{
case 1: // Zoom tele.
controller.executeCommand(cr::lens::LensCommand::ZOOM_TELE);
break;
case 2: // Zoom wide.
controller.executeCommand(cr::lens::LensCommand::ZOOM_WIDE);
break;
case 3: // Zoom stop.
controller.executeCommand(cr::lens::LensCommand::ZOOM_STOP);
break;
default:
break;
}
}
return 1;
}