Thank you for your reply.
However, I am sorry to say that I did not fully understand what source code example you were referring to in your response.
I am currently testing with the NVIDIA Holoscan Sensor Bridge software, and below is a partial excerpt from my actual application code and configuration.
SIPL test code
Copysipl_capture = hololink_module.operators.SIPLCaptureOp(
self,
condition,
name="sipl_capture",
camera_config="custom_sensor",
json_config=self.json_config,
raw_output=True,
)
SIPL JSON configuration
Copy"CoECamera": {
"isStereo": false,
"hsbSensorIndex": 2,
"hsb_id": 0,
"sensor": {
"mac_address": "8c:1f:64:6d:70:03",
"ip_address": "192.168.0.2"
}
},
"sensor"
Error message
Copy[HSB] ConfigureDriver - IP 192.168.0.2, HSB ID 0
[HSB] ProbeHardware
INFO 0.1134 hololink.cpp:1749 configure_hsb tid=0xb1 -- HSB IP version=0x24072510 datecode=0x1f650000
INFO 1.3174 hololink.cpp:1749 configure_hsb tid=0xb1 -- HSB IP version=0x24072510 datecode=0x1f650000
ERROR: CameraModuleDevice.cpp, line 61: hsbSensorIndex out of range: 2
At the same time, I also tested the sensors using LinuxReceiverOperator, and I was able to confirm normal operation with 3 sensors. Below is part of the code I used for that test.
LinuxReceiverOperator test code
Copyoverride_strategy = hololink_module.BasicEnumerationStrategy(
hololink_module.Metadata(), total_sensors=3
)
hololink_module.Enumerator.set_uuid_strategy(fpga_uui, override_strategy)
meta_camera_1 = hololink_module.Metadata(channel_metadata)
hololink_module.DataChannel.use_sensor(meta_camera_1, 0)
meta_camera_2 = hololink_module.Metadata(channel_metadata)
hololink_module.DataChannel.use_sensor(meta_camera_2, 1)
meta_camera_3 = hololink_module.Metadata(channel_metadata)
hololink_module.DataChannel.use_sensor(meta_camera_3, 2)
rx_camera_0 = hololink_module.operators.LinuxReceiverOperator(
self,
condition_camera_0,
name="rx_camera_0",
frame_size=self._cam0_device.get_total_frame_size(),
frame_context=self._cuda_context,
hololink_channel=self._hololink_channel_camera_0,
device=self._cam0_device,
)
rx_camera_1 = hololink_module.operators.LinuxReceiverOperator(
self,
condition_camera_1,
name="rx_camera_1",
frame_size=self._cam1_device.get_total_frame_size(),
frame_context=self._cuda_context,
hololink_channel=self._hololink_channel_camera_1,
device=self._cam1_device,
)
rx_camera_2 = hololink_module.operators.LinuxReceiverOperator(
self,
condition_camera_2,
name="rx_camera_2",
frame_size=self._cam2_device.get_total_frame_size(),
frame_context=self._cuda_context,
hololink_channel=self._hololink_channel_camera_2,
device=self._cam2_device,
)
Copy
Based on these tests, what I have confirmed so far is the following:
-
The hardware path itself is working correctly
-
Sensor channels 0, 1, and 2 can all be enumerated and operated successfully with LinuxReceiverOperator
-
In contrast, with SIPL, hsbSensorIndex values 0 and 1 work, but starting from hsbSensorIndex = 2, the SIPL library reports an error and initialization fails
-
The official documentation also seems to indicate that only 0 and 1 are valid values for hsbSensorIndex
This is why I raised the question.
My understanding is that the hardware and transport path are functioning correctly, but SIPL appears to reject channel 2 and above during initialization.
So I would appreciate clarification on the following points:
-
Am I misunderstanding the meaning of hsbSensorIndex?
-
Does hsbSensorIndex actually correspond to the sensor channel number on HSB?
-
If not, how should channels 2 and above be represented in the SIPL JSON configuration?
-
If yes, does the current SIPL implementation for HSB support only indices 0 and 1?
At the moment, based on both the runtime behavior and the documentation, it looks as if only sensor channels 0 and 1 are supported in SIPL, which is why I am asking for clarification.
Could you please confirm whether this is expected behavior or a current limitation?
Thank you.