All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] cec: add Deck Control wake-up handling tests
@ 2021-06-14 13:53 Deborah Brouwer
  2021-06-15  8:08 ` Hans Verkuil
  0 siblings, 1 reply; 3+ messages in thread
From: Deborah Brouwer @ 2021-06-14 13:53 UTC (permalink / raw)
  To: linux-media; +Cc: hverkuil, jaffe1, Deborah Brouwer

Test that a deck in standby will wake up upon receiving the Deck Control
messages Eject or Play Forward.

Signed-off-by: Deborah Brouwer <deborahbrouwer3563@gmail.com>
---
This is part of an Outreachy project to expand the testing of
Deck Control messages as handled by CEC adapters.

Changes since v2:
	- move tests to cec-test-power.cpp
	- check if deck control is supported by sending REQ_ONCE
	- use a single function that accepts different ops

 utils/cec-compliance/cec-compliance.h   |  1 +
 utils/cec-compliance/cec-test-power.cpp | 58 +++++++++++++++++++++++++
 utils/cec-compliance/cec-test.cpp       |  1 +
 utils/cec-follower/cec-processing.cpp   |  2 +
 4 files changed, 62 insertions(+)

diff --git a/utils/cec-compliance/cec-compliance.h b/utils/cec-compliance/cec-compliance.h
index 818181ab..057f42c4 100644
--- a/utils/cec-compliance/cec-compliance.h
+++ b/utils/cec-compliance/cec-compliance.h
@@ -468,5 +468,6 @@ extern const vec_remote_subtests standby_subtests;
 extern const vec_remote_subtests one_touch_play_subtests;
 extern const vec_remote_subtests power_status_subtests;
 extern const vec_remote_subtests standby_resume_subtests;
+extern const vec_remote_subtests deck_ctl_standby_resume_subtests;
 
 #endif
diff --git a/utils/cec-compliance/cec-test-power.cpp b/utils/cec-compliance/cec-test-power.cpp
index bc88eca7..49241093 100644
--- a/utils/cec-compliance/cec-test-power.cpp
+++ b/utils/cec-compliance/cec-test-power.cpp
@@ -652,3 +652,61 @@ const vec_remote_subtests standby_resume_subtests{
 	{ "Wake up TV on Text View On", CEC_LOG_ADDR_MASK_TV, standby_resume_wakeup_text_view_on },
 	{ "Power State Transitions", CEC_LOG_ADDR_MASK_TV, power_state_transitions, false, true },
 };
+
+static int standby_resume_wakeup_deck(struct node *node, unsigned me, unsigned la, bool interactive, __u8 opcode)
+{
+	struct cec_msg msg = {};
+
+	cec_msg_init(&msg, me, la);
+	cec_msg_give_deck_status(&msg, true, CEC_OP_STATUS_REQ_ONCE);
+	fail_on_test(!transmit_timeout(node, &msg));
+	if (timed_out_or_abort(&msg))
+		return OK_NOT_SUPPORTED;
+
+	unsigned unresponsive_time = 0;
+
+	fail_on_test(!poll_stable_power_status(node, me, la, CEC_OP_POWER_STATUS_ON, unresponsive_time));
+
+	int ret = standby_resume_standby(node, me, la, interactive);
+
+	if (ret)
+		return ret;
+
+	cec_msg_init(&msg, me, la);
+	if (opcode == CEC_OP_PLAY_MODE_PLAY_FWD)
+		cec_msg_play(&msg, CEC_OP_PLAY_MODE_PLAY_FWD);
+	else
+		cec_msg_deck_control(&msg, CEC_OP_DECK_CTL_MODE_EJECT);
+	fail_on_test(!transmit_timeout(node, &msg));
+	fail_on_test(cec_msg_status_is_abort(&msg));
+
+	unresponsive_time = 0;
+	fail_on_test(!poll_stable_power_status(node, me, la, CEC_OP_POWER_STATUS_ON, unresponsive_time));
+	fail_on_test(interactive && !question("Is the device in On state?"));
+
+	return OK;
+}
+
+
+static int standby_resume_wakeup_deck_eject(struct node *node, unsigned me, unsigned la, bool interactive)
+{
+	return standby_resume_wakeup_deck(node, me, la, interactive, CEC_OP_DECK_CTL_MODE_EJECT);
+}
+
+static int standby_resume_wakeup_deck_play(struct node *node, unsigned me, unsigned la, bool interactive)
+{
+	return standby_resume_wakeup_deck(node, me, la, interactive, CEC_OP_PLAY_MODE_PLAY_FWD);
+}
+
+const vec_remote_subtests deck_ctl_standby_resume_subtests{
+	{
+		"Deck Eject Standby Resume",
+		CEC_LOG_ADDR_MASK_PLAYBACK | CEC_LOG_ADDR_MASK_RECORD,
+		standby_resume_wakeup_deck_eject,
+	},
+	{
+		"Deck Play Standby Resume",
+		CEC_LOG_ADDR_MASK_PLAYBACK | CEC_LOG_ADDR_MASK_RECORD,
+		standby_resume_wakeup_deck_play,
+	}
+};
diff --git a/utils/cec-compliance/cec-test.cpp b/utils/cec-compliance/cec-test.cpp
index 283abe43..cd50c52d 100644
--- a/utils/cec-compliance/cec-test.cpp
+++ b/utils/cec-compliance/cec-test.cpp
@@ -1658,6 +1658,7 @@ static const remote_test tests[] = {
 	{ "Remote Control Passthrough feature", TAG_REMOTE_CONTROL_PASSTHROUGH, rc_passthrough_subtests },
 	{ "Device Menu Control feature", TAG_DEVICE_MENU_CONTROL, dev_menu_ctl_subtests },
 	{ "Deck Control feature", TAG_DECK_CONTROL, deck_ctl_subtests },
+	{ "Deck Control Standby/Resume", TAG_STANDBY_RESUME, deck_ctl_standby_resume_subtests },
 	{ "Tuner Control feature", TAG_TUNER_CONTROL, tuner_ctl_subtests },
 	{ "One Touch Record feature", TAG_ONE_TOUCH_RECORD, one_touch_rec_subtests },
 	{ "Timer Programming feature", TAG_TIMER_PROGRAMMING, timer_prog_subtests },
diff --git a/utils/cec-follower/cec-processing.cpp b/utils/cec-follower/cec-processing.cpp
index 876e0bc0..5385b335 100644
--- a/utils/cec-follower/cec-processing.cpp
+++ b/utils/cec-follower/cec-processing.cpp
@@ -561,6 +561,7 @@ static void processMsg(struct node *node, struct cec_msg &msg, unsigned me)
 
 		switch (play_mode) {
 		case CEC_OP_PLAY_MODE_PLAY_FWD:
+			exit_standby(node);
 			deck_state = CEC_OP_DECK_INFO_PLAY;
 			break;
 		case CEC_OP_PLAY_MODE_PLAY_REV:
@@ -618,6 +619,7 @@ static void processMsg(struct node *node, struct cec_msg &msg, unsigned me)
 			node->state.deck_skip_start = 0;
 			break;
 		case CEC_OP_DECK_CTL_MODE_EJECT:
+			exit_standby(node);
 			deck_state = CEC_OP_DECK_INFO_NO_MEDIA;
 			node->state.deck_skip_start = 0;
 			break;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] cec: add Deck Control wake-up handling tests
  2021-06-14 13:53 [PATCH v2] cec: add Deck Control wake-up handling tests Deborah Brouwer
@ 2021-06-15  8:08 ` Hans Verkuil
  2021-06-15 13:29   ` Hans Verkuil
  0 siblings, 1 reply; 3+ messages in thread
From: Hans Verkuil @ 2021-06-15  8:08 UTC (permalink / raw)
  To: Deborah Brouwer, linux-media; +Cc: jaffe1

Hi Deb,

On 14/06/2021 15:53, Deborah Brouwer wrote:
> Test that a deck in standby will wake up upon receiving the Deck Control
> messages Eject or Play Forward.
> 
> Signed-off-by: Deborah Brouwer <deborahbrouwer3563@gmail.com>
> ---
> This is part of an Outreachy project to expand the testing of
> Deck Control messages as handled by CEC adapters.
> 
> Changes since v2:
> 	- move tests to cec-test-power.cpp
> 	- check if deck control is supported by sending REQ_ONCE
> 	- use a single function that accepts different ops
> 
>  utils/cec-compliance/cec-compliance.h   |  1 +
>  utils/cec-compliance/cec-test-power.cpp | 58 +++++++++++++++++++++++++
>  utils/cec-compliance/cec-test.cpp       |  1 +
>  utils/cec-follower/cec-processing.cpp   |  2 +
>  4 files changed, 62 insertions(+)
> 
> diff --git a/utils/cec-compliance/cec-compliance.h b/utils/cec-compliance/cec-compliance.h
> index 818181ab..057f42c4 100644
> --- a/utils/cec-compliance/cec-compliance.h
> +++ b/utils/cec-compliance/cec-compliance.h
> @@ -468,5 +468,6 @@ extern const vec_remote_subtests standby_subtests;
>  extern const vec_remote_subtests one_touch_play_subtests;
>  extern const vec_remote_subtests power_status_subtests;
>  extern const vec_remote_subtests standby_resume_subtests;
> +extern const vec_remote_subtests deck_ctl_standby_resume_subtests;
>  
>  #endif
> diff --git a/utils/cec-compliance/cec-test-power.cpp b/utils/cec-compliance/cec-test-power.cpp
> index bc88eca7..49241093 100644
> --- a/utils/cec-compliance/cec-test-power.cpp
> +++ b/utils/cec-compliance/cec-test-power.cpp
> @@ -652,3 +652,61 @@ const vec_remote_subtests standby_resume_subtests{
>  	{ "Wake up TV on Text View On", CEC_LOG_ADDR_MASK_TV, standby_resume_wakeup_text_view_on },
>  	{ "Power State Transitions", CEC_LOG_ADDR_MASK_TV, power_state_transitions, false, true },
>  };
> +
> +static int standby_resume_wakeup_deck(struct node *node, unsigned me, unsigned la, bool interactive, __u8 opcode)
> +{
> +	struct cec_msg msg = {};
> +
> +	cec_msg_init(&msg, me, la);
> +	cec_msg_give_deck_status(&msg, true, CEC_OP_STATUS_REQ_ONCE);
> +	fail_on_test(!transmit_timeout(node, &msg));
> +	if (timed_out_or_abort(&msg))
> +		return OK_NOT_SUPPORTED;
> +
> +	unsigned unresponsive_time = 0;
> +
> +	fail_on_test(!poll_stable_power_status(node, me, la, CEC_OP_POWER_STATUS_ON, unresponsive_time));
> +
> +	int ret = standby_resume_standby(node, me, la, interactive);
> +
> +	if (ret)
> +		return ret;
> +
> +	cec_msg_init(&msg, me, la);
> +	if (opcode == CEC_OP_PLAY_MODE_PLAY_FWD)
> +		cec_msg_play(&msg, CEC_OP_PLAY_MODE_PLAY_FWD);
> +	else
> +		cec_msg_deck_control(&msg, CEC_OP_DECK_CTL_MODE_EJECT);
> +	fail_on_test(!transmit_timeout(node, &msg));
> +	fail_on_test(cec_msg_status_is_abort(&msg));
> +
> +	unresponsive_time = 0;
> +	fail_on_test(!poll_stable_power_status(node, me, la, CEC_OP_POWER_STATUS_ON, unresponsive_time));
> +	fail_on_test(interactive && !question("Is the device in On state?"));
> +
> +	return OK;
> +}
> +
> +
> +static int standby_resume_wakeup_deck_eject(struct node *node, unsigned me, unsigned la, bool interactive)
> +{
> +	return standby_resume_wakeup_deck(node, me, la, interactive, CEC_OP_DECK_CTL_MODE_EJECT);
> +}
> +
> +static int standby_resume_wakeup_deck_play(struct node *node, unsigned me, unsigned la, bool interactive)
> +{
> +	return standby_resume_wakeup_deck(node, me, la, interactive, CEC_OP_PLAY_MODE_PLAY_FWD);
> +}
> +
> +const vec_remote_subtests deck_ctl_standby_resume_subtests{

Space before {

Also, make this static and make it part of the 'Standby/Resume and Power Status'
tests, do not add this to the deck control tests.

The reason is that these power status tests should all be done at the end, not
in the middle of other tests.

Regards,

	Hans

> +	{
> +		"Deck Eject Standby Resume",
> +		CEC_LOG_ADDR_MASK_PLAYBACK | CEC_LOG_ADDR_MASK_RECORD,
> +		standby_resume_wakeup_deck_eject,
> +	},
> +	{
> +		"Deck Play Standby Resume",
> +		CEC_LOG_ADDR_MASK_PLAYBACK | CEC_LOG_ADDR_MASK_RECORD,
> +		standby_resume_wakeup_deck_play,
> +	}
> +};
> diff --git a/utils/cec-compliance/cec-test.cpp b/utils/cec-compliance/cec-test.cpp
> index 283abe43..cd50c52d 100644
> --- a/utils/cec-compliance/cec-test.cpp
> +++ b/utils/cec-compliance/cec-test.cpp
> @@ -1658,6 +1658,7 @@ static const remote_test tests[] = {
>  	{ "Remote Control Passthrough feature", TAG_REMOTE_CONTROL_PASSTHROUGH, rc_passthrough_subtests },
>  	{ "Device Menu Control feature", TAG_DEVICE_MENU_CONTROL, dev_menu_ctl_subtests },
>  	{ "Deck Control feature", TAG_DECK_CONTROL, deck_ctl_subtests },
> +	{ "Deck Control Standby/Resume", TAG_STANDBY_RESUME, deck_ctl_standby_resume_subtests },
>  	{ "Tuner Control feature", TAG_TUNER_CONTROL, tuner_ctl_subtests },
>  	{ "One Touch Record feature", TAG_ONE_TOUCH_RECORD, one_touch_rec_subtests },
>  	{ "Timer Programming feature", TAG_TIMER_PROGRAMMING, timer_prog_subtests },
> diff --git a/utils/cec-follower/cec-processing.cpp b/utils/cec-follower/cec-processing.cpp
> index 876e0bc0..5385b335 100644
> --- a/utils/cec-follower/cec-processing.cpp
> +++ b/utils/cec-follower/cec-processing.cpp
> @@ -561,6 +561,7 @@ static void processMsg(struct node *node, struct cec_msg &msg, unsigned me)
>  
>  		switch (play_mode) {
>  		case CEC_OP_PLAY_MODE_PLAY_FWD:
> +			exit_standby(node);
>  			deck_state = CEC_OP_DECK_INFO_PLAY;
>  			break;
>  		case CEC_OP_PLAY_MODE_PLAY_REV:
> @@ -618,6 +619,7 @@ static void processMsg(struct node *node, struct cec_msg &msg, unsigned me)
>  			node->state.deck_skip_start = 0;
>  			break;
>  		case CEC_OP_DECK_CTL_MODE_EJECT:
> +			exit_standby(node);
>  			deck_state = CEC_OP_DECK_INFO_NO_MEDIA;
>  			node->state.deck_skip_start = 0;
>  			break;
> 


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] cec: add Deck Control wake-up handling tests
  2021-06-15  8:08 ` Hans Verkuil
