docs: def convert_bits_to_string(bits, output_view_type: int, pad_zeros=False, lsb=False, lsd=False, endianness="big"):
      """
      Convert bit array to string
      :param endianness: Endianness little or big
      :param bits: Bit array
      :param output_view_type: Output view type index
      0 = bit, 1=hex, 2=ascii, 3=decimal 4=binary coded decimal (bcd)
      :param pad_zeros:
      :param lsb: Least Significant Bit   -> Reverse bits first
      :param lsd: Least Significant Digit -> Reverse result at end
      :return:
      """
      bits_str = "".join(["1" if b else "0" for b in bits])
  
      if output_view_type == 4:
          # For BCD we need to enforce padding
          pad_zeros = True
  
      if pad_zeros and output_view_type in (1, 2, 4):
          n = 4 if output_view_type in (1, 4) else 8 if output_view_type == 2 else 1
          bits_str += "0" * ((n - (len(bits_str) % n)) % n)
  
      if lsb:
          # Reverse bit string
          bits_str = bits_str[::-1]
  
      if endianness == "little":
          # reverse byte wise
          bits_str = "".join(bits_str[max(i - 8, 0):i] for i in range(len(bits_str), 0, -8))
  
      if output_view_type == 0:  # bit
          result = bits_str
  
      elif output_view_type == 1:  # hex
          result = "".join(["{0:x}".format(int(bits_str[i:i + 4], 2)) for i in range(0, len(bits_str), 4)])
  
      elif output_view_type == 2:  # ascii
          result = "".join(map(chr,
                               [int("".join(bits_str[i:i + 8]), 2) for i in range(0, len(bits_str), 8)]))
  
      elif output_view_type == 3:  # decimal
          try:
              result = str(int(bits_str, 2))
          except ValueError:
              return None
      elif output_view_type == 4:  # bcd
          result = "".join([BCD_LUT[bits_str[i:i + 4]] for i in range(0, len(bits_str), 4)])
      else:
          raise ValueError("Unknown view type")
  
      if lsd:
          # reverse result
          return result[::-1]
      else:
          return result