/* Protouf file for the ADC SDK module */

syntax = "proto3";

package EdgePiRPC_ADC;
option py_generic_services = true;

service AdcService{
    rpc set_config(Config) returns(SuccessMsg);
    rpc single_sample(EmptyMsg) returns(VoltageRead);
    rpc select_differential(DiffConfig) returns(SuccessMsg);
    rpc set_rtd(RtdConfig) returns(SuccessMsg);
    rpc single_sample_rtd(EmptyMsg) returns(TempReading);
    rpc start_conversions(ADC) returns (SuccessMsg);
    rpc stop_conversions(ADC) returns (SuccessMsg);
    rpc read_voltage(ADC) returns (VoltageRead);
    rpc read_rtd_temperature(EmptyMsg) returns (TempReading);
}

message EmptyMsg {
    // Empty Message
}

message SuccessMsg {
    optional string content = 1;
}

message VoltageRead {
    optional float voltage_read = 1;
}

message Config {
    repeated ConfArg conf_arg = 1;

    message ConfArg{
        oneof enum{
            AnalogIn adc_1_analog_in = 2;
            ADC1DataRate adc_1_data_rate = 3;
            AnalogIn adc_2_analog_in = 4;
            ADC2DataRate adc_2_data_rate = 5;
            FilterMode filter_mode = 6;
            ConvMode conversion_mode = 7;
            bool override_updates_validation = 8;
        }
    }
}

message DiffConfig {
    optional ADCNum adc_num = 1;
    optional DiffMode diff = 2;
}

message RtdConfig {
    optional bool set_rtd = 1;
    optional ADCNum adc_num = 2;
}

message TempReading {
    optional float temp = 1;
}

message ADC {
    optional ADCNum adc_num = 1;
}

enum AnalogIn {
    AIN1 = 0;
    AIN2 = 1;
    AIN3 = 2;
    AIN4 = 3;
    AIN5 = 4;
    AIN6 = 5;
    AIN7 = 6;
    AIN8 = 7;
    AINCOM = 8;
    FLOAT = 9;
}

enum ADC1DataRate {
    
    SPS_2P5 = 0;
    SPS_5 = 1;
    SPS_10_ = 2;
    SPS_16P6 = 3;
    SPS_20 = 4;
    SPS_50 = 5;
    SPS_60 = 6;
    SPS_100_ = 7;
    SPS_400_ = 8;
    SPS_1200 = 9;
    SPS_2400 = 10;
    SPS_4800 = 11;
    SPS_7200 = 12;
    SPS_14400 = 13;
    SPS_19200 = 14;
    SPS_38400 = 15;
}

enum ADC2DataRate {
    SPS_10 = 0;
    SPS_100 = 1;
    SPS_400 = 3;
    SPS_800 = 4;
}

enum FilterMode {
    SINC1 = 0;
    SINC2 = 1;
    SINC3 = 2;
    SINC4 = 3;
    FIR = 4;
}

enum ConvMode {
    CONTINUOUS = 0;
    PULSE = 1;

}

enum ADCNum {
    ADC_1 = 0;
    ADC_2 = 1;
}

enum DiffMode {
    DIFF_1 = 0;
    DIFF_2 = 1;
    DIFF_3 = 2;
    DIFF_4 = 3;
    DIFF_OFF = 4;
}
