// Code generated by protoc-gen-go. DO NOT EDIT.
// source: manufacturing/config.proto

package manufacturing

import (
	fmt "fmt"
	proto "github.com/golang/protobuf/proto"
	math "math"
)

// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf

// This is a compile-time assertion to ensure that this generated file
// is compatible with the proto package it is being compiled against.
// A compilation error at this line likely means your copy of the
// proto package needs to be updated.
const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package

// phase for the device. Next Tag: 9
type Config_Phase int32

const (
	Config_PHASE_INVALID Config_Phase = 0
	Config_PHASE_EVT     Config_Phase = 1
	Config_PHASE_EVT2    Config_Phase = 2
	Config_PHASE_DVT     Config_Phase = 3
	Config_PHASE_DVT2    Config_Phase = 4
	Config_PHASE_PVT     Config_Phase = 5
	Config_PHASE_PVT2    Config_Phase = 6
	Config_PHASE_PVT3    Config_Phase = 7
	Config_PHASE_MP      Config_Phase = 8
)

var Config_Phase_name = map[int32]string{
	0: "PHASE_INVALID",
	1: "PHASE_EVT",
	2: "PHASE_EVT2",
	3: "PHASE_DVT",
	4: "PHASE_DVT2",
	5: "PHASE_PVT",
	6: "PHASE_PVT2",
	7: "PHASE_PVT3",
	8: "PHASE_MP",
}

var Config_Phase_value = map[string]int32{
	"PHASE_INVALID": 0,
	"PHASE_EVT":     1,
	"PHASE_EVT2":    2,
	"PHASE_DVT":     3,
	"PHASE_DVT2":    4,
	"PHASE_PVT":     5,
	"PHASE_PVT2":    6,
	"PHASE_PVT3":    7,
	"PHASE_MP":      8,
}

func (x Config_Phase) String() string {
	return proto.EnumName(Config_Phase_name, int32(x))
}

func (Config_Phase) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_0865c899a120f1e4, []int{0, 0}
}

// phases for cr50 module. Next Tag: 3
type Config_CR50Phase int32

const (
	Config_CR50_PHASE_INVALID Config_CR50Phase = 0
	Config_CR50_PHASE_PREPVT  Config_CR50Phase = 1
	Config_CR50_PHASE_PVT     Config_CR50Phase = 2
)

var Config_CR50Phase_name = map[int32]string{
	0: "CR50_PHASE_INVALID",
	1: "CR50_PHASE_PREPVT",
	2: "CR50_PHASE_PVT",
}

var Config_CR50Phase_value = map[string]int32{
	"CR50_PHASE_INVALID": 0,
	"CR50_PHASE_PREPVT":  1,
	"CR50_PHASE_PVT":     2,
}

func (x Config_CR50Phase) String() string {
	return proto.EnumName(Config_CR50Phase_name, int32(x))
}

func (Config_CR50Phase) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_0865c899a120f1e4, []int{0, 1}
}

// key env for cr50 RW version. Next Tag: 3
type Config_CR50KeyEnv int32

const (
	Config_CR50_KEYENV_INVALID Config_CR50KeyEnv = 0
	Config_CR50_KEYENV_PROD    Config_CR50KeyEnv = 1
	Config_CR50_KEYENV_DEV     Config_CR50KeyEnv = 2
)

var Config_CR50KeyEnv_name = map[int32]string{
	0: "CR50_KEYENV_INVALID",
	1: "CR50_KEYENV_PROD",
	2: "CR50_KEYENV_DEV",
}

var Config_CR50KeyEnv_value = map[string]int32{
	"CR50_KEYENV_INVALID": 0,
	"CR50_KEYENV_PROD":    1,
	"CR50_KEYENV_DEV":     2,
}

func (x Config_CR50KeyEnv) String() string {
	return proto.EnumName(Config_CR50KeyEnv_name, int32(x))
}

func (Config_CR50KeyEnv) EnumDescriptor() ([]byte, []int) {
	return fileDescriptor_0865c899a120f1e4, []int{0, 2}
}

