viam-sdk 0.45.2__py3-none-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of viam-sdk might be problematic. Click here for more details.
- viam/__init__.py +71 -0
- viam/app/__init__.py +0 -0
- viam/app/_logs.py +34 -0
- viam/app/app_client.py +2525 -0
- viam/app/billing_client.py +143 -0
- viam/app/data_client.py +1715 -0
- viam/app/ml_training_client.py +251 -0
- viam/app/provisioning_client.py +95 -0
- viam/app/viam_client.py +260 -0
- viam/components/__init__.py +0 -0
- viam/components/arm/__init__.py +16 -0
- viam/components/arm/arm.py +223 -0
- viam/components/arm/client.py +124 -0
- viam/components/arm/service.py +123 -0
- viam/components/audio_input/__init__.py +18 -0
- viam/components/audio_input/audio_input.py +81 -0
- viam/components/audio_input/client.py +70 -0
- viam/components/audio_input/service.py +114 -0
- viam/components/base/__init__.py +13 -0
- viam/components/base/base.py +260 -0
- viam/components/base/client.py +153 -0
- viam/components/base/service.py +138 -0
- viam/components/board/__init__.py +9 -0
- viam/components/board/board.py +414 -0
- viam/components/board/client.py +241 -0
- viam/components/board/service.py +223 -0
- viam/components/button/__init__.py +10 -0
- viam/components/button/button.py +41 -0
- viam/components/button/client.py +52 -0
- viam/components/button/service.py +46 -0
- viam/components/camera/__init__.py +22 -0
- viam/components/camera/camera.py +138 -0
- viam/components/camera/client.py +98 -0
- viam/components/camera/service.py +105 -0
- viam/components/component_base.py +65 -0
- viam/components/encoder/__init__.py +18 -0
- viam/components/encoder/client.py +83 -0
- viam/components/encoder/encoder.py +118 -0
- viam/components/encoder/service.py +72 -0
- viam/components/gantry/__init__.py +11 -0
- viam/components/gantry/client.py +115 -0
- viam/components/gantry/gantry.py +156 -0
- viam/components/gantry/service.py +113 -0
- viam/components/generic/__init__.py +18 -0
- viam/components/generic/client.py +62 -0
- viam/components/generic/generic.py +76 -0
- viam/components/generic/service.py +40 -0
- viam/components/gripper/__init__.py +11 -0
- viam/components/gripper/client.py +85 -0
- viam/components/gripper/gripper.py +114 -0
- viam/components/gripper/service.py +81 -0
- viam/components/input/__init__.py +15 -0
- viam/components/input/client.py +194 -0
- viam/components/input/input.py +297 -0
- viam/components/input/service.py +175 -0
- viam/components/motor/__init__.py +11 -0
- viam/components/motor/client.py +168 -0
- viam/components/motor/motor.py +301 -0
- viam/components/motor/service.py +150 -0
- viam/components/movement_sensor/__init__.py +21 -0
- viam/components/movement_sensor/client.py +161 -0
- viam/components/movement_sensor/movement_sensor.py +253 -0
- viam/components/movement_sensor/service.py +146 -0
- viam/components/pose_tracker/__init__.py +17 -0
- viam/components/pose_tracker/client.py +50 -0
- viam/components/pose_tracker/pose_tracker.py +40 -0
- viam/components/pose_tracker/service.py +45 -0
- viam/components/power_sensor/__init__.py +17 -0
- viam/components/power_sensor/client.py +86 -0
- viam/components/power_sensor/power_sensor.py +104 -0
- viam/components/power_sensor/service.py +72 -0
- viam/components/sensor/__init__.py +18 -0
- viam/components/sensor/client.py +49 -0
- viam/components/sensor/sensor.py +48 -0
- viam/components/sensor/service.py +51 -0
- viam/components/servo/__init__.py +11 -0
- viam/components/servo/client.py +86 -0
- viam/components/servo/service.py +80 -0
- viam/components/servo/servo.py +114 -0
- viam/components/switch/__init__.py +10 -0
- viam/components/switch/client.py +83 -0
- viam/components/switch/service.py +72 -0
- viam/components/switch/switch.py +95 -0
- viam/errors.py +105 -0
- viam/gen/__init__.py +0 -0
- viam/gen/app/__init__.py +0 -0
- viam/gen/app/agent/__init__.py +0 -0
- viam/gen/app/agent/v1/__init__.py +0 -0
- viam/gen/app/agent/v1/agent_grpc.py +29 -0
- viam/gen/app/agent/v1/agent_pb2.py +47 -0
- viam/gen/app/agent/v1/agent_pb2.pyi +280 -0
- viam/gen/app/cloudslam/__init__.py +0 -0
- viam/gen/app/cloudslam/v1/__init__.py +0 -0
- viam/gen/app/cloudslam/v1/cloud_slam_grpc.py +70 -0
- viam/gen/app/cloudslam/v1/cloud_slam_pb2.py +54 -0
- viam/gen/app/cloudslam/v1/cloud_slam_pb2.pyi +384 -0
- viam/gen/app/data/__init__.py +0 -0
- viam/gen/app/data/v1/__init__.py +0 -0
- viam/gen/app/data/v1/data_grpc.py +206 -0
- viam/gen/app/data/v1/data_pb2.py +178 -0
- viam/gen/app/data/v1/data_pb2.pyi +1485 -0
- viam/gen/app/datapipelines/__init__.py +0 -0
- viam/gen/app/datapipelines/v1/__init__.py +0 -0
- viam/gen/app/datapipelines/v1/data_pipelines_grpc.py +84 -0
- viam/gen/app/datapipelines/v1/data_pipelines_pb2.py +56 -0
- viam/gen/app/datapipelines/v1/data_pipelines_pb2.pyi +370 -0
- viam/gen/app/dataset/__init__.py +0 -0
- viam/gen/app/dataset/v1/__init__.py +0 -0
- viam/gen/app/dataset/v1/dataset_grpc.py +60 -0
- viam/gen/app/dataset/v1/dataset_pb2.py +40 -0
- viam/gen/app/dataset/v1/dataset_pb2.pyi +179 -0
- viam/gen/app/datasync/__init__.py +0 -0
- viam/gen/app/datasync/v1/__init__.py +0 -0
- viam/gen/app/datasync/v1/data_sync_grpc.py +47 -0
- viam/gen/app/datasync/v1/data_sync_pb2.py +70 -0
- viam/gen/app/datasync/v1/data_sync_pb2.pyi +425 -0
- viam/gen/app/mlinference/__init__.py +0 -0
- viam/gen/app/mlinference/v1/__init__.py +0 -0
- viam/gen/app/mlinference/v1/ml_inference_grpc.py +28 -0
- viam/gen/app/mlinference/v1/ml_inference_pb2.py +23 -0
- viam/gen/app/mlinference/v1/ml_inference_pb2.pyi +63 -0
- viam/gen/app/mltraining/__init__.py +0 -0
- viam/gen/app/mltraining/v1/__init__.py +0 -0
- viam/gen/app/mltraining/v1/ml_training_grpc.py +78 -0
- viam/gen/app/mltraining/v1/ml_training_pb2.py +124 -0
- viam/gen/app/mltraining/v1/ml_training_pb2.pyi +415 -0
- viam/gen/app/packages/__init__.py +0 -0
- viam/gen/app/packages/v1/__init__.py +0 -0
- viam/gen/app/packages/v1/packages_grpc.py +54 -0
- viam/gen/app/packages/v1/packages_pb2.py +52 -0
- viam/gen/app/packages/v1/packages_pb2.pyi +311 -0
- viam/gen/app/v1/__init__.py +0 -0
- viam/gen/app/v1/app_grpc.py +863 -0
- viam/gen/app/v1/app_pb2.py +649 -0
- viam/gen/app/v1/app_pb2.pyi +5279 -0
- viam/gen/app/v1/billing_grpc.py +76 -0
- viam/gen/app/v1/billing_pb2.py +92 -0
- viam/gen/app/v1/billing_pb2.pyi +463 -0
- viam/gen/app/v1/end_user_grpc.py +59 -0
- viam/gen/app/v1/end_user_pb2.py +55 -0
- viam/gen/app/v1/end_user_pb2.pyi +181 -0
- viam/gen/app/v1/robot_grpc.py +55 -0
- viam/gen/app/v1/robot_pb2.py +127 -0
- viam/gen/app/v1/robot_pb2.pyi +1202 -0
- viam/gen/common/__init__.py +0 -0
- viam/gen/common/v1/__init__.py +0 -0
- viam/gen/common/v1/common_grpc.py +0 -0
- viam/gen/common/v1/common_pb2.py +78 -0
- viam/gen/common/v1/common_pb2.pyi +687 -0
- viam/gen/component/__init__.py +0 -0
- viam/gen/component/arm/__init__.py +0 -0
- viam/gen/component/arm/v1/__init__.py +0 -0
- viam/gen/component/arm/v1/arm_grpc.py +102 -0
- viam/gen/component/arm/v1/arm_pb2.py +74 -0
- viam/gen/component/arm/v1/arm_pb2.pyi +344 -0
- viam/gen/component/audioinput/__init__.py +0 -0
- viam/gen/component/audioinput/v1/__init__.py +0 -0
- viam/gen/component/audioinput/v1/audioinput_grpc.py +63 -0
- viam/gen/component/audioinput/v1/audioinput_pb2.py +45 -0
- viam/gen/component/audioinput/v1/audioinput_pb2.pyi +179 -0
- viam/gen/component/base/__init__.py +0 -0
- viam/gen/component/base/v1/__init__.py +0 -0
- viam/gen/component/base/v1/base_grpc.py +94 -0
- viam/gen/component/base/v1/base_pb2.py +66 -0
- viam/gen/component/base/v1/base_pb2.pyi +258 -0
- viam/gen/component/board/__init__.py +0 -0
- viam/gen/component/board/v1/__init__.py +0 -0
- viam/gen/component/board/v1/board_grpc.py +127 -0
- viam/gen/component/board/v1/board_pb2.py +103 -0
- viam/gen/component/board/v1/board_pb2.pyi +496 -0
- viam/gen/component/button/__init__.py +0 -0
- viam/gen/component/button/v1/__init__.py +0 -0
- viam/gen/component/button/v1/button_grpc.py +38 -0
- viam/gen/component/button/v1/button_pb2.py +28 -0
- viam/gen/component/button/v1/button_pb2.pyi +39 -0
- viam/gen/component/camera/__init__.py +0 -0
- viam/gen/component/camera/v1/__init__.py +0 -0
- viam/gen/component/camera/v1/camera_grpc.py +79 -0
- viam/gen/component/camera/v1/camera_pb2.py +67 -0
- viam/gen/component/camera/v1/camera_pb2.pyi +373 -0
- viam/gen/component/encoder/__init__.py +0 -0
- viam/gen/component/encoder/v1/__init__.py +0 -0
- viam/gen/component/encoder/v1/encoder_grpc.py +62 -0
- viam/gen/component/encoder/v1/encoder_pb2.py +44 -0
- viam/gen/component/encoder/v1/encoder_pb2.pyi +147 -0
- viam/gen/component/gantry/__init__.py +0 -0
- viam/gen/component/gantry/v1/__init__.py +0 -0
- viam/gen/component/gantry/v1/gantry_grpc.py +86 -0
- viam/gen/component/gantry/v1/gantry_pb2.py +62 -0
- viam/gen/component/gantry/v1/gantry_pb2.pyi +239 -0
- viam/gen/component/generic/__init__.py +0 -0
- viam/gen/component/generic/v1/__init__.py +0 -0
- viam/gen/component/generic/v1/generic_grpc.py +37 -0
- viam/gen/component/generic/v1/generic_pb2.py +23 -0
- viam/gen/component/generic/v1/generic_pb2.pyi +6 -0
- viam/gen/component/gripper/__init__.py +0 -0
- viam/gen/component/gripper/v1/__init__.py +0 -0
- viam/gen/component/gripper/v1/gripper_grpc.py +70 -0
- viam/gen/component/gripper/v1/gripper_pb2.py +48 -0
- viam/gen/component/gripper/v1/gripper_pb2.pyi +137 -0
- viam/gen/component/inputcontroller/__init__.py +0 -0
- viam/gen/component/inputcontroller/v1/__init__.py +0 -0
- viam/gen/component/inputcontroller/v1/input_controller_grpc.py +71 -0
- viam/gen/component/inputcontroller/v1/input_controller_pb2.py +55 -0
- viam/gen/component/inputcontroller/v1/input_controller_pb2.pyi +243 -0
- viam/gen/component/motor/__init__.py +0 -0
- viam/gen/component/motor/v1/__init__.py +0 -0
- viam/gen/component/motor/v1/motor_grpc.py +118 -0
- viam/gen/component/motor/v1/motor_pb2.py +86 -0
- viam/gen/component/motor/v1/motor_pb2.pyi +368 -0
- viam/gen/component/movementsensor/__init__.py +0 -0
- viam/gen/component/movementsensor/v1/__init__.py +0 -0
- viam/gen/component/movementsensor/v1/movementsensor_grpc.py +110 -0
- viam/gen/component/movementsensor/v1/movementsensor_pb2.py +78 -0
- viam/gen/component/movementsensor/v1/movementsensor_pb2.pyi +384 -0
- viam/gen/component/posetracker/__init__.py +0 -0
- viam/gen/component/posetracker/v1/__init__.py +0 -0
- viam/gen/component/posetracker/v1/pose_tracker_grpc.py +46 -0
- viam/gen/component/posetracker/v1/pose_tracker_pb2.py +34 -0
- viam/gen/component/posetracker/v1/pose_tracker_pb2.pyi +79 -0
- viam/gen/component/powersensor/__init__.py +0 -0
- viam/gen/component/powersensor/v1/__init__.py +0 -0
- viam/gen/component/powersensor/v1/powersensor_grpc.py +62 -0
- viam/gen/component/powersensor/v1/powersensor_pb2.py +42 -0
- viam/gen/component/powersensor/v1/powersensor_pb2.pyi +124 -0
- viam/gen/component/sensor/__init__.py +0 -0
- viam/gen/component/sensor/v1/__init__.py +0 -0
- viam/gen/component/sensor/v1/sensor_grpc.py +45 -0
- viam/gen/component/sensor/v1/sensor_pb2.py +25 -0
- viam/gen/component/sensor/v1/sensor_pb2.pyi +6 -0
- viam/gen/component/servo/__init__.py +0 -0
- viam/gen/component/servo/v1/__init__.py +0 -0
- viam/gen/component/servo/v1/servo_grpc.py +70 -0
- viam/gen/component/servo/v1/servo_pb2.py +50 -0
- viam/gen/component/servo/v1/servo_pb2.pyi +150 -0
- viam/gen/component/switch/__init__.py +0 -0
- viam/gen/component/switch/v1/__init__.py +0 -0
- viam/gen/component/switch/v1/switch_grpc.py +54 -0
- viam/gen/component/switch/v1/switch_pb2.py +40 -0
- viam/gen/component/switch/v1/switch_pb2.pyi +109 -0
- viam/gen/component/testecho/__init__.py +0 -0
- viam/gen/component/testecho/v1/__init__.py +0 -0
- viam/gen/component/testecho/v1/testecho_grpc.py +52 -0
- viam/gen/component/testecho/v1/testecho_pb2.py +36 -0
- viam/gen/component/testecho/v1/testecho_pb2.pyi +114 -0
- viam/gen/module/__init__.py +0 -0
- viam/gen/module/v1/__init__.py +0 -0
- viam/gen/module/v1/module_grpc.py +61 -0
- viam/gen/module/v1/module_pb2.py +43 -0
- viam/gen/module/v1/module_pb2.pyi +211 -0
- viam/gen/proto/__init__.py +0 -0
- viam/gen/proto/rpc/__init__.py +0 -0
- viam/gen/proto/rpc/examples/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echo/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echo/v1/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_grpc.py +44 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_pb2.py +32 -0
- viam/gen/proto/rpc/examples/echo/v1/echo_pb2.pyi +87 -0
- viam/gen/proto/rpc/examples/echoresource/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echoresource/v1/__init__.py +0 -0
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_grpc.py +43 -0
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.py +29 -0
- viam/gen/proto/rpc/examples/echoresource/v1/echoresource_pb2.pyi +93 -0
- viam/gen/proto/rpc/v1/__init__.py +0 -0
- viam/gen/proto/rpc/v1/auth_grpc.py +47 -0
- viam/gen/proto/rpc/v1/auth_pb2.py +34 -0
- viam/gen/proto/rpc/v1/auth_pb2.pyi +92 -0
- viam/gen/proto/rpc/webrtc/__init__.py +0 -0
- viam/gen/proto/rpc/webrtc/v1/__init__.py +0 -0
- viam/gen/proto/rpc/webrtc/v1/grpc_grpc.py +0 -0
- viam/gen/proto/rpc/webrtc/v1/grpc_pb2.py +43 -0
- viam/gen/proto/rpc/webrtc/v1/grpc_pb2.pyi +304 -0
- viam/gen/proto/rpc/webrtc/v1/signaling_grpc.py +54 -0
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.py +70 -0
- viam/gen/proto/rpc/webrtc/v1/signaling_pb2.pyi +496 -0
- viam/gen/provisioning/__init__.py +0 -0
- viam/gen/provisioning/v1/__init__.py +0 -0
- viam/gen/provisioning/v1/provisioning_grpc.py +51 -0
- viam/gen/provisioning/v1/provisioning_pb2.py +39 -0
- viam/gen/provisioning/v1/provisioning_pb2.pyi +188 -0
- viam/gen/robot/__init__.py +0 -0
- viam/gen/robot/v1/__init__.py +0 -0
- viam/gen/robot/v1/robot_grpc.py +208 -0
- viam/gen/robot/v1/robot_pb2.py +188 -0
- viam/gen/robot/v1/robot_pb2.pyi +1020 -0
- viam/gen/service/__init__.py +0 -0
- viam/gen/service/datamanager/__init__.py +0 -0
- viam/gen/service/datamanager/v1/__init__.py +0 -0
- viam/gen/service/datamanager/v1/data_manager_grpc.py +38 -0
- viam/gen/service/datamanager/v1/data_manager_pb2.py +28 -0
- viam/gen/service/datamanager/v1/data_manager_pb2.pyi +39 -0
- viam/gen/service/discovery/__init__.py +0 -0
- viam/gen/service/discovery/v1/__init__.py +0 -0
- viam/gen/service/discovery/v1/discovery_grpc.py +39 -0
- viam/gen/service/discovery/v1/discovery_pb2.py +29 -0
- viam/gen/service/discovery/v1/discovery_pb2.pyi +51 -0
- viam/gen/service/generic/__init__.py +0 -0
- viam/gen/service/generic/v1/__init__.py +0 -0
- viam/gen/service/generic/v1/generic_grpc.py +29 -0
- viam/gen/service/generic/v1/generic_pb2.py +21 -0
- viam/gen/service/generic/v1/generic_pb2.pyi +6 -0
- viam/gen/service/mlmodel/__init__.py +0 -0
- viam/gen/service/mlmodel/v1/__init__.py +0 -0
- viam/gen/service/mlmodel/v1/mlmodel_grpc.py +37 -0
- viam/gen/service/mlmodel/v1/mlmodel_pb2.py +83 -0
- viam/gen/service/mlmodel/v1/mlmodel_pb2.pyi +480 -0
- viam/gen/service/motion/__init__.py +0 -0
- viam/gen/service/motion/v1/__init__.py +0 -0
- viam/gen/service/motion/v1/motion_grpc.py +87 -0
- viam/gen/service/motion/v1/motion_pb2.py +97 -0
- viam/gen/service/motion/v1/motion_pb2.pyi +838 -0
- viam/gen/service/navigation/__init__.py +0 -0
- viam/gen/service/navigation/v1/__init__.py +0 -0
- viam/gen/service/navigation/v1/navigation_grpc.py +102 -0
- viam/gen/service/navigation/v1/navigation_pb2.py +84 -0
- viam/gen/service/navigation/v1/navigation_pb2.pyi +419 -0
- viam/gen/service/sensors/__init__.py +0 -0
- viam/gen/service/sensors/v1/__init__.py +0 -0
- viam/gen/service/sensors/v1/sensors_grpc.py +46 -0
- viam/gen/service/sensors/v1/sensors_pb2.py +68 -0
- viam/gen/service/sensors/v1/sensors_pb2.pyi +137 -0
- viam/gen/service/shell/__init__.py +0 -0
- viam/gen/service/shell/v1/__init__.py +0 -0
- viam/gen/service/shell/v1/shell_grpc.py +55 -0
- viam/gen/service/shell/v1/shell_pb2.py +45 -0
- viam/gen/service/shell/v1/shell_pb2.pyi +307 -0
- viam/gen/service/slam/__init__.py +0 -0
- viam/gen/service/slam/v1/__init__.py +0 -0
- viam/gen/service/slam/v1/slam_grpc.py +61 -0
- viam/gen/service/slam/v1/slam_pb2.py +51 -0
- viam/gen/service/slam/v1/slam_pb2.pyi +213 -0
- viam/gen/service/vision/__init__.py +0 -0
- viam/gen/service/vision/v1/__init__.py +0 -0
- viam/gen/service/vision/v1/vision_grpc.py +87 -0
- viam/gen/service/vision/v1/vision_pb2.py +69 -0
- viam/gen/service/vision/v1/vision_pb2.pyi +454 -0
- viam/gen/stream/__init__.py +0 -0
- viam/gen/stream/v1/__init__.py +0 -0
- viam/gen/stream/v1/stream_grpc.py +59 -0
- viam/gen/stream/v1/stream_pb2.py +39 -0
- viam/gen/stream/v1/stream_pb2.pyi +161 -0
- viam/gen/tagger/__init__.py +0 -0
- viam/gen/tagger/v1/__init__.py +0 -0
- viam/gen/tagger/v1/tagger_grpc.py +0 -0
- viam/gen/tagger/v1/tagger_pb2.py +16 -0
- viam/gen/tagger/v1/tagger_pb2.pyi +15 -0
- viam/logging.py +216 -0
- viam/media/__init__.py +0 -0
- viam/media/audio.py +16 -0
- viam/media/utils/__init__.py +0 -0
- viam/media/utils/pil/__init__.py +51 -0
- viam/media/utils/pil/viam_rgba_plugin.py +73 -0
- viam/media/viam_rgba.py +10 -0
- viam/media/video.py +217 -0
- viam/module/__init__.py +5 -0
- viam/module/module.py +281 -0
- viam/module/service.py +66 -0
- viam/module/types.py +23 -0
- viam/operations.py +124 -0
- viam/proto/__init__.py +0 -0
- viam/proto/app/__init__.py +554 -0
- viam/proto/app/agent/__init__.py +28 -0
- viam/proto/app/billing.py +58 -0
- viam/proto/app/cloudslam/__init__.py +48 -0
- viam/proto/app/data/__init__.py +138 -0
- viam/proto/app/datapipelines/__init__.py +56 -0
- viam/proto/app/dataset/__init__.py +36 -0
- viam/proto/app/datasync/__init__.py +44 -0
- viam/proto/app/end_user.py +34 -0
- viam/proto/app/mlinference/__init__.py +15 -0
- viam/proto/app/mltraining/__init__.py +52 -0
- viam/proto/app/packages/__init__.py +38 -0
- viam/proto/app/robot.py +84 -0
- viam/proto/common/__init__.py +66 -0
- viam/proto/component/__init__.py +0 -0
- viam/proto/component/arm/__init__.py +48 -0
- viam/proto/component/audioinput/__init__.py +30 -0
- viam/proto/component/base/__init__.py +42 -0
- viam/proto/component/board/__init__.py +62 -0
- viam/proto/component/button/__init__.py +15 -0
- viam/proto/component/camera/__init__.py +46 -0
- viam/proto/component/encoder/__init__.py +28 -0
- viam/proto/component/gantry/__init__.py +40 -0
- viam/proto/component/generic/__init__.py +12 -0
- viam/proto/component/gripper/__init__.py +30 -0
- viam/proto/component/inputcontroller/__init__.py +38 -0
- viam/proto/component/motor/__init__.py +56 -0
- viam/proto/component/movementsensor/__init__.py +50 -0
- viam/proto/component/posetracker/__init__.py +19 -0
- viam/proto/component/powersensor/__init__.py +30 -0
- viam/proto/component/sensor/__init__.py +12 -0
- viam/proto/component/servo/__init__.py +32 -0
- viam/proto/component/switch/__init__.py +26 -0
- viam/proto/component/testecho/__init__.py +30 -0
- viam/proto/module/__init__.py +38 -0
- viam/proto/provisioning/__init__.py +36 -0
- viam/proto/robot/__init__.py +130 -0
- viam/proto/rpc/__init__.py +0 -0
- viam/proto/rpc/auth.py +34 -0
- viam/proto/rpc/examples/__init__.py +0 -0
- viam/proto/rpc/examples/echo/__init__.py +26 -0
- viam/proto/rpc/examples/echoresource/__init__.py +30 -0
- viam/proto/rpc/webrtc/__init__.py +0 -0
- viam/proto/rpc/webrtc/grpc.py +36 -0
- viam/proto/rpc/webrtc/signaling.py +58 -0
- viam/proto/service/__init__.py +0 -0
- viam/proto/service/datamanager/__init__.py +19 -0
- viam/proto/service/discovery/__init__.py +15 -0
- viam/proto/service/generic/__init__.py +12 -0
- viam/proto/service/mlmodel/__init__.py +54 -0
- viam/proto/service/motion/__init__.py +68 -0
- viam/proto/service/navigation/__init__.py +58 -0
- viam/proto/service/sensors/__init__.py +18 -0
- viam/proto/service/shell/__init__.py +36 -0
- viam/proto/service/slam/__init__.py +36 -0
- viam/proto/service/vision/__init__.py +46 -0
- viam/proto/stream/__init__.py +36 -0
- viam/proto/tagger/__init__.py +6 -0
- viam/py.typed +0 -0
- viam/resource/__init__.py +0 -0
- viam/resource/base.py +123 -0
- viam/resource/easy_resource.py +153 -0
- viam/resource/manager.py +126 -0
- viam/resource/registry.py +199 -0
- viam/resource/rpc_client_base.py +65 -0
- viam/resource/rpc_service_base.py +48 -0
- viam/resource/types.py +213 -0
- viam/robot/__init__.py +0 -0
- viam/robot/client.py +909 -0
- viam/robot/service.py +69 -0
- viam/rpc/__init__.py +0 -0
- viam/rpc/dial.py +420 -0
- viam/rpc/libviam_rust_utils.dll +0 -0
- viam/rpc/server.py +201 -0
- viam/rpc/signaling.py +29 -0
- viam/rpc/types.py +22 -0
- viam/services/__init__.py +0 -0
- viam/services/discovery/__init__.py +12 -0
- viam/services/discovery/client.py +55 -0
- viam/services/discovery/discovery.py +52 -0
- viam/services/discovery/service.py +43 -0
- viam/services/generic/__init__.py +18 -0
- viam/services/generic/client.py +58 -0
- viam/services/generic/generic.py +58 -0
- viam/services/generic/service.py +29 -0
- viam/services/mlmodel/__init__.py +24 -0
- viam/services/mlmodel/client.py +37 -0
- viam/services/mlmodel/mlmodel.py +78 -0
- viam/services/mlmodel/service.py +38 -0
- viam/services/mlmodel/utils.py +101 -0
- viam/services/motion/__init__.py +17 -0
- viam/services/motion/client.py +215 -0
- viam/services/motion/motion.py +378 -0
- viam/services/motion/service.py +132 -0
- viam/services/navigation/__init__.py +11 -0
- viam/services/navigation/client.py +99 -0
- viam/services/navigation/navigation.py +250 -0
- viam/services/navigation/service.py +137 -0
- viam/services/service_base.py +78 -0
- viam/services/service_client_base.py +46 -0
- viam/services/slam/__init__.py +17 -0
- viam/services/slam/client.py +62 -0
- viam/services/slam/service.py +75 -0
- viam/services/slam/slam.py +111 -0
- viam/services/vision/__init__.py +15 -0
- viam/services/vision/client.py +206 -0
- viam/services/vision/service.py +146 -0
- viam/services/vision/vision.py +315 -0
- viam/sessions_client.py +245 -0
- viam/streams.py +44 -0
- viam/utils.py +365 -0
- viam/version_metadata.py +4 -0
- viam_sdk-0.45.2.dist-info/METADATA +157 -0
- viam_sdk-0.45.2.dist-info/RECORD +476 -0
- viam_sdk-0.45.2.dist-info/WHEEL +4 -0
- viam_sdk-0.45.2.dist-info/licenses/LICENSE +202 -0
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
import abc
|
|
2
|
+
import sys
|
|
3
|
+
from datetime import timedelta
|
|
4
|
+
from typing import Any, Dict, Final, List, Optional
|
|
5
|
+
|
|
6
|
+
from viam.proto.component.board import PowerMode, ReadAnalogReaderResponse, StreamTicksResponse
|
|
7
|
+
from viam.resource.types import API, RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT
|
|
8
|
+
from viam.streams import Stream
|
|
9
|
+
|
|
10
|
+
from ..component_base import ComponentBase
|
|
11
|
+
|
|
12
|
+
if sys.version_info >= (3, 10):
|
|
13
|
+
from typing import TypeAlias
|
|
14
|
+
else:
|
|
15
|
+
from typing_extensions import TypeAlias
|
|
16
|
+
|
|
17
|
+
Tick = StreamTicksResponse
|
|
18
|
+
TickStream = Stream[Tick]
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class Board(ComponentBase):
|
|
22
|
+
"""
|
|
23
|
+
Board represents a physical general purpose compute board that contains various
|
|
24
|
+
components such as analog readers/writers, and digital interrupts.
|
|
25
|
+
|
|
26
|
+
This acts as an abstract base class for any drivers representing specific
|
|
27
|
+
board implementations. This cannot be used on its own. If the ``__init__()`` function is
|
|
28
|
+
overridden, it must call the ``super().__init__()`` function.
|
|
29
|
+
|
|
30
|
+
::
|
|
31
|
+
|
|
32
|
+
from viam.components.board import Board
|
|
33
|
+
|
|
34
|
+
For more information, see `Board component <https://docs.viam.com/dev/reference/apis/components/board/>`_.
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
API: Final = API( # pyright: ignore [reportIncompatibleVariableOverride]
|
|
38
|
+
RESOURCE_NAMESPACE_RDK, RESOURCE_TYPE_COMPONENT, "board"
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
class Analog:
|
|
42
|
+
"""
|
|
43
|
+
Analog represents an analog pin reader or writer that resides on a Board.
|
|
44
|
+
"""
|
|
45
|
+
|
|
46
|
+
name: str
|
|
47
|
+
"""The name of the analog pin"""
|
|
48
|
+
|
|
49
|
+
Value: "TypeAlias" = ReadAnalogReaderResponse
|
|
50
|
+
"""
|
|
51
|
+
Value contains the result of reading an analog reader. It contains the raw data read,
|
|
52
|
+
the reader's minimum and maximum possible values, and its step size (the minimum possible
|
|
53
|
+
change between values it can read).
|
|
54
|
+
|
|
55
|
+
For more information, see `analogs <https://docs.viam.com/dev/reference/apis/components/board/#analogs>`_.
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
def __init__(self, name: str):
|
|
59
|
+
self.name = name
|
|
60
|
+
|
|
61
|
+
@abc.abstractmethod
|
|
62
|
+
async def read(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> Value:
|
|
63
|
+
"""
|
|
64
|
+
Read the current value from the reader.
|
|
65
|
+
|
|
66
|
+
::
|
|
67
|
+
|
|
68
|
+
my_board = Board.from_robot(robot=machine, name="my_board")
|
|
69
|
+
|
|
70
|
+
# Get the Analog "my_example_analog_reader".
|
|
71
|
+
reader = await my_board.analog_by_name(
|
|
72
|
+
name="my_example_analog_reader")
|
|
73
|
+
|
|
74
|
+
# Get the value of the digital signal "my_example_analog_reader" has most
|
|
75
|
+
# recently measured.
|
|
76
|
+
reading = await reader.read()
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
Value: The current value, including the min, max, and step_size of the reader.
|
|
80
|
+
|
|
81
|
+
For more information, see `Board component Analog API <https://docs.viam.com/dev/reference/apis/components/board/#analog-api>`_.
|
|
82
|
+
"""
|
|
83
|
+
...
|
|
84
|
+
|
|
85
|
+
@abc.abstractmethod
|
|
86
|
+
async def write(self, value: int, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs):
|
|
87
|
+
"""
|
|
88
|
+
Write a value to the Analog writer.
|
|
89
|
+
|
|
90
|
+
::
|
|
91
|
+
|
|
92
|
+
my_board = Board.from_robot(robot=machine, name="my_board")
|
|
93
|
+
|
|
94
|
+
# Get the Analog "my_example_analog_writer".
|
|
95
|
+
writer = await my_board.analog_by_name(
|
|
96
|
+
name="my_example_analog_writer")
|
|
97
|
+
|
|
98
|
+
await writer.write(42)
|
|
99
|
+
|
|
100
|
+
Args:
|
|
101
|
+
value (int): Value to write to the analog writer.
|
|
102
|
+
|
|
103
|
+
For more information, see `Board component Analog API <https://docs.viam.com/dev/reference/apis/components/board/#analog-api>`_.
|
|
104
|
+
"""
|
|
105
|
+
...
|
|
106
|
+
|
|
107
|
+
class DigitalInterrupt:
|
|
108
|
+
"""
|
|
109
|
+
DigitalInterrupt represents a configured interrupt on the Board that
|
|
110
|
+
when interrupted, calls the added callbacks. Post processors can
|
|
111
|
+
be added to modify what Value it ultimately returns.
|
|
112
|
+
|
|
113
|
+
For more information, see `digital_interrupts <https://docs.viam.com/dev/reference/apis/components/board/#digital_interrupts>`_.
|
|
114
|
+
"""
|
|
115
|
+
|
|
116
|
+
name: str
|
|
117
|
+
"""The name of the digital interrupt."""
|
|
118
|
+
|
|
119
|
+
def __init__(self, name: str):
|
|
120
|
+
self.name = name
|
|
121
|
+
|
|
122
|
+
@abc.abstractmethod
|
|
123
|
+
async def value(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> int:
|
|
124
|
+
"""
|
|
125
|
+
Get the current value of the interrupt,
|
|
126
|
+
which is based on the type of interrupt.
|
|
127
|
+
|
|
128
|
+
::
|
|
129
|
+
|
|
130
|
+
my_board = Board.from_robot(robot=machine, name="my_board")
|
|
131
|
+
|
|
132
|
+
# Get the DigitalInterrupt "my_example_digital_interrupt".
|
|
133
|
+
interrupt = await my_board.digital_interrupt_by_name(
|
|
134
|
+
name="my_example_digital_interrupt")
|
|
135
|
+
|
|
136
|
+
# Get the amount of times this DigitalInterrupt has been interrupted with a
|
|
137
|
+
# tick.
|
|
138
|
+
count = await interrupt.value()
|
|
139
|
+
|
|
140
|
+
Returns:
|
|
141
|
+
int: The current value.
|
|
142
|
+
|
|
143
|
+
For more information, see
|
|
144
|
+
`Board component DigitalInterrupt API <https://docs.viam.com/dev/reference/apis/components/board/#digitalinterrupt-api>`_.
|
|
145
|
+
"""
|
|
146
|
+
...
|
|
147
|
+
|
|
148
|
+
class GPIOPin:
|
|
149
|
+
"""
|
|
150
|
+
Abstract representation of an individual GPIO pin on a board.
|
|
151
|
+
"""
|
|
152
|
+
|
|
153
|
+
name: str
|
|
154
|
+
"""The name of the GPIO pin."""
|
|
155
|
+
|
|
156
|
+
def __init__(self, name: str):
|
|
157
|
+
self.name = name
|
|
158
|
+
|
|
159
|
+
@abc.abstractmethod
|
|
160
|
+
async def set(self, high: bool, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs):
|
|
161
|
+
"""
|
|
162
|
+
Set the pin to either low or high.
|
|
163
|
+
|
|
164
|
+
::
|
|
165
|
+
|
|
166
|
+
my_board = Board.from_robot(robot=machine, name="my_board")
|
|
167
|
+
|
|
168
|
+
# Get the GPIOPin with pin number 15.
|
|
169
|
+
pin = await my_board.gpio_pin_by_name(name="15")
|
|
170
|
+
|
|
171
|
+
# Set the pin to high.
|
|
172
|
+
await pin.set(high=True)
|
|
173
|
+
|
|
174
|
+
Args:
|
|
175
|
+
high (bool): When true, sets the pin to high. When false, sets the pin to low.
|
|
176
|
+
|
|
177
|
+
For more information, see `GPIOPin API <https://docs.viam.com/dev/reference/apis/components/board/#gpiopin-api>`_.
|
|
178
|
+
"""
|
|
179
|
+
...
|
|
180
|
+
|
|
181
|
+
@abc.abstractmethod
|
|
182
|
+
async def get(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> bool:
|
|
183
|
+
"""
|
|
184
|
+
Get the high/low state of the pin.
|
|
185
|
+
|
|
186
|
+
::
|
|
187
|
+
|
|
188
|
+
my_board = Board.from_robot(robot=machine, name="my_board")
|
|
189
|
+
|
|
190
|
+
# Get the GPIOPin with pin number 15.
|
|
191
|
+
pin = await my_board.gpio_pin_by_name(name="15")
|
|
192
|
+
|
|
193
|
+
# Get if it is true or false that the state of the pin is high.
|
|
194
|
+
high = await pin.get()
|
|
195
|
+
|
|
196
|
+
Returns:
|
|
197
|
+
bool: Indicates if the state of the pin is high.
|
|
198
|
+
|
|
199
|
+
For more information, see `GPIOPin API <https://docs.viam.com/dev/reference/apis/components/board/#gpiopin-api>`_.
|
|
200
|
+
"""
|
|
201
|
+
...
|
|
202
|
+
|
|
203
|
+
@abc.abstractmethod
|
|
204
|
+
async def get_pwm(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> float:
|
|
205
|
+
"""
|
|
206
|
+
Get the pin's given duty cycle.
|
|
207
|
+
|
|
208
|
+
::
|
|
209
|
+
|
|
210
|
+
my_board = Board.from_robot(robot=machine, name="my_board")
|
|
211
|
+
|
|
212
|
+
# Get the GPIOPin with pin number 15.
|
|
213
|
+
pin = await my_board.gpio_pin_by_name(name="15")
|
|
214
|
+
|
|
215
|
+
# Get if it is true or false that the state of the pin is high.
|
|
216
|
+
duty_cycle = await pin.get_pwm()
|
|
217
|
+
|
|
218
|
+
Returns:
|
|
219
|
+
float: The duty cycle.
|
|
220
|
+
|
|
221
|
+
For more information, see `GPIOPin API <https://docs.viam.com/dev/reference/apis/components/board/#gpiopin-api>`_.
|
|
222
|
+
"""
|
|
223
|
+
...
|
|
224
|
+
|
|
225
|
+
@abc.abstractmethod
|
|
226
|
+
async def set_pwm(self, duty_cycle: float, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs):
|
|
227
|
+
"""
|
|
228
|
+
Set the pin to the given ``duty_cycle``.
|
|
229
|
+
|
|
230
|
+
::
|
|
231
|
+
|
|
232
|
+
my_board = Board.from_robot(robot=machine, name="my_board")
|
|
233
|
+
|
|
234
|
+
# Get the GPIOPin with pin number 15.
|
|
235
|
+
pin = await my_board.gpio_pin_by_name(name="15")
|
|
236
|
+
|
|
237
|
+
# Set the duty cycle to .6, meaning that this pin will be in the high state for
|
|
238
|
+
# 60% of the duration of the PWM interval period.
|
|
239
|
+
await pin.set_pwm(duty_cycle=.6)
|
|
240
|
+
|
|
241
|
+
Args:
|
|
242
|
+
duty_cycle (float): The duty cycle.
|
|
243
|
+
|
|
244
|
+
For more information, see `GPIOPin API <https://docs.viam.com/dev/reference/apis/components/board/#gpiopin-api>`_.
|
|
245
|
+
"""
|
|
246
|
+
...
|
|
247
|
+
|
|
248
|
+
@abc.abstractmethod
|
|
249
|
+
async def get_pwm_frequency(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> int:
|
|
250
|
+
"""
|
|
251
|
+
Get the PWM frequency of the pin.
|
|
252
|
+
|
|
253
|
+
::
|
|
254
|
+
|
|
255
|
+
my_board = Board.from_robot(robot=machine, name="my_board")
|
|
256
|
+
|
|
257
|
+
# Get the GPIOPin with pin number 15.
|
|
258
|
+
pin = await my_board.gpio_pin_by_name(name="15")
|
|
259
|
+
|
|
260
|
+
# Get the PWM frequency of this pin.
|
|
261
|
+
freq = await pin.get_pwm_frequency()
|
|
262
|
+
|
|
263
|
+
Returns:
|
|
264
|
+
int: The PWM frequency.
|
|
265
|
+
|
|
266
|
+
For more information, see `GPIOPin API <https://docs.viam.com/dev/reference/apis/components/board/#gpiopin-api>`_.
|
|
267
|
+
"""
|
|
268
|
+
...
|
|
269
|
+
|
|
270
|
+
@abc.abstractmethod
|
|
271
|
+
async def set_pwm_frequency(
|
|
272
|
+
self,
|
|
273
|
+
frequency: int,
|
|
274
|
+
*,
|
|
275
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
276
|
+
timeout: Optional[float] = None,
|
|
277
|
+
**kwargs,
|
|
278
|
+
):
|
|
279
|
+
"""
|
|
280
|
+
Set the pin to the given PWM ``frequency`` (in Hz).
|
|
281
|
+
When ``frequency`` is 0, it will use the board's default PWM frequency.
|
|
282
|
+
|
|
283
|
+
::
|
|
284
|
+
|
|
285
|
+
my_board = Board.from_robot(robot=machine, name="my_board")
|
|
286
|
+
|
|
287
|
+
# Get the GPIOPin with pin number 15.
|
|
288
|
+
pin = await my_board.gpio_pin_by_name(name="15")
|
|
289
|
+
|
|
290
|
+
# Set the PWM frequency of this pin to 1600 Hz.
|
|
291
|
+
high = await pin.set_pwm_frequency(frequency=1600)
|
|
292
|
+
|
|
293
|
+
Args:
|
|
294
|
+
frequency (int): The frequency, in Hz.
|
|
295
|
+
|
|
296
|
+
For more information, see `GPIOPin API <https://docs.viam.com/dev/reference/apis/components/board/#gpiopin-api>`_.
|
|
297
|
+
"""
|
|
298
|
+
...
|
|
299
|
+
|
|
300
|
+
@abc.abstractmethod
|
|
301
|
+
async def analog_by_name(self, name: str) -> Analog:
|
|
302
|
+
"""
|
|
303
|
+
Get an Analog (reader or writer) by ``name``.
|
|
304
|
+
|
|
305
|
+
::
|
|
306
|
+
|
|
307
|
+
my_board = Board.from_robot(robot=machine, name="my_board")
|
|
308
|
+
|
|
309
|
+
# Get the Analog "my_example_analog_reader".
|
|
310
|
+
reader = await my_board.analog_by_name(name="my_example_analog_reader")
|
|
311
|
+
|
|
312
|
+
Args:
|
|
313
|
+
name (str): Name of the analog reader to be retrieved.
|
|
314
|
+
|
|
315
|
+
Returns:
|
|
316
|
+
Analog: The analog reader or writer.
|
|
317
|
+
|
|
318
|
+
For more information, see `Board component <https://docs.viam.com/dev/reference/apis/components/board/#analogbyname>`_.
|
|
319
|
+
"""
|
|
320
|
+
...
|
|
321
|
+
|
|
322
|
+
@abc.abstractmethod
|
|
323
|
+
async def digital_interrupt_by_name(self, name: str) -> DigitalInterrupt:
|
|
324
|
+
"""
|
|
325
|
+
Get a DigitalInterrupt by ``name``.
|
|
326
|
+
|
|
327
|
+
::
|
|
328
|
+
|
|
329
|
+
my_board = Board.from_robot(robot=machine, name="my_board")
|
|
330
|
+
|
|
331
|
+
# Get the DigitalInterrupt "my_example_digital_interrupt".
|
|
332
|
+
interrupt = await my_board.digital_interrupt_by_name(
|
|
333
|
+
name="my_example_digital_interrupt")
|
|
334
|
+
|
|
335
|
+
Args:
|
|
336
|
+
name (str): Name of the digital interrupt.
|
|
337
|
+
|
|
338
|
+
Returns:
|
|
339
|
+
DigitalInterrupt: The digital interrupt.
|
|
340
|
+
|
|
341
|
+
For more information, see `Board component <https://docs.viam.com/dev/reference/apis/components/board/#digitalinterruptbyname>`_.
|
|
342
|
+
"""
|
|
343
|
+
...
|
|
344
|
+
|
|
345
|
+
@abc.abstractmethod
|
|
346
|
+
async def gpio_pin_by_name(self, name: str) -> GPIOPin:
|
|
347
|
+
"""
|
|
348
|
+
Get a GPIO Pin by ``name``.
|
|
349
|
+
|
|
350
|
+
::
|
|
351
|
+
|
|
352
|
+
my_board = Board.from_robot(robot=machine, name="my_board")
|
|
353
|
+
|
|
354
|
+
# Get the GPIOPin with pin number 15.
|
|
355
|
+
pin = await my_board.gpio_pin_by_name(name="15")
|
|
356
|
+
|
|
357
|
+
Args:
|
|
358
|
+
name (str): Name of the GPIO pin.
|
|
359
|
+
|
|
360
|
+
Returns:
|
|
361
|
+
GPIOPin: The pin.
|
|
362
|
+
|
|
363
|
+
For more information, see `Board component <https://docs.viam.com/dev/reference/apis/components/board/#gpiopinbyname>`_.
|
|
364
|
+
"""
|
|
365
|
+
...
|
|
366
|
+
|
|
367
|
+
@abc.abstractmethod
|
|
368
|
+
async def set_power_mode(
|
|
369
|
+
self, mode: PowerMode.ValueType, duration: Optional[timedelta] = None, *, timeout: Optional[float] = None, **kwargs
|
|
370
|
+
):
|
|
371
|
+
"""
|
|
372
|
+
Set the board to the indicated power mode.
|
|
373
|
+
|
|
374
|
+
::
|
|
375
|
+
|
|
376
|
+
my_board = Board.from_robot(robot=machine, name="my_board")
|
|
377
|
+
|
|
378
|
+
# Set the power mode of the board to OFFLINE_DEEP.
|
|
379
|
+
status = await my_board.set_power_mode(mode=PowerMode.POWER_MODE_OFFLINE_DEEP)
|
|
380
|
+
|
|
381
|
+
Args:
|
|
382
|
+
mode (PowerMode): The desired power mode.
|
|
383
|
+
duration (Optional[timedelta]): Requested duration to stay in power mode.
|
|
384
|
+
|
|
385
|
+
For more information, see `Board component <https://docs.viam.com/dev/reference/apis/components/board/#setpowermode>`_.
|
|
386
|
+
"""
|
|
387
|
+
...
|
|
388
|
+
|
|
389
|
+
@abc.abstractmethod
|
|
390
|
+
async def stream_ticks(self, interrupts: List[DigitalInterrupt], *, timeout: Optional[float] = None, **kwargs) -> TickStream:
|
|
391
|
+
"""
|
|
392
|
+
Stream digital interrupt ticks.
|
|
393
|
+
|
|
394
|
+
::
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
my_board = Board.from_robot(robot=machine, name="my_board")
|
|
398
|
+
di8 = await my_board.digital_interrupt_by_name(name="8")
|
|
399
|
+
di11 = await my_board.digital_interrupt_by_name(name="11")
|
|
400
|
+
|
|
401
|
+
# Iterate over stream of ticks from pins 8 and 11.
|
|
402
|
+
async for tick in await my_board.stream_ticks([di8, di11]):
|
|
403
|
+
print(f"Pin {tick.pin_name} changed to {'high' if tick.high else 'low'} at {tick.time}")
|
|
404
|
+
|
|
405
|
+
|
|
406
|
+
Args:
|
|
407
|
+
interrupts (List[DigitalInterrupt]) : list of digital interrupts to receive ticks from.
|
|
408
|
+
|
|
409
|
+
Returns:
|
|
410
|
+
TickStream: stream of ticks.
|
|
411
|
+
|
|
412
|
+
For more information, see `Board component <https://docs.viam.com/dev/reference/apis/components/board/#streamticks>`_.
|
|
413
|
+
"""
|
|
414
|
+
...
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
from datetime import timedelta
|
|
2
|
+
from typing import Any, Dict, List, Mapping, Optional
|
|
3
|
+
|
|
4
|
+
from google.protobuf.duration_pb2 import Duration
|
|
5
|
+
from grpclib.client import Channel
|
|
6
|
+
from grpclib.client import Stream as ClientStream
|
|
7
|
+
|
|
8
|
+
from viam.proto.common import DoCommandRequest, DoCommandResponse, Geometry
|
|
9
|
+
from viam.proto.component.board import (
|
|
10
|
+
BoardServiceStub,
|
|
11
|
+
GetDigitalInterruptValueRequest,
|
|
12
|
+
GetDigitalInterruptValueResponse,
|
|
13
|
+
GetGPIORequest,
|
|
14
|
+
GetGPIOResponse,
|
|
15
|
+
PowerMode,
|
|
16
|
+
PWMFrequencyRequest,
|
|
17
|
+
PWMFrequencyResponse,
|
|
18
|
+
PWMRequest,
|
|
19
|
+
PWMResponse,
|
|
20
|
+
ReadAnalogReaderRequest,
|
|
21
|
+
SetGPIORequest,
|
|
22
|
+
SetPowerModeRequest,
|
|
23
|
+
SetPWMFrequencyRequest,
|
|
24
|
+
SetPWMRequest,
|
|
25
|
+
StreamTicksRequest,
|
|
26
|
+
StreamTicksResponse,
|
|
27
|
+
WriteAnalogRequest,
|
|
28
|
+
)
|
|
29
|
+
from viam.resource.rpc_client_base import ReconfigurableResourceRPCClientBase, ResourceRPCClientBase
|
|
30
|
+
from viam.streams import StreamWithIterator
|
|
31
|
+
from viam.utils import ValueTypes, dict_to_struct, get_geometries, struct_to_dict
|
|
32
|
+
|
|
33
|
+
from .board import Board, TickStream
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class AnalogClient(Board.Analog):
|
|
37
|
+
def __init__(self, name: str, board: "BoardClient"):
|
|
38
|
+
self.board = board
|
|
39
|
+
super().__init__(name)
|
|
40
|
+
|
|
41
|
+
async def read(
|
|
42
|
+
self,
|
|
43
|
+
*,
|
|
44
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
45
|
+
timeout: Optional[float] = None,
|
|
46
|
+
**kwargs,
|
|
47
|
+
) -> Board.Analog.Value:
|
|
48
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
49
|
+
request = ReadAnalogReaderRequest(board_name=self.board.name, analog_reader_name=self.name, extra=dict_to_struct(extra))
|
|
50
|
+
return await self.board.client.ReadAnalogReader(request, timeout=timeout, metadata=md)
|
|
51
|
+
|
|
52
|
+
async def write(
|
|
53
|
+
self,
|
|
54
|
+
value: int,
|
|
55
|
+
*,
|
|
56
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
57
|
+
timeout: Optional[float] = None,
|
|
58
|
+
**kwargs,
|
|
59
|
+
):
|
|
60
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
61
|
+
request = WriteAnalogRequest(name=self.board.name, pin=self.name, value=value, extra=dict_to_struct(extra))
|
|
62
|
+
await self.board.client.WriteAnalog(request, timeout=timeout, metadata=md)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class DigitalInterruptClient(Board.DigitalInterrupt):
|
|
66
|
+
def __init__(self, name: str, board: "BoardClient"):
|
|
67
|
+
self.board = board
|
|
68
|
+
super().__init__(name)
|
|
69
|
+
|
|
70
|
+
async def value(
|
|
71
|
+
self,
|
|
72
|
+
*,
|
|
73
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
74
|
+
timeout: Optional[float] = None,
|
|
75
|
+
**kwargs,
|
|
76
|
+
) -> int:
|
|
77
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
78
|
+
request = GetDigitalInterruptValueRequest(board_name=self.board.name, digital_interrupt_name=self.name, extra=dict_to_struct(extra))
|
|
79
|
+
response: GetDigitalInterruptValueResponse = await self.board.client.GetDigitalInterruptValue(request, timeout=timeout, metadata=md)
|
|
80
|
+
return response.value
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class GPIOPinClient(Board.GPIOPin):
|
|
84
|
+
def __init__(self, name: str, board: "BoardClient"):
|
|
85
|
+
self.board = board
|
|
86
|
+
super().__init__(name)
|
|
87
|
+
|
|
88
|
+
async def get(
|
|
89
|
+
self,
|
|
90
|
+
*,
|
|
91
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
92
|
+
timeout: Optional[float] = None,
|
|
93
|
+
**kwargs,
|
|
94
|
+
) -> bool:
|
|
95
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
96
|
+
request = GetGPIORequest(name=self.board.name, pin=self.name, extra=dict_to_struct(extra))
|
|
97
|
+
response: GetGPIOResponse = await self.board.client.GetGPIO(request, timeout=timeout, metadata=md)
|
|
98
|
+
return response.high
|
|
99
|
+
|
|
100
|
+
async def set(
|
|
101
|
+
self,
|
|
102
|
+
high: bool,
|
|
103
|
+
*,
|
|
104
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
105
|
+
timeout: Optional[float] = None,
|
|
106
|
+
**kwargs,
|
|
107
|
+
):
|
|
108
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
109
|
+
request = SetGPIORequest(name=self.board.name, pin=self.name, high=high, extra=dict_to_struct(extra))
|
|
110
|
+
await self.board.client.SetGPIO(request, timeout=timeout, metadata=md)
|
|
111
|
+
|
|
112
|
+
async def get_pwm(
|
|
113
|
+
self,
|
|
114
|
+
*,
|
|
115
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
116
|
+
timeout: Optional[float] = None,
|
|
117
|
+
**kwargs,
|
|
118
|
+
) -> float:
|
|
119
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
120
|
+
request = PWMRequest(name=self.board.name, pin=self.name, extra=dict_to_struct(extra))
|
|
121
|
+
response: PWMResponse = await self.board.client.PWM(request, timeout=timeout, metadata=md)
|
|
122
|
+
return response.duty_cycle_pct
|
|
123
|
+
|
|
124
|
+
async def set_pwm(
|
|
125
|
+
self,
|
|
126
|
+
duty_cycle: float,
|
|
127
|
+
*,
|
|
128
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
129
|
+
timeout: Optional[float] = None,
|
|
130
|
+
**kwargs,
|
|
131
|
+
):
|
|
132
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
133
|
+
request = SetPWMRequest(name=self.board.name, pin=self.name, duty_cycle_pct=duty_cycle, extra=dict_to_struct(extra))
|
|
134
|
+
await self.board.client.SetPWM(request, timeout=timeout, metadata=md)
|
|
135
|
+
|
|
136
|
+
async def get_pwm_frequency(
|
|
137
|
+
self,
|
|
138
|
+
*,
|
|
139
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
140
|
+
timeout: Optional[float] = None,
|
|
141
|
+
**kwargs,
|
|
142
|
+
) -> int:
|
|
143
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
144
|
+
request = PWMFrequencyRequest(name=self.board.name, pin=self.name, extra=dict_to_struct(extra))
|
|
145
|
+
response: PWMFrequencyResponse = await self.board.client.PWMFrequency(request, timeout=timeout, metadata=md)
|
|
146
|
+
return response.frequency_hz
|
|
147
|
+
|
|
148
|
+
async def set_pwm_frequency(
|
|
149
|
+
self,
|
|
150
|
+
frequency: int,
|
|
151
|
+
*,
|
|
152
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
153
|
+
timeout: Optional[float] = None,
|
|
154
|
+
**kwargs,
|
|
155
|
+
):
|
|
156
|
+
md = kwargs.get("metadata", ResourceRPCClientBase.Metadata()).proto
|
|
157
|
+
request = SetPWMFrequencyRequest(name=self.board.name, pin=self.name, frequency_hz=frequency, extra=dict_to_struct(extra))
|
|
158
|
+
await self.board.client.SetPWMFrequency(request, timeout=timeout, metadata=md)
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
class BoardClient(Board, ReconfigurableResourceRPCClientBase):
|
|
162
|
+
"""
|
|
163
|
+
gRPC client for the Board component.
|
|
164
|
+
"""
|
|
165
|
+
|
|
166
|
+
_analog_names: List[str]
|
|
167
|
+
_digital_interrupt_names: List[str]
|
|
168
|
+
|
|
169
|
+
def __init__(self, name: str, channel: Channel):
|
|
170
|
+
self.channel = channel
|
|
171
|
+
self.client = BoardServiceStub(channel)
|
|
172
|
+
self._analog_names = []
|
|
173
|
+
self._digital_interrupt_names = []
|
|
174
|
+
super().__init__(name)
|
|
175
|
+
|
|
176
|
+
async def analog_by_name(self, name: str) -> Board.Analog:
|
|
177
|
+
self._analog_names.append(name)
|
|
178
|
+
return AnalogClient(name, self)
|
|
179
|
+
|
|
180
|
+
async def digital_interrupt_by_name(self, name: str) -> Board.DigitalInterrupt:
|
|
181
|
+
self._digital_interrupt_names.append(name)
|
|
182
|
+
return DigitalInterruptClient(name, self)
|
|
183
|
+
|
|
184
|
+
async def gpio_pin_by_name(self, name: str) -> Board.GPIOPin:
|
|
185
|
+
return GPIOPinClient(name, self)
|
|
186
|
+
|
|
187
|
+
async def do_command(
|
|
188
|
+
self,
|
|
189
|
+
command: Mapping[str, ValueTypes],
|
|
190
|
+
*,
|
|
191
|
+
timeout: Optional[float] = None,
|
|
192
|
+
**kwargs,
|
|
193
|
+
) -> Mapping[str, ValueTypes]:
|
|
194
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
195
|
+
request = DoCommandRequest(name=self.name, command=dict_to_struct(command))
|
|
196
|
+
response: DoCommandResponse = await self.client.DoCommand(request, timeout=timeout, metadata=md)
|
|
197
|
+
return struct_to_dict(response.result)
|
|
198
|
+
|
|
199
|
+
async def set_power_mode(
|
|
200
|
+
self,
|
|
201
|
+
mode: PowerMode.ValueType,
|
|
202
|
+
duration: Optional[timedelta] = None,
|
|
203
|
+
*,
|
|
204
|
+
timeout: Optional[float] = None,
|
|
205
|
+
**kwargs,
|
|
206
|
+
):
|
|
207
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
208
|
+
duration_pb: Optional[Duration] = None
|
|
209
|
+
if duration is not None:
|
|
210
|
+
duration_pb = [(d, d.FromTimedelta(duration)) for d in [Duration()]][0][0]
|
|
211
|
+
request = SetPowerModeRequest(name=self.name, power_mode=mode, duration=duration_pb)
|
|
212
|
+
await self.client.SetPowerMode(request, timeout=timeout, metadata=md)
|
|
213
|
+
|
|
214
|
+
async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
|
|
215
|
+
md = kwargs.get("metadata", self.Metadata())
|
|
216
|
+
return await get_geometries(self.client, self.name, extra, timeout, md)
|
|
217
|
+
|
|
218
|
+
async def stream_ticks(
|
|
219
|
+
self,
|
|
220
|
+
interrupts: List[Board.DigitalInterrupt],
|
|
221
|
+
*,
|
|
222
|
+
extra: Optional[Dict[str, Any]] = None,
|
|
223
|
+
**kwargs,
|
|
224
|
+
) -> TickStream:
|
|
225
|
+
names = []
|
|
226
|
+
for di in interrupts:
|
|
227
|
+
names.append(di.name)
|
|
228
|
+
request = StreamTicksRequest(name=self.name, pin_names=names, extra=dict_to_struct(extra))
|
|
229
|
+
|
|
230
|
+
async def read():
|
|
231
|
+
md = kwargs.get("metadata", self.Metadata()).proto
|
|
232
|
+
tick_stream: ClientStream[StreamTicksRequest, StreamTicksResponse]
|
|
233
|
+
async with self.client.StreamTicks.open(metadata=md) as tick_stream:
|
|
234
|
+
try:
|
|
235
|
+
await tick_stream.send_message(request, end=True)
|
|
236
|
+
async for tick in tick_stream:
|
|
237
|
+
yield tick
|
|
238
|
+
except Exception as e:
|
|
239
|
+
raise (e)
|
|
240
|
+
|
|
241
|
+
return StreamWithIterator(read())
|