#!/usr/bin/env python # Copyright 2020 The Pigweed Authors # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. """Simple example script that uses pw_rpc.""" import argparse import os from pathlib import Path import serial # type: ignore from pw_hdlc.rpc import HdlcRpcClient, default_channels # Point the script to the .proto file with our RPC services. PROTO = Path(os.environ['PW_ROOT'], 'pw_rpc/echo.proto') def script(device: str, baud: int) -> None: # Set up a pw_rpc client that uses HDLC. ser = serial.Serial(device, baud, timeout=0.01) client = HdlcRpcClient(lambda: ser.read(4096), [PROTO], default_channels(ser.write)) # Make a shortcut to the EchoService. echo_service = client.rpcs().pw.rpc.EchoService # Call some RPCs and check the results. status, payload = echo_service.Echo(msg='Hello') if status.ok(): print('The status was', status) print('The payload was', payload) else: print('Uh oh, this RPC returned', status) status, payload = echo_service.Echo(msg='Goodbye!') print('The device says:', payload.msg) def main(): parser = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--device', '-d', default='/dev/ttyACM0', help='serial device to use') parser.add_argument('--baud', '-b', type=int, default=115200, help='baud rate for the serial device') script(**vars(parser.parse_args())) if __name__ == '__main__': main()