<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_firmware_version(self, cached=True):
 """Returns the SK8 device firmware version. Args: cached (bool):
 if True, returns the locally cached copy of the firmware version. If this is set to False, or the version is not cached, it will read from the device instead. Returns: str. The current firmware version string. May be `None` if an error occurs. """

        if cached and self.firmware_version != 'unknown':
            return self.firmware_version

        firmware_version = self.get_characteristic_handle_from_uuid(UUID_FIRMWARE_REVISION)
        if firmware_version is None:
            logger.warn('Failed to find handle for firmware version')
            return None

        self.firmware_version = self.dongle._read_attribute(self.conn_handle, firmware_version)
        return self.firmware_version