def METHOD_NAME(self, timeout=0):
    """
    Returns a nested dictionary containing all devices which have
    experienced a change at chassis level
    Args:
        timeout: Timeout in milliseconds (optional). If timeout == 0,
            this method will block until a change is detected.
    Returns:
        (bool, dict):
            - True if call successful, False if not;
            - A nested dictionary where key is a device type,
              value is a dictionary with key:value pairs in the format of
              {'device_id':'device_event'},
              where device_id is the device ID for this device and
                    device_event,
                         status='1' represents device inserted,
                         status='0' represents device removed.
              Ex. {'fan':{'0':'0', '2':'1'}, 'sfp':{'11':'0'}}
                  indicates that fan 0 has been removed, fan 2
                  has been inserted and sfp 11 has been removed.
              Specifically for SFP event, besides SFP plug in and plug out,
              there are some other error event could be raised from SFP, when
              these error happened, SFP eeprom will not be avalaible, XCVRD shall
              stop to read eeprom before SFP recovered from error status.
                  status='2' I2C bus stuck,
                  status='3' Bad eeprom,
                  status='4' Unsupported cable,
                  status='5' High Temperature,
                  status='6' Bad cable.
    """
    change_event_dict = {"sfp": {}}
    sfp_status, sfp_change_dict = self.get_transceiver_change_event(timeout)
    change_event_dict["sfp"] = sfp_change_dict
    if sfp_status is True:
        return True, change_event_dict
    return False, {}