Skip to content
Open
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
7 changes: 6 additions & 1 deletion gehomesdk/erd/values/oven/erd_extended_cook_mode.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,9 @@ class ErdExtendedCookMode(enum.Enum):
"""
These represent extended cook modes (similar to but different from available cook modes)
"""
OVEN_AIRFRY = AvailableCookMode(byte=1, mask=1, cook_mode=ErdOvenCookMode.AIRFRY)
# Extended cook-mode ERDs arrive with the bytes ordered from highest spec
# offset to lowest, matching the existing available cook-mode tables.
OVEN_AIRFRY = AvailableCookMode(byte=2, mask=0x40, cook_mode=ErdOvenCookMode.AIRFRY)
OVEN_AIRFRY_PROBE = AvailableCookMode(byte=2, mask=0x80, cook_mode=ErdOvenCookMode.AIRFRY_PROBE)
OVEN_AIRFRY_DELAY_START = AvailableCookMode(byte=1, mask=0x01, cook_mode=ErdOvenCookMode.AIRFRY_DELAYSTART)
OVEN_AIRFRY_PROBE_DELAY_START = AvailableCookMode(byte=1, mask=0x02, cook_mode=ErdOvenCookMode.AIRFRY_PROBE_DELAYSTART)
5 changes: 4 additions & 1 deletion gehomesdk/erd/values/oven/erd_oven_cook_mode.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,7 @@ class ErdOvenCookMode(enum.Enum):
WARM_NOOPTION = 15
WARM_PROBE = 16
AIRFRY = 158
VENT_BAKE = 94
AIRFRY_PROBE = 159
AIRFRY_DELAYSTART = 160
AIRFRY_PROBE_DELAYSTART = 161
VENT_BAKE = 94
5 changes: 4 additions & 1 deletion gehomesdk/erd/values/oven/oven_cook_mode_mapping.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,5 +72,8 @@
ErdOvenCookMode.WARM_NOOPTION: OvenCookMode(ErdOvenState.WARM, False, False, False),
ErdOvenCookMode.WARM_PROBE: OvenCookMode(ErdOvenState.WARM, False, False, True),
ErdOvenCookMode.AIRFRY: OvenCookMode(ErdOvenState.OVEN_STATE_AIRFRY, False, False, False, False, False),
ErdOvenCookMode.AIRFRY_PROBE: OvenCookMode(ErdOvenState.OVEN_STATE_AIRFRY, False, False, True, False, False),
ErdOvenCookMode.AIRFRY_DELAYSTART: OvenCookMode(ErdOvenState.OVEN_STATE_AIRFRY, True, False, False, False, False),
ErdOvenCookMode.AIRFRY_PROBE_DELAYSTART: OvenCookMode(ErdOvenState.OVEN_STATE_AIRFRY, True, False, True, False, False),
ErdOvenCookMode.VENT_BAKE: OvenCookMode(ErdOvenState.OVEN_STATE_VENT_BAKE, False, False, False, False, False)
})
})
61 changes: 61 additions & 0 deletions tests/test_extended_cook_mode_converter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
from gehomesdk.erd.converters.oven.erd_extended_cook_mode_converter import (
ErdExtendedCookModeConverter,
)
from gehomesdk.erd.values.oven import ErdOvenCookMode, OVEN_COOK_MODE_MAP


def test_extended_cook_mode_converter_decodes_airfry_no_option() -> None:
converter = ErdExtendedCookModeConverter()

decoded = converter.erd_decode(
"00 00 40 00 00 00 00 C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
)

assert decoded == {ErdOvenCookMode.AIRFRY}


def test_extended_cook_mode_converter_decodes_all_airfry_variants() -> None:
converter = ErdExtendedCookModeConverter()

assert converter.erd_decode(
"00 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
) == {ErdOvenCookMode.AIRFRY}
assert converter.erd_decode(
"00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
) == {ErdOvenCookMode.AIRFRY_PROBE}
assert converter.erd_decode(
"00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
) == {ErdOvenCookMode.AIRFRY_DELAYSTART}
assert converter.erd_decode(
"00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
) == {ErdOvenCookMode.AIRFRY_PROBE_DELAYSTART}


def test_extended_cook_mode_converter_ignores_non_airfry_bits() -> None:
converter = ErdExtendedCookModeConverter()

decoded = converter.erd_decode(
"00 00 00 00 00 00 00 C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
)

assert decoded == set()


def test_extended_cook_mode_converter_returns_empty_for_zero_value() -> None:
converter = ErdExtendedCookModeConverter()

assert converter.erd_decode(
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
) == set()


def test_airfry_modes_map_to_expected_flags() -> None:
plain = OVEN_COOK_MODE_MAP[ErdOvenCookMode.AIRFRY]
probe = OVEN_COOK_MODE_MAP[ErdOvenCookMode.AIRFRY_PROBE]
delayed = OVEN_COOK_MODE_MAP[ErdOvenCookMode.AIRFRY_DELAYSTART]
delayed_probe = OVEN_COOK_MODE_MAP[ErdOvenCookMode.AIRFRY_PROBE_DELAYSTART]

assert not plain.delayed and not plain.probe
assert not probe.delayed and probe.probe
assert delayed.delayed and not delayed.probe
assert delayed_probe.delayed and delayed_probe.probe