// Copyright 2018 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.hardware.usb.fwloader;

using fuchsia.mem;
using zx;

enum PrebuiltType : uint8 {
    /// Test firmware that can be loaded onto the USB test device for running USB tests.
    TESTER = 1;
    /// Flash programmer used for loading a new bootloader onto the USB test device I2C EEPROM.
    FLASH = 2;
    /// Bootloader for the USB test device.
    BOOT = 3;
};

[Layout = "Simple"]
protocol Device {
    /// Loads the prebuilt firmware onto the USB test device, and renumerates as the new device.
    LoadPrebuiltFirmware(PrebuiltType prebuilt_type) -> (zx.status s);

    /// Loads the firmware onto the USB test device, and renumerates as the new device.
    LoadFirmware(fuchsia.mem.Buffer firmware) -> (zx.status s);
};
