 
 /// 31 Byte LE Advertising or Scan Response Data
 public typealias LowEnergyResponseData = (UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8, UInt8)
+
+/// LE White List Address Type
+public enum LowEnergyWhiteListAddressType: UInt8 {
+    
+    /// Public Device Address
+    case `public` = 0x00
+    
+    /// Random Device Address
+    case random = 0x01
+    
+    /// Devices sending anonymous advertisements
+    case anonymous = 0xFF
+}
+
+/// LE White List Device Entry
+public enum LowEnergyWhiteListDevice {
+    
+    case `public`(Address)
+    case random(Address)
+    case anonymous
+    
+    public var addressType: LowEnergyWhiteListAddressType {
+        switch self {
+        case .public: return .public
+        case .random: return .random
+        case .anonymous: return .anonymous
+        }
+    }
+    
+    public var address: Address {
+        switch self {
+        case let .public(address): return address
+        case let .random(address): return address
+        case .anonymous: return .any
+        }
+    }
+}
 
 /// LE Scan Time Interval
 ///

    /// * the scanning filter policy uses the White List and scanning is enabled.
    /// * the initiator filter policy uses the White List and a create connection command is outstanding.
    ///
    /// When a Controller cannot add a device to the White List because there is no space available, it shall return the error code Memory Capacity Exceeded (0x07).
    ///
    /// Address is ignored when Address_Type is set to 0xFF.
    public struct AddDeviceToWhileListParameter: HCICommandParameter {
        
        public static let command = LowEnergyCommand.addDeviceToWhiteList
        
         public let addressType: LowEnergyAddressType
        
        public let address: Address
        
        public init(addressType: LowEnergyAddressType = .public,
                    address: Address) {
        
            self.addressType = addressType
            self.address = address
        }
        
        public var byteValue: [UInt8] {
            
            let addressType = self.addressType.rawValue
            let addressBytes = self.address.littleEndian.bytes
            
            return [addressType,
                    addressBytes.0,

                else { return nil }
            
            self.size = byteValue[0]
        }
    }
}
