Esempio n. 1
0
    def __init__(self, stream_type, **kwargs):
        self._log = logging.getLogger(__name__) if not hasattr(
            self, '_log') else self._log
        inherit_docstring(self)

        DefaultValidatingDraft4Validator(PARAM_SCHEMA).validate(kwargs)

        self.__helper = argparse.Namespace()  # helper modules
        self.__helper.uut = get_instance('uut')

        self.__config = argparse.Namespace()  # configuration values
        self.__config.backing = kwargs.pop(BACKING)
        self.__config.device = kwargs.pop(DEVICE, 0)  # currently unused
        self.__config.callback_data_received = None  # backing=data sink stream callback
        self.__config.delay = None

        self.__data = argparse.Namespace()  # data values
        self.__data.loop_timer_id = None  # timer when looping
        self.__data.loop = 1  # number of loops pending
        self.__data.source_packetiser = None  # source with packet based streaming
        self.__data.sink_timer_id = None  # sink manual streaming timer id
        self.__data.sink_timer_remain = 0.0  # sink manual timer remainder
        self.__data.sink_audio_buffer = None  # sink manual streaming audio data buffer

        if self.__config.backing == BACKING_FILE:
            self.__config.filename = kwargs.pop(FILENAME)
            if stream_type == STREAM_TYPE_SOURCE:
                self.__config.delay = kwargs.pop(DELAY, DELAY_DEFAULT)
            else:
                self.__config.delay = None
            self.__config.loop = kwargs.pop(LOOP, LOOP_DEFAULT)
            self.__config.user_callback_eof = kwargs.get(
                CALLBACK_EOF, lambda *args, **kwargs: None)

            params = getattr(self, '_init_%s_file' % (stream_type))(kwargs)
            params[CALLBACK_EOF] = self.__eof  # required for loop
        else:  # BACKING_DATA
            self.__config.sample_width = kwargs.pop(SAMPLE_WIDTH)
            if stream_type == STREAM_TYPE_SINK:
                self.__config.sample_rate = kwargs.pop(SAMPLE_RATE)
                self.__config.frame_size = kwargs.pop(FRAME_SIZE,
                                                      FRAME_SIZE_DEFAULT)
                self.__config.callback_consume = kwargs.pop(
                    CALLBACK_CONSUME, None)
            else:
                self.__config.frame_size = None
            self.__config.loop = 1

            params = get_user_stream_config(self.__config.sample_width)

        self.__parameters = {}
        self.__parameters[HYDRA_TYPE] = HYDRA_TYPE_AUDIO_SLOT
        self.__parameters[HYDRA_AUDIOSLOT] = self._compute_audioslot(
            stream_type)

        if kwargs:
            self._log.warning('unknown kwargs:%s', str(kwargs))

        super(StreamPcm, self).__init__(stream_type, **params)
Esempio n. 2
0
    def __init__(self, **kwargs):
        self._log = logging.getLogger(__name__) if not hasattr(self, '_log') else self._log
        inherit_docstring(self)

        DefaultValidatingDraft4Validator(PARAM_SCHEMA).validate(kwargs)

        self.__helper = argparse.Namespace()  # helper modules
        self.__helper.uut = get_instance('uut')
        self.__helper.hydra_prot = get_instance('hydra_protocol')
        self.__helper.kalcmd = get_instance('kalcmd')

        self.__config = argparse.Namespace()  # configuration values
        self.__config.service_tag = kwargs.get(SERVICE_TAG)
        self.__config.hci_handle = kwargs.get(HCI_HANDLE, self.__config.service_tag)
        self.__config.wallclock_accuracy = kwargs.get(WALLCLOCK_ACCURACY)
        self.__config.wallclock_handle = kwargs.get(WALLCLOCK_HANDLE)
        self.__config.wallclock_offset = kwargs.get(WALLCLOCK_OFFSET)
        self.__config.next_slot_time = kwargs.get(NEXT_SLOT_TIME)
        self.__config.role = kwargs.get(ROLE)
        self.__config.air_compression_factor = kwargs.get(AIR_COMPRESSION_FACTOR)
        self.__config.air_buffer_size = kwargs.get(AIR_BUFFER_SIZE)
        self.__config.air_packet_length = kwargs.get(AIR_PACKET_LENGTH)
        self.__config.tesco = kwargs.get(TESCO)
        self.__config.wesco = kwargs.get(WESCO)
        self.__config.slot_occupancy = kwargs.get(SLOT_OCCUPANCY)

        # calculate/update other parameters
        self.__config.wallclock_period = \
            WALLCLOCK_UPDATE_PERIOD * (1 + self.__config.wallclock_accuracy / 1e6)

        if self.__config.role == ROLE_SLAVE:
            self.__config.to_air_latency = (self.__config.wesco + 1) * \
                                           TIMESLOT_DURATION_US + TIMESLOT_FRACTION
            self.__config.from_air_latency = -125
        else:
            self.__config.to_air_latency = -125
            self.__config.from_air_latency = (self.__config.wesco + 1) * \
                                             TIMESLOT_DURATION_US + TIMESLOT_FRACTION

        self.__data = argparse.Namespace()  # data values
        self.__data.started = False  # service has not been started
        self.__data.channel_ready = [False, False]  # none of the possible channels are ready yet
        self.__data.bt_clock = 0  # bluetooth wallclock (2*slot)
        self.__data.wallclock_remain = 0  # remainder for bluetooth clock (usec units)
        self.__data.wallclock_timer_id = None
        self.__data.to_air_read_handle = None
        self.__data.to_air_write_handle = None
        self.__data.to_air_aux_handle = None
        self.__data.from_air_read_handle = None
        self.__data.from_air_write_handle = None
        self.__data.from_air_aux_handle = None
        self.__data.msg_handler = self.__helper.hydra_prot.install_message_handler(
            self._message_received)

        if kwargs:
            self._log.warning('unknown kwargs:%s', str(kwargs))
