docs: def _decodeAddressField(byteIter, smscField=False, log=False):
      """ Decodes the address field at the current position of the bytearray iterator
      
      :param byteIter: Iterator over bytearray
      :type byteIter: iter(bytearray) 
      
      :return: Tuple containing the address value and amount of bytes read (value is or None if it is empty (zero-length))
      :rtype: tuple
      """
      addressLen = next(byteIter)
      if addressLen > 0:
          toa = next(byteIter)
          ton = (toa & 0x70) # bits 6,5,4 of type-of-address == type-of-number
          if ton == 0x50: 
              # Alphanumberic number            
              addressLen = int(math.ceil(addressLen / 2.0))
              septets = unpackSeptets(byteIter, addressLen)
              addressValue = decodeGsm7(septets)
              return (addressValue, (addressLen + 2))
          else:
              # ton == 0x00: Unknown (might be international, local, etc) - leave as is            
              # ton == 0x20: National number
              if smscField:
                  addressValue = decodeSemiOctets(byteIter, addressLen-1)
              else:
                  if addressLen % 2:
                      addressLen = int(addressLen / 2) + 1
                  else:
                      addressLen = int(addressLen / 2)                
                  addressValue = decodeSemiOctets(byteIter, addressLen)
                  addressLen += 1 # for the return value, add the toa byte
              if ton == 0x10: # International number
                  addressValue = '+' + addressValue
              return (addressValue, (addressLen + 1))
      else:
          return (None, 1)