/* Automatically generated nanopb header */
/* Generated by nanopb-1.0.0-dev */

#ifndef PB_PROTOCOL_MODEL_PB_H_INCLUDED
#define PB_PROTOCOL_MODEL_PB_H_INCLUDED
#include <pb.h>

#if PB_PROTO_HEADER_VERSION != 40
#error Regenerate this file with the current version of nanopb generator.
#endif

/* Enum definitions */
typedef enum _protocol_DeviceType {
    /* Not a valid device type */
    protocol_DeviceType_DEVICE_TYPE_UNSPECIFIED = 0,
    /* The device is a sensor (e.g., IMU, microphone), typically only has output streams */
    protocol_DeviceType_DEVICE_TYPE_SENSOR = 1,
    /* The device is a playback device (e.g., display, audio output), typically only has input streams */
    protocol_DeviceType_DEVICE_TYPE_PLAYBACK = 2,
    /* The device is a model, has at least one input and one output stream */
    protocol_DeviceType_DEVICE_TYPE_MODEL = 3,
    /* Other device type */
    protocol_DeviceType_DEVICE_TYPE_OTHER = 4,
    /* Loopback is the routing of data streams back to their source without intentional processing or modification.
 It is primarily a means of testing the communications reliability and bandwidth */
    protocol_DeviceType_DEVICE_TYPE_LOOPBACK = 5,
    /* Represents the board itself. This device usually has no streams */
    protocol_DeviceType_DEVICE_TYPE_BOARD = 6
} protocol_DeviceType;

typedef enum _protocol_DeviceStatus {
    /* Ready to be started. The device does not accept or send any DataChunk messages. */
    protocol_DeviceStatus_DEVICE_STATUS_READY = 0,
    /* Device is active, sending and receiving DataChunk messages on streams. */
    protocol_DeviceStatus_DEVICE_STATUS_ACTIVE = 1,
    /* Device is active but in a waiting state. Similar to Active but polling is disabled.
 Useful when the device is waiting for data. */
    protocol_DeviceStatus_DEVICE_STATUS_ACTIVE_WAIT = 2,
    /* Device is halted with an error. See Device.status_message for details. */
    protocol_DeviceStatus_DEVICE_STATUS_ERROR = 3
} protocol_DeviceStatus;

typedef enum _protocol_StreamDirection {
    protocol_StreamDirection_STREAM_DIRECTION_UNSPECIFIED = 0, /* Not valid */
    protocol_StreamDirection_STREAM_DIRECTION_INPUT = 1, /* From host to board */
    protocol_StreamDirection_STREAM_DIRECTION_OUTPUT = 2 /* From board to host */
} protocol_StreamDirection;

/* Enum representing the data type */
typedef enum _protocol_DataType {
    protocol_DataType_DATA_TYPE_UNKNOWN = 0, /* Unknown data type */
    protocol_DataType_DATA_TYPE_U8 = 1, /* Unsigned 8-bit integer */
    protocol_DataType_DATA_TYPE_S8 = 2, /* Signed 8-bit integer */
    protocol_DataType_DATA_TYPE_U16 = 3, /* Unsigned 16-bit integer */
    protocol_DataType_DATA_TYPE_S16 = 4, /* Signed 16-bit integer */
    protocol_DataType_DATA_TYPE_U32 = 5, /* Unsigned 32-bit integer */
    protocol_DataType_DATA_TYPE_S32 = 6, /* Signed 32-bit integer */
    protocol_DataType_DATA_TYPE_F32 = 7, /* 32-bit floating point */
    protocol_DataType_DATA_TYPE_F64 = 8, /* 64-bit floating point */
    /* CMSIS compatible */
    protocol_DataType_DATA_TYPE_Q7 = 9, /* Shifted Fixed Point. real_value = int8_value / (128 >> shift) */
    protocol_DataType_DATA_TYPE_Q15 = 10, /* Shifted Fixed Point. real_value = int16_value / (32768 >> shift) */
    protocol_DataType_DATA_TYPE_Q31 = 11, /* Shifted Fixed Point. real_value = int32_value / (2147483648 >> shift) */
    /* Generic quantized */
    protocol_DataType_DATA_TYPE_D8 = 12, /* Scaled Fixed Point. real_value = (int8_value - offset) * scale */
    protocol_DataType_DATA_TYPE_D16 = 13, /* Scaled Fixed Point. real_value = (int16_value - offset) * scale */
    protocol_DataType_DATA_TYPE_D32 = 14 /* Scaled Fixed Point. real_value = (int32_value - offset) * scale */
} protocol_DataType;

/* Struct definitions */
typedef struct _protocol_Version {
    uint32_t major;
    uint32_t minor;
    uint32_t build;
    uint32_t revision;
} protocol_Version;

typedef struct _protocol_BoardSerial {
    /* 16 bytes long UUID */
    pb_byte_t uuid[16];
} protocol_BoardSerial;

typedef struct _protocol_Board {
    /* Serial number identifier.
 This property is used by host software to uniquely identify a board. */
    protocol_BoardSerial serial;
    /* User-friendly name for the device board. */
    char *name;
    /* Firmware version of the device. */
    protocol_Version firmware_version;
    /* Protocol version used. */
    protocol_Version protocol_version;
    /* Time in milliseconds after which the device is reset and stops transmitting data if no watchdog reset message is received.
 If zero, no watchdog is present. */
    int32_t watchdog_timeout;
    /* List of devices with their configurations. */
    pb_size_t devices_count;
    struct _protocol_Device *devices;
} protocol_Board;

/* Structure representing a device with its configuration. */
typedef struct _protocol_Device {
    /* Index for the device. */
    int32_t device_id;
    /* User-friendly name for the device type (e.g., "Microphone", "Accelerometer"). */
    char *name;
    /* User-friendly description of the device. May contain line breaks (\n). */
    char *description;
    /* Type of the device. */
    protocol_DeviceType type;
    /* List of possible options for the device. */
    pb_size_t options_count;
    struct _protocol_Option *options;
    /* List of device streams. */
    pb_size_t streams_count;
    struct _protocol_StreamConfig *streams;
    /* Current status of the device. */
    protocol_DeviceStatus status;
    /* Optional status message providing additional information. */
    char *status_message;
} protocol_Device;

/* Structure for a dimension in a tensor. */
typedef struct _protocol_Dimension {
    /* Optional name for the dimension.
 For example, a stereo microphone with shape [2] would have one dimension {"Audio Channel"}
 and a camera with shape [640,480,3] would have {"Width", "Height", "Color"}. */
    char *name;
    /* Size of the dimension. */
    int32_t size;
    /* Optional labels for the dimension.
 The number of labels must be equal to size or 0.
 For example, a stereo microphone with shape [2] would have one dimension with two labels {"Left", "Right"}
 and a camera with shape [640,480,3] would have {null, null, {"Red", "Green", "Blue"}}. */
    pb_size_t labels_count;
    char **labels;
} protocol_Dimension;

typedef struct _protocol_StreamConfig {
    /* Name of the stream. */
    char *name;
    /* Direction of the stream. */
    protocol_StreamDirection direction;
    /* Data elemnt type of the stream. */
    protocol_DataType datatype;
    /* Shape of the data in one frame as a list of dimensions.
 One package may contain multiple frames. See max_frame_count.
 The number of items in this list is the tensor rank. */
    pb_size_t shape_count;
    protocol_Dimension shape[6];
    /* Tensor frequency in Hz.
 If zero, DataChunk.timestamps must be present. */
    float frequency;
    /* Maximum number of frames in each DataChunk.
 For example, a 16-bit stereo microphone (shape [2]) with max_frame_count=100 may send 100 sample frames in each data chunk.
 Maximum bytes in a DataChunk would then be: shape.flat * max_frame_count * sizeof(datatype) = 2 * 100 * 2 bytes
 If the frequency is 16kHz, then 160 DataChunks per second should be expected if all DataChunks use the max frame count.
 For input streams this value may be -1, then the frame count is determined by DataInquire messages. */
    int32_t max_frame_count;
    /* Optional unit name if available (e.g., m/s). Unicode characters are supported. */
    char *unit;
    /* Current frame index. Reset to zero when device is stopped. */
    int32_t current_frame;
    /* Number of frames dropped. */
    int32_t frames_dropped;
    /* Scale for quantized tensors. Default to 1. Only used for types DATA_TYPE_Dxx.
 real_value = (int_value - offset) * scale */
    float scale;
    /* Offset for quantized tensors. Default to 0. Only used for types DATA_TYPE_Dxx.
 real_value = (int_value - offset) * scale */
    int64_t offset;
    /* Shifted Fixed Point. CMSIS compatible.  Only used for types DATA_TYPE_Qxx.
 real_value = int8_value / (128 >> shift)
 real_value = int16_value / (32768 >> shift)
 real_value = int32_value / (2147483648 >> shift) */
    int32_t shift;
} protocol_StreamConfig;

