// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.settings;

/// Settings that influence the device's setup behavior.
///
/// Supported SettingsEpitaph enums:
/// REQUEST_NOT_SUPPORTED, INTERNAL_SERVICE_ERROR, PERSISTENT_STORAGE_ERROR
[Discoverable]
protocol Setup {
    /// Gets the current [SetupSettings]. Returns immediately on first call;
    /// subsequent calls return when the value changes.
    ///
    /// If this call fails, it is considered a fatal error and the channel
    /// will be closed.
    Watch() -> (SetupSettings settings);

    /// Changes the settings specified in [SetupSettings]. Any field not set in
    /// the table will not perform any system operation. An error will be
    /// returned if the provided settings is an invalid change (for example, if
    /// it is empty).
    [Transitional = "Changes network interfaces configuration with reboot"]
    Set(SetupSettings settings) -> () error Error;

    [Transitional = "Changes network interfaces configuration with optional reboot"]
    Set2(SetupSettings settings, bool reboot_device) -> () error Error;
};

table SetupSettings {
    /// Specifies the network interfaces that the device can be configured
    /// over during setup.
    1: ConfigurationInterfaces enabled_configuration_interfaces;
};

bits ConfigurationInterfaces : uint32 {
    // Configuration over ethernet.
    ETHERNET = 0x1;
    // Configuration over WiFi.
    WIFI = 0x2;
};
