 typealias CompletionPassingSet = (Set<String>) -> Void
 typealias CompletionPassingDict = ([String: String]) -> Void
 
+
+// This protocol represents each microcontroller
+// Currently these are Particle.io Photons, but they
+// might be something different in the future.
+protocol HwController
+{
+    var devices: Set<String>?           { get }
+    var supported: Set<String>?         { get }
+    var activities: [String: String]?   { get }
+    var publish: String                 { get }
+    var name: String                    { get }
+    init(device: ParticleDevice)
+    func refresh() -> Promise<Void>
+}
 
 enum PhotonError : Error
 {

//            }
        }
    }
    

    func refreshDevices() -> Promise<Set<String>>
    {
        return Promise { fulfill, reject in

    }
    
    
    required init(device: ParticleDevice)
    {
        particleDevice  = device
        publish         = "uninitialized"
    }

    /**
     * Refresh is expected to be called once after init
     * or in the unlikely event that the Photon reboots.
     */
    func refresh() -> Promise<Void>
    {
        return Promise { fulfill, reject in
            firstly {
