-
-
Couldn't load subscription status.
- Fork 379
Description
Describe the bug
Alkeria cameras cannot be opened by any tool offered by Aravis. Executing the viewer shows the camera correcly, but after selecting the camera the viewer will close with an error. These are the logs:
During enumeration:
[15:52:40.222] 🅸 interface> TLOpen: /opt/alkeria/genicam/libalkusb3-genicam.cti
[15:52:40.223] 🅸 interface> TLOpenInterface 'AlkUSBInterface'
[15:52:40.241] 🅸 interface> Device: SOMESERIAL
[15:52:40.242] 🅸 interface> ID: SOMESERIAL
[15:52:40.242] 🅸 interface> VENDOR: Alkeria
[15:52:40.242] 🅸 interface> MODEL: CELERA C5S-MP
[15:52:40.242] 🅸 interface> S/N: SOMESERIAL
[15:52:40.242] 🅸 interface> IFClose 'AlkUSBInterface'
[15:52:40.434] 🅸 interface> TLClose: /opt/alkeria/genicam/libalkusb3-genicam.cti
After selecting the camera:
[15:52:44.301] 🅸 interface> TLOpen: /opt/alkeria/genicam/libalkusb3-genicam.cti
[15:52:44.301] 🅸 interface> TLOpenInterface 'AlkUSBInterface'
[15:52:44.301] 🅸 interface> IFOpenDevice: 'SOMESERIAL'
[15:52:44.302] 🆆 interface> IFOpenDevice: error -1007
[15:52:44.302] 🆆 interface> DevClose error -1006
[15:52:44.302] 🅸 interface> IFClose 'AlkUSBInterface'
[15:52:44.302] 🅸 interface> TLClose: /opt/alkeria/genicam/libalkusb3-genicam.cti
Similar logs can be obtained by the other tools.
The issue is caused by a missing call to IFUpdateDeviceList before IFOpenDevice. Since the system and interface module have been closed with a TLClose, a IFUpdateDeviceList call is required before calling IFOpenDevice to update the producer internal device list.
To Reproduce
Steps to reproduce the behavior:
- connect the camera
- execute any aravis tool
- an error will be reported during a call to IFOpenDevice
Expected behavior
Camera should be opened without errors.
Camera description:
- Manufacturer: Alkeria
- Interface: Custom
Platform description:
- Aravis version: both master and 0.9.0
- OS: Ubuntu 20.04
- Hardware: x86_64
Additional context
The GenTL 1.6 specification states that:
In case the instantiation of a Device module is possible without having an internal device list, the IFOpenDevice may be called without calling IFUpdateDeviceList before.
The conditional statement implies that there are some producers which do not support calling IFOpenDevice without previously calling IFUpdateDeviceList, which is our case. So it should be sufficient to add this call to fix the issue, given that it will not affect other producer implementations.