code: def close
        self.open_count = open_count - 1
        if open_count <= 0
          HIDAPI.debug("open_count for device #{path} is #{open_count}") if open_count < 0
          if handle
            begin
              self.shutdown_thread = true
              transfer.cancel! rescue nil if transfer
              thread.join
            rescue =>e
              HIDAPI.debug "failed to kill read thread on device #{path}: #{e.inspect}"
            end
            begin
              handle.release_interface(interface)
            rescue =>e
              HIDAPI.debug "failed to release interface on device #{path}: #{e.inspect}"
            end
            begin
              handle.close
            rescue =>e
              HIDAPI.debug "failed to close device #{path}: #{e.inspect}"
            end
            HIDAPI.debug "closed device #{path}"
          end
          self.handle = nil
          mutex.synchronize { self.input_reports = [] }
          self.open_count = 0
        end
        self
      end
docs: Closes the device (if open).
  
   Returns the device.