|
| 1 | +"""Client for PWM service""" |
| 2 | +import logging |
| 3 | +from edgepirpc.protos import pwm_pb2 as pwm_pb |
| 4 | +from edgepi_rpc_client.client_rpc_channel import ClientRpcChannel |
| 5 | +from edgepi_rpc_client.util.helpers import ( |
| 6 | + filter_arg_values, |
| 7 | + create_config_request_from_args, |
| 8 | + get_server_response, |
| 9 | +) |
| 10 | +from edgepi_rpc_client.services.pwm.pwm_pb_enums import PWMPins, Polarity |
| 11 | + |
| 12 | +_logger = logging.getLogger(__name__) |
| 13 | + |
| 14 | + |
| 15 | +# pylint: disable=no-member |
| 16 | +class ClientPWMService: |
| 17 | + """Client Methods for PWM Service""" |
| 18 | + |
| 19 | + def __init__(self, transport): |
| 20 | + self.client_rpc_channel = ClientRpcChannel(transport) |
| 21 | + self.service_stub = pwm_pb.PWMService_Stub(self.client_rpc_channel) |
| 22 | + self.rpc_controller = None |
| 23 | + |
| 24 | + # pylint: disable=unused-argument |
| 25 | + def set_config( |
| 26 | + self, |
| 27 | + pwm_num: PWMPins, |
| 28 | + frequency: float = None, |
| 29 | + duty_cycle: float = None, |
| 30 | + polarity: Polarity = None, |
| 31 | + ): |
| 32 | + """set_config method for SDK PWM module""" |
| 33 | + config_args_dict = filter_arg_values(locals(), "self", None) |
| 34 | + config_msg = pwm_pb.Config() |
| 35 | + arg_msg = pwm_pb.Config().ConfArg() |
| 36 | + request = create_config_request_from_args(config_msg, arg_msg, config_args_dict) |
| 37 | + return self.perform_call_from_request( |
| 38 | + request, self.service_stub.set_config, pwm_pb.SuccessMsg |
| 39 | + ).content |
| 40 | + |
| 41 | + def enable(self, pwm_num: PWMPins): |
| 42 | + """enable method for SDK PWM module""" |
| 43 | + return self.perform_rpc_call( |
| 44 | + pwm_num, self.service_stub.enable, pwm_pb.SuccessMsg |
| 45 | + ).content |
| 46 | + |
| 47 | + def disable(self, pwm_num: PWMPins): |
| 48 | + """disable method for SDK PWM module""" |
| 49 | + return self.perform_rpc_call( |
| 50 | + pwm_num, self.service_stub.disable, pwm_pb.SuccessMsg |
| 51 | + ).content |
| 52 | + |
| 53 | + def close(self, pwm_num: PWMPins): |
| 54 | + """close method for SDK PWM module""" |
| 55 | + return self.perform_rpc_call( |
| 56 | + pwm_num, self.service_stub.close, pwm_pb.SuccessMsg |
| 57 | + ).content |
| 58 | + |
| 59 | + def init_pwm(self, pwm_num: PWMPins): |
| 60 | + """init_pwm method for SDK PWM module""" |
| 61 | + return self.perform_rpc_call( |
| 62 | + pwm_num, self.service_stub.init_pwm, pwm_pb.SuccessMsg |
| 63 | + ).content |
| 64 | + |
| 65 | + def get_frequency(self, pwm_num: PWMPins): |
| 66 | + """get_frequency method for SDK PWM module""" |
| 67 | + return self.perform_rpc_call( |
| 68 | + pwm_num, self.service_stub.get_frequency, pwm_pb.GetFrequency |
| 69 | + ).frequency |
| 70 | + |
| 71 | + def get_duty_cycle(self, pwm_num: PWMPins): |
| 72 | + """get_duty_cycle method for SDK PWM module""" |
| 73 | + return self.perform_rpc_call( |
| 74 | + pwm_num, self.service_stub.get_duty_cycle, pwm_pb.GetDutyCycle |
| 75 | + ).duty_cycle |
| 76 | + |
| 77 | + def get_polarity(self, pwm_num: PWMPins): |
| 78 | + """get_polarity method for SDK PWM module""" |
| 79 | + polarity = self.perform_rpc_call( |
| 80 | + pwm_num, self.service_stub.get_polarity, pwm_pb.GetPolarity |
| 81 | + ).polarity |
| 82 | + return Polarity(polarity) |
| 83 | + |
| 84 | + def get_enabled(self, pwm_num: PWMPins): |
| 85 | + """get_enabled method for SDK PWM module""" |
| 86 | + return self.perform_rpc_call( |
| 87 | + pwm_num, self.service_stub.get_enabled, pwm_pb.GetEnabled |
| 88 | + ).enabled |
| 89 | + |
| 90 | + # TODO: Potentially these helpers in other services and put them in a separate file |
| 91 | + def perform_rpc_call(self, pwm_num, method, response_type): |
| 92 | + """Performs RPC call with PWM number and specified method""" |
| 93 | + request = pwm_pb.PWM(pwm_num=pwm_num.value) |
| 94 | + return self.perform_call_from_request(request, method, response_type) |
| 95 | + |
| 96 | + def perform_call_from_request(self, request, method, response_type): |
| 97 | + """Executes RPC call using provided request and method""" |
| 98 | + rpc_response = method(self.rpc_controller, request) |
| 99 | + return get_server_response(rpc_response, response_type) |
0 commit comments