IRSOL
C++ code implementing socket server for interacting with Baumer camera.
irsol::camera::internal Namespace Reference

Classes

struct  FeaturePermissions
 Encapsulates the permissions of a camera feature. More...
 

Enumerations

enum  FeaturePermissionValue {
  UNSET = 0 , NOT_AVAILABLE = (1u << 0) , AVAILABLE = (1u << 1) , READABLE = (1u << 2) ,
  WRITABLE = (1u << 3)
}
 Enumeration for feature permission bit flags. More...
 

Functions

std::map< FeaturePermissions, std::vector< NeoAPI::Feature * > > extractCameraFeatures (NeoAPI::Cam &cam)
 Extracts and groups camera features by their permissions.
 

Enumeration Type Documentation

◆ FeaturePermissionValue

Enumeration for feature permission bit flags.

Represents the availability and access permissions of a camera feature.

Enumerator
UNSET 

Permission state not set.

NOT_AVAILABLE 

Feature is not available.

AVAILABLE 

Feature is available.

READABLE 

Feature is readable.

WRITABLE 

Feature is writable.

Definition at line 24 of file discovery.hpp.

25{
26 UNSET = 0,
27 NOT_AVAILABLE = (1u << 0),
28 AVAILABLE = (1u << 1),
29 READABLE = (1u << 2),
30 WRITABLE = (1u << 3)
31};
@ NOT_AVAILABLE
Feature is not available.
Definition discovery.hpp:27
@ UNSET
Permission state not set.
Definition discovery.hpp:26
@ READABLE
Feature is readable.
Definition discovery.hpp:29

Function Documentation

◆ extractCameraFeatures()

std::map< FeaturePermissions, std::vector< NeoAPI::Feature * > > irsol::camera::internal::extractCameraFeatures ( NeoAPI::Cam &  cam)

Extracts and groups camera features by their permissions.

Queries the given NeoAPI camera instance for features, categorizes them by their permission sets, and returns a map from FeaturePermissions to lists of corresponding feature pointers.

Parameters
camNeoAPI camera object to query.
Returns
std::map mapping FeaturePermissions to vectors of NeoAPI::Feature pointers.

Definition at line 15 of file discovery.cpp.

16{
17 std::map<internal::FeaturePermissions, std::vector<NeoAPI::Feature*>> featurePermissionsMap;
18
19 uint64_t featureCount = 0;
20 for(auto& f : cam.GetFeatureList()) {
21 IRSOL_LOG_TRACE("Feature: {0:s}", f.GetName().c_str());
22 auto isAvailable = f.IsAvailable();
23 auto isReadable = f.IsReadable();
24 auto isWritable = f.IsWritable();
25 internal::FeaturePermissions permissions = {isAvailable, isReadable, isWritable};
26 if(featurePermissionsMap.find(permissions) == featurePermissionsMap.cend()) {
27 featurePermissionsMap[permissions] = std::vector<NeoAPI::Feature*>();
28 }
29 featurePermissionsMap[permissions].push_back(&f);
30 featureCount++;
31 }
32
33 IRSOL_SUPPRESS_UNUSED_STRUCTURED_BINDING_START // Disable unused variable warning
34 for(auto& [_, features] : featurePermissionsMap)
35 {
37 std::sort(features.begin(), features.end(), [](NeoAPI::Feature* a, NeoAPI::Feature* b) {
38 return std::string(a->GetName()) < std::string(b->GetName());
39 });
40 }
41
42 IRSOL_LOG_INFO("Loaded {0:d} camera features", featureCount);
43 return featurePermissionsMap;
44}
#define IRSOL_LOG_INFO(...)
Logs an info-level message using the default logger.
Definition logging.hpp:92
#define IRSOL_LOG_TRACE(...)
Logs a trace-level message using the default logger.
Definition logging.hpp:90
#define IRSOL_SUPPRESS_UNUSED_STRUCTURED_BINDING_START
Begins a diagnostic suppression block for unused structured binding variables.
Definition macros.hpp:68
#define IRSOL_SUPPRESS_UNUSED_STRUCTURED_BINDING_END
Ends a diagnostic suppression block started with IRSOL_SUPPRESS_UNUSED_STRUCTURED_BINDING_START.
Definition macros.hpp:69
Encapsulates the permissions of a camera feature.
Definition discovery.hpp:40