// These are the configs that's provided in manufacture stage of a ChromeOS device.
// Next Tag: 7
type Config struct {
	ManufacturingId *ConfigID        `protobuf:"bytes,1,opt,name=manufacturing_id,json=manufacturingId,proto3" json:"manufacturing_id,omitempty"`
	DevicePhase     Config_Phase     `protobuf:"varint,2,opt,name=device_phase,json=devicePhase,proto3,enum=manufacturing.Config_Phase" json:"device_phase,omitempty"`
	Cr50Phase       Config_CR50Phase `protobuf:"varint,3,opt,name=cr50_phase,json=cr50Phase,proto3,enum=manufacturing.Config_CR50Phase" json:"cr50_phase,omitempty"`
	// Detected based on the cr50 RW version that the DUT is running on.
	Cr50KeyEnv Config_CR50KeyEnv `protobuf:"varint,4,opt,name=cr50_key_env,json=cr50KeyEnv,proto3,enum=manufacturing.Config_CR50KeyEnv" json:"cr50_key_env,omitempty"`
	// wifi chip that is installed on the DUT in manufacturing stage.
	WifiChip string `protobuf:"bytes,5,opt,name=wifi_chip,json=wifiChip,proto3" json:"wifi_chip,omitempty"`
	// Save repeated hwid components obtained from hwid service
	HwidComponent        []string `protobuf:"bytes,6,rep,name=hwid_component,json=hwidComponent,proto3" json:"hwid_component,omitempty"`
	XXX_NoUnkeyedLiteral struct{} `json:"-"`
	XXX_unrecognized     []byte   `json:"-"`
	XXX_sizecache        int32    `json:"-"`
}

func (m *Config) Reset()         { *m = Config{} }
func (m *Config) String() string { return proto.CompactTextString(m) }
func (*Config) ProtoMessage()    {}
func (*Config) Descriptor() ([]byte, []int) {
	return fileDescriptor_0865c899a120f1e4, []int{0}
}

func (m *Config) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_Config.Unmarshal(m, b)
}
func (m *Config) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_Config.Marshal(b, m, deterministic)
}
func (m *Config) XXX_Merge(src proto.Message) {
	xxx_messageInfo_Config.Merge(m, src)
}
func (m *Config) XXX_Size() int {
	return xxx_messageInfo_Config.Size(m)
}
func (m *Config) XXX_DiscardUnknown() {
	xxx_messageInfo_Config.DiscardUnknown(m)
}

var xxx_messageInfo_Config proto.InternalMessageInfo

func (m *Config) GetManufacturingId() *ConfigID {
	if m != nil {
		return m.ManufacturingId
	}
	return nil
}

func (m *Config) GetDevicePhase() Config_Phase {
	if m != nil {
		return m.DevicePhase
	}
	return Config_PHASE_INVALID
}

func (m *Config) GetCr50Phase() Config_CR50Phase {
	if m != nil {
		return m.Cr50Phase
	}
	return Config_CR50_PHASE_INVALID
}

func (m *Config) GetCr50KeyEnv() Config_CR50KeyEnv {
	if m != nil {
		return m.Cr50KeyEnv
	}
	return Config_CR50_KEYENV_INVALID
}

func (m *Config) GetWifiChip() string {
	if m != nil {
		return m.WifiChip
	}
	return ""
}

func (m *Config) GetHwidComponent() []string {
	if m != nil {
		return m.HwidComponent
	}
	return nil
}

// Message contains all ChromeOS manufacturing configs.
type ConfigList struct {
	Value                []*Config `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"`
	XXX_NoUnkeyedLiteral struct{}  `json:"-"`
	XXX_unrecognized     []byte    `json:"-"`
	XXX_sizecache        int32     `json:"-"`
}

func (m *ConfigList) Reset()         { *m = ConfigList{} }
func (m *ConfigList) String() string { return proto.CompactTextString(m) }
func (*ConfigList) ProtoMessage()    {}
func (*ConfigList) Descriptor() ([]byte, []int) {
	return fileDescriptor_0865c899a120f1e4, []int{1}
}

