All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.diozero.remote.message.protobuf.Board Maven / Gradle / Ivy

The newest version!
// Generated by the protocol buffer compiler.  DO NOT EDIT!
// NO CHECKED-IN PROTOBUF GENCODE
// source: diozero.proto
// Protobuf Java Version: 4.28.2

package com.diozero.remote.message.protobuf;

/**
 * Protobuf type {@code diozero.Board}
 */
public final class Board extends
    com.google.protobuf.GeneratedMessage implements
    // @@protoc_insertion_point(message_implements:diozero.Board)
    BoardOrBuilder {
private static final long serialVersionUID = 0L;
  static {
    com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
      com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
      /* major= */ 4,
      /* minor= */ 28,
      /* patch= */ 2,
      /* suffix= */ "",
      Board.class.getName());
  }
  // Use Board.newBuilder() to construct.
  private Board(com.google.protobuf.GeneratedMessage.Builder builder) {
    super(builder);
  }
  private Board() {
  }

  public static final com.google.protobuf.Descriptors.Descriptor
      getDescriptor() {
    return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_descriptor;
  }

  @java.lang.Override
  protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
      internalGetFieldAccessorTable() {
    return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_fieldAccessorTable
        .ensureFieldAccessorsInitialized(
            com.diozero.remote.message.protobuf.Board.class, com.diozero.remote.message.protobuf.Board.Builder.class);
  }

  /**
   * Protobuf enum {@code diozero.Board.GpioMode}
   */
  public enum GpioMode
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * DIGITAL_INPUT = 0;
     */
    DIGITAL_INPUT(0),
    /**
     * DIGITAL_OUTPUT = 1;
     */
    DIGITAL_OUTPUT(1),
    /**
     * PWM_OUTPUT = 2;
     */
    PWM_OUTPUT(2),
    /**
     * ANALOG_INPUT = 3;
     */
    ANALOG_INPUT(3),
    /**
     * ANALOG_OUTPUT = 4;
     */
    ANALOG_OUTPUT(4),
    /**
     * SERVO = 5;
     */
    SERVO(5),
    /**
     * UNKNOWN = 6;
     */
    UNKNOWN(6),
    UNRECOGNIZED(-1),
    ;

    static {
      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
        /* major= */ 4,
        /* minor= */ 28,
        /* patch= */ 2,
        /* suffix= */ "",
        GpioMode.class.getName());
    }
    /**
     * DIGITAL_INPUT = 0;
     */
    public static final int DIGITAL_INPUT_VALUE = 0;
    /**
     * DIGITAL_OUTPUT = 1;
     */
    public static final int DIGITAL_OUTPUT_VALUE = 1;
    /**
     * PWM_OUTPUT = 2;
     */
    public static final int PWM_OUTPUT_VALUE = 2;
    /**
     * ANALOG_INPUT = 3;
     */
    public static final int ANALOG_INPUT_VALUE = 3;
    /**
     * ANALOG_OUTPUT = 4;
     */
    public static final int ANALOG_OUTPUT_VALUE = 4;
    /**
     * SERVO = 5;
     */
    public static final int SERVO_VALUE = 5;
    /**
     * UNKNOWN = 6;
     */
    public static final int UNKNOWN_VALUE = 6;


    public final int getNumber() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalArgumentException(
            "Can't get the number of an unknown enum value.");
      }
      return value;
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static GpioMode valueOf(int value) {
      return forNumber(value);
    }

    /**
     * @param value The numeric wire value of the corresponding enum entry.
     * @return The enum associated with the given numeric wire value.
     */
    public static GpioMode forNumber(int value) {
      switch (value) {
        case 0: return DIGITAL_INPUT;
        case 1: return DIGITAL_OUTPUT;
        case 2: return PWM_OUTPUT;
        case 3: return ANALOG_INPUT;
        case 4: return ANALOG_OUTPUT;
        case 5: return SERVO;
        case 6: return UNKNOWN;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        GpioMode> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap() {
            public GpioMode findValueByNumber(int number) {
              return GpioMode.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      if (this == UNRECOGNIZED) {
        throw new java.lang.IllegalStateException(
            "Can't get the descriptor of an unrecognized enum value.");
      }
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return com.diozero.remote.message.protobuf.Board.getDescriptor().getEnumTypes().get(0);
    }

    private static final GpioMode[] VALUES = values();

    public static GpioMode valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      if (desc.getIndex() == -1) {
        return UNRECOGNIZED;
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private GpioMode(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:diozero.Board.GpioMode)
  }

  public interface GpioInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:diozero.Board.GpioInfo)
      com.google.protobuf.MessageOrBuilder {

    /**
     * string header = 1;
     * @return The header.
     */
    java.lang.String getHeader();
    /**
     * string header = 1;
     * @return The bytes for header.
     */
    com.google.protobuf.ByteString
        getHeaderBytes();

    /**
     * int32 physicalPin = 2;
     * @return The physicalPin.
     */
    int getPhysicalPin();

    /**
     * int32 gpioNumber = 3;
     * @return The gpioNumber.
     */
    int getGpioNumber();

    /**
     * int32 sysFsNumber = 4;
     * @return The sysFsNumber.
     */
    int getSysFsNumber();

    /**
     * int32 chip = 5;
     * @return The chip.
     */
    int getChip();

    /**
     * int32 lineOffset = 6;
     * @return The lineOffset.
     */
    int getLineOffset();

    /**
     * string name = 7;
     * @return The name.
     */
    java.lang.String getName();
    /**
     * string name = 7;
     * @return The bytes for name.
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * repeated .diozero.Board.GpioMode mode = 8;
     * @return A list containing the mode.
     */
    java.util.List getModeList();
    /**
     * repeated .diozero.Board.GpioMode mode = 8;
     * @return The count of mode.
     */
    int getModeCount();
    /**
     * repeated .diozero.Board.GpioMode mode = 8;
     * @param index The index of the element to return.
     * @return The mode at the given index.
     */
    com.diozero.remote.message.protobuf.Board.GpioMode getMode(int index);
    /**
     * repeated .diozero.Board.GpioMode mode = 8;
     * @return A list containing the enum numeric values on the wire for mode.
     */
    java.util.List
    getModeValueList();
    /**
     * repeated .diozero.Board.GpioMode mode = 8;
     * @param index The index of the value to return.
     * @return The enum numeric value on the wire of mode at the given index.
     */
    int getModeValue(int index);

    /**
     * optional int32 pwmChip = 9;
     * @return Whether the pwmChip field is set.
     */
    boolean hasPwmChip();
    /**
     * optional int32 pwmChip = 9;
     * @return The pwmChip.
     */
    int getPwmChip();

    /**
     * optional int32 pwmNum = 10;
     * @return Whether the pwmNum field is set.
     */
    boolean hasPwmNum();
    /**
     * optional int32 pwmNum = 10;
     * @return The pwmNum.
     */
    int getPwmNum();

    /**
     * optional float adcVRef = 11;
     * @return Whether the adcVRef field is set.
     */
    boolean hasAdcVRef();
    /**
     * optional float adcVRef = 11;
     * @return The adcVRef.
     */
    float getAdcVRef();
  }
  /**
   * Protobuf type {@code diozero.Board.GpioInfo}
   */
  public static final class GpioInfo extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:diozero.Board.GpioInfo)
      GpioInfoOrBuilder {
  private static final long serialVersionUID = 0L;
    static {
      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
        /* major= */ 4,
        /* minor= */ 28,
        /* patch= */ 2,
        /* suffix= */ "",
        GpioInfo.class.getName());
    }
    // Use GpioInfo.newBuilder() to construct.
    private GpioInfo(com.google.protobuf.GeneratedMessage.Builder builder) {
      super(builder);
    }
    private GpioInfo() {
      header_ = "";
      name_ = "";
      mode_ = emptyIntList();
    }

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_GpioInfo_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_GpioInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.diozero.remote.message.protobuf.Board.GpioInfo.class, com.diozero.remote.message.protobuf.Board.GpioInfo.Builder.class);
    }

    private int bitField0_;
    public static final int HEADER_FIELD_NUMBER = 1;
    @SuppressWarnings("serial")
    private volatile java.lang.Object header_ = "";
    /**
     * string header = 1;
     * @return The header.
     */
    @java.lang.Override
    public java.lang.String getHeader() {
      java.lang.Object ref = header_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        header_ = s;
        return s;
      }
    }
    /**
     * string header = 1;
     * @return The bytes for header.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getHeaderBytes() {
      java.lang.Object ref = header_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        header_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PHYSICALPIN_FIELD_NUMBER = 2;
    private int physicalPin_ = 0;
    /**
     * int32 physicalPin = 2;
     * @return The physicalPin.
     */
    @java.lang.Override
    public int getPhysicalPin() {
      return physicalPin_;
    }

    public static final int GPIONUMBER_FIELD_NUMBER = 3;
    private int gpioNumber_ = 0;
    /**
     * int32 gpioNumber = 3;
     * @return The gpioNumber.
     */
    @java.lang.Override
    public int getGpioNumber() {
      return gpioNumber_;
    }

    public static final int SYSFSNUMBER_FIELD_NUMBER = 4;
    private int sysFsNumber_ = 0;
    /**
     * int32 sysFsNumber = 4;
     * @return The sysFsNumber.
     */
    @java.lang.Override
    public int getSysFsNumber() {
      return sysFsNumber_;
    }

    public static final int CHIP_FIELD_NUMBER = 5;
    private int chip_ = 0;
    /**
     * int32 chip = 5;
     * @return The chip.
     */
    @java.lang.Override
    public int getChip() {
      return chip_;
    }

    public static final int LINEOFFSET_FIELD_NUMBER = 6;
    private int lineOffset_ = 0;
    /**
     * int32 lineOffset = 6;
     * @return The lineOffset.
     */
    @java.lang.Override
    public int getLineOffset() {
      return lineOffset_;
    }

    public static final int NAME_FIELD_NUMBER = 7;
    @SuppressWarnings("serial")
    private volatile java.lang.Object name_ = "";
    /**
     * string name = 7;
     * @return The name.
     */
    @java.lang.Override
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     * string name = 7;
     * @return The bytes for name.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MODE_FIELD_NUMBER = 8;
    @SuppressWarnings("serial")
    private com.google.protobuf.Internal.IntList mode_;
    private static final com.google.protobuf.Internal.IntListAdapter.IntConverter<
        com.diozero.remote.message.protobuf.Board.GpioMode> mode_converter_ =
            new com.google.protobuf.Internal.IntListAdapter.IntConverter<
                com.diozero.remote.message.protobuf.Board.GpioMode>() {
              public com.diozero.remote.message.protobuf.Board.GpioMode convert(int from) {
                com.diozero.remote.message.protobuf.Board.GpioMode result = com.diozero.remote.message.protobuf.Board.GpioMode.forNumber(from);
                return result == null ? com.diozero.remote.message.protobuf.Board.GpioMode.UNRECOGNIZED : result;
              }
            };
    /**
     * repeated .diozero.Board.GpioMode mode = 8;
     * @return A list containing the mode.
     */
    @java.lang.Override
    public java.util.List getModeList() {
      return new com.google.protobuf.Internal.IntListAdapter<
          com.diozero.remote.message.protobuf.Board.GpioMode>(mode_, mode_converter_);
    }
    /**
     * repeated .diozero.Board.GpioMode mode = 8;
     * @return The count of mode.
     */
    @java.lang.Override
    public int getModeCount() {
      return mode_.size();
    }
    /**
     * repeated .diozero.Board.GpioMode mode = 8;
     * @param index The index of the element to return.
     * @return The mode at the given index.
     */
    @java.lang.Override
    public com.diozero.remote.message.protobuf.Board.GpioMode getMode(int index) {
      return mode_converter_.convert(mode_.getInt(index));
    }
    /**
     * repeated .diozero.Board.GpioMode mode = 8;
     * @return A list containing the enum numeric values on the wire for mode.
     */
    @java.lang.Override
    public java.util.List
    getModeValueList() {
      return mode_;
    }
    /**
     * repeated .diozero.Board.GpioMode mode = 8;
     * @param index The index of the value to return.
     * @return The enum numeric value on the wire of mode at the given index.
     */
    @java.lang.Override
    public int getModeValue(int index) {
      return mode_.getInt(index);
    }
    private int modeMemoizedSerializedSize;

    public static final int PWMCHIP_FIELD_NUMBER = 9;
    private int pwmChip_ = 0;
    /**
     * optional int32 pwmChip = 9;
     * @return Whether the pwmChip field is set.
     */
    @java.lang.Override
    public boolean hasPwmChip() {
      return ((bitField0_ & 0x00000001) != 0);
    }
    /**
     * optional int32 pwmChip = 9;
     * @return The pwmChip.
     */
    @java.lang.Override
    public int getPwmChip() {
      return pwmChip_;
    }

    public static final int PWMNUM_FIELD_NUMBER = 10;
    private int pwmNum_ = 0;
    /**
     * optional int32 pwmNum = 10;
     * @return Whether the pwmNum field is set.
     */
    @java.lang.Override
    public boolean hasPwmNum() {
      return ((bitField0_ & 0x00000002) != 0);
    }
    /**
     * optional int32 pwmNum = 10;
     * @return The pwmNum.
     */
    @java.lang.Override
    public int getPwmNum() {
      return pwmNum_;
    }

    public static final int ADCVREF_FIELD_NUMBER = 11;
    private float adcVRef_ = 0F;
    /**
     * optional float adcVRef = 11;
     * @return Whether the adcVRef field is set.
     */
    @java.lang.Override
    public boolean hasAdcVRef() {
      return ((bitField0_ & 0x00000004) != 0);
    }
    /**
     * optional float adcVRef = 11;
     * @return The adcVRef.
     */
    @java.lang.Override
    public float getAdcVRef() {
      return adcVRef_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      getSerializedSize();
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(header_)) {
        com.google.protobuf.GeneratedMessage.writeString(output, 1, header_);
      }
      if (physicalPin_ != 0) {
        output.writeInt32(2, physicalPin_);
      }
      if (gpioNumber_ != 0) {
        output.writeInt32(3, gpioNumber_);
      }
      if (sysFsNumber_ != 0) {
        output.writeInt32(4, sysFsNumber_);
      }
      if (chip_ != 0) {
        output.writeInt32(5, chip_);
      }
      if (lineOffset_ != 0) {
        output.writeInt32(6, lineOffset_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) {
        com.google.protobuf.GeneratedMessage.writeString(output, 7, name_);
      }
      if (getModeList().size() > 0) {
        output.writeUInt32NoTag(66);
        output.writeUInt32NoTag(modeMemoizedSerializedSize);
      }
      for (int i = 0; i < mode_.size(); i++) {
        output.writeEnumNoTag(mode_.getInt(i));
      }
      if (((bitField0_ & 0x00000001) != 0)) {
        output.writeInt32(9, pwmChip_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        output.writeInt32(10, pwmNum_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        output.writeFloat(11, adcVRef_);
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(header_)) {
        size += com.google.protobuf.GeneratedMessage.computeStringSize(1, header_);
      }
      if (physicalPin_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(2, physicalPin_);
      }
      if (gpioNumber_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(3, gpioNumber_);
      }
      if (sysFsNumber_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(4, sysFsNumber_);
      }
      if (chip_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, chip_);
      }
      if (lineOffset_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(6, lineOffset_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) {
        size += com.google.protobuf.GeneratedMessage.computeStringSize(7, name_);
      }
      {
        int dataSize = 0;
        for (int i = 0; i < mode_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeEnumSizeNoTag(mode_.getInt(i));
        }
        size += dataSize;
        if (!getModeList().isEmpty()) {  size += 1;
          size += com.google.protobuf.CodedOutputStream
            .computeUInt32SizeNoTag(dataSize);
        }modeMemoizedSerializedSize = dataSize;
      }
      if (((bitField0_ & 0x00000001) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(9, pwmChip_);
      }
      if (((bitField0_ & 0x00000002) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(10, pwmNum_);
      }
      if (((bitField0_ & 0x00000004) != 0)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(11, adcVRef_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.diozero.remote.message.protobuf.Board.GpioInfo)) {
        return super.equals(obj);
      }
      com.diozero.remote.message.protobuf.Board.GpioInfo other = (com.diozero.remote.message.protobuf.Board.GpioInfo) obj;

      if (!getHeader()
          .equals(other.getHeader())) return false;
      if (getPhysicalPin()
          != other.getPhysicalPin()) return false;
      if (getGpioNumber()
          != other.getGpioNumber()) return false;
      if (getSysFsNumber()
          != other.getSysFsNumber()) return false;
      if (getChip()
          != other.getChip()) return false;
      if (getLineOffset()
          != other.getLineOffset()) return false;
      if (!getName()
          .equals(other.getName())) return false;
      if (!mode_.equals(other.mode_)) return false;
      if (hasPwmChip() != other.hasPwmChip()) return false;
      if (hasPwmChip()) {
        if (getPwmChip()
            != other.getPwmChip()) return false;
      }
      if (hasPwmNum() != other.hasPwmNum()) return false;
      if (hasPwmNum()) {
        if (getPwmNum()
            != other.getPwmNum()) return false;
      }
      if (hasAdcVRef() != other.hasAdcVRef()) return false;
      if (hasAdcVRef()) {
        if (java.lang.Float.floatToIntBits(getAdcVRef())
            != java.lang.Float.floatToIntBits(
                other.getAdcVRef())) return false;
      }
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + HEADER_FIELD_NUMBER;
      hash = (53 * hash) + getHeader().hashCode();
      hash = (37 * hash) + PHYSICALPIN_FIELD_NUMBER;
      hash = (53 * hash) + getPhysicalPin();
      hash = (37 * hash) + GPIONUMBER_FIELD_NUMBER;
      hash = (53 * hash) + getGpioNumber();
      hash = (37 * hash) + SYSFSNUMBER_FIELD_NUMBER;
      hash = (53 * hash) + getSysFsNumber();
      hash = (37 * hash) + CHIP_FIELD_NUMBER;
      hash = (53 * hash) + getChip();
      hash = (37 * hash) + LINEOFFSET_FIELD_NUMBER;
      hash = (53 * hash) + getLineOffset();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      if (getModeCount() > 0) {
        hash = (37 * hash) + MODE_FIELD_NUMBER;
        hash = (53 * hash) + mode_.hashCode();
      }
      if (hasPwmChip()) {
        hash = (37 * hash) + PWMCHIP_FIELD_NUMBER;
        hash = (53 * hash) + getPwmChip();
      }
      if (hasPwmNum()) {
        hash = (37 * hash) + PWMNUM_FIELD_NUMBER;
        hash = (53 * hash) + getPwmNum();
      }
      if (hasAdcVRef()) {
        hash = (37 * hash) + ADCVREF_FIELD_NUMBER;
        hash = (53 * hash) + java.lang.Float.floatToIntBits(
            getAdcVRef());
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.diozero.remote.message.protobuf.Board.GpioInfo parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioInfo parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public static com.diozero.remote.message.protobuf.Board.GpioInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static com.diozero.remote.message.protobuf.Board.GpioInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.diozero.remote.message.protobuf.Board.GpioInfo prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code diozero.Board.GpioInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder implements
        // @@protoc_insertion_point(builder_implements:diozero.Board.GpioInfo)
        com.diozero.remote.message.protobuf.Board.GpioInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_GpioInfo_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_GpioInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.diozero.remote.message.protobuf.Board.GpioInfo.class, com.diozero.remote.message.protobuf.Board.GpioInfo.Builder.class);
      }

      // Construct using com.diozero.remote.message.protobuf.Board.GpioInfo.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        header_ = "";
        physicalPin_ = 0;
        gpioNumber_ = 0;
        sysFsNumber_ = 0;
        chip_ = 0;
        lineOffset_ = 0;
        name_ = "";
        mode_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000080);
        pwmChip_ = 0;
        pwmNum_ = 0;
        adcVRef_ = 0F;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_GpioInfo_descriptor;
      }

      @java.lang.Override
      public com.diozero.remote.message.protobuf.Board.GpioInfo getDefaultInstanceForType() {
        return com.diozero.remote.message.protobuf.Board.GpioInfo.getDefaultInstance();
      }

      @java.lang.Override
      public com.diozero.remote.message.protobuf.Board.GpioInfo build() {
        com.diozero.remote.message.protobuf.Board.GpioInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.diozero.remote.message.protobuf.Board.GpioInfo buildPartial() {
        com.diozero.remote.message.protobuf.Board.GpioInfo result = new com.diozero.remote.message.protobuf.Board.GpioInfo(this);
        buildPartialRepeatedFields(result);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartialRepeatedFields(com.diozero.remote.message.protobuf.Board.GpioInfo result) {
        if (((bitField0_ & 0x00000080) != 0)) {
          mode_.makeImmutable();
          bitField0_ = (bitField0_ & ~0x00000080);
        }
        result.mode_ = mode_;
      }

      private void buildPartial0(com.diozero.remote.message.protobuf.Board.GpioInfo result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.header_ = header_;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.physicalPin_ = physicalPin_;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.gpioNumber_ = gpioNumber_;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.sysFsNumber_ = sysFsNumber_;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          result.chip_ = chip_;
        }
        if (((from_bitField0_ & 0x00000020) != 0)) {
          result.lineOffset_ = lineOffset_;
        }
        if (((from_bitField0_ & 0x00000040) != 0)) {
          result.name_ = name_;
        }
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000100) != 0)) {
          result.pwmChip_ = pwmChip_;
          to_bitField0_ |= 0x00000001;
        }
        if (((from_bitField0_ & 0x00000200) != 0)) {
          result.pwmNum_ = pwmNum_;
          to_bitField0_ |= 0x00000002;
        }
        if (((from_bitField0_ & 0x00000400) != 0)) {
          result.adcVRef_ = adcVRef_;
          to_bitField0_ |= 0x00000004;
        }
        result.bitField0_ |= to_bitField0_;
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.diozero.remote.message.protobuf.Board.GpioInfo) {
          return mergeFrom((com.diozero.remote.message.protobuf.Board.GpioInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.diozero.remote.message.protobuf.Board.GpioInfo other) {
        if (other == com.diozero.remote.message.protobuf.Board.GpioInfo.getDefaultInstance()) return this;
        if (!other.getHeader().isEmpty()) {
          header_ = other.header_;
          bitField0_ |= 0x00000001;
          onChanged();
        }
        if (other.getPhysicalPin() != 0) {
          setPhysicalPin(other.getPhysicalPin());
        }
        if (other.getGpioNumber() != 0) {
          setGpioNumber(other.getGpioNumber());
        }
        if (other.getSysFsNumber() != 0) {
          setSysFsNumber(other.getSysFsNumber());
        }
        if (other.getChip() != 0) {
          setChip(other.getChip());
        }
        if (other.getLineOffset() != 0) {
          setLineOffset(other.getLineOffset());
        }
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          bitField0_ |= 0x00000040;
          onChanged();
        }
        if (!other.mode_.isEmpty()) {
          if (mode_.isEmpty()) {
            mode_ = other.mode_;
            bitField0_ = (bitField0_ & ~0x00000080);
          } else {
            ensureModeIsMutable();
            mode_.addAll(other.mode_);
          }
          onChanged();
        }
        if (other.hasPwmChip()) {
          setPwmChip(other.getPwmChip());
        }
        if (other.hasPwmNum()) {
          setPwmNum(other.getPwmNum());
        }
        if (other.hasAdcVRef()) {
          setAdcVRef(other.getAdcVRef());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                header_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000001;
                break;
              } // case 10
              case 16: {
                physicalPin_ = input.readInt32();
                bitField0_ |= 0x00000002;
                break;
              } // case 16
              case 24: {
                gpioNumber_ = input.readInt32();
                bitField0_ |= 0x00000004;
                break;
              } // case 24
              case 32: {
                sysFsNumber_ = input.readInt32();
                bitField0_ |= 0x00000008;
                break;
              } // case 32
              case 40: {
                chip_ = input.readInt32();
                bitField0_ |= 0x00000010;
                break;
              } // case 40
              case 48: {
                lineOffset_ = input.readInt32();
                bitField0_ |= 0x00000020;
                break;
              } // case 48
              case 58: {
                name_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000040;
                break;
              } // case 58
              case 64: {
                int tmpRaw = input.readEnum();
                ensureModeIsMutable();
                mode_.addInt(tmpRaw);
                break;
              } // case 64
              case 66: {
                int length = input.readRawVarint32();
                int oldLimit = input.pushLimit(length);
                while(input.getBytesUntilLimit() > 0) {
                  int tmpRaw = input.readEnum();
                  ensureModeIsMutable();
                  mode_.addInt(tmpRaw);
                }
                input.popLimit(oldLimit);
                break;
              } // case 66
              case 72: {
                pwmChip_ = input.readInt32();
                bitField0_ |= 0x00000100;
                break;
              } // case 72
              case 80: {
                pwmNum_ = input.readInt32();
                bitField0_ |= 0x00000200;
                break;
              } // case 80
              case 93: {
                adcVRef_ = input.readFloat();
                bitField0_ |= 0x00000400;
                break;
              } // case 93
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private java.lang.Object header_ = "";
      /**
       * string header = 1;
       * @return The header.
       */
      public java.lang.String getHeader() {
        java.lang.Object ref = header_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          header_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * string header = 1;
       * @return The bytes for header.
       */
      public com.google.protobuf.ByteString
          getHeaderBytes() {
        java.lang.Object ref = header_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          header_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * string header = 1;
       * @param value The header to set.
       * @return This builder for chaining.
       */
      public Builder setHeader(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        header_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * string header = 1;
       * @return This builder for chaining.
       */
      public Builder clearHeader() {
        header_ = getDefaultInstance().getHeader();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * string header = 1;
       * @param value The bytes for header to set.
       * @return This builder for chaining.
       */
      public Builder setHeaderBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        header_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }

      private int physicalPin_ ;
      /**
       * int32 physicalPin = 2;
       * @return The physicalPin.
       */
      @java.lang.Override
      public int getPhysicalPin() {
        return physicalPin_;
      }
      /**
       * int32 physicalPin = 2;
       * @param value The physicalPin to set.
       * @return This builder for chaining.
       */
      public Builder setPhysicalPin(int value) {

        physicalPin_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       * int32 physicalPin = 2;
       * @return This builder for chaining.
       */
      public Builder clearPhysicalPin() {
        bitField0_ = (bitField0_ & ~0x00000002);
        physicalPin_ = 0;
        onChanged();
        return this;
      }

      private int gpioNumber_ ;
      /**
       * int32 gpioNumber = 3;
       * @return The gpioNumber.
       */
      @java.lang.Override
      public int getGpioNumber() {
        return gpioNumber_;
      }
      /**
       * int32 gpioNumber = 3;
       * @param value The gpioNumber to set.
       * @return This builder for chaining.
       */
      public Builder setGpioNumber(int value) {

        gpioNumber_ = value;
        bitField0_ |= 0x00000004;
        onChanged();
        return this;
      }
      /**
       * int32 gpioNumber = 3;
       * @return This builder for chaining.
       */
      public Builder clearGpioNumber() {
        bitField0_ = (bitField0_ & ~0x00000004);
        gpioNumber_ = 0;
        onChanged();
        return this;
      }

      private int sysFsNumber_ ;
      /**
       * int32 sysFsNumber = 4;
       * @return The sysFsNumber.
       */
      @java.lang.Override
      public int getSysFsNumber() {
        return sysFsNumber_;
      }
      /**
       * int32 sysFsNumber = 4;
       * @param value The sysFsNumber to set.
       * @return This builder for chaining.
       */
      public Builder setSysFsNumber(int value) {

        sysFsNumber_ = value;
        bitField0_ |= 0x00000008;
        onChanged();
        return this;
      }
      /**
       * int32 sysFsNumber = 4;
       * @return This builder for chaining.
       */
      public Builder clearSysFsNumber() {
        bitField0_ = (bitField0_ & ~0x00000008);
        sysFsNumber_ = 0;
        onChanged();
        return this;
      }

      private int chip_ ;
      /**
       * int32 chip = 5;
       * @return The chip.
       */
      @java.lang.Override
      public int getChip() {
        return chip_;
      }
      /**
       * int32 chip = 5;
       * @param value The chip to set.
       * @return This builder for chaining.
       */
      public Builder setChip(int value) {

        chip_ = value;
        bitField0_ |= 0x00000010;
        onChanged();
        return this;
      }
      /**
       * int32 chip = 5;
       * @return This builder for chaining.
       */
      public Builder clearChip() {
        bitField0_ = (bitField0_ & ~0x00000010);
        chip_ = 0;
        onChanged();
        return this;
      }

      private int lineOffset_ ;
      /**
       * int32 lineOffset = 6;
       * @return The lineOffset.
       */
      @java.lang.Override
      public int getLineOffset() {
        return lineOffset_;
      }
      /**
       * int32 lineOffset = 6;
       * @param value The lineOffset to set.
       * @return This builder for chaining.
       */
      public Builder setLineOffset(int value) {

        lineOffset_ = value;
        bitField0_ |= 0x00000020;
        onChanged();
        return this;
      }
      /**
       * int32 lineOffset = 6;
       * @return This builder for chaining.
       */
      public Builder clearLineOffset() {
        bitField0_ = (bitField0_ & ~0x00000020);
        lineOffset_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * string name = 7;
       * @return The name.
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * string name = 7;
       * @return The bytes for name.
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * string name = 7;
       * @param value The name to set.
       * @return This builder for chaining.
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        name_ = value;
        bitField0_ |= 0x00000040;
        onChanged();
        return this;
      }
      /**
       * string name = 7;
       * @return This builder for chaining.
       */
      public Builder clearName() {
        name_ = getDefaultInstance().getName();
        bitField0_ = (bitField0_ & ~0x00000040);
        onChanged();
        return this;
      }
      /**
       * string name = 7;
       * @param value The bytes for name to set.
       * @return This builder for chaining.
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        name_ = value;
        bitField0_ |= 0x00000040;
        onChanged();
        return this;
      }

      private com.google.protobuf.Internal.IntList mode_ =
        emptyIntList();
      private void ensureModeIsMutable() {
        if (!((bitField0_ & 0x00000080) != 0)) {
          mode_ = makeMutableCopy(mode_);
          bitField0_ |= 0x00000080;
        }
      }
      /**
       * repeated .diozero.Board.GpioMode mode = 8;
       * @return A list containing the mode.
       */
      public java.util.List getModeList() {
        return new com.google.protobuf.Internal.IntListAdapter<
            com.diozero.remote.message.protobuf.Board.GpioMode>(mode_, mode_converter_);
      }
      /**
       * repeated .diozero.Board.GpioMode mode = 8;
       * @return The count of mode.
       */
      public int getModeCount() {
        return mode_.size();
      }
      /**
       * repeated .diozero.Board.GpioMode mode = 8;
       * @param index The index of the element to return.
       * @return The mode at the given index.
       */
      public com.diozero.remote.message.protobuf.Board.GpioMode getMode(int index) {
        return mode_converter_.convert(mode_.getInt(index));
      }
      /**
       * repeated .diozero.Board.GpioMode mode = 8;
       * @param index The index to set the value at.
       * @param value The mode to set.
       * @return This builder for chaining.
       */
      public Builder setMode(
          int index, com.diozero.remote.message.protobuf.Board.GpioMode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureModeIsMutable();
        mode_.setInt(index, value.getNumber());
        onChanged();
        return this;
      }
      /**
       * repeated .diozero.Board.GpioMode mode = 8;
       * @param value The mode to add.
       * @return This builder for chaining.
       */
      public Builder addMode(com.diozero.remote.message.protobuf.Board.GpioMode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        ensureModeIsMutable();
        mode_.addInt(value.getNumber());
        onChanged();
        return this;
      }
      /**
       * repeated .diozero.Board.GpioMode mode = 8;
       * @param values The mode to add.
       * @return This builder for chaining.
       */
      public Builder addAllMode(
          java.lang.Iterable values) {
        ensureModeIsMutable();
        for (com.diozero.remote.message.protobuf.Board.GpioMode value : values) {
          mode_.addInt(value.getNumber());
        }
        onChanged();
        return this;
      }
      /**
       * repeated .diozero.Board.GpioMode mode = 8;
       * @return This builder for chaining.
       */
      public Builder clearMode() {
        mode_ = emptyIntList();
        bitField0_ = (bitField0_ & ~0x00000080);
        onChanged();
        return this;
      }
      /**
       * repeated .diozero.Board.GpioMode mode = 8;
       * @return A list containing the enum numeric values on the wire for mode.
       */
      public java.util.List
      getModeValueList() {
        return java.util.Collections.unmodifiableList(mode_);
      }
      /**
       * repeated .diozero.Board.GpioMode mode = 8;
       * @param index The index of the value to return.
       * @return The enum numeric value on the wire of mode at the given index.
       */
      public int getModeValue(int index) {
        return mode_.getInt(index);
      }
      /**
       * repeated .diozero.Board.GpioMode mode = 8;
       * @param index The index to set the value at.
       * @param value The enum numeric value on the wire for mode to set.
       * @return This builder for chaining.
       */
      public Builder setModeValue(
          int index, int value) {
        ensureModeIsMutable();
        mode_.setInt(index, value);
        onChanged();
        return this;
      }
      /**
       * repeated .diozero.Board.GpioMode mode = 8;
       * @param value The enum numeric value on the wire for mode to add.
       * @return This builder for chaining.
       */
      public Builder addModeValue(int value) {
        ensureModeIsMutable();
        mode_.addInt(value);
        onChanged();
        return this;
      }
      /**
       * repeated .diozero.Board.GpioMode mode = 8;
       * @param values The enum numeric values on the wire for mode to add.
       * @return This builder for chaining.
       */
      public Builder addAllModeValue(
          java.lang.Iterable values) {
        ensureModeIsMutable();
        for (int value : values) {
          mode_.addInt(value);
        }
        onChanged();
        return this;
      }

      private int pwmChip_ ;
      /**
       * optional int32 pwmChip = 9;
       * @return Whether the pwmChip field is set.
       */
      @java.lang.Override
      public boolean hasPwmChip() {
        return ((bitField0_ & 0x00000100) != 0);
      }
      /**
       * optional int32 pwmChip = 9;
       * @return The pwmChip.
       */
      @java.lang.Override
      public int getPwmChip() {
        return pwmChip_;
      }
      /**
       * optional int32 pwmChip = 9;
       * @param value The pwmChip to set.
       * @return This builder for chaining.
       */
      public Builder setPwmChip(int value) {

        pwmChip_ = value;
        bitField0_ |= 0x00000100;
        onChanged();
        return this;
      }
      /**
       * optional int32 pwmChip = 9;
       * @return This builder for chaining.
       */
      public Builder clearPwmChip() {
        bitField0_ = (bitField0_ & ~0x00000100);
        pwmChip_ = 0;
        onChanged();
        return this;
      }

      private int pwmNum_ ;
      /**
       * optional int32 pwmNum = 10;
       * @return Whether the pwmNum field is set.
       */
      @java.lang.Override
      public boolean hasPwmNum() {
        return ((bitField0_ & 0x00000200) != 0);
      }
      /**
       * optional int32 pwmNum = 10;
       * @return The pwmNum.
       */
      @java.lang.Override
      public int getPwmNum() {
        return pwmNum_;
      }
      /**
       * optional int32 pwmNum = 10;
       * @param value The pwmNum to set.
       * @return This builder for chaining.
       */
      public Builder setPwmNum(int value) {

        pwmNum_ = value;
        bitField0_ |= 0x00000200;
        onChanged();
        return this;
      }
      /**
       * optional int32 pwmNum = 10;
       * @return This builder for chaining.
       */
      public Builder clearPwmNum() {
        bitField0_ = (bitField0_ & ~0x00000200);
        pwmNum_ = 0;
        onChanged();
        return this;
      }

      private float adcVRef_ ;
      /**
       * optional float adcVRef = 11;
       * @return Whether the adcVRef field is set.
       */
      @java.lang.Override
      public boolean hasAdcVRef() {
        return ((bitField0_ & 0x00000400) != 0);
      }
      /**
       * optional float adcVRef = 11;
       * @return The adcVRef.
       */
      @java.lang.Override
      public float getAdcVRef() {
        return adcVRef_;
      }
      /**
       * optional float adcVRef = 11;
       * @param value The adcVRef to set.
       * @return This builder for chaining.
       */
      public Builder setAdcVRef(float value) {

        adcVRef_ = value;
        bitField0_ |= 0x00000400;
        onChanged();
        return this;
      }
      /**
       * optional float adcVRef = 11;
       * @return This builder for chaining.
       */
      public Builder clearAdcVRef() {
        bitField0_ = (bitField0_ & ~0x00000400);
        adcVRef_ = 0F;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:diozero.Board.GpioInfo)
    }

    // @@protoc_insertion_point(class_scope:diozero.Board.GpioInfo)
    private static final com.diozero.remote.message.protobuf.Board.GpioInfo DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.diozero.remote.message.protobuf.Board.GpioInfo();
    }

    public static com.diozero.remote.message.protobuf.Board.GpioInfo getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public GpioInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.diozero.remote.message.protobuf.Board.GpioInfo getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface HeaderInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:diozero.Board.HeaderInfo)
      com.google.protobuf.MessageOrBuilder {

    /**
     * string name = 1;
     * @return The name.
     */
    java.lang.String getName();
    /**
     * string name = 1;
     * @return The bytes for name.
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * repeated .diozero.Board.GpioInfo gpio = 2;
     */
    java.util.List 
        getGpioList();
    /**
     * repeated .diozero.Board.GpioInfo gpio = 2;
     */
    com.diozero.remote.message.protobuf.Board.GpioInfo getGpio(int index);
    /**
     * repeated .diozero.Board.GpioInfo gpio = 2;
     */
    int getGpioCount();
    /**
     * repeated .diozero.Board.GpioInfo gpio = 2;
     */
    java.util.List 
        getGpioOrBuilderList();
    /**
     * repeated .diozero.Board.GpioInfo gpio = 2;
     */
    com.diozero.remote.message.protobuf.Board.GpioInfoOrBuilder getGpioOrBuilder(
        int index);
  }
  /**
   * Protobuf type {@code diozero.Board.HeaderInfo}
   */
  public static final class HeaderInfo extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:diozero.Board.HeaderInfo)
      HeaderInfoOrBuilder {
  private static final long serialVersionUID = 0L;
    static {
      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
        /* major= */ 4,
        /* minor= */ 28,
        /* patch= */ 2,
        /* suffix= */ "",
        HeaderInfo.class.getName());
    }
    // Use HeaderInfo.newBuilder() to construct.
    private HeaderInfo(com.google.protobuf.GeneratedMessage.Builder builder) {
      super(builder);
    }
    private HeaderInfo() {
      name_ = "";
      gpio_ = java.util.Collections.emptyList();
    }

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_HeaderInfo_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_HeaderInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.diozero.remote.message.protobuf.Board.HeaderInfo.class, com.diozero.remote.message.protobuf.Board.HeaderInfo.Builder.class);
    }

    public static final int NAME_FIELD_NUMBER = 1;
    @SuppressWarnings("serial")
    private volatile java.lang.Object name_ = "";
    /**
     * string name = 1;
     * @return The name.
     */
    @java.lang.Override
    public java.lang.String getName() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        name_ = s;
        return s;
      }
    }
    /**
     * string name = 1;
     * @return The bytes for name.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getNameBytes() {
      java.lang.Object ref = name_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        name_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int GPIO_FIELD_NUMBER = 2;
    @SuppressWarnings("serial")
    private java.util.List gpio_;
    /**
     * repeated .diozero.Board.GpioInfo gpio = 2;
     */
    @java.lang.Override
    public java.util.List getGpioList() {
      return gpio_;
    }
    /**
     * repeated .diozero.Board.GpioInfo gpio = 2;
     */
    @java.lang.Override
    public java.util.List 
        getGpioOrBuilderList() {
      return gpio_;
    }
    /**
     * repeated .diozero.Board.GpioInfo gpio = 2;
     */
    @java.lang.Override
    public int getGpioCount() {
      return gpio_.size();
    }
    /**
     * repeated .diozero.Board.GpioInfo gpio = 2;
     */
    @java.lang.Override
    public com.diozero.remote.message.protobuf.Board.GpioInfo getGpio(int index) {
      return gpio_.get(index);
    }
    /**
     * repeated .diozero.Board.GpioInfo gpio = 2;
     */
    @java.lang.Override
    public com.diozero.remote.message.protobuf.Board.GpioInfoOrBuilder getGpioOrBuilder(
        int index) {
      return gpio_.get(index);
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) {
        com.google.protobuf.GeneratedMessage.writeString(output, 1, name_);
      }
      for (int i = 0; i < gpio_.size(); i++) {
        output.writeMessage(2, gpio_.get(i));
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(name_)) {
        size += com.google.protobuf.GeneratedMessage.computeStringSize(1, name_);
      }
      for (int i = 0; i < gpio_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, gpio_.get(i));
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.diozero.remote.message.protobuf.Board.HeaderInfo)) {
        return super.equals(obj);
      }
      com.diozero.remote.message.protobuf.Board.HeaderInfo other = (com.diozero.remote.message.protobuf.Board.HeaderInfo) obj;

      if (!getName()
          .equals(other.getName())) return false;
      if (!getGpioList()
          .equals(other.getGpioList())) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + NAME_FIELD_NUMBER;
      hash = (53 * hash) + getName().hashCode();
      if (getGpioCount() > 0) {
        hash = (37 * hash) + GPIO_FIELD_NUMBER;
        hash = (53 * hash) + getGpioList().hashCode();
      }
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.diozero.remote.message.protobuf.Board.HeaderInfo parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.diozero.remote.message.protobuf.Board.HeaderInfo parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.diozero.remote.message.protobuf.Board.HeaderInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.diozero.remote.message.protobuf.Board.HeaderInfo parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.diozero.remote.message.protobuf.Board.HeaderInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.diozero.remote.message.protobuf.Board.HeaderInfo parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.diozero.remote.message.protobuf.Board.HeaderInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input);
    }
    public static com.diozero.remote.message.protobuf.Board.HeaderInfo parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public static com.diozero.remote.message.protobuf.Board.HeaderInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static com.diozero.remote.message.protobuf.Board.HeaderInfo parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.diozero.remote.message.protobuf.Board.HeaderInfo parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input);
    }
    public static com.diozero.remote.message.protobuf.Board.HeaderInfo parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.diozero.remote.message.protobuf.Board.HeaderInfo prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code diozero.Board.HeaderInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder implements
        // @@protoc_insertion_point(builder_implements:diozero.Board.HeaderInfo)
        com.diozero.remote.message.protobuf.Board.HeaderInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_HeaderInfo_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_HeaderInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.diozero.remote.message.protobuf.Board.HeaderInfo.class, com.diozero.remote.message.protobuf.Board.HeaderInfo.Builder.class);
      }

      // Construct using com.diozero.remote.message.protobuf.Board.HeaderInfo.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        name_ = "";
        if (gpioBuilder_ == null) {
          gpio_ = java.util.Collections.emptyList();
        } else {
          gpio_ = null;
          gpioBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_HeaderInfo_descriptor;
      }

      @java.lang.Override
      public com.diozero.remote.message.protobuf.Board.HeaderInfo getDefaultInstanceForType() {
        return com.diozero.remote.message.protobuf.Board.HeaderInfo.getDefaultInstance();
      }

      @java.lang.Override
      public com.diozero.remote.message.protobuf.Board.HeaderInfo build() {
        com.diozero.remote.message.protobuf.Board.HeaderInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.diozero.remote.message.protobuf.Board.HeaderInfo buildPartial() {
        com.diozero.remote.message.protobuf.Board.HeaderInfo result = new com.diozero.remote.message.protobuf.Board.HeaderInfo(this);
        buildPartialRepeatedFields(result);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartialRepeatedFields(com.diozero.remote.message.protobuf.Board.HeaderInfo result) {
        if (gpioBuilder_ == null) {
          if (((bitField0_ & 0x00000002) != 0)) {
            gpio_ = java.util.Collections.unmodifiableList(gpio_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.gpio_ = gpio_;
        } else {
          result.gpio_ = gpioBuilder_.build();
        }
      }

      private void buildPartial0(com.diozero.remote.message.protobuf.Board.HeaderInfo result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.name_ = name_;
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.diozero.remote.message.protobuf.Board.HeaderInfo) {
          return mergeFrom((com.diozero.remote.message.protobuf.Board.HeaderInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.diozero.remote.message.protobuf.Board.HeaderInfo other) {
        if (other == com.diozero.remote.message.protobuf.Board.HeaderInfo.getDefaultInstance()) return this;
        if (!other.getName().isEmpty()) {
          name_ = other.name_;
          bitField0_ |= 0x00000001;
          onChanged();
        }
        if (gpioBuilder_ == null) {
          if (!other.gpio_.isEmpty()) {
            if (gpio_.isEmpty()) {
              gpio_ = other.gpio_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureGpioIsMutable();
              gpio_.addAll(other.gpio_);
            }
            onChanged();
          }
        } else {
          if (!other.gpio_.isEmpty()) {
            if (gpioBuilder_.isEmpty()) {
              gpioBuilder_.dispose();
              gpioBuilder_ = null;
              gpio_ = other.gpio_;
              bitField0_ = (bitField0_ & ~0x00000002);
              gpioBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getGpioFieldBuilder() : null;
            } else {
              gpioBuilder_.addAllMessages(other.gpio_);
            }
          }
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 10: {
                name_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000001;
                break;
              } // case 10
              case 18: {
                com.diozero.remote.message.protobuf.Board.GpioInfo m =
                    input.readMessage(
                        com.diozero.remote.message.protobuf.Board.GpioInfo.parser(),
                        extensionRegistry);
                if (gpioBuilder_ == null) {
                  ensureGpioIsMutable();
                  gpio_.add(m);
                } else {
                  gpioBuilder_.addMessage(m);
                }
                break;
              } // case 18
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private java.lang.Object name_ = "";
      /**
       * string name = 1;
       * @return The name.
       */
      public java.lang.String getName() {
        java.lang.Object ref = name_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          name_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * string name = 1;
       * @return The bytes for name.
       */
      public com.google.protobuf.ByteString
          getNameBytes() {
        java.lang.Object ref = name_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          name_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * string name = 1;
       * @param value The name to set.
       * @return This builder for chaining.
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        name_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * string name = 1;
       * @return This builder for chaining.
       */
      public Builder clearName() {
        name_ = getDefaultInstance().getName();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }
      /**
       * string name = 1;
       * @param value The bytes for name to set.
       * @return This builder for chaining.
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        name_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }

      private java.util.List gpio_ =
        java.util.Collections.emptyList();
      private void ensureGpioIsMutable() {
        if (!((bitField0_ & 0x00000002) != 0)) {
          gpio_ = new java.util.ArrayList(gpio_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.diozero.remote.message.protobuf.Board.GpioInfo, com.diozero.remote.message.protobuf.Board.GpioInfo.Builder, com.diozero.remote.message.protobuf.Board.GpioInfoOrBuilder> gpioBuilder_;

      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public java.util.List getGpioList() {
        if (gpioBuilder_ == null) {
          return java.util.Collections.unmodifiableList(gpio_);
        } else {
          return gpioBuilder_.getMessageList();
        }
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public int getGpioCount() {
        if (gpioBuilder_ == null) {
          return gpio_.size();
        } else {
          return gpioBuilder_.getCount();
        }
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public com.diozero.remote.message.protobuf.Board.GpioInfo getGpio(int index) {
        if (gpioBuilder_ == null) {
          return gpio_.get(index);
        } else {
          return gpioBuilder_.getMessage(index);
        }
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public Builder setGpio(
          int index, com.diozero.remote.message.protobuf.Board.GpioInfo value) {
        if (gpioBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureGpioIsMutable();
          gpio_.set(index, value);
          onChanged();
        } else {
          gpioBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public Builder setGpio(
          int index, com.diozero.remote.message.protobuf.Board.GpioInfo.Builder builderForValue) {
        if (gpioBuilder_ == null) {
          ensureGpioIsMutable();
          gpio_.set(index, builderForValue.build());
          onChanged();
        } else {
          gpioBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public Builder addGpio(com.diozero.remote.message.protobuf.Board.GpioInfo value) {
        if (gpioBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureGpioIsMutable();
          gpio_.add(value);
          onChanged();
        } else {
          gpioBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public Builder addGpio(
          int index, com.diozero.remote.message.protobuf.Board.GpioInfo value) {
        if (gpioBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureGpioIsMutable();
          gpio_.add(index, value);
          onChanged();
        } else {
          gpioBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public Builder addGpio(
          com.diozero.remote.message.protobuf.Board.GpioInfo.Builder builderForValue) {
        if (gpioBuilder_ == null) {
          ensureGpioIsMutable();
          gpio_.add(builderForValue.build());
          onChanged();
        } else {
          gpioBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public Builder addGpio(
          int index, com.diozero.remote.message.protobuf.Board.GpioInfo.Builder builderForValue) {
        if (gpioBuilder_ == null) {
          ensureGpioIsMutable();
          gpio_.add(index, builderForValue.build());
          onChanged();
        } else {
          gpioBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public Builder addAllGpio(
          java.lang.Iterable values) {
        if (gpioBuilder_ == null) {
          ensureGpioIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, gpio_);
          onChanged();
        } else {
          gpioBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public Builder clearGpio() {
        if (gpioBuilder_ == null) {
          gpio_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          gpioBuilder_.clear();
        }
        return this;
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public Builder removeGpio(int index) {
        if (gpioBuilder_ == null) {
          ensureGpioIsMutable();
          gpio_.remove(index);
          onChanged();
        } else {
          gpioBuilder_.remove(index);
        }
        return this;
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public com.diozero.remote.message.protobuf.Board.GpioInfo.Builder getGpioBuilder(
          int index) {
        return getGpioFieldBuilder().getBuilder(index);
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public com.diozero.remote.message.protobuf.Board.GpioInfoOrBuilder getGpioOrBuilder(
          int index) {
        if (gpioBuilder_ == null) {
          return gpio_.get(index);  } else {
          return gpioBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public java.util.List 
           getGpioOrBuilderList() {
        if (gpioBuilder_ != null) {
          return gpioBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(gpio_);
        }
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public com.diozero.remote.message.protobuf.Board.GpioInfo.Builder addGpioBuilder() {
        return getGpioFieldBuilder().addBuilder(
            com.diozero.remote.message.protobuf.Board.GpioInfo.getDefaultInstance());
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public com.diozero.remote.message.protobuf.Board.GpioInfo.Builder addGpioBuilder(
          int index) {
        return getGpioFieldBuilder().addBuilder(
            index, com.diozero.remote.message.protobuf.Board.GpioInfo.getDefaultInstance());
      }
      /**
       * repeated .diozero.Board.GpioInfo gpio = 2;
       */
      public java.util.List 
           getGpioBuilderList() {
        return getGpioFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.diozero.remote.message.protobuf.Board.GpioInfo, com.diozero.remote.message.protobuf.Board.GpioInfo.Builder, com.diozero.remote.message.protobuf.Board.GpioInfoOrBuilder> 
          getGpioFieldBuilder() {
        if (gpioBuilder_ == null) {
          gpioBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.diozero.remote.message.protobuf.Board.GpioInfo, com.diozero.remote.message.protobuf.Board.GpioInfo.Builder, com.diozero.remote.message.protobuf.Board.GpioInfoOrBuilder>(
                  gpio_,
                  ((bitField0_ & 0x00000002) != 0),
                  getParentForChildren(),
                  isClean());
          gpio_ = null;
        }
        return gpioBuilder_;
      }

      // @@protoc_insertion_point(builder_scope:diozero.Board.HeaderInfo)
    }

    // @@protoc_insertion_point(class_scope:diozero.Board.HeaderInfo)
    private static final com.diozero.remote.message.protobuf.Board.HeaderInfo DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.diozero.remote.message.protobuf.Board.HeaderInfo();
    }

    public static com.diozero.remote.message.protobuf.Board.HeaderInfo getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public HeaderInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.diozero.remote.message.protobuf.Board.HeaderInfo getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface BoardInfoResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:diozero.Board.BoardInfoResponse)
      com.google.protobuf.MessageOrBuilder {

    /**
     * .diozero.Status status = 1;
     * @return The enum numeric value on the wire for status.
     */
    int getStatusValue();
    /**
     * .diozero.Status status = 1;
     * @return The status.
     */
    com.diozero.remote.message.protobuf.Status getStatus();

    /**
     * string detail = 2;
     * @return The detail.
     */
    java.lang.String getDetail();
    /**
     * string detail = 2;
     * @return The bytes for detail.
     */
    com.google.protobuf.ByteString
        getDetailBytes();

    /**
     * string make = 3;
     * @return The make.
     */
    java.lang.String getMake();
    /**
     * string make = 3;
     * @return The bytes for make.
     */
    com.google.protobuf.ByteString
        getMakeBytes();

    /**
     * string model = 4;
     * @return The model.
     */
    java.lang.String getModel();
    /**
     * string model = 4;
     * @return The bytes for model.
     */
    com.google.protobuf.ByteString
        getModelBytes();

    /**
     * int32 memory = 5;
     * @return The memory.
     */
    int getMemory();

    /**
     * repeated .diozero.Board.HeaderInfo header = 6;
     */
    java.util.List 
        getHeaderList();
    /**
     * repeated .diozero.Board.HeaderInfo header = 6;
     */
    com.diozero.remote.message.protobuf.Board.HeaderInfo getHeader(int index);
    /**
     * repeated .diozero.Board.HeaderInfo header = 6;
     */
    int getHeaderCount();
    /**
     * repeated .diozero.Board.HeaderInfo header = 6;
     */
    java.util.List 
        getHeaderOrBuilderList();
    /**
     * repeated .diozero.Board.HeaderInfo header = 6;
     */
    com.diozero.remote.message.protobuf.Board.HeaderInfoOrBuilder getHeaderOrBuilder(
        int index);

    /**
     * int32 boardPwmFrequency = 7;
     * @return The boardPwmFrequency.
     */
    int getBoardPwmFrequency();

    /**
     * int32 boardServoFrequency = 8;
     * @return The boardServoFrequency.
     */
    int getBoardServoFrequency();

    /**
     * int32 spiBufferSize = 9;
     * @return The spiBufferSize.
     */
    int getSpiBufferSize();

    /**
     * string osId = 10;
     * @return The osId.
     */
    java.lang.String getOsId();
    /**
     * string osId = 10;
     * @return The bytes for osId.
     */
    com.google.protobuf.ByteString
        getOsIdBytes();

    /**
     * string osVersion = 11;
     * @return The osVersion.
     */
    java.lang.String getOsVersion();
    /**
     * string osVersion = 11;
     * @return The bytes for osVersion.
     */
    com.google.protobuf.ByteString
        getOsVersionBytes();

    /**
     * bool biasControlSupported = 12;
     * @return The biasControlSupported.
     */
    boolean getBiasControlSupported();

    /**
     * bool recognised = 13;
     * @return The recognised.
     */
    boolean getRecognised();
  }
  /**
   * Protobuf type {@code diozero.Board.BoardInfoResponse}
   */
  public static final class BoardInfoResponse extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:diozero.Board.BoardInfoResponse)
      BoardInfoResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    static {
      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
        /* major= */ 4,
        /* minor= */ 28,
        /* patch= */ 2,
        /* suffix= */ "",
        BoardInfoResponse.class.getName());
    }
    // Use BoardInfoResponse.newBuilder() to construct.
    private BoardInfoResponse(com.google.protobuf.GeneratedMessage.Builder builder) {
      super(builder);
    }
    private BoardInfoResponse() {
      status_ = 0;
      detail_ = "";
      make_ = "";
      model_ = "";
      header_ = java.util.Collections.emptyList();
      osId_ = "";
      osVersion_ = "";
    }

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_BoardInfoResponse_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_BoardInfoResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.diozero.remote.message.protobuf.Board.BoardInfoResponse.class, com.diozero.remote.message.protobuf.Board.BoardInfoResponse.Builder.class);
    }

    public static final int STATUS_FIELD_NUMBER = 1;
    private int status_ = 0;
    /**
     * .diozero.Status status = 1;
     * @return The enum numeric value on the wire for status.
     */
    @java.lang.Override public int getStatusValue() {
      return status_;
    }
    /**
     * .diozero.Status status = 1;
     * @return The status.
     */
    @java.lang.Override public com.diozero.remote.message.protobuf.Status getStatus() {
      com.diozero.remote.message.protobuf.Status result = com.diozero.remote.message.protobuf.Status.forNumber(status_);
      return result == null ? com.diozero.remote.message.protobuf.Status.UNRECOGNIZED : result;
    }

    public static final int DETAIL_FIELD_NUMBER = 2;
    @SuppressWarnings("serial")
    private volatile java.lang.Object detail_ = "";
    /**
     * string detail = 2;
     * @return The detail.
     */
    @java.lang.Override
    public java.lang.String getDetail() {
      java.lang.Object ref = detail_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        detail_ = s;
        return s;
      }
    }
    /**
     * string detail = 2;
     * @return The bytes for detail.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getDetailBytes() {
      java.lang.Object ref = detail_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        detail_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MAKE_FIELD_NUMBER = 3;
    @SuppressWarnings("serial")
    private volatile java.lang.Object make_ = "";
    /**
     * string make = 3;
     * @return The make.
     */
    @java.lang.Override
    public java.lang.String getMake() {
      java.lang.Object ref = make_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        make_ = s;
        return s;
      }
    }
    /**
     * string make = 3;
     * @return The bytes for make.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getMakeBytes() {
      java.lang.Object ref = make_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        make_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MODEL_FIELD_NUMBER = 4;
    @SuppressWarnings("serial")
    private volatile java.lang.Object model_ = "";
    /**
     * string model = 4;
     * @return The model.
     */
    @java.lang.Override
    public java.lang.String getModel() {
      java.lang.Object ref = model_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        model_ = s;
        return s;
      }
    }
    /**
     * string model = 4;
     * @return The bytes for model.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getModelBytes() {
      java.lang.Object ref = model_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        model_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MEMORY_FIELD_NUMBER = 5;
    private int memory_ = 0;
    /**
     * int32 memory = 5;
     * @return The memory.
     */
    @java.lang.Override
    public int getMemory() {
      return memory_;
    }

    public static final int HEADER_FIELD_NUMBER = 6;
    @SuppressWarnings("serial")
    private java.util.List header_;
    /**
     * repeated .diozero.Board.HeaderInfo header = 6;
     */
    @java.lang.Override
    public java.util.List getHeaderList() {
      return header_;
    }
    /**
     * repeated .diozero.Board.HeaderInfo header = 6;
     */
    @java.lang.Override
    public java.util.List 
        getHeaderOrBuilderList() {
      return header_;
    }
    /**
     * repeated .diozero.Board.HeaderInfo header = 6;
     */
    @java.lang.Override
    public int getHeaderCount() {
      return header_.size();
    }
    /**
     * repeated .diozero.Board.HeaderInfo header = 6;
     */
    @java.lang.Override
    public com.diozero.remote.message.protobuf.Board.HeaderInfo getHeader(int index) {
      return header_.get(index);
    }
    /**
     * repeated .diozero.Board.HeaderInfo header = 6;
     */
    @java.lang.Override
    public com.diozero.remote.message.protobuf.Board.HeaderInfoOrBuilder getHeaderOrBuilder(
        int index) {
      return header_.get(index);
    }

    public static final int BOARDPWMFREQUENCY_FIELD_NUMBER = 7;
    private int boardPwmFrequency_ = 0;
    /**
     * int32 boardPwmFrequency = 7;
     * @return The boardPwmFrequency.
     */
    @java.lang.Override
    public int getBoardPwmFrequency() {
      return boardPwmFrequency_;
    }

    public static final int BOARDSERVOFREQUENCY_FIELD_NUMBER = 8;
    private int boardServoFrequency_ = 0;
    /**
     * int32 boardServoFrequency = 8;
     * @return The boardServoFrequency.
     */
    @java.lang.Override
    public int getBoardServoFrequency() {
      return boardServoFrequency_;
    }

    public static final int SPIBUFFERSIZE_FIELD_NUMBER = 9;
    private int spiBufferSize_ = 0;
    /**
     * int32 spiBufferSize = 9;
     * @return The spiBufferSize.
     */
    @java.lang.Override
    public int getSpiBufferSize() {
      return spiBufferSize_;
    }

    public static final int OSID_FIELD_NUMBER = 10;
    @SuppressWarnings("serial")
    private volatile java.lang.Object osId_ = "";
    /**
     * string osId = 10;
     * @return The osId.
     */
    @java.lang.Override
    public java.lang.String getOsId() {
      java.lang.Object ref = osId_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        osId_ = s;
        return s;
      }
    }
    /**
     * string osId = 10;
     * @return The bytes for osId.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getOsIdBytes() {
      java.lang.Object ref = osId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        osId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int OSVERSION_FIELD_NUMBER = 11;
    @SuppressWarnings("serial")
    private volatile java.lang.Object osVersion_ = "";
    /**
     * string osVersion = 11;
     * @return The osVersion.
     */
    @java.lang.Override
    public java.lang.String getOsVersion() {
      java.lang.Object ref = osVersion_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        osVersion_ = s;
        return s;
      }
    }
    /**
     * string osVersion = 11;
     * @return The bytes for osVersion.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getOsVersionBytes() {
      java.lang.Object ref = osVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        osVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int BIASCONTROLSUPPORTED_FIELD_NUMBER = 12;
    private boolean biasControlSupported_ = false;
    /**
     * bool biasControlSupported = 12;
     * @return The biasControlSupported.
     */
    @java.lang.Override
    public boolean getBiasControlSupported() {
      return biasControlSupported_;
    }

    public static final int RECOGNISED_FIELD_NUMBER = 13;
    private boolean recognised_ = false;
    /**
     * bool recognised = 13;
     * @return The recognised.
     */
    @java.lang.Override
    public boolean getRecognised() {
      return recognised_;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (status_ != com.diozero.remote.message.protobuf.Status.OK.getNumber()) {
        output.writeEnum(1, status_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(detail_)) {
        com.google.protobuf.GeneratedMessage.writeString(output, 2, detail_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(make_)) {
        com.google.protobuf.GeneratedMessage.writeString(output, 3, make_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(model_)) {
        com.google.protobuf.GeneratedMessage.writeString(output, 4, model_);
      }
      if (memory_ != 0) {
        output.writeInt32(5, memory_);
      }
      for (int i = 0; i < header_.size(); i++) {
        output.writeMessage(6, header_.get(i));
      }
      if (boardPwmFrequency_ != 0) {
        output.writeInt32(7, boardPwmFrequency_);
      }
      if (boardServoFrequency_ != 0) {
        output.writeInt32(8, boardServoFrequency_);
      }
      if (spiBufferSize_ != 0) {
        output.writeInt32(9, spiBufferSize_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(osId_)) {
        com.google.protobuf.GeneratedMessage.writeString(output, 10, osId_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(osVersion_)) {
        com.google.protobuf.GeneratedMessage.writeString(output, 11, osVersion_);
      }
      if (biasControlSupported_ != false) {
        output.writeBool(12, biasControlSupported_);
      }
      if (recognised_ != false) {
        output.writeBool(13, recognised_);
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (status_ != com.diozero.remote.message.protobuf.Status.OK.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, status_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(detail_)) {
        size += com.google.protobuf.GeneratedMessage.computeStringSize(2, detail_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(make_)) {
        size += com.google.protobuf.GeneratedMessage.computeStringSize(3, make_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(model_)) {
        size += com.google.protobuf.GeneratedMessage.computeStringSize(4, model_);
      }
      if (memory_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(5, memory_);
      }
      for (int i = 0; i < header_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(6, header_.get(i));
      }
      if (boardPwmFrequency_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(7, boardPwmFrequency_);
      }
      if (boardServoFrequency_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(8, boardServoFrequency_);
      }
      if (spiBufferSize_ != 0) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt32Size(9, spiBufferSize_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(osId_)) {
        size += com.google.protobuf.GeneratedMessage.computeStringSize(10, osId_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(osVersion_)) {
        size += com.google.protobuf.GeneratedMessage.computeStringSize(11, osVersion_);
      }
      if (biasControlSupported_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(12, biasControlSupported_);
      }
      if (recognised_ != false) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(13, recognised_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.diozero.remote.message.protobuf.Board.BoardInfoResponse)) {
        return super.equals(obj);
      }
      com.diozero.remote.message.protobuf.Board.BoardInfoResponse other = (com.diozero.remote.message.protobuf.Board.BoardInfoResponse) obj;

      if (status_ != other.status_) return false;
      if (!getDetail()
          .equals(other.getDetail())) return false;
      if (!getMake()
          .equals(other.getMake())) return false;
      if (!getModel()
          .equals(other.getModel())) return false;
      if (getMemory()
          != other.getMemory()) return false;
      if (!getHeaderList()
          .equals(other.getHeaderList())) return false;
      if (getBoardPwmFrequency()
          != other.getBoardPwmFrequency()) return false;
      if (getBoardServoFrequency()
          != other.getBoardServoFrequency()) return false;
      if (getSpiBufferSize()
          != other.getSpiBufferSize()) return false;
      if (!getOsId()
          .equals(other.getOsId())) return false;
      if (!getOsVersion()
          .equals(other.getOsVersion())) return false;
      if (getBiasControlSupported()
          != other.getBiasControlSupported()) return false;
      if (getRecognised()
          != other.getRecognised()) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + STATUS_FIELD_NUMBER;
      hash = (53 * hash) + status_;
      hash = (37 * hash) + DETAIL_FIELD_NUMBER;
      hash = (53 * hash) + getDetail().hashCode();
      hash = (37 * hash) + MAKE_FIELD_NUMBER;
      hash = (53 * hash) + getMake().hashCode();
      hash = (37 * hash) + MODEL_FIELD_NUMBER;
      hash = (53 * hash) + getModel().hashCode();
      hash = (37 * hash) + MEMORY_FIELD_NUMBER;
      hash = (53 * hash) + getMemory();
      if (getHeaderCount() > 0) {
        hash = (37 * hash) + HEADER_FIELD_NUMBER;
        hash = (53 * hash) + getHeaderList().hashCode();
      }
      hash = (37 * hash) + BOARDPWMFREQUENCY_FIELD_NUMBER;
      hash = (53 * hash) + getBoardPwmFrequency();
      hash = (37 * hash) + BOARDSERVOFREQUENCY_FIELD_NUMBER;
      hash = (53 * hash) + getBoardServoFrequency();
      hash = (37 * hash) + SPIBUFFERSIZE_FIELD_NUMBER;
      hash = (53 * hash) + getSpiBufferSize();
      hash = (37 * hash) + OSID_FIELD_NUMBER;
      hash = (53 * hash) + getOsId().hashCode();
      hash = (37 * hash) + OSVERSION_FIELD_NUMBER;
      hash = (53 * hash) + getOsVersion().hashCode();
      hash = (37 * hash) + BIASCONTROLSUPPORTED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getBiasControlSupported());
      hash = (37 * hash) + RECOGNISED_FIELD_NUMBER;
      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
          getRecognised());
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.diozero.remote.message.protobuf.Board.BoardInfoResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.diozero.remote.message.protobuf.Board.BoardInfoResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.diozero.remote.message.protobuf.Board.BoardInfoResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.diozero.remote.message.protobuf.Board.BoardInfoResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.diozero.remote.message.protobuf.Board.BoardInfoResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.diozero.remote.message.protobuf.Board.BoardInfoResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.diozero.remote.message.protobuf.Board.BoardInfoResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input);
    }
    public static com.diozero.remote.message.protobuf.Board.BoardInfoResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public static com.diozero.remote.message.protobuf.Board.BoardInfoResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static com.diozero.remote.message.protobuf.Board.BoardInfoResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.diozero.remote.message.protobuf.Board.BoardInfoResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input);
    }
    public static com.diozero.remote.message.protobuf.Board.BoardInfoResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.diozero.remote.message.protobuf.Board.BoardInfoResponse prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code diozero.Board.BoardInfoResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder implements
        // @@protoc_insertion_point(builder_implements:diozero.Board.BoardInfoResponse)
        com.diozero.remote.message.protobuf.Board.BoardInfoResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_BoardInfoResponse_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_BoardInfoResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.diozero.remote.message.protobuf.Board.BoardInfoResponse.class, com.diozero.remote.message.protobuf.Board.BoardInfoResponse.Builder.class);
      }

      // Construct using com.diozero.remote.message.protobuf.Board.BoardInfoResponse.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        status_ = 0;
        detail_ = "";
        make_ = "";
        model_ = "";
        memory_ = 0;
        if (headerBuilder_ == null) {
          header_ = java.util.Collections.emptyList();
        } else {
          header_ = null;
          headerBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000020);
        boardPwmFrequency_ = 0;
        boardServoFrequency_ = 0;
        spiBufferSize_ = 0;
        osId_ = "";
        osVersion_ = "";
        biasControlSupported_ = false;
        recognised_ = false;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_BoardInfoResponse_descriptor;
      }

      @java.lang.Override
      public com.diozero.remote.message.protobuf.Board.BoardInfoResponse getDefaultInstanceForType() {
        return com.diozero.remote.message.protobuf.Board.BoardInfoResponse.getDefaultInstance();
      }

      @java.lang.Override
      public com.diozero.remote.message.protobuf.Board.BoardInfoResponse build() {
        com.diozero.remote.message.protobuf.Board.BoardInfoResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.diozero.remote.message.protobuf.Board.BoardInfoResponse buildPartial() {
        com.diozero.remote.message.protobuf.Board.BoardInfoResponse result = new com.diozero.remote.message.protobuf.Board.BoardInfoResponse(this);
        buildPartialRepeatedFields(result);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartialRepeatedFields(com.diozero.remote.message.protobuf.Board.BoardInfoResponse result) {
        if (headerBuilder_ == null) {
          if (((bitField0_ & 0x00000020) != 0)) {
            header_ = java.util.Collections.unmodifiableList(header_);
            bitField0_ = (bitField0_ & ~0x00000020);
          }
          result.header_ = header_;
        } else {
          result.header_ = headerBuilder_.build();
        }
      }

      private void buildPartial0(com.diozero.remote.message.protobuf.Board.BoardInfoResponse result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.status_ = status_;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.detail_ = detail_;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.make_ = make_;
        }
        if (((from_bitField0_ & 0x00000008) != 0)) {
          result.model_ = model_;
        }
        if (((from_bitField0_ & 0x00000010) != 0)) {
          result.memory_ = memory_;
        }
        if (((from_bitField0_ & 0x00000040) != 0)) {
          result.boardPwmFrequency_ = boardPwmFrequency_;
        }
        if (((from_bitField0_ & 0x00000080) != 0)) {
          result.boardServoFrequency_ = boardServoFrequency_;
        }
        if (((from_bitField0_ & 0x00000100) != 0)) {
          result.spiBufferSize_ = spiBufferSize_;
        }
        if (((from_bitField0_ & 0x00000200) != 0)) {
          result.osId_ = osId_;
        }
        if (((from_bitField0_ & 0x00000400) != 0)) {
          result.osVersion_ = osVersion_;
        }
        if (((from_bitField0_ & 0x00000800) != 0)) {
          result.biasControlSupported_ = biasControlSupported_;
        }
        if (((from_bitField0_ & 0x00001000) != 0)) {
          result.recognised_ = recognised_;
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.diozero.remote.message.protobuf.Board.BoardInfoResponse) {
          return mergeFrom((com.diozero.remote.message.protobuf.Board.BoardInfoResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.diozero.remote.message.protobuf.Board.BoardInfoResponse other) {
        if (other == com.diozero.remote.message.protobuf.Board.BoardInfoResponse.getDefaultInstance()) return this;
        if (other.status_ != 0) {
          setStatusValue(other.getStatusValue());
        }
        if (!other.getDetail().isEmpty()) {
          detail_ = other.detail_;
          bitField0_ |= 0x00000002;
          onChanged();
        }
        if (!other.getMake().isEmpty()) {
          make_ = other.make_;
          bitField0_ |= 0x00000004;
          onChanged();
        }
        if (!other.getModel().isEmpty()) {
          model_ = other.model_;
          bitField0_ |= 0x00000008;
          onChanged();
        }
        if (other.getMemory() != 0) {
          setMemory(other.getMemory());
        }
        if (headerBuilder_ == null) {
          if (!other.header_.isEmpty()) {
            if (header_.isEmpty()) {
              header_ = other.header_;
              bitField0_ = (bitField0_ & ~0x00000020);
            } else {
              ensureHeaderIsMutable();
              header_.addAll(other.header_);
            }
            onChanged();
          }
        } else {
          if (!other.header_.isEmpty()) {
            if (headerBuilder_.isEmpty()) {
              headerBuilder_.dispose();
              headerBuilder_ = null;
              header_ = other.header_;
              bitField0_ = (bitField0_ & ~0x00000020);
              headerBuilder_ = 
                com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ?
                   getHeaderFieldBuilder() : null;
            } else {
              headerBuilder_.addAllMessages(other.header_);
            }
          }
        }
        if (other.getBoardPwmFrequency() != 0) {
          setBoardPwmFrequency(other.getBoardPwmFrequency());
        }
        if (other.getBoardServoFrequency() != 0) {
          setBoardServoFrequency(other.getBoardServoFrequency());
        }
        if (other.getSpiBufferSize() != 0) {
          setSpiBufferSize(other.getSpiBufferSize());
        }
        if (!other.getOsId().isEmpty()) {
          osId_ = other.osId_;
          bitField0_ |= 0x00000200;
          onChanged();
        }
        if (!other.getOsVersion().isEmpty()) {
          osVersion_ = other.osVersion_;
          bitField0_ |= 0x00000400;
          onChanged();
        }
        if (other.getBiasControlSupported() != false) {
          setBiasControlSupported(other.getBiasControlSupported());
        }
        if (other.getRecognised() != false) {
          setRecognised(other.getRecognised());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8: {
                status_ = input.readEnum();
                bitField0_ |= 0x00000001;
                break;
              } // case 8
              case 18: {
                detail_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000002;
                break;
              } // case 18
              case 26: {
                make_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000004;
                break;
              } // case 26
              case 34: {
                model_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000008;
                break;
              } // case 34
              case 40: {
                memory_ = input.readInt32();
                bitField0_ |= 0x00000010;
                break;
              } // case 40
              case 50: {
                com.diozero.remote.message.protobuf.Board.HeaderInfo m =
                    input.readMessage(
                        com.diozero.remote.message.protobuf.Board.HeaderInfo.parser(),
                        extensionRegistry);
                if (headerBuilder_ == null) {
                  ensureHeaderIsMutable();
                  header_.add(m);
                } else {
                  headerBuilder_.addMessage(m);
                }
                break;
              } // case 50
              case 56: {
                boardPwmFrequency_ = input.readInt32();
                bitField0_ |= 0x00000040;
                break;
              } // case 56
              case 64: {
                boardServoFrequency_ = input.readInt32();
                bitField0_ |= 0x00000080;
                break;
              } // case 64
              case 72: {
                spiBufferSize_ = input.readInt32();
                bitField0_ |= 0x00000100;
                break;
              } // case 72
              case 82: {
                osId_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000200;
                break;
              } // case 82
              case 90: {
                osVersion_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000400;
                break;
              } // case 90
              case 96: {
                biasControlSupported_ = input.readBool();
                bitField0_ |= 0x00000800;
                break;
              } // case 96
              case 104: {
                recognised_ = input.readBool();
                bitField0_ |= 0x00001000;
                break;
              } // case 104
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private int status_ = 0;
      /**
       * .diozero.Status status = 1;
       * @return The enum numeric value on the wire for status.
       */
      @java.lang.Override public int getStatusValue() {
        return status_;
      }
      /**
       * .diozero.Status status = 1;
       * @param value The enum numeric value on the wire for status to set.
       * @return This builder for chaining.
       */
      public Builder setStatusValue(int value) {
        status_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * .diozero.Status status = 1;
       * @return The status.
       */
      @java.lang.Override
      public com.diozero.remote.message.protobuf.Status getStatus() {
        com.diozero.remote.message.protobuf.Status result = com.diozero.remote.message.protobuf.Status.forNumber(status_);
        return result == null ? com.diozero.remote.message.protobuf.Status.UNRECOGNIZED : result;
      }
      /**
       * .diozero.Status status = 1;
       * @param value The status to set.
       * @return This builder for chaining.
       */
      public Builder setStatus(com.diozero.remote.message.protobuf.Status value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        status_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * .diozero.Status status = 1;
       * @return This builder for chaining.
       */
      public Builder clearStatus() {
        bitField0_ = (bitField0_ & ~0x00000001);
        status_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object detail_ = "";
      /**
       * string detail = 2;
       * @return The detail.
       */
      public java.lang.String getDetail() {
        java.lang.Object ref = detail_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          detail_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * string detail = 2;
       * @return The bytes for detail.
       */
      public com.google.protobuf.ByteString
          getDetailBytes() {
        java.lang.Object ref = detail_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          detail_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * string detail = 2;
       * @param value The detail to set.
       * @return This builder for chaining.
       */
      public Builder setDetail(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        detail_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       * string detail = 2;
       * @return This builder for chaining.
       */
      public Builder clearDetail() {
        detail_ = getDefaultInstance().getDetail();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * string detail = 2;
       * @param value The bytes for detail to set.
       * @return This builder for chaining.
       */
      public Builder setDetailBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        detail_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }

      private java.lang.Object make_ = "";
      /**
       * string make = 3;
       * @return The make.
       */
      public java.lang.String getMake() {
        java.lang.Object ref = make_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          make_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * string make = 3;
       * @return The bytes for make.
       */
      public com.google.protobuf.ByteString
          getMakeBytes() {
        java.lang.Object ref = make_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          make_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * string make = 3;
       * @param value The make to set.
       * @return This builder for chaining.
       */
      public Builder setMake(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        make_ = value;
        bitField0_ |= 0x00000004;
        onChanged();
        return this;
      }
      /**
       * string make = 3;
       * @return This builder for chaining.
       */
      public Builder clearMake() {
        make_ = getDefaultInstance().getMake();
        bitField0_ = (bitField0_ & ~0x00000004);
        onChanged();
        return this;
      }
      /**
       * string make = 3;
       * @param value The bytes for make to set.
       * @return This builder for chaining.
       */
      public Builder setMakeBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        make_ = value;
        bitField0_ |= 0x00000004;
        onChanged();
        return this;
      }

      private java.lang.Object model_ = "";
      /**
       * string model = 4;
       * @return The model.
       */
      public java.lang.String getModel() {
        java.lang.Object ref = model_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          model_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * string model = 4;
       * @return The bytes for model.
       */
      public com.google.protobuf.ByteString
          getModelBytes() {
        java.lang.Object ref = model_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          model_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * string model = 4;
       * @param value The model to set.
       * @return This builder for chaining.
       */
      public Builder setModel(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        model_ = value;
        bitField0_ |= 0x00000008;
        onChanged();
        return this;
      }
      /**
       * string model = 4;
       * @return This builder for chaining.
       */
      public Builder clearModel() {
        model_ = getDefaultInstance().getModel();
        bitField0_ = (bitField0_ & ~0x00000008);
        onChanged();
        return this;
      }
      /**
       * string model = 4;
       * @param value The bytes for model to set.
       * @return This builder for chaining.
       */
      public Builder setModelBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        model_ = value;
        bitField0_ |= 0x00000008;
        onChanged();
        return this;
      }

      private int memory_ ;
      /**
       * int32 memory = 5;
       * @return The memory.
       */
      @java.lang.Override
      public int getMemory() {
        return memory_;
      }
      /**
       * int32 memory = 5;
       * @param value The memory to set.
       * @return This builder for chaining.
       */
      public Builder setMemory(int value) {

        memory_ = value;
        bitField0_ |= 0x00000010;
        onChanged();
        return this;
      }
      /**
       * int32 memory = 5;
       * @return This builder for chaining.
       */
      public Builder clearMemory() {
        bitField0_ = (bitField0_ & ~0x00000010);
        memory_ = 0;
        onChanged();
        return this;
      }

      private java.util.List header_ =
        java.util.Collections.emptyList();
      private void ensureHeaderIsMutable() {
        if (!((bitField0_ & 0x00000020) != 0)) {
          header_ = new java.util.ArrayList(header_);
          bitField0_ |= 0x00000020;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilder<
          com.diozero.remote.message.protobuf.Board.HeaderInfo, com.diozero.remote.message.protobuf.Board.HeaderInfo.Builder, com.diozero.remote.message.protobuf.Board.HeaderInfoOrBuilder> headerBuilder_;

      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public java.util.List getHeaderList() {
        if (headerBuilder_ == null) {
          return java.util.Collections.unmodifiableList(header_);
        } else {
          return headerBuilder_.getMessageList();
        }
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public int getHeaderCount() {
        if (headerBuilder_ == null) {
          return header_.size();
        } else {
          return headerBuilder_.getCount();
        }
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public com.diozero.remote.message.protobuf.Board.HeaderInfo getHeader(int index) {
        if (headerBuilder_ == null) {
          return header_.get(index);
        } else {
          return headerBuilder_.getMessage(index);
        }
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public Builder setHeader(
          int index, com.diozero.remote.message.protobuf.Board.HeaderInfo value) {
        if (headerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureHeaderIsMutable();
          header_.set(index, value);
          onChanged();
        } else {
          headerBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public Builder setHeader(
          int index, com.diozero.remote.message.protobuf.Board.HeaderInfo.Builder builderForValue) {
        if (headerBuilder_ == null) {
          ensureHeaderIsMutable();
          header_.set(index, builderForValue.build());
          onChanged();
        } else {
          headerBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public Builder addHeader(com.diozero.remote.message.protobuf.Board.HeaderInfo value) {
        if (headerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureHeaderIsMutable();
          header_.add(value);
          onChanged();
        } else {
          headerBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public Builder addHeader(
          int index, com.diozero.remote.message.protobuf.Board.HeaderInfo value) {
        if (headerBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureHeaderIsMutable();
          header_.add(index, value);
          onChanged();
        } else {
          headerBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public Builder addHeader(
          com.diozero.remote.message.protobuf.Board.HeaderInfo.Builder builderForValue) {
        if (headerBuilder_ == null) {
          ensureHeaderIsMutable();
          header_.add(builderForValue.build());
          onChanged();
        } else {
          headerBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public Builder addHeader(
          int index, com.diozero.remote.message.protobuf.Board.HeaderInfo.Builder builderForValue) {
        if (headerBuilder_ == null) {
          ensureHeaderIsMutable();
          header_.add(index, builderForValue.build());
          onChanged();
        } else {
          headerBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public Builder addAllHeader(
          java.lang.Iterable values) {
        if (headerBuilder_ == null) {
          ensureHeaderIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, header_);
          onChanged();
        } else {
          headerBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public Builder clearHeader() {
        if (headerBuilder_ == null) {
          header_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000020);
          onChanged();
        } else {
          headerBuilder_.clear();
        }
        return this;
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public Builder removeHeader(int index) {
        if (headerBuilder_ == null) {
          ensureHeaderIsMutable();
          header_.remove(index);
          onChanged();
        } else {
          headerBuilder_.remove(index);
        }
        return this;
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public com.diozero.remote.message.protobuf.Board.HeaderInfo.Builder getHeaderBuilder(
          int index) {
        return getHeaderFieldBuilder().getBuilder(index);
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public com.diozero.remote.message.protobuf.Board.HeaderInfoOrBuilder getHeaderOrBuilder(
          int index) {
        if (headerBuilder_ == null) {
          return header_.get(index);  } else {
          return headerBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public java.util.List 
           getHeaderOrBuilderList() {
        if (headerBuilder_ != null) {
          return headerBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(header_);
        }
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public com.diozero.remote.message.protobuf.Board.HeaderInfo.Builder addHeaderBuilder() {
        return getHeaderFieldBuilder().addBuilder(
            com.diozero.remote.message.protobuf.Board.HeaderInfo.getDefaultInstance());
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public com.diozero.remote.message.protobuf.Board.HeaderInfo.Builder addHeaderBuilder(
          int index) {
        return getHeaderFieldBuilder().addBuilder(
            index, com.diozero.remote.message.protobuf.Board.HeaderInfo.getDefaultInstance());
      }
      /**
       * repeated .diozero.Board.HeaderInfo header = 6;
       */
      public java.util.List 
           getHeaderBuilderList() {
        return getHeaderFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilder<
          com.diozero.remote.message.protobuf.Board.HeaderInfo, com.diozero.remote.message.protobuf.Board.HeaderInfo.Builder, com.diozero.remote.message.protobuf.Board.HeaderInfoOrBuilder> 
          getHeaderFieldBuilder() {
        if (headerBuilder_ == null) {
          headerBuilder_ = new com.google.protobuf.RepeatedFieldBuilder<
              com.diozero.remote.message.protobuf.Board.HeaderInfo, com.diozero.remote.message.protobuf.Board.HeaderInfo.Builder, com.diozero.remote.message.protobuf.Board.HeaderInfoOrBuilder>(
                  header_,
                  ((bitField0_ & 0x00000020) != 0),
                  getParentForChildren(),
                  isClean());
          header_ = null;
        }
        return headerBuilder_;
      }

      private int boardPwmFrequency_ ;
      /**
       * int32 boardPwmFrequency = 7;
       * @return The boardPwmFrequency.
       */
      @java.lang.Override
      public int getBoardPwmFrequency() {
        return boardPwmFrequency_;
      }
      /**
       * int32 boardPwmFrequency = 7;
       * @param value The boardPwmFrequency to set.
       * @return This builder for chaining.
       */
      public Builder setBoardPwmFrequency(int value) {

        boardPwmFrequency_ = value;
        bitField0_ |= 0x00000040;
        onChanged();
        return this;
      }
      /**
       * int32 boardPwmFrequency = 7;
       * @return This builder for chaining.
       */
      public Builder clearBoardPwmFrequency() {
        bitField0_ = (bitField0_ & ~0x00000040);
        boardPwmFrequency_ = 0;
        onChanged();
        return this;
      }

      private int boardServoFrequency_ ;
      /**
       * int32 boardServoFrequency = 8;
       * @return The boardServoFrequency.
       */
      @java.lang.Override
      public int getBoardServoFrequency() {
        return boardServoFrequency_;
      }
      /**
       * int32 boardServoFrequency = 8;
       * @param value The boardServoFrequency to set.
       * @return This builder for chaining.
       */
      public Builder setBoardServoFrequency(int value) {

        boardServoFrequency_ = value;
        bitField0_ |= 0x00000080;
        onChanged();
        return this;
      }
      /**
       * int32 boardServoFrequency = 8;
       * @return This builder for chaining.
       */
      public Builder clearBoardServoFrequency() {
        bitField0_ = (bitField0_ & ~0x00000080);
        boardServoFrequency_ = 0;
        onChanged();
        return this;
      }

      private int spiBufferSize_ ;
      /**
       * int32 spiBufferSize = 9;
       * @return The spiBufferSize.
       */
      @java.lang.Override
      public int getSpiBufferSize() {
        return spiBufferSize_;
      }
      /**
       * int32 spiBufferSize = 9;
       * @param value The spiBufferSize to set.
       * @return This builder for chaining.
       */
      public Builder setSpiBufferSize(int value) {

        spiBufferSize_ = value;
        bitField0_ |= 0x00000100;
        onChanged();
        return this;
      }
      /**
       * int32 spiBufferSize = 9;
       * @return This builder for chaining.
       */
      public Builder clearSpiBufferSize() {
        bitField0_ = (bitField0_ & ~0x00000100);
        spiBufferSize_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object osId_ = "";
      /**
       * string osId = 10;
       * @return The osId.
       */
      public java.lang.String getOsId() {
        java.lang.Object ref = osId_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          osId_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * string osId = 10;
       * @return The bytes for osId.
       */
      public com.google.protobuf.ByteString
          getOsIdBytes() {
        java.lang.Object ref = osId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          osId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * string osId = 10;
       * @param value The osId to set.
       * @return This builder for chaining.
       */
      public Builder setOsId(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        osId_ = value;
        bitField0_ |= 0x00000200;
        onChanged();
        return this;
      }
      /**
       * string osId = 10;
       * @return This builder for chaining.
       */
      public Builder clearOsId() {
        osId_ = getDefaultInstance().getOsId();
        bitField0_ = (bitField0_ & ~0x00000200);
        onChanged();
        return this;
      }
      /**
       * string osId = 10;
       * @param value The bytes for osId to set.
       * @return This builder for chaining.
       */
      public Builder setOsIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        osId_ = value;
        bitField0_ |= 0x00000200;
        onChanged();
        return this;
      }

      private java.lang.Object osVersion_ = "";
      /**
       * string osVersion = 11;
       * @return The osVersion.
       */
      public java.lang.String getOsVersion() {
        java.lang.Object ref = osVersion_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          osVersion_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * string osVersion = 11;
       * @return The bytes for osVersion.
       */
      public com.google.protobuf.ByteString
          getOsVersionBytes() {
        java.lang.Object ref = osVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          osVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * string osVersion = 11;
       * @param value The osVersion to set.
       * @return This builder for chaining.
       */
      public Builder setOsVersion(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        osVersion_ = value;
        bitField0_ |= 0x00000400;
        onChanged();
        return this;
      }
      /**
       * string osVersion = 11;
       * @return This builder for chaining.
       */
      public Builder clearOsVersion() {
        osVersion_ = getDefaultInstance().getOsVersion();
        bitField0_ = (bitField0_ & ~0x00000400);
        onChanged();
        return this;
      }
      /**
       * string osVersion = 11;
       * @param value The bytes for osVersion to set.
       * @return This builder for chaining.
       */
      public Builder setOsVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        osVersion_ = value;
        bitField0_ |= 0x00000400;
        onChanged();
        return this;
      }

      private boolean biasControlSupported_ ;
      /**
       * bool biasControlSupported = 12;
       * @return The biasControlSupported.
       */
      @java.lang.Override
      public boolean getBiasControlSupported() {
        return biasControlSupported_;
      }
      /**
       * bool biasControlSupported = 12;
       * @param value The biasControlSupported to set.
       * @return This builder for chaining.
       */
      public Builder setBiasControlSupported(boolean value) {

        biasControlSupported_ = value;
        bitField0_ |= 0x00000800;
        onChanged();
        return this;
      }
      /**
       * bool biasControlSupported = 12;
       * @return This builder for chaining.
       */
      public Builder clearBiasControlSupported() {
        bitField0_ = (bitField0_ & ~0x00000800);
        biasControlSupported_ = false;
        onChanged();
        return this;
      }

      private boolean recognised_ ;
      /**
       * bool recognised = 13;
       * @return The recognised.
       */
      @java.lang.Override
      public boolean getRecognised() {
        return recognised_;
      }
      /**
       * bool recognised = 13;
       * @param value The recognised to set.
       * @return This builder for chaining.
       */
      public Builder setRecognised(boolean value) {

        recognised_ = value;
        bitField0_ |= 0x00001000;
        onChanged();
        return this;
      }
      /**
       * bool recognised = 13;
       * @return This builder for chaining.
       */
      public Builder clearRecognised() {
        bitField0_ = (bitField0_ & ~0x00001000);
        recognised_ = false;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:diozero.Board.BoardInfoResponse)
    }

    // @@protoc_insertion_point(class_scope:diozero.Board.BoardInfoResponse)
    private static final com.diozero.remote.message.protobuf.Board.BoardInfoResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.diozero.remote.message.protobuf.Board.BoardInfoResponse();
    }

    public static com.diozero.remote.message.protobuf.Board.BoardInfoResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public BoardInfoResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.diozero.remote.message.protobuf.Board.BoardInfoResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GpioModeResponseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:diozero.Board.GpioModeResponse)
      com.google.protobuf.MessageOrBuilder {

    /**
     * .diozero.Status status = 1;
     * @return The enum numeric value on the wire for status.
     */
    int getStatusValue();
    /**
     * .diozero.Status status = 1;
     * @return The status.
     */
    com.diozero.remote.message.protobuf.Status getStatus();

    /**
     * string detail = 2;
     * @return The detail.
     */
    java.lang.String getDetail();
    /**
     * string detail = 2;
     * @return The bytes for detail.
     */
    com.google.protobuf.ByteString
        getDetailBytes();

    /**
     * .diozero.Board.GpioMode mode = 3;
     * @return The enum numeric value on the wire for mode.
     */
    int getModeValue();
    /**
     * .diozero.Board.GpioMode mode = 3;
     * @return The mode.
     */
    com.diozero.remote.message.protobuf.Board.GpioMode getMode();
  }
  /**
   * Protobuf type {@code diozero.Board.GpioModeResponse}
   */
  public static final class GpioModeResponse extends
      com.google.protobuf.GeneratedMessage implements
      // @@protoc_insertion_point(message_implements:diozero.Board.GpioModeResponse)
      GpioModeResponseOrBuilder {
  private static final long serialVersionUID = 0L;
    static {
      com.google.protobuf.RuntimeVersion.validateProtobufGencodeVersion(
        com.google.protobuf.RuntimeVersion.RuntimeDomain.PUBLIC,
        /* major= */ 4,
        /* minor= */ 28,
        /* patch= */ 2,
        /* suffix= */ "",
        GpioModeResponse.class.getName());
    }
    // Use GpioModeResponse.newBuilder() to construct.
    private GpioModeResponse(com.google.protobuf.GeneratedMessage.Builder builder) {
      super(builder);
    }
    private GpioModeResponse() {
      status_ = 0;
      detail_ = "";
      mode_ = 0;
    }

    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_GpioModeResponse_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_GpioModeResponse_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.diozero.remote.message.protobuf.Board.GpioModeResponse.class, com.diozero.remote.message.protobuf.Board.GpioModeResponse.Builder.class);
    }

    public static final int STATUS_FIELD_NUMBER = 1;
    private int status_ = 0;
    /**
     * .diozero.Status status = 1;
     * @return The enum numeric value on the wire for status.
     */
    @java.lang.Override public int getStatusValue() {
      return status_;
    }
    /**
     * .diozero.Status status = 1;
     * @return The status.
     */
    @java.lang.Override public com.diozero.remote.message.protobuf.Status getStatus() {
      com.diozero.remote.message.protobuf.Status result = com.diozero.remote.message.protobuf.Status.forNumber(status_);
      return result == null ? com.diozero.remote.message.protobuf.Status.UNRECOGNIZED : result;
    }

    public static final int DETAIL_FIELD_NUMBER = 2;
    @SuppressWarnings("serial")
    private volatile java.lang.Object detail_ = "";
    /**
     * string detail = 2;
     * @return The detail.
     */
    @java.lang.Override
    public java.lang.String getDetail() {
      java.lang.Object ref = detail_;
      if (ref instanceof java.lang.String) {
        return (java.lang.String) ref;
      } else {
        com.google.protobuf.ByteString bs = 
            (com.google.protobuf.ByteString) ref;
        java.lang.String s = bs.toStringUtf8();
        detail_ = s;
        return s;
      }
    }
    /**
     * string detail = 2;
     * @return The bytes for detail.
     */
    @java.lang.Override
    public com.google.protobuf.ByteString
        getDetailBytes() {
      java.lang.Object ref = detail_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        detail_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int MODE_FIELD_NUMBER = 3;
    private int mode_ = 0;
    /**
     * .diozero.Board.GpioMode mode = 3;
     * @return The enum numeric value on the wire for mode.
     */
    @java.lang.Override public int getModeValue() {
      return mode_;
    }
    /**
     * .diozero.Board.GpioMode mode = 3;
     * @return The mode.
     */
    @java.lang.Override public com.diozero.remote.message.protobuf.Board.GpioMode getMode() {
      com.diozero.remote.message.protobuf.Board.GpioMode result = com.diozero.remote.message.protobuf.Board.GpioMode.forNumber(mode_);
      return result == null ? com.diozero.remote.message.protobuf.Board.GpioMode.UNRECOGNIZED : result;
    }

    private byte memoizedIsInitialized = -1;
    @java.lang.Override
    public final boolean isInitialized() {
      byte isInitialized = memoizedIsInitialized;
      if (isInitialized == 1) return true;
      if (isInitialized == 0) return false;

      memoizedIsInitialized = 1;
      return true;
    }

    @java.lang.Override
    public void writeTo(com.google.protobuf.CodedOutputStream output)
                        throws java.io.IOException {
      if (status_ != com.diozero.remote.message.protobuf.Status.OK.getNumber()) {
        output.writeEnum(1, status_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(detail_)) {
        com.google.protobuf.GeneratedMessage.writeString(output, 2, detail_);
      }
      if (mode_ != com.diozero.remote.message.protobuf.Board.GpioMode.DIGITAL_INPUT.getNumber()) {
        output.writeEnum(3, mode_);
      }
      getUnknownFields().writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (status_ != com.diozero.remote.message.protobuf.Status.OK.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, status_);
      }
      if (!com.google.protobuf.GeneratedMessage.isStringEmpty(detail_)) {
        size += com.google.protobuf.GeneratedMessage.computeStringSize(2, detail_);
      }
      if (mode_ != com.diozero.remote.message.protobuf.Board.GpioMode.DIGITAL_INPUT.getNumber()) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, mode_);
      }
      size += getUnknownFields().getSerializedSize();
      memoizedSize = size;
      return size;
    }

    @java.lang.Override
    public boolean equals(final java.lang.Object obj) {
      if (obj == this) {
       return true;
      }
      if (!(obj instanceof com.diozero.remote.message.protobuf.Board.GpioModeResponse)) {
        return super.equals(obj);
      }
      com.diozero.remote.message.protobuf.Board.GpioModeResponse other = (com.diozero.remote.message.protobuf.Board.GpioModeResponse) obj;

      if (status_ != other.status_) return false;
      if (!getDetail()
          .equals(other.getDetail())) return false;
      if (mode_ != other.mode_) return false;
      if (!getUnknownFields().equals(other.getUnknownFields())) return false;
      return true;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      hash = (37 * hash) + STATUS_FIELD_NUMBER;
      hash = (53 * hash) + status_;
      hash = (37 * hash) + DETAIL_FIELD_NUMBER;
      hash = (53 * hash) + getDetail().hashCode();
      hash = (37 * hash) + MODE_FIELD_NUMBER;
      hash = (53 * hash) + mode_;
      hash = (29 * hash) + getUnknownFields().hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static com.diozero.remote.message.protobuf.Board.GpioModeResponse parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioModeResponse parseFrom(
        java.nio.ByteBuffer data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioModeResponse parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioModeResponse parseFrom(
        com.google.protobuf.ByteString data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioModeResponse parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioModeResponse parseFrom(
        byte[] data,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data, extensionRegistry);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioModeResponse parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioModeResponse parseFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    public static com.diozero.remote.message.protobuf.Board.GpioModeResponse parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseDelimitedWithIOException(PARSER, input);
    }

    public static com.diozero.remote.message.protobuf.Board.GpioModeResponse parseDelimitedFrom(
        java.io.InputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioModeResponse parseFrom(
        com.google.protobuf.CodedInputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input);
    }
    public static com.diozero.remote.message.protobuf.Board.GpioModeResponse parseFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessage
          .parseWithIOException(PARSER, input, extensionRegistry);
    }

    @java.lang.Override
    public Builder newBuilderForType() { return newBuilder(); }
    public static Builder newBuilder() {
      return DEFAULT_INSTANCE.toBuilder();
    }
    public static Builder newBuilder(com.diozero.remote.message.protobuf.Board.GpioModeResponse prototype) {
      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
    }
    @java.lang.Override
    public Builder toBuilder() {
      return this == DEFAULT_INSTANCE
          ? new Builder() : new Builder().mergeFrom(this);
    }

    @java.lang.Override
    protected Builder newBuilderForType(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      Builder builder = new Builder(parent);
      return builder;
    }
    /**
     * Protobuf type {@code diozero.Board.GpioModeResponse}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessage.Builder implements
        // @@protoc_insertion_point(builder_implements:diozero.Board.GpioModeResponse)
        com.diozero.remote.message.protobuf.Board.GpioModeResponseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_GpioModeResponse_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_GpioModeResponse_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                com.diozero.remote.message.protobuf.Board.GpioModeResponse.class, com.diozero.remote.message.protobuf.Board.GpioModeResponse.Builder.class);
      }

      // Construct using com.diozero.remote.message.protobuf.Board.GpioModeResponse.newBuilder()
      private Builder() {

      }

      private Builder(
          com.google.protobuf.GeneratedMessage.BuilderParent parent) {
        super(parent);

      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        bitField0_ = 0;
        status_ = 0;
        detail_ = "";
        mode_ = 0;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_GpioModeResponse_descriptor;
      }

      @java.lang.Override
      public com.diozero.remote.message.protobuf.Board.GpioModeResponse getDefaultInstanceForType() {
        return com.diozero.remote.message.protobuf.Board.GpioModeResponse.getDefaultInstance();
      }

      @java.lang.Override
      public com.diozero.remote.message.protobuf.Board.GpioModeResponse build() {
        com.diozero.remote.message.protobuf.Board.GpioModeResponse result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public com.diozero.remote.message.protobuf.Board.GpioModeResponse buildPartial() {
        com.diozero.remote.message.protobuf.Board.GpioModeResponse result = new com.diozero.remote.message.protobuf.Board.GpioModeResponse(this);
        if (bitField0_ != 0) { buildPartial0(result); }
        onBuilt();
        return result;
      }

      private void buildPartial0(com.diozero.remote.message.protobuf.Board.GpioModeResponse result) {
        int from_bitField0_ = bitField0_;
        if (((from_bitField0_ & 0x00000001) != 0)) {
          result.status_ = status_;
        }
        if (((from_bitField0_ & 0x00000002) != 0)) {
          result.detail_ = detail_;
        }
        if (((from_bitField0_ & 0x00000004) != 0)) {
          result.mode_ = mode_;
        }
      }

      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof com.diozero.remote.message.protobuf.Board.GpioModeResponse) {
          return mergeFrom((com.diozero.remote.message.protobuf.Board.GpioModeResponse)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(com.diozero.remote.message.protobuf.Board.GpioModeResponse other) {
        if (other == com.diozero.remote.message.protobuf.Board.GpioModeResponse.getDefaultInstance()) return this;
        if (other.status_ != 0) {
          setStatusValue(other.getStatusValue());
        }
        if (!other.getDetail().isEmpty()) {
          detail_ = other.detail_;
          bitField0_ |= 0x00000002;
          onChanged();
        }
        if (other.mode_ != 0) {
          setModeValue(other.getModeValue());
        }
        this.mergeUnknownFields(other.getUnknownFields());
        onChanged();
        return this;
      }

      @java.lang.Override
      public final boolean isInitialized() {
        return true;
      }

      @java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8: {
                status_ = input.readEnum();
                bitField0_ |= 0x00000001;
                break;
              } // case 8
              case 18: {
                detail_ = input.readStringRequireUtf8();
                bitField0_ |= 0x00000002;
                break;
              } // case 18
              case 24: {
                mode_ = input.readEnum();
                bitField0_ |= 0x00000004;
                break;
              } // case 24
              default: {
                if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                  done = true; // was an endgroup tag
                }
                break;
              } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
      private int bitField0_;

      private int status_ = 0;
      /**
       * .diozero.Status status = 1;
       * @return The enum numeric value on the wire for status.
       */
      @java.lang.Override public int getStatusValue() {
        return status_;
      }
      /**
       * .diozero.Status status = 1;
       * @param value The enum numeric value on the wire for status to set.
       * @return This builder for chaining.
       */
      public Builder setStatusValue(int value) {
        status_ = value;
        bitField0_ |= 0x00000001;
        onChanged();
        return this;
      }
      /**
       * .diozero.Status status = 1;
       * @return The status.
       */
      @java.lang.Override
      public com.diozero.remote.message.protobuf.Status getStatus() {
        com.diozero.remote.message.protobuf.Status result = com.diozero.remote.message.protobuf.Status.forNumber(status_);
        return result == null ? com.diozero.remote.message.protobuf.Status.UNRECOGNIZED : result;
      }
      /**
       * .diozero.Status status = 1;
       * @param value The status to set.
       * @return This builder for chaining.
       */
      public Builder setStatus(com.diozero.remote.message.protobuf.Status value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        status_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * .diozero.Status status = 1;
       * @return This builder for chaining.
       */
      public Builder clearStatus() {
        bitField0_ = (bitField0_ & ~0x00000001);
        status_ = 0;
        onChanged();
        return this;
      }

      private java.lang.Object detail_ = "";
      /**
       * string detail = 2;
       * @return The detail.
       */
      public java.lang.String getDetail() {
        java.lang.Object ref = detail_;
        if (!(ref instanceof java.lang.String)) {
          com.google.protobuf.ByteString bs =
              (com.google.protobuf.ByteString) ref;
          java.lang.String s = bs.toStringUtf8();
          detail_ = s;
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * string detail = 2;
       * @return The bytes for detail.
       */
      public com.google.protobuf.ByteString
          getDetailBytes() {
        java.lang.Object ref = detail_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          detail_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * string detail = 2;
       * @param value The detail to set.
       * @return This builder for chaining.
       */
      public Builder setDetail(
          java.lang.String value) {
        if (value == null) { throw new NullPointerException(); }
        detail_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }
      /**
       * string detail = 2;
       * @return This builder for chaining.
       */
      public Builder clearDetail() {
        detail_ = getDefaultInstance().getDetail();
        bitField0_ = (bitField0_ & ~0x00000002);
        onChanged();
        return this;
      }
      /**
       * string detail = 2;
       * @param value The bytes for detail to set.
       * @return This builder for chaining.
       */
      public Builder setDetailBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) { throw new NullPointerException(); }
        checkByteStringIsUtf8(value);
        detail_ = value;
        bitField0_ |= 0x00000002;
        onChanged();
        return this;
      }

      private int mode_ = 0;
      /**
       * .diozero.Board.GpioMode mode = 3;
       * @return The enum numeric value on the wire for mode.
       */
      @java.lang.Override public int getModeValue() {
        return mode_;
      }
      /**
       * .diozero.Board.GpioMode mode = 3;
       * @param value The enum numeric value on the wire for mode to set.
       * @return This builder for chaining.
       */
      public Builder setModeValue(int value) {
        mode_ = value;
        bitField0_ |= 0x00000004;
        onChanged();
        return this;
      }
      /**
       * .diozero.Board.GpioMode mode = 3;
       * @return The mode.
       */
      @java.lang.Override
      public com.diozero.remote.message.protobuf.Board.GpioMode getMode() {
        com.diozero.remote.message.protobuf.Board.GpioMode result = com.diozero.remote.message.protobuf.Board.GpioMode.forNumber(mode_);
        return result == null ? com.diozero.remote.message.protobuf.Board.GpioMode.UNRECOGNIZED : result;
      }
      /**
       * .diozero.Board.GpioMode mode = 3;
       * @param value The mode to set.
       * @return This builder for chaining.
       */
      public Builder setMode(com.diozero.remote.message.protobuf.Board.GpioMode value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        mode_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * .diozero.Board.GpioMode mode = 3;
       * @return This builder for chaining.
       */
      public Builder clearMode() {
        bitField0_ = (bitField0_ & ~0x00000004);
        mode_ = 0;
        onChanged();
        return this;
      }

      // @@protoc_insertion_point(builder_scope:diozero.Board.GpioModeResponse)
    }

    // @@protoc_insertion_point(class_scope:diozero.Board.GpioModeResponse)
    private static final com.diozero.remote.message.protobuf.Board.GpioModeResponse DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new com.diozero.remote.message.protobuf.Board.GpioModeResponse();
    }

    public static com.diozero.remote.message.protobuf.Board.GpioModeResponse getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    private static final com.google.protobuf.Parser
        PARSER = new com.google.protobuf.AbstractParser() {
      @java.lang.Override
      public GpioModeResponse parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        Builder builder = newBuilder();
        try {
          builder.mergeFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.setUnfinishedMessage(builder.buildPartial());
        } catch (com.google.protobuf.UninitializedMessageException e) {
          throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
        } catch (java.io.IOException e) {
          throw new com.google.protobuf.InvalidProtocolBufferException(e)
              .setUnfinishedMessage(builder.buildPartial());
        }
        return builder.buildPartial();
      }
    };

    public static com.google.protobuf.Parser parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public com.diozero.remote.message.protobuf.Board.GpioModeResponse getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private byte memoizedIsInitialized = -1;
  @java.lang.Override
  public final boolean isInitialized() {
    byte isInitialized = memoizedIsInitialized;
    if (isInitialized == 1) return true;
    if (isInitialized == 0) return false;

    memoizedIsInitialized = 1;
    return true;
  }

  @java.lang.Override
  public void writeTo(com.google.protobuf.CodedOutputStream output)
                      throws java.io.IOException {
    getUnknownFields().writeTo(output);
  }

  @java.lang.Override
  public int getSerializedSize() {
    int size = memoizedSize;
    if (size != -1) return size;

    size = 0;
    size += getUnknownFields().getSerializedSize();
    memoizedSize = size;
    return size;
  }

  @java.lang.Override
  public boolean equals(final java.lang.Object obj) {
    if (obj == this) {
     return true;
    }
    if (!(obj instanceof com.diozero.remote.message.protobuf.Board)) {
      return super.equals(obj);
    }
    com.diozero.remote.message.protobuf.Board other = (com.diozero.remote.message.protobuf.Board) obj;

    if (!getUnknownFields().equals(other.getUnknownFields())) return false;
    return true;
  }

  @java.lang.Override
  public int hashCode() {
    if (memoizedHashCode != 0) {
      return memoizedHashCode;
    }
    int hash = 41;
    hash = (19 * hash) + getDescriptor().hashCode();
    hash = (29 * hash) + getUnknownFields().hashCode();
    memoizedHashCode = hash;
    return hash;
  }

  public static com.diozero.remote.message.protobuf.Board parseFrom(
      java.nio.ByteBuffer data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static com.diozero.remote.message.protobuf.Board parseFrom(
      java.nio.ByteBuffer data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static com.diozero.remote.message.protobuf.Board parseFrom(
      com.google.protobuf.ByteString data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static com.diozero.remote.message.protobuf.Board parseFrom(
      com.google.protobuf.ByteString data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static com.diozero.remote.message.protobuf.Board parseFrom(byte[] data)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data);
  }
  public static com.diozero.remote.message.protobuf.Board parseFrom(
      byte[] data,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws com.google.protobuf.InvalidProtocolBufferException {
    return PARSER.parseFrom(data, extensionRegistry);
  }
  public static com.diozero.remote.message.protobuf.Board parseFrom(java.io.InputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessage
        .parseWithIOException(PARSER, input);
  }
  public static com.diozero.remote.message.protobuf.Board parseFrom(
      java.io.InputStream input,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessage
        .parseWithIOException(PARSER, input, extensionRegistry);
  }

  public static com.diozero.remote.message.protobuf.Board parseDelimitedFrom(java.io.InputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessage
        .parseDelimitedWithIOException(PARSER, input);
  }

  public static com.diozero.remote.message.protobuf.Board parseDelimitedFrom(
      java.io.InputStream input,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessage
        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
  }
  public static com.diozero.remote.message.protobuf.Board parseFrom(
      com.google.protobuf.CodedInputStream input)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessage
        .parseWithIOException(PARSER, input);
  }
  public static com.diozero.remote.message.protobuf.Board parseFrom(
      com.google.protobuf.CodedInputStream input,
      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
      throws java.io.IOException {
    return com.google.protobuf.GeneratedMessage
        .parseWithIOException(PARSER, input, extensionRegistry);
  }

  @java.lang.Override
  public Builder newBuilderForType() { return newBuilder(); }
  public static Builder newBuilder() {
    return DEFAULT_INSTANCE.toBuilder();
  }
  public static Builder newBuilder(com.diozero.remote.message.protobuf.Board prototype) {
    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
  }
  @java.lang.Override
  public Builder toBuilder() {
    return this == DEFAULT_INSTANCE
        ? new Builder() : new Builder().mergeFrom(this);
  }

  @java.lang.Override
  protected Builder newBuilderForType(
      com.google.protobuf.GeneratedMessage.BuilderParent parent) {
    Builder builder = new Builder(parent);
    return builder;
  }
  /**
   * Protobuf type {@code diozero.Board}
   */
  public static final class Builder extends
      com.google.protobuf.GeneratedMessage.Builder implements
      // @@protoc_insertion_point(builder_implements:diozero.Board)
      com.diozero.remote.message.protobuf.BoardOrBuilder {
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessage.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              com.diozero.remote.message.protobuf.Board.class, com.diozero.remote.message.protobuf.Board.Builder.class);
    }

    // Construct using com.diozero.remote.message.protobuf.Board.newBuilder()
    private Builder() {

    }

    private Builder(
        com.google.protobuf.GeneratedMessage.BuilderParent parent) {
      super(parent);

    }
    @java.lang.Override
    public Builder clear() {
      super.clear();
      return this;
    }

    @java.lang.Override
    public com.google.protobuf.Descriptors.Descriptor
        getDescriptorForType() {
      return com.diozero.remote.message.protobuf.Diozero.internal_static_diozero_Board_descriptor;
    }

    @java.lang.Override
    public com.diozero.remote.message.protobuf.Board getDefaultInstanceForType() {
      return com.diozero.remote.message.protobuf.Board.getDefaultInstance();
    }

    @java.lang.Override
    public com.diozero.remote.message.protobuf.Board build() {
      com.diozero.remote.message.protobuf.Board result = buildPartial();
      if (!result.isInitialized()) {
        throw newUninitializedMessageException(result);
      }
      return result;
    }

    @java.lang.Override
    public com.diozero.remote.message.protobuf.Board buildPartial() {
      com.diozero.remote.message.protobuf.Board result = new com.diozero.remote.message.protobuf.Board(this);
      onBuilt();
      return result;
    }

    @java.lang.Override
    public Builder mergeFrom(com.google.protobuf.Message other) {
      if (other instanceof com.diozero.remote.message.protobuf.Board) {
        return mergeFrom((com.diozero.remote.message.protobuf.Board)other);
      } else {
        super.mergeFrom(other);
        return this;
      }
    }

    public Builder mergeFrom(com.diozero.remote.message.protobuf.Board other) {
      if (other == com.diozero.remote.message.protobuf.Board.getDefaultInstance()) return this;
      this.mergeUnknownFields(other.getUnknownFields());
      onChanged();
      return this;
    }

    @java.lang.Override
    public final boolean isInitialized() {
      return true;
    }

    @java.lang.Override
    public Builder mergeFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws java.io.IOException {
      if (extensionRegistry == null) {
        throw new java.lang.NullPointerException();
      }
      try {
        boolean done = false;
        while (!done) {
          int tag = input.readTag();
          switch (tag) {
            case 0:
              done = true;
              break;
            default: {
              if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                done = true; // was an endgroup tag
              }
              break;
            } // default:
          } // switch (tag)
        } // while (!done)
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.unwrapIOException();
      } finally {
        onChanged();
      } // finally
      return this;
    }

    // @@protoc_insertion_point(builder_scope:diozero.Board)
  }

  // @@protoc_insertion_point(class_scope:diozero.Board)
  private static final com.diozero.remote.message.protobuf.Board DEFAULT_INSTANCE;
  static {
    DEFAULT_INSTANCE = new com.diozero.remote.message.protobuf.Board();
  }

  public static com.diozero.remote.message.protobuf.Board getDefaultInstance() {
    return DEFAULT_INSTANCE;
  }

  private static final com.google.protobuf.Parser
      PARSER = new com.google.protobuf.AbstractParser() {
    @java.lang.Override
    public Board parsePartialFrom(
        com.google.protobuf.CodedInputStream input,
        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
        throws com.google.protobuf.InvalidProtocolBufferException {
      Builder builder = newBuilder();
      try {
        builder.mergeFrom(input, extensionRegistry);
      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
        throw e.setUnfinishedMessage(builder.buildPartial());
      } catch (com.google.protobuf.UninitializedMessageException e) {
        throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
      } catch (java.io.IOException e) {
        throw new com.google.protobuf.InvalidProtocolBufferException(e)
            .setUnfinishedMessage(builder.buildPartial());
      }
      return builder.buildPartial();
    }
  };

  public static com.google.protobuf.Parser parser() {
    return PARSER;
  }

  @java.lang.Override
  public com.google.protobuf.Parser getParserForType() {
    return PARSER;
  }

  @java.lang.Override
  public com.diozero.remote.message.protobuf.Board getDefaultInstanceForType() {
    return DEFAULT_INSTANCE;
  }

}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy