   @inheritdoc Board#enumerate
   ###
   enumerate: ->
-    return @_canarium.enumerate().then((boards) ->
-      return {friendlyName: b.name, path: b.path} for b in boards
+    return Canarium.enumerate().then((boards) ->
+      devices = []
+      for device in boards
+        if Preferences.os == "mac" and device.path.startsWith("/dev/tty.")
+          continue  # Drop TTY device (for Mac)
+        id = (parseInt(device.vendorId) << 16) + parseInt(device.productId)
+        devices.push({
+          friendlyName: device.name
+          path: device.path
+          productId: device.productId
+          vendorId: device.vendorId
+          hidden: !VID_PID_LIST.includes(id)
+        })
+      return devices
     )
 
   ###*
   @inheritdoc Board#connect
   ###
-  connect: (path, onDisconnected) ->
+  connect: (path) ->
     return @_canarium.open(path).then(=>
       @_canarium.onClosed = =>
         @_canarium.onClosed = null
         @_connected = false
-        onDisconnected()
+        @dispatchEvent({type: "disconnect"})
 
       @_connected = true
+      @dispatchEvent({type: "connect"})
       return
     ) # return @_canarium.open().then()
 

  #

  FPGAPIN = new I18n({en: "Pin name of FPGA", ja: "FPGAピン名"})

  #--------------------------------------------------------------------------------
  # Public methods

  ###*
  @inheritdoc Board#requestFileSystem
  ###
  requestFileSystem: (storage) ->
    return new PeridotFileSystem(@_canarium, "/mnt/#{storage}")

  ###*
  @inheritdoc Board#requestConsole
