From b4a824daccb57d3dfa2048b4310e4c799aebd1ce Mon Sep 17 00:00:00 2001 From: Naveed Jooma Date: Fri, 3 May 2024 12:01:39 -0400 Subject: [PATCH] Add VisionClient.fromRobot (#199) --- example/viam_example_app/macos/Podfile | 2 +- .../macos/Runner.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- lib/src/components/arm/client.dart | 2 +- lib/src/components/base/client.dart | 2 +- lib/src/components/board/client.dart | 2 +- lib/src/components/camera/client.dart | 2 +- lib/src/components/gantry/client.dart | 2 +- lib/src/components/generic/client.dart | 2 +- lib/src/components/gripper/client.dart | 4 ++-- lib/src/components/motor/client.dart | 2 +- lib/src/components/movement_sensor/client.dart | 2 +- lib/src/components/power_sensor/client.dart | 2 +- lib/src/components/sensor/client.dart | 2 +- lib/src/components/servo/client.dart | 2 +- lib/src/resource/base.dart | 2 +- lib/src/resource/registry.dart | 2 ++ lib/src/services/vision.dart | 18 ++++++++++++++++-- 18 files changed, 35 insertions(+), 19 deletions(-) diff --git a/example/viam_example_app/macos/Podfile b/example/viam_example_app/macos/Podfile index b52666a1038..b5174a8ddb2 100644 --- a/example/viam_example_app/macos/Podfile +++ b/example/viam_example_app/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.15' +platform :osx, '13' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/example/viam_example_app/macos/Runner.xcodeproj/project.pbxproj b/example/viam_example_app/macos/Runner.xcodeproj/project.pbxproj index c2b683bad32..71cd66957b7 100644 --- a/example/viam_example_app/macos/Runner.xcodeproj/project.pbxproj +++ b/example/viam_example_app/macos/Runner.xcodeproj/project.pbxproj @@ -258,7 +258,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1430; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = ""; TargetAttributes = { 331C80D4294CF70F00263BE5 = { diff --git a/example/viam_example_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/viam_example_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 5dfcff713fd..b029615af39 100644 --- a/example/viam_example_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/viam_example_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ GripperServiceClient(channel); diff --git a/lib/src/components/motor/client.dart b/lib/src/components/motor/client.dart index 5e605d540e5..e8fc747c033 100644 --- a/lib/src/components/motor/client.dart +++ b/lib/src/components/motor/client.dart @@ -10,7 +10,7 @@ import 'motor.dart'; /// gRPC client for the [Motor] component. class MotorClient extends Motor implements ResourceRPCClient { @override - String name; + final String name; @override ClientChannelBase channel; diff --git a/lib/src/components/movement_sensor/client.dart b/lib/src/components/movement_sensor/client.dart index 9323dbf32a8..ef1b6196f4e 100644 --- a/lib/src/components/movement_sensor/client.dart +++ b/lib/src/components/movement_sensor/client.dart @@ -10,7 +10,7 @@ import 'movement_sensor.dart'; /// gRPC client for the [MovementSensor] component. class MovementSensorClient extends MovementSensor implements ResourceRPCClient { @override - String name; + final String name; @override ClientChannelBase channel; diff --git a/lib/src/components/power_sensor/client.dart b/lib/src/components/power_sensor/client.dart index e01e7f3420e..7fdb8561137 100644 --- a/lib/src/components/power_sensor/client.dart +++ b/lib/src/components/power_sensor/client.dart @@ -10,7 +10,7 @@ import 'power_sensor.dart'; /// gRPC client for the [PowerSensor] component. class PowerSensorClient extends PowerSensor implements ResourceRPCClient { @override - String name; + final String name; @override ClientChannelBase channel; diff --git a/lib/src/components/sensor/client.dart b/lib/src/components/sensor/client.dart index dcb9d0f3aa7..cdcaea78a91 100644 --- a/lib/src/components/sensor/client.dart +++ b/lib/src/components/sensor/client.dart @@ -10,7 +10,7 @@ import 'sensor.dart'; /// gRPC client for the [Sensor] component. class SensorClient extends Sensor implements ResourceRPCClient { @override - String name; + final String name; @override ClientChannelBase channel; diff --git a/lib/src/components/servo/client.dart b/lib/src/components/servo/client.dart index e7db28664f9..41b127694a7 100644 --- a/lib/src/components/servo/client.dart +++ b/lib/src/components/servo/client.dart @@ -10,7 +10,7 @@ import 'servo.dart'; /// gRPC client for the [Servo] component. class ServoClient extends Servo implements ResourceRPCClient { @override - String name; + final String name; @override ClientChannelBase channel; diff --git a/lib/src/resource/base.dart b/lib/src/resource/base.dart index 3a17ef25b9f..6198005a6fe 100644 --- a/lib/src/resource/base.dart +++ b/lib/src/resource/base.dart @@ -53,7 +53,7 @@ class Subtype { /// Abstract class that defines the base functionality for all [Resource] types abstract class Resource { - abstract String name; + abstract final String name; /// Send/Receive arbitrary commands to the [Resource] Future> doCommand(Map command) { diff --git a/lib/src/resource/registry.dart b/lib/src/resource/registry.dart index b194e2c7af6..3200c3de285 100644 --- a/lib/src/resource/registry.dart +++ b/lib/src/resource/registry.dart @@ -25,6 +25,7 @@ import '../components/sensor/sensor.dart'; import '../components/servo/client.dart'; import '../components/servo/servo.dart'; import '../resource/base.dart'; +import '../services/vision.dart'; /// An object representing a resource to be registered. /// @@ -65,6 +66,7 @@ class Registry { registerSubtype(ResourceRegistration(PowerSensor.subtype, (name, channel) => PowerSensorClient(name, channel))); registerSubtype(ResourceRegistration(Sensor.subtype, (name, channel) => SensorClient(name, channel))); registerSubtype(ResourceRegistration(Servo.subtype, (name, channel) => ServoClient(name, channel))); + registerSubtype(ResourceRegistration(VisionClient.subtype, (name, channel) => VisionClient(name, channel))); } /// The [Subtype] available in the SDK diff --git a/lib/src/services/vision.dart b/lib/src/services/vision.dart index d2604edbbe5..c48c3ce5f22 100644 --- a/lib/src/services/vision.dart +++ b/lib/src/services/vision.dart @@ -5,9 +5,13 @@ import '../../protos/common/common.dart'; import '../../protos/service/vision.dart'; import '../media/image.dart'; import '../resource/base.dart'; +import '../robot/client.dart'; import '../utils.dart'; -class VisionClient implements ResourceRPCClient { +class VisionClient extends Resource implements ResourceRPCClient { + static const Subtype subtype = Subtype(resourceNamespaceRDK, resourceTypeService, 'vision'); + + @override final String name; @override @@ -68,7 +72,7 @@ class VisionClient implements ResourceRPCClient { return response.objects; } - /// Send/Receive arbitrary commands to the Resource + @override Future> doCommand(Map command) async { final request = DoCommandRequest() ..name = name @@ -76,4 +80,14 @@ class VisionClient implements ResourceRPCClient { final response = await client.doCommand(request); return response.result.toMap(); } + + /// Get the [ResourceName] for this [VisionClient] with the given [name] + static ResourceName getResourceName(String name) { + return VisionClient.subtype.getResourceName(name); + } + + /// Get the [VisionClient] named [name] from the provided robot. + static VisionClient fromRobot(RobotClient robot, String name) { + return robot.getResource(VisionClient.getResourceName(name)); + } }