func (m *ConfigList) XXX_Unmarshal(b []byte) error {
	return xxx_messageInfo_ConfigList.Unmarshal(m, b)
}
func (m *ConfigList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
	return xxx_messageInfo_ConfigList.Marshal(b, m, deterministic)
}
func (m *ConfigList) XXX_Merge(src proto.Message) {
	xxx_messageInfo_ConfigList.Merge(m, src)
}
func (m *ConfigList) XXX_Size() int {
	return xxx_messageInfo_ConfigList.Size(m)
}
func (m *ConfigList) XXX_DiscardUnknown() {
	xxx_messageInfo_ConfigList.DiscardUnknown(m)
}

var xxx_messageInfo_ConfigList proto.InternalMessageInfo

func (m *ConfigList) GetValue() []*Config {
	if m != nil {
		return m.Value
	}
	return nil
}

func init() {
	proto.RegisterEnum("manufacturing.Config_Phase", Config_Phase_name, Config_Phase_value)
	proto.RegisterEnum("manufacturing.Config_CR50Phase", Config_CR50Phase_name, Config_CR50Phase_value)
	proto.RegisterEnum("manufacturing.Config_CR50KeyEnv", Config_CR50KeyEnv_name, Config_CR50KeyEnv_value)
	proto.RegisterType((*Config)(nil), "manufacturing.Config")
	proto.RegisterType((*ConfigList)(nil), "manufacturing.ConfigList")
}

func init() { proto.RegisterFile("manufacturing/config.proto", fileDescriptor_0865c899a120f1e4) }

