You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

103 lines
4.5 KiB

# License: Apache 2.0. See LICENSE file in root directory.
# Copyright(c) 2024 Intel Corporation. All Rights Reserved.
#test:donotrun:!dds
#test:retries:gha 2
from rspy import log, test
with test.remote.fork( nested_indent=None ) as remote:
if remote is None: # we're the fork
import pyrealdds as dds
dds.debug( log.is_debug_on() )
with test.closure( 'Start the server participant' ):
participant = dds.participant()
participant.init( 123, 'server' )
with test.closure( 'Create the server' ):
device_info = dds.message.device_info()
device_info.name = 'Options device'
device_info.topic_root = 'librs-options/device'
s1p1 = dds.video_stream_profile( 9, dds.video_encoding.rgb, 10, 10 )
s1profiles = [s1p1]
s1 = dds.color_stream_server( 's1', 'sensor' )
s1.init_profiles( s1profiles, 0 )
s1.init_options( [
dds.option.from_json( ['Backlight Compensation', 0, 0, 1, 1, 0, 'Backlight custom description'] ),
dds.option.from_json( ['Boolean Option', False, False, 'Something'] ),
dds.option.from_json( ['Integer Option', 1, None, 'Something', ['optional']] ),
dds.option.from_json( ['Enum Option', 'First', ['First','Last','Everything'], 'Last', 'My'] )
] )
server = dds.device_server( participant, device_info.topic_root )
server.init( [s1], [], {} )
with test.closure( 'Broadcast the device', on_fail=test.ABORT ):
server.broadcast( device_info )
raise StopIteration() # quit the remote
###############################################################################################################
# The client is LibRS
#
import pyrealsense2 as rs
if log.is_debug_on():
rs.log_to_console( rs.log_severity.debug )
from dds import wait_for_devices
with test.closure( 'Initialize librealsense context', on_fail=test.ABORT ):
context = rs.context( { 'dds': { 'enabled': True, 'domain': 123, 'participant': 'client' }} )
only_sw_devices = int(rs.product_line.sw_only) | int(rs.product_line.any)
with test.closure( 'Find the server', on_fail=test.ABORT ):
dev = wait_for_devices( context, only_sw_devices, n=1. )
for s in dev.query_sensors():
break
options = test.info( "supported options", s.get_supported_options() )
test.check_equal( len(options), 5 ) # 'Frames Queue Size' gets added to all sensors!!?!?!
with test.closure( 'Play with integer option' ):
io = next( o for o in options if str(o) == 'Integer Option' )
iv = s.get_option_value( io )
test.check_equal( iv.type, rs.option_type.integer )
test.check_equal( iv.value, 1 )
test.check_equal( s.get_option( io ), 1. )
s.set_option( io, 5 )
test.check_equal( s.get_option( io ), 5. )
with test.closure( 'Play with boolean option' ):
bo = next( o for o in options if str(o) == 'Boolean Option' )
bv = s.get_option_value( bo )
test.check_equal( bv.type, rs.option_type.boolean )
test.check_equal( bv.value, False )
test.check_equal( s.get_option( bo ), 0. )
s.set_option( bo, 1. )
test.check_equal( s.get_option( bo ), 1. )
test.check_throws( lambda: s.set_option( bo, 2. ), RuntimeError, 'not a boolean: 2' )
test.check_throws( lambda: s.set_option( bo, 1.01 ), RuntimeError, 'not a boolean: 1.01' )
with test.closure( 'Play with enum option' ):
eo = next( o for o in options if str(o) == 'Enum Option' )
ev = s.get_option_value( eo )
test.check_equal( ev.type, rs.option_type.string )
test.check_equal( ev.value, 'First' )
er = s.get_option_range( ev.id )
test.check_equal( er.min, 0. )
test.check_equal( er.max, 2. )
test.check_equal( er.default, 1. )
test.check_equal( er.step, 1. )
test.check_equal( s.get_option_value_description( eo, 0. ), 'First' )
test.check_equal( s.get_option_value_description( eo, 1. ), 'Last' )
test.check_equal( s.get_option_value_description( eo, 2. ), 'Everything' )
test.check_equal( s.get_option( eo ), 0. )
s.set_option( eo, 2. )
test.check_equal( s.get_option_value( eo ).value, 'Everything' )
s.set_option_value( eo, 'Last' )
test.check_equal( s.get_option( eo ), 1. )
with test.closure( 'All done' ):
dev = None
context = None
test.print_results()