// 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 {
    PROTOCOL_ERROR = 1;
    COMMUNICATION_ERROR = 2;
    REDISCOVERED_ERROR = 3;
    TARGET_ERROR = 4;
};

/// 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;
};
