// This file is part of arduino-cli.
//
// Copyright 2020 ARDUINO SA (http://www.arduino.cc/)
//
// This software is released under the GNU General Public License version 3,
// which covers the main part of arduino-cli.
// The terms of this license can be found at:
// https://www.gnu.org/licenses/gpl-3.0.en.html
//
// You can be released from the requirements of the above licenses by purchasing
// a commercial license. Buying such a license is mandatory if you want to
// modify or otherwise use the software for commercial activities involving the
// Arduino software without disclosing the source code of your own applications.
// To purchase a commercial license, send an email to license@arduino.cc.

syntax = "proto3";

package cc.arduino.cli.commands;

option go_package = "github.com/arduino/arduino-cli/rpc/commands";

import "commands/common.proto";

message UploadReq {
	// Arduino Core Service instance from the `Init` response.
    Instance instance = 1;
	// Fully qualified board name of the target board (e.g., `arduino:avr:uno`).
	// If this field is not defined, the FQBN of the board attached to the sketch
	// via the `BoardAttach` method is used.
    string fqbn = 2;
	// Path where the sketch to be uploaded is stored. Unless the `import_file`
	// field is defined, the compiled binary is assumed to be at the location and
	// filename under this path where it is saved by the `Compile` method.
    string sketch_path = 3;
	// The port of the board.
	string port = 4;
	// Whether to turn on verbose output during the upload.
	bool verbose = 5;
	// After upload, verify that the contents of the memory on the board match the
	// uploaded binary.
	bool verify = 6;
	// When `import_file` is specified, it overrides the `import_dir` and `sketch_path`
	// params.
	string import_file = 7;
	// Custom path to a directory containing compiled files. When `import_dir` is
	// not specified, the standard build directory under `sketch_path` is used.
	string import_dir = 8;
	string programmer = 9;
}

message UploadResp {
	// The output of the upload process.
	bytes out_stream = 1;
	// The error output of the upload process.
	bytes err_stream = 2;
}

message BurnBootloaderReq {
	// Arduino Core Service instance from the `Init` response.
	Instance instance = 1;
	// Fully qualified board name of the target board (e.g., `arduino:avr:uno`).
	string fqbn = 2;
	// The port of the programmer used to program the bootloader.
	string port = 3;
	// Whether to turn on verbose output during the programming.
	bool verbose = 4;
	// After programming, verify the contents of the memory on the board match the
	// uploaded binary.
	bool verify = 5;
	// The programmer to use for burning bootloader.
	string programmer = 6;
}

message BurnBootloaderResp {
	// The output of the burn bootloader process.
	bytes out_stream = 1;
	// The error output of the burn bootloader process.
	bytes err_stream = 2;
}

message ListProgrammersAvailableForUploadReq {
	Instance instance = 1;
	string fqbn = 2;
}

message ListProgrammersAvailableForUploadResp {
	repeated Programmer programmers = 1;
}
