Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/viam/components/board/board.py
Original file line number Diff line number Diff line change
Expand Up @@ -366,7 +366,7 @@ async def gpio_pin_by_name(self, name: str) -> GPIOPin:

@abc.abstractmethod
async def set_power_mode(
self, mode: PowerMode.ValueType, duration: Optional[timedelta] = None, *, timeout: Optional[float] = None, **kwargs
self, mode: PowerMode.ValueType, duration: Optional[timedelta] = None, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
):
"""
Set the board to the indicated power mode.
Expand Down
3 changes: 2 additions & 1 deletion src/viam/components/board/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,14 +201,15 @@ async def set_power_mode(
mode: PowerMode.ValueType,
duration: Optional[timedelta] = None,
*,
extra: Optional[Dict[str, Any]] = None,
timeout: Optional[float] = None,
**kwargs,
):
md = kwargs.get("metadata", self.Metadata()).proto
duration_pb: Optional[Duration] = None
if duration is not None:
duration_pb = [(d, d.FromTimedelta(duration)) for d in [Duration()]][0][0]
request = SetPowerModeRequest(name=self.name, power_mode=mode, duration=duration_pb)
request = SetPowerModeRequest(name=self.name, power_mode=mode, duration=duration_pb, extra=dict_to_struct(extra))
await self.client.SetPowerMode(request, timeout=timeout, metadata=md)

async def get_geometries(self, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs) -> List[Geometry]:
Expand Down
1 change: 1 addition & 0 deletions src/viam/components/board/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ async def SetPowerMode(self, stream: Stream[SetPowerModeRequest, SetPowerModeRes
await board.set_power_mode(
mode=request.power_mode,
duration=request.duration.ToTimedelta(),
extra=struct_to_dict(request.extra),
timeout=timeout,
metadata=stream.metadata,
)
Expand Down
3 changes: 2 additions & 1 deletion tests/mocks/components.py
Original file line number Diff line number Diff line change
Expand Up @@ -436,8 +436,9 @@ async def do_command(self, command: Mapping[str, ValueTypes], *, timeout: Option
return {"command": command}

async def set_power_mode(
self, mode: PowerMode.ValueType, duration: Optional[timedelta] = None, *, timeout: Optional[float] = None, **kwargs
self, mode: PowerMode.ValueType, duration: Optional[timedelta] = None, *, extra: Optional[Dict[str, Any]] = None, timeout: Optional[float] = None, **kwargs
):
self.extra = extra
self.timeout = timeout
self.power_mode = mode
self.power_mode_duration = duration
Expand Down
4 changes: 3 additions & 1 deletion tests/test_board.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,12 +275,14 @@ async def test_set_power_mode(self, board: MockBoard, service: BoardRPCService):
pm_mode = PowerMode.POWER_MODE_OFFLINE_DEEP
pm_duration = Duration()
pm_duration.FromTimedelta(timedelta(minutes=1))
request = SetPowerModeRequest(name=board.name, power_mode=pm_mode, duration=pm_duration)
extra = {"foo": "bar", "baz": [1, 2, 3]}
request = SetPowerModeRequest(name=board.name, power_mode=pm_mode, duration=pm_duration, extra=dict_to_struct(extra))
response: SetPowerModeResponse = await client.SetPowerMode(request, timeout=6.66)
assert response == SetPowerModeResponse()
assert board.timeout == loose_approx(6.66)
assert board.power_mode == PowerMode.POWER_MODE_OFFLINE_DEEP
assert board.power_mode_duration == pm_duration.ToTimedelta()
assert board.extra == extra

async def test_write_analog(self, board: MockBoard, service: BoardRPCService):
async with ChannelFor([service]) as channel:
Expand Down
Loading