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.

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