aboutsummaryrefslogtreecommitdiffstats
path: root/utils/cec-compliance/cec-test-power.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utils/cec-compliance/cec-test-power.cpp')
-rw-r--r--utils/cec-compliance/cec-test-power.cpp100
1 files changed, 67 insertions, 33 deletions
diff --git a/utils/cec-compliance/cec-test-power.cpp b/utils/cec-compliance/cec-test-power.cpp
index e88e3387..920ab69b 100644
--- a/utils/cec-compliance/cec-test-power.cpp
+++ b/utils/cec-compliance/cec-test-power.cpp
@@ -61,7 +61,8 @@ bool util_interactive_ensure_power_state(struct node *node, unsigned me, unsigne
return true;
else
announce("The device reported power status %s.", power_status2s(pwr));
- fail_on_test(!question("Retry?"));
+ if (!question("Retry?"))
+ return false;
}
return true;
@@ -116,45 +117,50 @@ const unsigned power_status_subtests_size = ARRAY_SIZE(power_status_subtests);
/* One Touch Play */
-static int one_touch_play_image_view_on(struct node *node, unsigned me, unsigned la, bool interactive)
+static int one_touch_play_view_on(struct node *node, unsigned me, unsigned la, bool interactive,
+ __u8 opcode)
{
struct cec_msg msg = {};
- fail_on_test(!util_interactive_ensure_power_state(node, me, la, interactive, CEC_OP_POWER_STATUS_STANDBY));
-
cec_msg_init(&msg, me, la);
- cec_msg_image_view_on(&msg);
+ if (opcode == CEC_MSG_IMAGE_VIEW_ON)
+ cec_msg_image_view_on(&msg);
+ else if (opcode == CEC_MSG_TEXT_VIEW_ON)
+ cec_msg_text_view_on(&msg);
fail_on_test(!transmit_timeout(node, &msg));
fail_on_test(is_tv(la, node->remote[la].prim_type) && unrecognized_op(&msg));
if (refused(&msg))
return REFUSED;
if (cec_msg_status_is_abort(&msg))
return PRESUMED_OK;
- fail_on_test(interactive && !question("Did the TV turn on?"));
- node->remote[la].has_image_view_on = true;
+ if (opcode == CEC_MSG_IMAGE_VIEW_ON)
+ node->remote[la].has_image_view_on = true;
+ else if (opcode == CEC_MSG_TEXT_VIEW_ON)
+ node->remote[la].has_text_view_on = true;
- if (interactive)
- return 0;
- else
- return PRESUMED_OK;
+ return 0;
+}
+
+static int one_touch_play_image_view_on(struct node *node, unsigned me, unsigned la, bool interactive)
+{
+ return one_touch_play_view_on(node, me, la, interactive, CEC_MSG_IMAGE_VIEW_ON);
}
static int one_touch_play_text_view_on(struct node *node, unsigned me, unsigned la, bool interactive)
{
- struct cec_msg msg = {};
+ return one_touch_play_view_on(node, me, la, interactive, CEC_MSG_TEXT_VIEW_ON);
+}
+static int one_touch_play_view_on_wakeup(struct node *node, unsigned me, unsigned la, bool interactive,
+ __u8 opcode)
+{
fail_on_test(!util_interactive_ensure_power_state(node, me, la, interactive, CEC_OP_POWER_STATUS_STANDBY));
- cec_msg_init(&msg, me, la);
- cec_msg_text_view_on(&msg);
- fail_on_test(!transmit_timeout(node, &msg));
- fail_on_test(is_tv(la, node->remote[la].prim_type) && unrecognized_op(&msg));
- if (refused(&msg))
- return REFUSED;
- if (cec_msg_status_is_abort(&msg))
- return PRESUMED_OK;
+ int ret = one_touch_play_view_on(node, me, la, interactive, opcode);
+
+ if (ret && ret != PRESUMED_OK)
+ return ret;
fail_on_test(interactive && !question("Did the TV turn on?"));
- node->remote[la].has_text_view_on = true;
if (interactive)
return 0;
@@ -162,21 +168,32 @@ static int one_touch_play_text_view_on(struct node *node, unsigned me, unsigned
return PRESUMED_OK;
}
-static int one_touch_play_active_source(struct node *node, unsigned me, unsigned la, bool interactive)
+static int one_touch_play_image_view_on_wakeup(struct node *node, unsigned me, unsigned la, bool interactive)
{
- struct cec_msg msg = {};
+ if (!interactive || !node->remote[la].has_image_view_on)
+ return NOTAPPLICABLE;
+ return one_touch_play_view_on_wakeup(node, me, la, interactive, CEC_MSG_IMAGE_VIEW_ON);
+}
- while (interactive) {
- __u8 pwr;
+static int one_touch_play_text_view_on_wakeup(struct node *node, unsigned me, unsigned la, bool interactive)
+{
+ if (!interactive || !node->remote[la].has_text_view_on)
+ return NOTAPPLICABLE;
+ return one_touch_play_view_on_wakeup(node, me, la, interactive, CEC_MSG_TEXT_VIEW_ON);
+}
- interactive_info(true, "Please switch the TV to another source.");
- fail_on_test(!get_power_status(node, me, la, pwr));
- if (pwr == CEC_OP_POWER_STATUS_ON)
- break;
- announce("The device reported power status %s.", power_status2s(pwr));
- fail_on_test(!question("Retry?"));
- }
+static int one_touch_play_view_on_change(struct node *node, unsigned me, unsigned la, bool interactive,
+ __u8 opcode)
+{
+ struct cec_msg msg = {};
+ int ret;
+
+ fail_on_test(!util_interactive_ensure_power_state(node, me, la, interactive, CEC_OP_POWER_STATUS_ON));
+ interactive_info(true, "Please switch the TV to another source.");
+ ret = one_touch_play_view_on(node, me, la, interactive, opcode);
+ if (ret && ret != PRESUMED_OK)
+ return ret;
cec_msg_init(&msg, me, la);
cec_msg_active_source(&msg, node->phys_addr);
fail_on_test(!transmit_timeout(node, &msg));
@@ -188,6 +205,20 @@ static int one_touch_play_active_source(struct node *node, unsigned me, unsigned
return PRESUMED_OK;
}
+static int one_touch_play_image_view_on_change(struct node *node, unsigned me, unsigned la, bool interactive)
+{
+ if (!interactive || !node->remote[la].has_text_view_on)
+ return NOTAPPLICABLE;
+ return one_touch_play_view_on_change(node, me, la, interactive, CEC_MSG_IMAGE_VIEW_ON);
+}
+
+static int one_touch_play_text_view_on_change(struct node *node, unsigned me, unsigned la, bool interactive)
+{
+ if (!interactive || !node->remote[la].has_text_view_on)
+ return NOTAPPLICABLE;
+ return one_touch_play_view_on_change(node, me, la, interactive, CEC_MSG_TEXT_VIEW_ON);
+}
+
static int one_touch_play_req_active_source(struct node *node, unsigned me, unsigned la, bool interactive)
{
struct cec_msg msg = {};
@@ -205,7 +236,10 @@ static int one_touch_play_req_active_source(struct node *node, unsigned me, unsi
struct remote_subtest one_touch_play_subtests[] = {
{ "Image View On", CEC_LOG_ADDR_MASK_TV, one_touch_play_image_view_on },
{ "Text View On", CEC_LOG_ADDR_MASK_TV, one_touch_play_text_view_on },
- { "Active Source", CEC_LOG_ADDR_MASK_TV | CEC_LOG_ADDR_MASK_UNREGISTERED, one_touch_play_active_source },
+ { "Wakeup on Image View On", CEC_LOG_ADDR_MASK_TV, one_touch_play_image_view_on_wakeup },
+ { "Wakeup Text View On", CEC_LOG_ADDR_MASK_TV, one_touch_play_text_view_on_wakeup },
+ { "Input change on Image View On", CEC_LOG_ADDR_MASK_TV, one_touch_play_image_view_on_change },
+ { "Input change on Text View On", CEC_LOG_ADDR_MASK_TV, one_touch_play_text_view_on_change },
{ "Request Active Source", (__u16)~CEC_LOG_ADDR_MASK_TV, one_touch_play_req_active_source },
};

Privacy Policy