Hello everyone,
I used the DeviceFactory Discover method to get a list of all the camera connected to the computer, so that we can dynamically choose the camera that we want to use when our software is setup on a new Windows 11 64 bits computer on our system.
See below my code :
static std::vector<CCvbGeniCamData> GetDataFromDiscovery(Cvb::DiscoverFlags flags_to_use)
{
auto discoveryInformations = Cvb::DeviceFactory::Discover(flags_to_use);
auto cameratInformations = std::vector<CCvbGeniCamData>();
for (size_t i = 0; i < discoveryInformations.capacity(); i++)
{
std::string deviceData = Cvb::String();
CCvbGeniCamData data;
try
{
data.DeviceData.DeviceAccessStatus = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::DeviceAccessStatus, deviceData) ? deviceData : "n\\a";
data.DeviceData.DeviceId = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::DeviceId, deviceData) ? deviceData : "n\\a";
data.DeviceData.DeviceIP = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::DeviceIP, deviceData) ? deviceData : "n\\a";
data.DeviceData.DeviceMac = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::DeviceMac, deviceData) ? deviceData : "n\\a";
data.DeviceData.DeviceModel = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::DeviceModel, deviceData) ? deviceData : "n\\a";
data.DeviceData.DeviceSerialNumber = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::DeviceSerialNumber, deviceData) ? deviceData : "n\\a";
data.DeviceData.DeviceSubnetMask = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::DeviceSubnetMask, deviceData) ? deviceData : "n\\a";
data.DeviceData.DeviceTransportLayerType = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::DeviceTransportLayerType, deviceData) ? deviceData : "n\\a";
data.DeviceData.DeviceUsbProductId = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::DeviceUsbProductId, deviceData) ? deviceData : "n\\a";
data.DeviceData.DeviceUsbVendorId = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::DeviceUsbVendorId, deviceData) ? deviceData : "n\\a";
data.DeviceData.DeviceUsername = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::DeviceUsername, deviceData) ? deviceData : "n\\a";
data.DeviceData.DeviceVendor = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::DeviceVendor, deviceData) ? deviceData : "n\\a";
data.DeviceDataTransport.TransportLayerId = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::TransportLayerId, deviceData) ? deviceData : "n\\a";
data.DeviceDataTransport.TransportLayerPath = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::TransportLayerPath, deviceData) ? deviceData : "n\\a";
data.DeviceDataTransport.TransportLayerVendor = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::TransportLayerVendor, deviceData) ? deviceData : "n\\a";
data.InformationInterface.InterfaceDisplayName = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::InterfaceDisplayName, deviceData) ? deviceData : "n\\a";
data.InformationInterface.InterfaceDriverType = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::InterfaceDriverType, deviceData) ? deviceData : "n\\a";
data.InformationInterface.InterfaceId = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::InterfaceId, deviceData) ? deviceData : "n\\a";
data.InformationInterface.InterfaceMac = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::InterfaceMac, deviceData) ? deviceData : "n\\a";
data.InformationInterface.InterfaceSubNetList = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::InterfaceSubNetList, deviceData) ? deviceData : "n\\a";
data.InformationInterface.InterfaceTLType = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::InterfaceTLType, deviceData) ? deviceData : "n\\a";
data.UsbPortPath = discoveryInformations[i].TryGetProperty(Cvb::DiscoveryProperties::UsbPortPath, deviceData) ? deviceData : "n\\a";
data.AccessToken = discoveryInformations[i].AccessToken();
switch (discoveryInformations[i].DiscoveryLayer())
{
case Cvb::ModuleLayer::System: data.ModuleLayer = "System"; break;
case Cvb::ModuleLayer::TransportLayerDevice: data.ModuleLayer = "TransportLayerDevice"; break;
case Cvb::ModuleLayer::TransportLayerInterface: data.ModuleLayer = "TransportLayerInterface"; break;
case Cvb::ModuleLayer::TransportLayerStream: data.ModuleLayer = "TransportLayerStream"; break;
case Cvb::ModuleLayer::TransportLayerSystem: data.ModuleLayer = "TransportLayerSystem"; break;
case Cvb::ModuleLayer::Unknown: data.ModuleLayer = "Unknown"; break;
case Cvb::ModuleLayer::Vin: data.ModuleLayer = "Vin"; break;
default:
break;
}
}
catch (const std::exception& exce)
{
std::string error = exce.what();
}
cameratInformations.push_back(data);
}
return cameratInformations;
}
I get a lot of element from the discoveryInformations, and somehow I get sometime a device that return an c++ exception at the line :
data.AccessToken = discoveryInformations[i].AccessToken();
I get two pictures to help :
and
Do you know what can do that ? I try this code on 6 software-setup-the-same computers, all with a recent version of CVB 14.01.01, and two of them have this error.