typedef struct _protocol_OptionInt {
    int32_t current_value;
    int32_t default_value;
    int32_t min_value;
    int32_t max_value;
} protocol_OptionInt;

typedef struct _protocol_OptionFloat {
    float current_value;
    float default_value;
    float min_value;
    float max_value;
} protocol_OptionFloat;

typedef struct _protocol_OptionBool {
    bool default_value;
    bool current_value;
} protocol_OptionBool;

typedef struct _protocol_OptionOneOf {
    int32_t default_index;
    int32_t current_index;
    pb_size_t items_count;
    char **items;
} protocol_OptionOneOf;

typedef struct _protocol_OptionBlob {
    pb_bytes_array_t *current_value;
    pb_bytes_array_t *default_value;
} protocol_OptionBlob;

typedef struct _protocol_OptionString {
    char *current_value;
    char *default_value;
} protocol_OptionString;

typedef struct _protocol_OptionPassword {
    char *current_value;
} protocol_OptionPassword;

/* Structure for device a option */
typedef struct _protocol_Option {
    /* Unique ID for the option. */
    int32_t option_id;
    /* Name of the option (e.g., "Gain"). */
    char *name;
    /* Description of the option. May contain line breaks (\n). (e.g., "Microphone gain in dB") */
    char *description;
    pb_size_t which_value;
    union _protocol_Option_value {
        protocol_OptionInt int_type; /* Integer text field */
        protocol_OptionFloat float_type; /* Float text field */
        protocol_OptionBool bool_type; /* Checkbox */
        protocol_OptionOneOf oneof_type; /* Dropdown list option */
        protocol_OptionBlob blob_type; /* Binary object option */
        protocol_OptionString string_type; /* String field */
        protocol_OptionPassword password_type; /* String field (hidden) */
    } value;
} protocol_Option;


