     }
 }
 
-// MARK: - Errors
+// MARK: - Supporting Types
 
 public extension HostController {
     
     typealias Error = BluetoothHostControllerError
 }
+
+public extension HostController {
+    
+    @frozen
+    struct ID: RawRepresentable, Equatable, Hashable, Codable {
+        
+        public let rawValue: UInt16
+        
+        public init(rawValue: UInt16) {
+            self.rawValue = rawValue
+        }
+    }
+}
+
+public extension HostController.ID {
+    
+    static var none: HostController.ID {
+        return .init(rawValue: 0xffff)
+    }
+}

    /// Initializes the Bluetooth controller with the specified address.
    public init(address: BluetoothAddress) throws {
        
        let socket = try Socket()
        guard let deviceIdentifier = try HCIGetRoute(address, socket)
            else { throw Error.adapterNotFound }
        try socket.bind(deviceIdentifier)
        self.identifier = deviceIdentifier
        self.internalSocket = socket
    }
}

public extension HostController {
    
    @frozen
    struct ID: RawRepresentable, Equatable, Hashable, Codable {
        
        public let rawValue: UInt16
        
        public init(rawValue: UInt16) {
            self.rawValue = rawValue
        }
    }
}

public extension HostController.ID {
    
    static var none: HostController.ID {
        return .init(rawValue: 0xffff)
    }
}

public extension HostController {
    

    }
    
    static var controllers: [HostController] {
        return (try? requestControllers()) ?? []
    }
    
