/* Automatically generated nanopb header */
/* Generated by nanopb-0.2.5 at Wed Mar 26 09:29:06 2014. */

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

#ifdef __cplusplus
extern "C" {
#endif

/* Enum definitions */
typedef enum _openxc_VehicleMessage_Type {
    openxc_VehicleMessage_Type_RAW = 1,
    openxc_VehicleMessage_Type_TRANSLATED = 2,
    openxc_VehicleMessage_Type_DIAGNOSTIC = 3,
    openxc_VehicleMessage_Type_CONTROL_COMMAND = 4,
    openxc_VehicleMessage_Type_COMMAND_RESPONSE = 5
} openxc_VehicleMessage_Type;

typedef enum _openxc_ControlCommand_Type {
    openxc_ControlCommand_Type_VERSION = 1,
    openxc_ControlCommand_Type_DEVICE_ID = 2,
    openxc_ControlCommand_Type_DIAGNOSTIC = 3
} openxc_ControlCommand_Type;

typedef enum _openxc_DiagnosticRequest_DecodedType {
    openxc_DiagnosticRequest_DecodedType_NONE = 1,
    openxc_DiagnosticRequest_DecodedType_OBD2 = 2
} openxc_DiagnosticRequest_DecodedType;

typedef enum _openxc_DynamicField_Type {
    openxc_DynamicField_Type_STRING = 1,
    openxc_DynamicField_Type_NUM = 2,
    openxc_DynamicField_Type_BOOL = 3
} openxc_DynamicField_Type;

typedef enum _openxc_TranslatedMessage_Type {
    openxc_TranslatedMessage_Type_STRING = 1,
    openxc_TranslatedMessage_Type_NUM = 2,
    openxc_TranslatedMessage_Type_BOOL = 3,
    openxc_TranslatedMessage_Type_EVENTED_STRING = 4,
    openxc_TranslatedMessage_Type_EVENTED_NUM = 5,
    openxc_TranslatedMessage_Type_EVENTED_BOOL = 6
} openxc_TranslatedMessage_Type;

/* Struct definitions */
typedef struct _openxc_CommandResponse {
    bool has_type;
    openxc_ControlCommand_Type type;
    bool has_message;
    char message[128];
} openxc_CommandResponse;

typedef struct {
    size_t size;
    uint8_t bytes[8];
} openxc_DiagnosticRequest_payload_t;

typedef struct _openxc_DiagnosticRequest {
    bool has_bus;
    int32_t bus;
    bool has_message_id;
    uint32_t message_id;
    bool has_mode;
    uint32_t mode;
    bool has_pid;
    uint32_t pid;
    bool has_payload;
    openxc_DiagnosticRequest_payload_t payload;
    bool has_multiple_responses;
    bool multiple_responses;
    bool has_frequency;
    double frequency;
    bool has_name;
    char name[10];
    bool has_decoded_type;
    openxc_DiagnosticRequest_DecodedType decoded_type;
} openxc_DiagnosticRequest;

typedef struct {
    size_t size;
    uint8_t bytes[8];
} openxc_DiagnosticResponse_payload_t;

typedef struct _openxc_DiagnosticResponse {
    bool has_bus;
    int32_t bus;
    bool has_message_id;
    uint32_t message_id;
    bool has_mode;
    uint32_t mode;
    bool has_pid;
    uint32_t pid;
    bool has_success;
    bool success;
    bool has_negative_response_code;
    uint32_t negative_response_code;
    bool has_payload;
    openxc_DiagnosticResponse_payload_t payload;
    bool has_value;
    double value;
} openxc_DiagnosticResponse;

typedef struct _openxc_DynamicField {
    bool has_type;
    openxc_DynamicField_Type type;
    bool has_string_value;
    char string_value[100];
    bool has_numeric_value;
    double numeric_value;
    bool has_boolean_value;
    bool boolean_value;
} openxc_DynamicField;

typedef struct {
    size_t size;
    uint8_t bytes[8];
} openxc_RawMessage_data_t;

typedef struct _openxc_RawMessage {
    bool has_bus;
    int32_t bus;
    bool has_message_id;
    uint32_t message_id;
    bool has_data;
    openxc_RawMessage_data_t data;
} openxc_RawMessage;

typedef struct _openxc_ControlCommand {
    bool has_type;
    openxc_ControlCommand_Type type;
    bool has_diagnostic_request;
    openxc_DiagnosticRequest diagnostic_request;
} openxc_ControlCommand;

typedef struct _openxc_TranslatedMessage {
    bool has_type;
    openxc_TranslatedMessage_Type type;
    bool has_name;
    char name[100];
    bool has_value;
    openxc_DynamicField value;
    bool has_event;
    openxc_DynamicField event;
} openxc_TranslatedMessage;

typedef struct _openxc_VehicleMessage {
    bool has_type;
    openxc_VehicleMessage_Type type;
    bool has_raw_message;
    openxc_RawMessage raw_message;
    bool has_translated_message;
    openxc_TranslatedMessage translated_message;
    bool has_diagnostic_response;
    openxc_DiagnosticResponse diagnostic_response;
    bool has_control_command;
    openxc_ControlCommand control_command;
    bool has_command_response;
    openxc_CommandResponse command_response;
} openxc_VehicleMessage;

/* Default values for struct fields */

/* Field tags (for use in manual encoding/decoding) */
#define openxc_CommandResponse_type_tag          1
#define openxc_CommandResponse_message_tag       2
#define openxc_DiagnosticRequest_bus_tag         1
#define openxc_DiagnosticRequest_message_id_tag  2
#define openxc_DiagnosticRequest_mode_tag        3
#define openxc_DiagnosticRequest_pid_tag         4
#define openxc_DiagnosticRequest_payload_tag     5
#define openxc_DiagnosticRequest_multiple_responses_tag 6
#define openxc_DiagnosticRequest_frequency_tag   7
#define openxc_DiagnosticRequest_name_tag        8
#define openxc_DiagnosticRequest_decoded_type_tag 9
#define openxc_DiagnosticResponse_bus_tag        1
#define openxc_DiagnosticResponse_message_id_tag 2
#define openxc_DiagnosticResponse_mode_tag       3
#define openxc_DiagnosticResponse_pid_tag        4
#define openxc_DiagnosticResponse_success_tag    5
#define openxc_DiagnosticResponse_negative_response_code_tag 6
#define openxc_DiagnosticResponse_payload_tag    7
#define openxc_DiagnosticResponse_value_tag      8
#define openxc_DynamicField_type_tag             1
#define openxc_DynamicField_string_value_tag     2
#define openxc_DynamicField_numeric_value_tag    3
#define openxc_DynamicField_boolean_value_tag    4
#define openxc_RawMessage_bus_tag                1
#define openxc_RawMessage_message_id_tag         2
#define openxc_RawMessage_data_tag               3
#define openxc_ControlCommand_type_tag           1
#define openxc_ControlCommand_diagnostic_request_tag 2
#define openxc_TranslatedMessage_type_tag        1
#define openxc_TranslatedMessage_name_tag        2
#define openxc_TranslatedMessage_value_tag       3
#define openxc_TranslatedMessage_event_tag       4
#define openxc_VehicleMessage_type_tag           1
#define openxc_VehicleMessage_raw_message_tag    2
#define openxc_VehicleMessage_translated_message_tag 3
#define openxc_VehicleMessage_diagnostic_response_tag 4
#define openxc_VehicleMessage_control_command_tag 5
#define openxc_VehicleMessage_command_response_tag 6

/* Struct field encoding specification for nanopb */
extern const pb_field_t openxc_VehicleMessage_fields[7];
extern const pb_field_t openxc_RawMessage_fields[4];
extern const pb_field_t openxc_ControlCommand_fields[3];
extern const pb_field_t openxc_CommandResponse_fields[3];
extern const pb_field_t openxc_DiagnosticRequest_fields[10];
extern const pb_field_t openxc_DiagnosticResponse_fields[9];
extern const pb_field_t openxc_DynamicField_fields[5];
extern const pb_field_t openxc_TranslatedMessage_fields[5];

/* Maximum encoded size of messages (where known) */
#define openxc_VehicleMessage_size               664
#define openxc_RawMessage_size                   27
#define openxc_ControlCommand_size               76
#define openxc_CommandResponse_size              137
#define openxc_DiagnosticRequest_size            68
#define openxc_DiagnosticResponse_size           56
#define openxc_DynamicField_size                 119
#define openxc_TranslatedMessage_size            350

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

#endif