@ 2021-06-15 13:29   ` Hans Verkuil
  0 siblings, 0 replies; 3+ messages in thread
From: Hans Verkuil @ 2021-06-15 13:29 UTC (permalink / raw)
  To: Deborah Brouwer, linux-media; +Cc: jaffe1

On 15/06/2021 10:08, Hans Verkuil wrote:
> Hi Deb,
> 
> On 14/06/2021 15:53, Deborah Brouwer wrote:
>> Test that a deck in standby will wake up upon receiving the Deck Control
>> messages Eject or Play Forward.
>>
>> Signed-off-by: Deborah Brouwer <deborahbrouwer3563@gmail.com>
>> ---
>> This is part of an Outreachy project to expand the testing of
>> Deck Control messages as handled by CEC adapters.
>>
>> Changes since v2:
>> 	- move tests to cec-test-power.cpp
>> 	- check if deck control is supported by sending REQ_ONCE
>> 	- use a single function that accepts different ops
>>
>>  utils/cec-compliance/cec-compliance.h   |  1 +
>>  utils/cec-compliance/cec-test-power.cpp | 58 +++++++++++++++++++++++++
>>  utils/cec-compliance/cec-test.cpp       |  1 +
>>  utils/cec-follower/cec-processing.cpp   |  2 +
>>  4 files changed, 62 insertions(+)
>>
>> diff --git a/utils/cec-compliance/cec-compliance.h b/utils/cec-compliance/cec-compliance.h
>> index 818181ab..057f42c4 100644
>> --- a/utils/cec-compliance/cec-compliance.h
>> +++ b/utils/cec-compliance/cec-compliance.h
>> @@ -468,5 +468,6 @@ extern const vec_remote_subtests standby_subtests;
>>  extern const vec_remote_subtests one_touch_play_subtests;
>>  extern const vec_remote_subtests power_status_subtests;
>>  extern const vec_remote_subtests standby_resume_subtests;
>> +extern const vec_remote_subtests deck_ctl_standby_resume_subtests;
>>  
>>  #endif
>> diff --git a/utils/cec-compliance/cec-test-power.cpp b/utils/cec-compliance/cec-test-power.cpp
>> index bc88eca7..49241093 100644
>> --- a/utils/cec-compliance/cec-test-power.cpp
>> +++ b/utils/cec-compliance/cec-test-power.cpp
>> @@ -652,3 +652,61 @@ const vec_remote_subtests standby_resume_subtests{
>>  	{ "Wake up TV on Text View On", CEC_LOG_ADDR_MASK_TV, standby_resume_wakeup_text_view_on },
>>  	{ "Power State Transitions", CEC_LOG_ADDR_MASK_TV, power_state_transitions, false, true },
>>  };
>> +
>> +static int standby_resume_wakeup_deck(struct node *node, unsigned me, unsigned la, bool interactive, __u8 opcode)
>> +{
>> +	struct cec_msg msg = {};
>> +
>> +	cec_msg_init(&msg, me, la);
>> +	cec_msg_give_deck_status(&msg, true, CEC_OP_STATUS_REQ_ONCE);
>> +	fail_on_test(!transmit_timeout(node, &msg));
>> +	if (timed_out_or_abort(&msg))
>> +		return OK_NOT_SUPPORTED;
>> +
>> +	unsigned unresponsive_time = 0;
>> +
>> +	fail_on_test(!poll_stable_power_status(node, me, la, CEC_OP_POWER_STATUS_ON, unresponsive_time));
>> +
>> +	int ret = standby_resume_standby(node, me, la, interactive);
>> +
>> +	if (ret)
>> +		return ret;
>> +
>> +	cec_msg_init(&msg, me, la);
>> +	if (opcode == CEC_OP_PLAY_MODE_PLAY_FWD)
>> +		cec_msg_play(&msg, CEC_OP_PLAY_MODE_PLAY_FWD);
>> +	else
>> +		cec_msg_deck_control(&msg, CEC_OP_DECK_CTL_MODE_EJECT);
>> +	fail_on_test(!transmit_timeout(node, &msg));
>> +	fail_on_test(cec_msg_status_is_abort(&msg));
>> +
>> +	unresponsive_time = 0;
>> +	fail_on_test(!poll_stable_power_status(node, me, la, CEC_OP_POWER_STATUS_ON, unresponsive_time));
>> +	fail_on_test(interactive && !question("Is the device in On state?"));
>> +
>> +	return OK;
>> +}
>> +
>> +
>> +static int standby_resume_wakeup_deck_eject(struct node *node, unsigned me, unsigned la, bool interactive)
>> +{
>> +	return standby_resume_wakeup_deck(node, me, la, interactive, CEC_OP_DECK_CTL_MODE_EJECT);
>> +}
>> +
>> +static int standby_resume_wakeup_deck_play(struct node *node, unsigned me, unsigned la, bool interactive)
>> +{
>> +	return standby_resume_wakeup_deck(node, me, la, interactive, CEC_OP_PLAY_MODE_PLAY_FWD);
>> +}
>> +
>> +const vec_remote_subtests deck_ctl_standby_resume_subtests{
> 
> Space before {
> 
> Also, make this static and make it part of the 'Standby/Resume and Power Status'
> tests, do not add this to the deck control tests.
> 
> The reason is that these power status tests should all be done at the end, not
> in the middle of other tests.

Sorry, it's been a while since I last looked at this. This shouldn't be a separate
vector of tests, instead...

> 
> Regards,
> 
> 	Hans
> 
>> +	{
>> +		"Deck Eject Standby Resume",
>> +		CEC_LOG_ADDR_MASK_PLAYBACK | CEC_LOG_ADDR_MASK_RECORD,
>> +		standby_resume_wakeup_deck_eject,
>> +	},
>> +	{
>> +		"Deck Play Standby Resume",
>> +		CEC_LOG_ADDR_MASK_PLAYBACK | CEC_LOG_ADDR_MASK_RECORD,
>> +		standby_resume_wakeup_deck_play,
>> +	}

... add these to the existing standby_resume_subtests.

Regards,

	Hans

>> +};
>> diff --git a/utils/cec-compliance/cec-test.cpp b/utils/cec-compliance/cec-test.cpp
>> index 283abe43..cd50c52d 100644
>> --- a/utils/cec-compliance/cec-test.cpp
>> +++ b/utils/cec-compliance/cec-test.cpp
>> @@ -1658,6 +1658,7 @@ static const remote_test tests[] = {
>>  	{ "Remote Control Passthrough feature", TAG_REMOTE_CONTROL_PASSTHROUGH, rc_passthrough_subtests },
>>  	{ "Device Menu Control feature", TAG_DEVICE_MENU_CONTROL, dev_menu_ctl_subtests },
>>  	{ "Deck Control feature", TAG_DECK_CONTROL, deck_ctl_subtests },
>> +	{ "Deck Control Standby/Resume", TAG_STANDBY_RESUME, deck_ctl_standby_resume_subtests },
>>  	{ "Tuner Control feature", TAG_TUNER_CONTROL, tuner_ctl_subtests },
>>  	{ "One Touch Record feature", TAG_ONE_TOUCH_RECORD, one_touch_rec_subtests },
>>  	{ "Timer Programming feature", TAG_TIMER_PROGRAMMING, timer_prog_subtests },
>> diff --git a/utils/cec-follower/cec-processing.cpp b/utils/cec-follower/cec-processing.cpp
>> index 876e0bc0..5385b335 100644
>> --- a/utils/cec-follower/cec-processing.cpp
>> +++ b/utils/cec-follower/cec-processing.cpp
>> @@ -561,6 +561,7 @@ static void processMsg(struct node *node, struct cec_msg &msg, unsigned me)
>>  
>>  		switch (play_mode) {
>>  		case CEC_OP_PLAY_MODE_PLAY_FWD:
>> +			exit_standby(node);
>>  			deck_state = CEC_OP_DECK_INFO_PLAY;
>>  			break;
>>  		case CEC_OP_PLAY_MODE_PLAY_REV:
>> @@ -618,6 +619,7 @@ static void processMsg(struct node *node, struct cec_msg &msg, unsigned me)
>>  			node->state.deck_skip_start = 0;
>>  			break;
>>  		case CEC_OP_DECK_CTL_MODE_EJECT:
>> +			exit_standby(node);
>>  			deck_state = CEC_OP_DECK_INFO_NO_MEDIA;
>>  			node->state.deck_skip_start = 0;
>>  			break;
>>
> 


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-06-15 13:29 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-06-14 13:53 [PATCH v2] cec: add Deck Control wake-up handling tests Deborah Brouwer
2021-06-15  8:08 ` Hans Verkuil
2021-06-15 13:29   ` Hans Verkuil

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.