syntax = "proto2";

import "lib/common.proto";

message HardwareFluxSourceProto {
	optional int32 drive = 1             [default = 0, (help) = "which drive to read from"];
	optional double revolutions = 2      [default = 1.2, (help) = "number of revolutions to read"];

	optional bool sync_with_index = 3    [default = false, (help) = "start reading at index mark"];
	optional IndexMode index_mode = 4    [default = INDEXMODE_DRIVE, (help) = "index pulse source"];
	optional int32 hard_sector_count = 5 [default = 0, (help) = "number of hard sectors on disk"];
	optional bool high_density = 6       [default = true, (help) = "set if this is a high density disk"];
}

message TestPatternFluxSourceProto {
	optional double interval_us = 1        [default = 4.0, (help) = "interval between pulses"];
	optional double sequence_length_us = 2 [default = 200.0, (help) = "length of test sequence"];
}

message EraseFluxSourceProto {}

message KryofluxFluxSourceProto {
	optional string directory = 1 [(help) = "path to Kryoflux stream directory"];
}

message ScpFluxSourceProto {
	optional string filename = 1 [default = "flux.scp",
		(help) = ".scp file to read flux from"];
}

message CwfFluxSourceProto {
	optional string filename = 1 [default = "flux.cwf",
		(help) = ".cwf file to read flux from"];
}

message Fl2FluxSourceProto {
	optional string filename = 1 [default = "flux.fl2",
		(help) = ".fl2 file to read flux from"];
}

message FluxSourceProto {
	optional double rescale = 9 [ default = 1.0, (help) = "amount to divide pulse periods by" ];
	oneof source {
		string fluxfile = 1 [default = "name of source flux file"];
		HardwareFluxSourceProto drive = 2;
		TestPatternFluxSourceProto test_pattern = 3;
		EraseFluxSourceProto erase = 4;
		KryofluxFluxSourceProto kryoflux = 5;
		ScpFluxSourceProto scp = 6;
		CwfFluxSourceProto cwf = 7;
		Fl2FluxSourceProto fl2 = 8;
	}
}

