// 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.developer.bridge;

enum FastbootError {
    GENERIC = 1;
};

/// Callback event listener for when the device reboots to the
/// bootloader.
protocol RebootListener {
    OnReboot();
};

[Discoverable]
protocol Fastboot {
    Flash(string:64 partition_name, string:256 path) -> () error FastbootError;
    Erase(string:64 partition_name) -> () error FastbootError;
    Reboot() -> () error FastbootError;
    RebootBootloader(RebootListener listener) -> () error FastbootError;
    ContinueBoot() -> () error FastbootError;
    Stage(string:256 path) -> () error FastbootError;
    SetActive(string:64 slot) -> () error FastbootError;
    Oem(string:64 command) -> () error FastbootError;
};