var fileDescriptor_0865c899a120f1e4 = []byte{
	// 466 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xef, 0x6b, 0x9b, 0x40,
	0x1c, 0xc6, 0x67, 0xd2, 0x64, 0xf1, 0x9b, 0x1f, 0xbd, 0x5e, 0xd7, 0x55, 0x5a, 0xc6, 0x44, 0x18,
	0x08, 0x03, 0x2d, 0x29, 0x65, 0xf4, 0x4d, 0xa1, 0x89, 0xc2, 0x42, 0xbb, 0xec, 0xb8, 0x05, 0x61,
	0x7b, 0x23, 0x4e, 0x8d, 0x1e, 0x5b, 0x3c, 0x31, 0x3f, 0x4a, 0xff, 0x89, 0xbd, 0xdb, 0xff, 0x3b,
	0xbc, 0x5b, 0xab, 0x8e, 0xec, 0x9d, 0xcf, 0xe7, 0x79, 0x9e, 0xaf, 0x5f, 0xee, 0x0e, 0xce, 0x56,
	0x41, 0xb6, 0x5d, 0x06, 0xe1, 0x66, 0x5b, 0xb0, 0x2c, 0xb1, 0x43, 0x9e, 0x2d, 0x59, 0x62, 0xe5,
	0x05, 0xdf, 0x70, 0x3c, 0x6c, 0x78, 0x67, 0x6f, 0xf6, 0x45, 0x7d, 0x16, 0xc9, 0xb4, 0xf1, 0xab,
	0x03, 0xdd, 0xa9, 0x60, 0x78, 0x02, 0xa8, 0x91, 0xf5, 0x59, 0xa4, 0x29, 0xba, 0x62, 0xf6, 0xc7,
	0xa7, 0x56, 0xc3, 0xb0, 0x64, 0x61, 0xe6, 0xd0, 0xc3, 0x06, 0x9f, 0x45, 0xf8, 0x06, 0x06, 0x51,
	0xbc, 0x63, 0x61, 0xec, 0xe7, 0x69, 0xb0, 0x8e, 0xb5, 0x96, 0xae, 0x98, 0xa3, 0xf1, 0xf9, 0xde,
	0xbe, 0x45, 0xca, 0x08, 0xed, 0xcb, 0x82, 0x10, 0xf8, 0x06, 0x20, 0x2c, 0xae, 0x2e, 0xfe, 0xb6,
	0xdb, 0xa2, 0xfd, 0x76, 0x7f, 0x7b, 0x4a, 0xaf, 0x2e, 0xe4, 0x04, 0xb5, 0xac, 0xc8, 0xfe, 0x04,
	0x06, 0xa2, 0xff, 0x23, 0x7e, 0xf4, 0xe3, 0x6c, 0xa7, 0x1d, 0x88, 0x09, 0xfa, 0xff, 0x27, 0xdc,
	0xc5, 0x8f, 0x6e, 0xb6, 0xa3, 0xe2, 0xaf, 0xf2, 0x1b, 0x9f, 0x83, 0xfa, 0xc0, 0x96, 0xcc, 0x0f,
	0x53, 0x96, 0x6b, 0x1d, 0x5d, 0x31, 0x55, 0xda, 0x2b, 0xc1, 0x34, 0x65, 0x39, 0x7e, 0x07, 0xa3,
	0xf4, 0x81, 0x45, 0x7e, 0xc8, 0x57, 0x39, 0xcf, 0xe2, 0x6c, 0xa3, 0x75, 0xf5, 0xb6, 0xa9, 0xd2,
	0x61, 0x49, 0xa7, 0x4f, 0xd0, 0xf8, 0xad, 0x40, 0x47, 0x6e, 0x74, 0x04, 0x43, 0xf2, 0xf1, 0xf6,
	0x8b, 0xeb, 0xcf, 0xe6, 0xde, 0xed, 0xfd, 0xcc, 0x41, 0x2f, 0xf0, 0x10, 0x54, 0x89, 0x5c, 0x6f,
	0x81, 0x14, 0x3c, 0x02, 0x78, 0x96, 0x63, 0xd4, 0xaa, 0x6c, 0xc7, 0x5b, 0xa0, 0x76, 0x65, 0x3b,
	0xa5, 0x7d, 0x50, 0xd9, 0xc4, 0x5b, 0xa0, 0x4e, 0x65, 0x93, 0xd2, 0xee, 0x36, 0xf4, 0x25, 0x7a,
	0x89, 0x07, 0xd0, 0x93, 0xfa, 0x13, 0x41, 0x3d, 0x63, 0x0e, 0xea, 0xf3, 0xb9, 0xe1, 0xd7, 0x80,
	0x4b, 0xe1, 0xff, 0xbb, 0xdf, 0x09, 0x1c, 0xd5, 0x38, 0xa1, 0x2e, 0x11, 0x7b, 0x62, 0x18, 0xd5,
	0xb1, 0xb7, 0x40, 0x2d, 0x83, 0x00, 0x54, 0xa7, 0x88, 0x4f, 0xe1, 0x58, 0x24, 0xee, 0xdc, 0xaf,
	0xee, 0xdc, 0xab, 0x4d, 0x7c, 0x05, 0xa8, 0x6e, 0x10, 0xfa, 0xd9, 0x41, 0x0a, 0x3e, 0x86, 0xc3,
	0x3a, 0x75, 0x5c, 0x0f, 0xb5, 0x8c, 0x6b, 0x00, 0x79, 0x3d, 0xf7, 0x6c, 0xbd, 0xc1, 0xef, 0xa1,
	0xb3, 0x0b, 0x7e, 0x6e, 0x63, 0x4d, 0xd1, 0xdb, 0x66, 0x7f, 0x7c, 0xb2, 0xf7, 0x22, 0xa9, 0xcc,
	0x4c, 0xae, 0xbf, 0x7d, 0x48, 0xb8, 0x15, 0xa6, 0x05, 0x5f, 0xb1, 0xed, 0xca, 0xe2, 0x45, 0x62,
	0x3f, 0x09, 0xbe, 0xb6, 0x59, 0xb6, 0x2c, 0x02, 0x5b, 0xbc, 0x7a, 0x3b, 0xe1, 0x76, 0x63, 0xd0,
	0xf7, 0xae, 0xe0, 0x97, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0xb5, 0xbe, 0x6b, 0x17, 0x59, 0x03,
	0x00, 0x00,
}