Esempio n. 3
0
    def __init__(self, config, koperator_enable=True):
        self._log = logging.getLogger(__name__) if not hasattr(
            self, '_log') else self._log

        self._config = copy.deepcopy(config)
        self._koperator_enable = koperator_enable
        self._internal_graph = []
        self._internal_sync = []

        self._log.info('validating against kalsim schema')
        DefaultValidatingDraft4Validator(INPUT_DATA_SCHEMA).validate(
            self._config)
        self._validate()
Esempio n. 4
0
    def __init__(self, stream_type, **kwargs):
        self._log = logging.getLogger(__name__) if not hasattr(
            self, '_log') else self._log
        inherit_docstring(self)

        DefaultValidatingDraft4Validator(PARAM_SCHEMA).validate(kwargs)

        self.__helper = argparse.Namespace()  # helper modules
        self.__helper.uut = get_instance('uut')
        self.__helper.hydra_prot = get_instance('hydra_protocol')

        self.__config = argparse.Namespace()  # configuration values
        self.__config.backing = kwargs.pop(BACKING)
        self.__config.callback_data_received = None  # backing=data sink stream callback
        self.__config.delay = None
        self.__config.kick_enable = kwargs.pop(KICK_ENABLE,
                                               KICK_ENABLE_DEFAULT)
        self.__config.device_type = kwargs.pop(DEVICE_TYPE,
                                               DEVICE_TYPE_DEFAULT)
        self.__config.service_tag = kwargs.pop(SERVICE_TAG,
                                               SERVICE_TAG_DEFAULT)
        self.__config.data_buffer_size = kwargs.pop(DATA_BUFFER_SIZE,
                                                    DATA_BUFFER_SIZE_DEFAULT)
        self.__config.metadata_enable = kwargs.pop(METADATA_ENABLE,
                                                   METADATA_ENABLE_DEFAULT)
        self.__config.metadata_format = kwargs.pop(METADATA_FORMAT,
                                                   METADATA_FORMAT_DEFAULT)
        # self.__config.metadata_channel = kwargs.pop(METADATA_CHANNEL, METADATA_CHANNEL_DEFAULT)
        self.__config.metadata_buffer_size = kwargs.pop(
            METADATA_BUFFER_SIZE, METADATA_BUFFER_SIZE_DEFAULT)
        self.__config.ttp_delay = kwargs.pop(TTP_DELAY, TTP_DELAY_DEFAULT)

        self.__data = argparse.Namespace()
        self.__data.loop_timer_id = None  # timer when looping
        self.__data.loop = 1
        self.__data.source_packetiser = None  # source with packet based streaming
        self.__data.source_metadata = None
        self.__data.source_timer_id = None
        self.__data.sink_timer_id = None  # sink manual streaming timer id
        self.__data.sink_timer_remain = 0.0  # sink manual timer remainder
        self.__data.sink_audio_buffer = None  # sink manual streaming audio data buffer
        self.__data.stream2 = None
        self.__data.total_samples = 0
        self.__data.sent_samples = 0

        if self.__config.backing == BACKING_FILE:
            self.__config.filename = kwargs.pop(FILENAME)
            if stream_type == STREAM_TYPE_SOURCE:
                self.__config.delay = kwargs.pop(DELAY, DELAY_DEFAULT)
            else:
                self.__config.delay = None
            self.__config.loop = kwargs.pop(LOOP, LOOP_DEFAULT)
            self.__config.user_callback_eof = kwargs.get(
                CALLBACK_EOF, lambda *args, **kwargs: None)

            params = getattr(self, '_init_%s_file' % (stream_type))(kwargs)
            params[CALLBACK_EOF] = self.__eof  # required for loop
        else:  # BACKING_DATA
            self.__config.sample_width = kwargs.pop(SAMPLE_WIDTH)
            if stream_type == STREAM_TYPE_SINK:
                self.__config.frame_size = kwargs.pop(FRAME_SIZE)
                self.__config.callback_consume = kwargs.pop(
                    CALLBACK_CONSUME, None)
            else:
                self.__config.frame_size = None
            self.__config.loop = 1

            params = get_user_stream_config(self.__config.sample_width)

        self.__parameters = {}
        self.__parameters[HYDRA_TYPE] = HYDRA_TYPE_SUBSYSTEM
        self.__parameters[
            HYDRA_BAC_HANDLE] = 0  # we will modify this when we know the handle

        if self.__config.metadata_enable:
            kwargs2 = get_user_stream_config(8)
            kwargs2[HYDRA_TYPE] = HYDRA_TYPE_SUBSYSTEM
            kwargs2[
                HYDRA_BAC_HANDLE] = 0  # we will modify this when we know the handle
            self.__data.stream2 = StreamHydra(stream_type, **kwargs2)

        if kwargs:
            self._log.warning('unknown kwargs:%s', str(kwargs))

        super(StreamHydraAudioData, self).__init__(stream_type, **params)