cmd/button: return button status
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Mon, 14 Sep 2020 10:50:56 +0000 (12:50 +0200)
committerMarek Szyprowski <m.szyprowski@samsung.com>
Mon, 15 Nov 2021 10:37:12 +0000 (11:37 +0100)
To make the button command useful in a shell script it should return the
status of the button:

* 0 (true) - pressed, on
* 1 (false) - not pressed, off

The button command takes only one argument. Correct maxargs.

Adjust the Python unit test.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Philippe Reynes <philippe.reynes@softathome.com>
[backport of mainline commit a6bfd71a96201127836d59736abcb54dc2d5e1a5]
Change-Id: Ic799b7e189e3fb6793083a92b2ceadb0f5884889
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
cmd/button.c
test/py/tests/test_button.py

index 84ad165..64c5a8f 100644 (file)
@@ -75,11 +75,11 @@ int do_button(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 
        ret = show_button_state(dev);
 
-       return 0;
+       return !ret;
 }
 
 U_BOOT_CMD(
-       button, 4, 1, do_button,
+       button, 2, 1, do_button,
        "manage buttons",
        "<button_label> \tGet button state\n"
        "button list\t\tShow a list of buttons"
index 98067a9..a0aa853 100644 (file)
@@ -4,16 +4,33 @@ import pytest
 
 @pytest.mark.boardspec('sandbox')
 @pytest.mark.buildconfigspec('cmd_button')
-def test_button_exit_statuses(u_boot_console):
-    """Test that non-input button commands correctly return the command
-    success/failure status."""
+def test_button_list(u_boot_console):
+    """Test listing buttons"""
 
-    expected_response = 'rc:0'
     response = u_boot_console.run_command('button list; echo rc:$?')
-    assert(expected_response in response)
-    response = u_boot_console.run_command('button summer; echo rc:$?')
-    assert(expected_response in response)
+    assert('button1' in response)
+    assert('button2' in response)
+    assert('rc:0' in response)
+
+@pytest.mark.boardspec('sandbox')
+@pytest.mark.buildconfigspec('cmd_button')
+@pytest.mark.buildconfigspec('cmd_gpio')
+def test_button_return_code(u_boot_console):
+    """Test correct reporting of the button status
+
+    The sandbox gpio driver reports the last output value as input value.
+    We can use this in our test to emulate different input statuses.
+    """
+
+    u_boot_console.run_command('gpio set a3; gpio input a3');
+    assert('on' in response)
+    assert('rc:0' in response)
+
+    u_boot_console.run_command('gpio clear a3; gpio input a3');
+    response = u_boot_console.run_command('button button1; echo rc:$?')
+    assert('off' in response)
+    assert('rc:1' in response)
 
-    expected_response = 'rc:1'
     response = u_boot_console.run_command('button nonexistent-button; echo rc:$?')
-    assert(expected_response in response)
+    assert('not found' in response)
+    assert('rc:1' in response)