 
 ;; Nothing to see here...
 
-;(defn- board?
-  ;[obj]
-  ;(satisfies? p/PBoard obj))
 (defn- board?
   [obj]
-  (= (type obj) Board))
+  (satisfies? p/PBoard obj))
 
 (defn- board-dispatch
   [x & args] (board? x))

  "Set the edge channel for the specified pin. If there is an existing channel for the pin, it will be
  closed."
  ([board pin-n ch]
   (sw/set-edge-chan! board pin-n ch))
  ([pin ch]
   (board-apply sw/set-edge-chan! pin ch)))

(defn get-edge-chan
  "Get the current edge channel for the specified pin."
  ([board pin-n]
   (sw/get-edge-chan board pin-n))
  ([pin]
   (board-apply sw/get-edge-chan pin)))

(defmulti set-edge!
  "Set the edge direction of a pin. Accepts `:falling`, `:rising`, `:both` and `:none` edges.

  ([type]
   (create-board type {}))
  ([type config]
   (p/init! 
     (sw/->BoardWrapper (atom {}) (impl/instantiate type config)))))

;; What follows then are a suite of simple tools for dealing with the boards.

(defmulti pin-modes
  "Returns a map of pin numbers to possible modes for the entire board, or the available modes of a specific pin.
