| # Copyright 2024 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. |
| """Wraps pw_system's console to inject quickstart's RPC proto.""" |
| |
| import argparse |
| import sys |
| |
| import logging |
| |
| import pw_cli |
| from pw_system.device import Device as PwSystemDevice |
| from pw_system.device_connection import ( |
| add_device_args, |
| DeviceConnection, |
| create_device_serial_or_socket_connection, |
| ) |
| import pw_system.console |
| from blinky_pb import blinky_pb2 |
| |
| |
| _LOG = logging.getLogger(__file__) |
| |
| |
| # Quickstart-specific device classes, new functions can be added here. |
| # similar to ones on the parent pw_system.device.Device class: |
| # https://cs.opensource.google/pigweed/pigweed/+/main:pw_system/py/pw_system/device.py?q=%22def%20run_tests(%22 |
| class Device(PwSystemDevice): |
| def __init__(self, *args, **kwargs): |
| super().__init__(*args, **kwargs) |
| |
| def toggle_led(self): |
| """Toggles the onboard (non-RGB) LED.""" |
| self.rpcs.blinky.Blinky.ToggleLed() |
| |
| def set_led(self, on: bool): |
| """Sets the onboard (non-RGB) LED.""" |
| self.rpcs.blinky.Blinky.SetLed(on=on) |
| |
| def blink(self, interval_ms=1000, blink_count=None): |
| """Sets the onboard (non-RGB) LED to blink on and off.""" |
| self.rpcs.blinky.Blinky.Blink( |
| interval_ms=interval_ms, blink_count=blink_count |
| ) |
| |
| |
| def get_device_connection( |
| setup_logging: bool = True, |
| log_level: int = logging.DEBUG, |
| ) -> DeviceConnection: |
| if setup_logging: |
| pw_cli.log.install(level=log_level) |
| |
| parser = argparse.ArgumentParser( |
| prog='quickstart', |
| description=__doc__, |
| ) |
| parser = add_device_args(parser) |
| args, _remaning_args = parser.parse_known_args() |
| |
| compiled_protos = [blinky_pb2] |
| |
| device_context = create_device_serial_or_socket_connection( |
| device=args.device, |
| baudrate=args.baudrate, |
| token_databases=args.token_databases, |
| compiled_protos=compiled_protos, |
| socket_addr=args.socket_addr, |
| ticks_per_second=args.ticks_per_second, |
| serial_debug=args.serial_debug, |
| rpc_logging=args.rpc_logging, |
| hdlc_encoding=args.hdlc_encoding, |
| channel_id=args.channel_id, |
| # Device tracing is not hooked up yet for Pigweed Sense. |
| device_tracing=False, |
| device_class=Device, |
| ) |
| |
| return device_context |
| |
| |
| def main() -> int: |
| return pw_system.console.main( |
| compiled_protos=[blinky_pb2], |
| device_connection=get_device_connection(), |
| ) |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main()) |