176 lines
5.9 KiB
C++
176 lines
5.9 KiB
C++
/*******************************************************************************
|
|
* Copyright (c) 2021 Nerian Vision GmbH
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
* in the Software without restriction, including without limitation the rights
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
* furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in
|
|
* all copies or substantial portions of the Software.
|
|
*******************************************************************************/
|
|
|
|
#ifndef VISIONTRANSFER_DEVICEINFO_H
|
|
#define VISIONTRANSFER_DEVICEINFO_H
|
|
|
|
#include <string>
|
|
|
|
namespace visiontransfer {
|
|
|
|
/**
|
|
* \brief Representation of the current device status / health.
|
|
* Useful for addressing issues with peripherals or network transport.
|
|
*/
|
|
class DeviceStatus {
|
|
public:
|
|
DeviceStatus()
|
|
: lastFps(0.0), jumboSize(0), currentCaptureSource(""), validStatus(false) { }
|
|
DeviceStatus(double lastFps, unsigned int jumboSize, const std::string& currentCaptureSource)
|
|
: lastFps(lastFps), jumboSize(jumboSize), currentCaptureSource(currentCaptureSource), validStatus(true) { }
|
|
bool isValid() const { return validStatus; }
|
|
double getLastFps() const { return lastFps; }
|
|
unsigned int getJumboMtu() const { return jumboSize; }
|
|
unsigned int getJumboFramesEnabled() const { return jumboSize > 0; }
|
|
std::string getCurrentCaptureSource() const { return currentCaptureSource; }
|
|
private:
|
|
double lastFps; // Most recent FPS report, or 0.0 if N/A
|
|
unsigned int jumboSize; // Jumbo MTU, or 0 if Jumbo mode disabled
|
|
std::string currentCaptureSource; // for targeted instructions
|
|
bool validStatus; // whether the status record contains actual data
|
|
};
|
|
|
|
/**
|
|
* \brief Aggregates information about a discovered device
|
|
*/
|
|
class DeviceInfo {
|
|
public:
|
|
enum DeviceModel {
|
|
SCENESCAN,
|
|
SCENESCAN_PRO,
|
|
SCARLET
|
|
};
|
|
|
|
enum NetworkProtocol {
|
|
PROTOCOL_TCP,
|
|
PROTOCOL_UDP
|
|
};
|
|
|
|
/**
|
|
* \brief Constructs an empty object with default information
|
|
*/
|
|
DeviceInfo(): ip(""), protocol(PROTOCOL_TCP), fwVersion(""), model(SCENESCAN),
|
|
compatible(false) {
|
|
}
|
|
|
|
/**
|
|
* \brief Constructs an object by initializing all members with data
|
|
* from the given parameters
|
|
*
|
|
* \param ip IP address of the discovered device.
|
|
* \param protocol Network protocol of the discovered device.
|
|
* \param fwVersion Firmware version as string.
|
|
* \param model Model of the discovered device
|
|
* \param compatible Indicates if the device is compatible with this
|
|
* API version.
|
|
*/
|
|
DeviceInfo(const char* ip, NetworkProtocol protocol, const char* fwVersion,
|
|
DeviceModel model, bool compatible)
|
|
: ip(ip), protocol(protocol), fwVersion(fwVersion), model(model),
|
|
compatible(compatible) {
|
|
}
|
|
|
|
/**
|
|
* \brief Construct DeviceInfo with pre-initialized DeviceStatus field, for received health reports
|
|
*/
|
|
DeviceInfo(const char* ip, NetworkProtocol protocol, const char* fwVersion,
|
|
DeviceModel model, bool compatible, const DeviceStatus& status)
|
|
: ip(ip), protocol(protocol), fwVersion(fwVersion), model(model),
|
|
compatible(compatible), status(status){
|
|
}
|
|
|
|
/**
|
|
* \brief Gets the IP address of the device.
|
|
* \return Device IP address.
|
|
*/
|
|
std::string getIpAddress() const {return ip;}
|
|
|
|
/**
|
|
* \brief Gets the network protocol of the device.
|
|
* \return Device network protocol.
|
|
*
|
|
* Possible network protocols are \c PROTOCOL_TCP or \c PROTOCOL_UDP.
|
|
*/
|
|
NetworkProtocol getNetworkProtocol() const {return protocol;}
|
|
|
|
/**
|
|
* \brief Gets the firmware version of the device.
|
|
* \return Firmware version encoded as string.
|
|
*
|
|
* A firmware version string typically consists of a major, minor
|
|
* and patch version, like for example "1.2.34". For special
|
|
* firmware releases, however, the firmware string might deviate.
|
|
*/
|
|
std::string getFirmwareVersion() const {return fwVersion;}
|
|
|
|
/**
|
|
* \brief Gets the model identifier of the discovered device.
|
|
* \return The device model.
|
|
*
|
|
* Currently supported models are \c SCENESCAN, \c SCENESCAN_PRO and
|
|
* SCARLET.
|
|
*/
|
|
DeviceModel getModel() const {return model;}
|
|
|
|
/**
|
|
* \brief Return the status / health as reported by the device
|
|
*/
|
|
DeviceStatus getStatus() const { return status; }
|
|
|
|
/**
|
|
* \brief Returns true if the device is compatible with this API
|
|
* version
|
|
*/
|
|
bool isCompatible() const {return compatible;}
|
|
|
|
/**
|
|
* \brief Converts this object to a printable string.
|
|
*
|
|
* All information is concatenated into a readable string, which
|
|
* can for example be printed to a terminal.
|
|
*/
|
|
std::string toString() const {
|
|
std::string ret = ip + "; ";
|
|
switch(model) {
|
|
case SCENESCAN_PRO: ret += "SceneScan Pro"; break;
|
|
case SCENESCAN: ret += "SceneScan"; break;
|
|
case SCARLET: ret += "Scarlet"; break;
|
|
default: ret += "Unknown"; break;
|
|
}
|
|
|
|
ret += "; " + fwVersion + "; " + (compatible ? "compatible" : "incompatible");
|
|
return ret;
|
|
}
|
|
|
|
/**
|
|
* \brief Comparison operator for comparing two DeviceInfo objects.
|
|
*/
|
|
bool operator == (const DeviceInfo& other) const {
|
|
return ip == other.ip && protocol == other.protocol && fwVersion == other.fwVersion
|
|
&& model == other.model && compatible == other.compatible;
|
|
}
|
|
|
|
private:
|
|
std::string ip;
|
|
NetworkProtocol protocol;
|
|
std::string fwVersion;
|
|
DeviceModel model;
|
|
bool compatible;
|
|
// Extended device status / health info
|
|
DeviceStatus status;
|
|
};
|
|
|
|
} // namespace
|
|
|
|
#endif
|