def _stream_data(self, chunk=None):
        """Stream reports to the ble client in 20 byte chunks

        Args:
            chunk (bytearray): A chunk that should be sent instead of requesting a
                new chunk from the pending reports.
        """

        # If we failed to transmit a chunk, we will be requeued with an argument
        self._stream_sm_running = True

        if chunk is None:
            chunk = self._next_streaming_chunk(20)

        if chunk is None or len(chunk) == 0:
            self._stream_sm_running = False
            return

        try:
            self._send_notification(StreamingChar.value_handle, chunk)
            self._defer(self._stream_data)
        except bable_interface.BaBLEException as err:
            if err.packet.status == 'Rejected':  # If we are streaming too fast, back off and try again
                time.sleep(0.05)
                self._defer(self._stream_data, [chunk])
            else:
                self._audit('ErrorStreamingReport')  # If there was an error, stop streaming but don't choke
                self._logger.exception("Error while streaming data")
Stream reports to the ble client in 20 byte chunks

        Args:
            chunk (bytearray): A chunk that should be sent instead of requesting a
                new chunk from the pending reports.