/* Protobuf file for the PWM SDK module */

syntax = "proto3";

package EdgePiRPC_PWM;
option py_generic_services = true;

service PWMService {
    rpc set_config(Config) returns(SuccessMsg);
    rpc init_pwm(PWM) returns(SuccessMsg);
    rpc get_frequency(PWM) returns(GetFrequency);
    rpc get_duty_cycle(PWM) returns(GetDutyCycle);
    rpc get_polarity(PWM) returns(GetPolarity);
    rpc get_enabled(PWM) returns(GetEnabled);
    rpc get_settings(PWM) returns(PWMSettings);
    rpc enable(PWM) returns(SuccessMsg);
    rpc disable(PWM) returns(SuccessMsg);
    rpc close(PWM) returns(SuccessMsg);
}

message SuccessMsg{
    optional string content = 1;
}

message Config {
    repeated ConfArg conf_arg = 1;

    message ConfArg {
        oneof enum {
            PWMPins pwm_num = 2;
            float frequency = 3;
            float duty_cycle = 4;
            Polarity polarity = 5;
        }
    }
}

message PWM {
    optional PWMPins pwm_num = 1;
}

message GetFrequency {
    optional float frequency = 1;
}

message GetDutyCycle {
    optional float duty_cycle = 1;
}

message GetEnabled {
    optional bool enabled = 1;
}

message GetPolarity {
    optional Polarity polarity = 1;
}

message PWMSettings {
    optional float frequency = 1;
    optional float duty_cycle = 2;
    optional bool enabled = 3;
    optional Polarity polarity = 4;
}

enum Polarity {
    NORMAL = 0;
    INVERSED = 1;
}

enum PWMPins {
    PWM1 = 0;
    PWM2 = 1;
}
