Overview
The Klc C++ library is a software controller for KOWA CCTV lenses. These lenses provide control interface over serial port. The Klc 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 KowaLensParser (provides encoding commands and decoding responses from lens, source code included). The Klc 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. It is developed with C++17 standard and compatible with Linux and Windows.
Documentation
Documentation: GO TO DOCUMENTATION
Lens control interface
class Klc : public Lens
{
public:
/// Get class version.
static std::string getVersion();
/// Open serial port.
bool openLens(std::string initString) override;
/// Init lens controller.
bool initLens(LensParams& params) override;
/// Close serial port and stop communication thread.
void closeLens() override;
/// Get controller initialization status.
bool isLensOpen() override;
/// Get connection status.
bool isLensConnected() override;
/// Set the lens controller parameter.
bool setParam(LensParam id, float value) override;
/// Get the lens controller param.
float getParam(LensParam id) override;
/// Get the lens controller params.
void getParams(LensParams& params) override;
/// Execute command.
bool executeCommand(LensCommand id, float arg = 0) override;
/// Add video frame for auto focus purposes.
void addVideoFrame(cr::video::Frame& frame) override;
/// Decode and execute command.
bool decodeAndExecuteCommand(uint8_t* data, int size) override;
};
Simple example
#include <iostream>
#include "Klc.h"
int main(void)
{
// Init lens controller.
cr::lens::Lens *lc = new cr::lens::Klc();
if (!lc->openLens("/dev/ttyUSB0"))
{
return -1;
}
// Get lens Zoom position
std::cout << "Zoom pos: " << lc->getParam(cr::lens::LensParam::ZOOM_POS) << std::endl;
// Go to zoom position 65535 (Full tele).
lc->executeCommand(cr::lens::LensCommand::ZOOM_TO_POS, 65535);
// Show zoom movement (changing position).
for (int i = 0; i < 50; ++i)
{
std::cout << "Zoom pos: " << lc->getParam(cr::lens::LensParam::ZOOM_POS) << std::endl;
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
return 1;
}