code: def iam_device_info(self, apdu):
          
          if _debug: DeviceInfoCache._debug("iam_device_info %r", apdu)
  
          # make sure the apdu is an I-Am
          if not isinstance(apdu, IAmRequest):
              raise ValueError("not an IAmRequest: %r" % (apdu,))
  
          # get the device instance
          device_instance = apdu.iAmDeviceIdentifier[1]
  
          # get the existing cache record if it exists
          device_info = self.cache.get(device_instance, None)
  
          # maybe there is a record for this address
          if not device_info:
              device_info = self.cache.get(apdu.pduSource, None)
  
          # make a new one using the class provided
          if not device_info:
              device_info = self.device_info_class(device_instance, apdu.pduSource)
  
          # jam in the correct values
          device_info.deviceIdentifier = device_instance
          device_info.address = apdu.pduSource
          device_info.maxApduLengthAccepted = apdu.maxAPDULengthAccepted
          device_info.segmentationSupported = apdu.segmentationSupported
          device_info.vendorID = apdu.vendorID
  
          # tell the cache this is an updated record
          self.update_device_info(device_info)
docs: Create a device information record based on the contents of an
          IAmRequest and put it in the cache.