#ifdef __cplusplus
extern "C" {
#endif

/* Helper constants for enums */
#define _protocol_DeviceType_MIN protocol_DeviceType_DEVICE_TYPE_UNSPECIFIED
#define _protocol_DeviceType_MAX protocol_DeviceType_DEVICE_TYPE_BOARD
#define _protocol_DeviceType_ARRAYSIZE ((protocol_DeviceType)(protocol_DeviceType_DEVICE_TYPE_BOARD+1))

#define _protocol_DeviceStatus_MIN protocol_DeviceStatus_DEVICE_STATUS_READY
#define _protocol_DeviceStatus_MAX protocol_DeviceStatus_DEVICE_STATUS_ERROR
#define _protocol_DeviceStatus_ARRAYSIZE ((protocol_DeviceStatus)(protocol_DeviceStatus_DEVICE_STATUS_ERROR+1))

#define _protocol_StreamDirection_MIN protocol_StreamDirection_STREAM_DIRECTION_UNSPECIFIED
#define _protocol_StreamDirection_MAX protocol_StreamDirection_STREAM_DIRECTION_OUTPUT
#define _protocol_StreamDirection_ARRAYSIZE ((protocol_StreamDirection)(protocol_StreamDirection_STREAM_DIRECTION_OUTPUT+1))

#define _protocol_DataType_MIN protocol_DataType_DATA_TYPE_UNKNOWN
#define _protocol_DataType_MAX protocol_DataType_DATA_TYPE_D32
#define _protocol_DataType_ARRAYSIZE ((protocol_DataType)(protocol_DataType_DATA_TYPE_D32+1))




#define protocol_Device_type_ENUMTYPE protocol_DeviceType
#define protocol_Device_status_ENUMTYPE protocol_DeviceStatus


#define protocol_StreamConfig_direction_ENUMTYPE protocol_StreamDirection
#define protocol_StreamConfig_datatype_ENUMTYPE protocol_DataType










/* Initializer values for message structs */
#define protocol_Version_init_default            {0, 0, 0, 0}
#define protocol_BoardSerial_init_default        {{0}}
#define protocol_Board_init_default              {protocol_BoardSerial_init_default, NULL, protocol_Version_init_default, protocol_Version_init_default, 0, 0, NULL}
#define protocol_Device_init_default             {0, NULL, NULL, _protocol_DeviceType_MIN, 0, NULL, 0, NULL, _protocol_DeviceStatus_MIN, NULL}
#define protocol_Option_init_default             {0, NULL, NULL, 0, {protocol_OptionInt_init_default}}
#define protocol_StreamConfig_init_default       {NULL, _protocol_StreamDirection_MIN, _protocol_DataType_MIN, 0, {protocol_Dimension_init_default, protocol_Dimension_init_default, protocol_Dimension_init_default, protocol_Dimension_init_default, protocol_Dimension_init_default, protocol_Dimension_init_default}, 0, 0, NULL, 0, 0, 0, 0, 0}
#define protocol_Dimension_init_default          {NULL, 0, 0, NULL}
#define protocol_OptionInt_init_default          {0, 0, 0, 0}
#define protocol_OptionFloat_init_default        {0, 0, 0, 0}
#define protocol_OptionBool_init_default         {0, 0}
#define protocol_OptionOneOf_init_default        {0, 0, 0, NULL}
#define protocol_OptionBlob_init_default         {NULL, NULL}
#define protocol_OptionString_init_default       {NULL, NULL}
#define protocol_OptionPassword_init_default     {NULL}
#define protocol_Version_init_zero               {0, 0, 0, 0}
#define protocol_BoardSerial_init_zero           {{0}}
#define protocol_Board_init_zero                 {protocol_BoardSerial_init_zero, NULL, protocol_Version_init_zero, protocol_Version_init_zero, 0, 0, NULL}
#define protocol_Device_init_zero                {0, NULL, NULL, _protocol_DeviceType_MIN, 0, NULL, 0, NULL, _protocol_DeviceStatus_MIN, NULL}
#define protocol_Option_init_zero                {0, NULL, NULL, 0, {protocol_OptionInt_init_zero}}
#define protocol_StreamConfig_init_zero          {NULL, _protocol_StreamDirection_MIN, _protocol_DataType_MIN, 0, {protocol_Dimension_init_zero, protocol_Dimension_init_zero, protocol_Dimension_init_zero, protocol_Dimension_init_zero, protocol_Dimension_init_zero, protocol_Dimension_init_zero}, 0, 0, NULL, 0, 0, 0, 0, 0}
#define protocol_Dimension_init_zero             {NULL, 0, 0, NULL}
#define protocol_OptionInt_init_zero             {0, 0, 0, 0}
#define protocol_OptionFloat_init_zero           {0, 0, 0, 0}
#define protocol_OptionBool_init_zero            {0, 0}
#define protocol_OptionOneOf_init_zero           {0, 0, 0, NULL}
#define protocol_OptionBlob_init_zero            {NULL, NULL}
#define protocol_OptionString_init_zero          {NULL, NULL}
#define protocol_OptionPassword_init_zero        {NULL}

/* Field tags (for use in manual encoding/decoding) */
#define protocol_Version_major_tag               1
#define protocol_Version_minor_tag               2
#define protocol_Version_build_tag               3
#define protocol_Version_revision_tag            4
#define protocol_BoardSerial_uuid_tag            1
#define protocol_Board_serial_tag                1
#define protocol_Board_name_tag                  2
#define protocol_Board_firmware_version_tag      3
#define protocol_Board_protocol_version_tag      4
#define protocol_Board_watchdog_timeout_tag      5
#define protocol_Board_devices_tag               6
#define protocol_Device_device_id_tag            1
#define protocol_Device_name_tag                 2
#define protocol_Device_description_tag          3
#define protocol_Device_type_tag                 4
#define protocol_Device_options_tag              5
#define protocol_Device_streams_tag              6
#define protocol_Device_status_tag               7
#define protocol_Device_status_message_tag       8
#define protocol_Dimension_name_tag              1
#define protocol_Dimension_size_tag              2
#define protocol_Dimension_labels_tag            3
#define protocol_StreamConfig_name_tag           1
#define protocol_StreamConfig_direction_tag      2
#define protocol_StreamConfig_datatype_tag       3
#define protocol_StreamConfig_shape_tag          4
#define protocol_StreamConfig_frequency_tag      5
#define protocol_StreamConfig_max_frame_count_tag 6
#define protocol_StreamConfig_unit_tag           7
#define protocol_StreamConfig_current_frame_tag  8
#define protocol_StreamConfig_frames_dropped_tag 9
#define protocol_StreamConfig_scale_tag          10
#define protocol_StreamConfig_offset_tag         11
#define protocol_StreamConfig_shift_tag          12
#define protocol_OptionInt_current_value_tag     1
#define protocol_OptionInt_default_value_tag     2
#define protocol_OptionInt_min_value_tag         3
#define protocol_OptionInt_max_value_tag         4
#define protocol_OptionFloat_current_value_tag   1
#define protocol_OptionFloat_default_value_tag   2
#define protocol_OptionFloat_min_value_tag       3
#define protocol_OptionFloat_max_value_tag       4
#define protocol_OptionBool_default_value_tag    1
#define protocol_OptionBool_current_value_tag    2
#define protocol_OptionOneOf_default_index_tag   1
#define protocol_OptionOneOf_current_index_tag   2
#define protocol_OptionOneOf_items_tag           3
#define protocol_OptionBlob_current_value_tag    1
#define protocol_OptionBlob_default_value_tag    2
#define protocol_OptionString_current_value_tag  1
#define protocol_OptionString_default_value_tag  2
#define protocol_OptionPassword_current_value_tag 1
#define protocol_Option_option_id_tag            1
#define protocol_Option_name_tag                 2
#define protocol_Option_description_tag          3
#define protocol_Option_int_type_tag             4
#define protocol_Option_float_type_tag           5
#define protocol_Option_bool_type_tag            6
#define protocol_Option_oneof_type_tag           7
#define protocol_Option_blob_type_tag            8
#define protocol_Option_string_type_tag          9
#define protocol_Option_password_type_tag        10

/* Struct field encoding specification for nanopb */
#define protocol_Version_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, UINT32,   major,             1) \
X(a, STATIC,   SINGULAR, UINT32,   minor,             2) \
X(a, STATIC,   SINGULAR, UINT32,   build,             3) \
X(a, STATIC,   SINGULAR, UINT32,   revision,          4)
#define protocol_Version_CALLBACK NULL
#define protocol_Version_DEFAULT NULL

#define protocol_BoardSerial_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, FIXED_LENGTH_BYTES, uuid,              1)
#define protocol_BoardSerial_CALLBACK NULL
#define protocol_BoardSerial_DEFAULT NULL

#define protocol_Board_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, MESSAGE,  serial,            1) \
X(a, POINTER,  SINGULAR, STRING,   name,              2) \
X(a, STATIC,   SINGULAR, MESSAGE,  firmware_version,   3) \
X(a, STATIC,   SINGULAR, MESSAGE,  protocol_version,   4) \
X(a, STATIC,   SINGULAR, INT32,    watchdog_timeout,   5) \
X(a, POINTER,  REPEATED, MESSAGE,  devices,           6)
#define protocol_Board_CALLBACK NULL
#define protocol_Board_DEFAULT NULL
#define protocol_Board_serial_MSGTYPE protocol_BoardSerial
#define protocol_Board_firmware_version_MSGTYPE protocol_Version
#define protocol_Board_protocol_version_MSGTYPE protocol_Version
#define protocol_Board_devices_MSGTYPE protocol_Device

#define protocol_Device_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, INT32,    device_id,         1) \
X(a, POINTER,  SINGULAR, STRING,   name,              2) \
X(a, POINTER,  SINGULAR, STRING,   description,       3) \
X(a, STATIC,   SINGULAR, UENUM,    type,              4) \
X(a, POINTER,  REPEATED, MESSAGE,  options,           5) \
X(a, POINTER,  REPEATED, MESSAGE,  streams,           6) \
X(a, STATIC,   SINGULAR, UENUM,    status,            7) \
X(a, POINTER,  SINGULAR, STRING,   status_message,    8)
#define protocol_Device_CALLBACK NULL
#define protocol_Device_DEFAULT NULL
#define protocol_Device_options_MSGTYPE protocol_Option
#define protocol_Device_streams_MSGTYPE protocol_StreamConfig

#define protocol_Option_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, INT32,    option_id,         1) \
X(a, POINTER,  SINGULAR, STRING,   name,              2) \
X(a, POINTER,  SINGULAR, STRING,   description,       3) \
X(a, STATIC,   ONEOF,    MESSAGE,  (value,int_type,value.int_type),   4) \
X(a, STATIC,   ONEOF,    MESSAGE,  (value,float_type,value.float_type),   5) \
X(a, STATIC,   ONEOF,    MESSAGE,  (value,bool_type,value.bool_type),   6) \
X(a, STATIC,   ONEOF,    MESSAGE,  (value,oneof_type,value.oneof_type),   7) \
X(a, STATIC,   ONEOF,    MESSAGE,  (value,blob_type,value.blob_type),   8) \
X(a, STATIC,   ONEOF,    MESSAGE,  (value,string_type,value.string_type),   9) \
X(a, STATIC,   ONEOF,    MESSAGE,  (value,password_type,value.password_type),  10)
#define protocol_Option_CALLBACK NULL
#define protocol_Option_DEFAULT NULL
#define protocol_Option_value_int_type_MSGTYPE protocol_OptionInt
#define protocol_Option_value_float_type_MSGTYPE protocol_OptionFloat
#define protocol_Option_value_bool_type_MSGTYPE protocol_OptionBool
#define protocol_Option_value_oneof_type_MSGTYPE protocol_OptionOneOf
#define protocol_Option_value_blob_type_MSGTYPE protocol_OptionBlob
#define protocol_Option_value_string_type_MSGTYPE protocol_OptionString
#define protocol_Option_value_password_type_MSGTYPE protocol_OptionPassword

#define protocol_StreamConfig_FIELDLIST(X, a) \
X(a, POINTER,  SINGULAR, STRING,   name,              1) \
X(a, STATIC,   SINGULAR, UENUM,    direction,         2) \
X(a, STATIC,   SINGULAR, UENUM,    datatype,          3) \
X(a, STATIC,   REPEATED, MESSAGE,  shape,             4) \
X(a, STATIC,   SINGULAR, FLOAT,    frequency,         5) \
X(a, STATIC,   SINGULAR, INT32,    max_frame_count,   6) \
X(a, POINTER,  SINGULAR, STRING,   unit,              7) \
X(a, STATIC,   SINGULAR, INT32,    current_frame,     8) \
X(a, STATIC,   SINGULAR, INT32,    frames_dropped,    9) \
X(a, STATIC,   SINGULAR, FLOAT,    scale,            10) \
X(a, STATIC,   SINGULAR, SINT64,   offset,           11) \
X(a, STATIC,   SINGULAR, INT32,    shift,            12)
#define protocol_StreamConfig_CALLBACK NULL
#define protocol_StreamConfig_DEFAULT NULL
#define protocol_StreamConfig_shape_MSGTYPE protocol_Dimension

#define protocol_Dimension_FIELDLIST(X, a) \
X(a, POINTER,  SINGULAR, STRING,   name,              1) \
X(a, STATIC,   SINGULAR, INT32,    size,              2) \
X(a, POINTER,  REPEATED, STRING,   labels,            3)
#define protocol_Dimension_CALLBACK NULL
#define protocol_Dimension_DEFAULT NULL

#define protocol_OptionInt_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, INT32,    current_value,     1) \
X(a, STATIC,   SINGULAR, INT32,    default_value,     2) \
X(a, STATIC,   SINGULAR, INT32,    min_value,         3) \
X(a, STATIC,   SINGULAR, INT32,    max_value,         4)
#define protocol_OptionInt_CALLBACK NULL
#define protocol_OptionInt_DEFAULT NULL

#define protocol_OptionFloat_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, FLOAT,    current_value,     1) \
X(a, STATIC,   SINGULAR, FLOAT,    default_value,     2) \
X(a, STATIC,   SINGULAR, FLOAT,    min_value,         3) \
X(a, STATIC,   SINGULAR, FLOAT,    max_value,         4)
#define protocol_OptionFloat_CALLBACK NULL
#define protocol_OptionFloat_DEFAULT NULL

#define protocol_OptionBool_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, BOOL,     default_value,     1) \
X(a, STATIC,   SINGULAR, BOOL,     current_value,     2)
#define protocol_OptionBool_CALLBACK NULL
#define protocol_OptionBool_DEFAULT NULL

#define protocol_OptionOneOf_FIELDLIST(X, a) \
X(a, STATIC,   SINGULAR, INT32,    default_index,     1) \
X(a, STATIC,   SINGULAR, INT32,    current_index,     2) \
X(a, POINTER,  REPEATED, STRING,   items,             3)
#define protocol_OptionOneOf_CALLBACK NULL
#define protocol_OptionOneOf_DEFAULT NULL

#define protocol_OptionBlob_FIELDLIST(X, a) \
X(a, POINTER,  SINGULAR, BYTES,    current_value,     1) \
X(a, POINTER,  SINGULAR, BYTES,    default_value,     2)
#define protocol_OptionBlob_CALLBACK NULL
#define protocol_OptionBlob_DEFAULT NULL

#define protocol_OptionString_FIELDLIST(X, a) \
X(a, POINTER,  SINGULAR, STRING,   current_value,     1) \
X(a, POINTER,  SINGULAR, STRING,   default_value,     2)
#define protocol_OptionString_CALLBACK NULL
#define protocol_OptionString_DEFAULT NULL

#define protocol_OptionPassword_FIELDLIST(X, a) \
X(a, POINTER,  SINGULAR, STRING,   current_value,     1)
#define protocol_OptionPassword_CALLBACK NULL
#define protocol_OptionPassword_DEFAULT NULL

extern const pb_msgdesc_t protocol_Version_msg;
extern const pb_msgdesc_t protocol_BoardSerial_msg;
extern const pb_msgdesc_t protocol_Board_msg;
extern const pb_msgdesc_t protocol_Device_msg;
extern const pb_msgdesc_t protocol_Option_msg;
extern const pb_msgdesc_t protocol_StreamConfig_msg;
extern const pb_msgdesc_t protocol_Dimension_msg;
extern const pb_msgdesc_t protocol_OptionInt_msg;
extern const pb_msgdesc_t protocol_OptionFloat_msg;
extern const pb_msgdesc_t protocol_OptionBool_msg;
extern const pb_msgdesc_t protocol_OptionOneOf_msg;
extern const pb_msgdesc_t protocol_OptionBlob_msg;
extern const pb_msgdesc_t protocol_OptionString_msg;
extern const pb_msgdesc_t protocol_OptionPassword_msg;

/* Defines for backwards compatibility with code written before nanopb-0.4.0 */
#define protocol_Version_fields &protocol_Version_msg
#define protocol_BoardSerial_fields &protocol_BoardSerial_msg
#define protocol_Board_fields &protocol_Board_msg
#define protocol_Device_fields &protocol_Device_msg
#define protocol_Option_fields &protocol_Option_msg
#define protocol_StreamConfig_fields &protocol_StreamConfig_msg
#define protocol_Dimension_fields &protocol_Dimension_msg
#define protocol_OptionInt_fields &protocol_OptionInt_msg
#define protocol_OptionFloat_fields &protocol_OptionFloat_msg
#define protocol_OptionBool_fields &protocol_OptionBool_msg
#define protocol_OptionOneOf_fields &protocol_OptionOneOf_msg
#define protocol_OptionBlob_fields &protocol_OptionBlob_msg
#define protocol_OptionString_fields &protocol_OptionString_msg
#define protocol_OptionPassword_fields &protocol_OptionPassword_msg

/* Maximum encoded size of messages (where known) */
/* protocol_Board_size depends on runtime parameters */
/* protocol_Device_size depends on runtime parameters */
/* protocol_Option_size depends on runtime parameters */
/* protocol_StreamConfig_size depends on runtime parameters */
/* protocol_Dimension_size depends on runtime parameters */
/* protocol_OptionOneOf_size depends on runtime parameters */
/* protocol_OptionBlob_size depends on runtime parameters */
/* protocol_OptionString_size depends on runtime parameters */
/* protocol_OptionPassword_size depends on runtime parameters */
#define PROTOCOL_MODEL_PB_H_MAX_SIZE             protocol_OptionInt_size
#define protocol_BoardSerial_size                18
#define protocol_OptionBool_size                 4
#define protocol_OptionFloat_size                20
#define protocol_OptionInt_size                  44
#define protocol_Version_size                    24

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif
