code: def _stream_data(self, chunk=None):
          
  
          # 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")
docs: 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.