Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cypress: FPGA: gpio test looks like not valid #11835

Closed
yarbcy opened this issue Nov 7, 2019 · 39 comments
Closed

Cypress: FPGA: gpio test looks like not valid #11835

yarbcy opened this issue Nov 7, 2019 · 39 comments

Comments

@yarbcy
Copy link
Contributor

yarbcy commented Nov 7, 2019

Description of defect

Cypress: FPGA: gpio test looks like not valid.

In file TESTS/mbed_hal_fpga_ci_test_shield/gpio/main.cpp line 165:

`
// Initialize GPIO pin as an input, pull-up mode.

memset(&gpio, 0, sizeof gpio);

gpio_init_inout(&gpio, pin, PIN_INPUT, PullUp, 0);

TEST_ASSERT_NOT_EQUAL(0, gpio_is_connected(&gpio));

tester.gpio_write(MbedTester::LogicalPinGPIO0, 0, false);

wait_us(HI_Z_READ_DELAY_US);

TEST_ASSERT_EQUAL_INT(1, gpio_read(&gpio)); // hi-Z, pulled up

gpio_free(&gpio);`

PSoC6 set 0, tester(FPGA) set 0. But expect 1. Test FAILED. It looks like it doesn't make sense.
This test PASSED if set PSOC6 1, tester(FPGA) set 0.

Target(s) affected by this defect ?

Tested on CY8CKIT_062_WIFI_BT

Toolchain(s) (name and version) displaying this defect ?

Tested on GCC_ARM

What version of Mbed-os are you using (tag or sha) ?

Latest

What version(s) of tools are you using. List all that apply (E.g. mbed-cli)

N/A

How is this defect reproduced ?

Always

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 7, 2019

@0xc0170

@0xc0170
Copy link
Contributor

0xc0170 commented Nov 7, 2019

@yarbcy What is not valid in the code snippet above?

cc @mprse

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 7, 2019

@yarbcy What is not valid in the code snippet above?

cc @mprse

PSoC6 set 0, tester(FPGA) set 0. But expect 1

@0xc0170
Copy link
Contributor

0xc0170 commented Nov 7, 2019

Isn't it that you write 0 (fpga side), but because of pull up you expect 1 on the actual pin?

This comment explains it : // hi-Z, pulled up

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 7, 2019

Isn't it that you write 0 (fpga side), but because of pull up you expect 1 on the actual pin?

This comment explains it : // hi-Z, pulled up

Yes. But PSoC6 also set initial state 0.

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 7, 2019

@0xc0170 @mprse
All the rest GPIO test are passed. Except this one.

@0xc0170
Copy link
Contributor

0xc0170 commented Nov 7, 2019

gpio api supports value even for input, it writes to gpio as it claims "for future use if you switch to output". Although as soon as you change the direction, you write a new value so I dont understand the use case for that condition there).
My expectation, once you set pin to input, it goes into Hi-Z state (no matter what you write as a value, it shall be ignored. As soon as you change the direction, the value is preserved and output equals to the value we wrote earlier), and that is what the test also expects. How does it work for failing target? What happens if you set direction to input to the pin itself?

I cant find it in the history why it was there, will need someone else to look at this closer.

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 7, 2019

From my point of view:

  1. PSoC6 set PullUp drive mode (Input)
  2. Set gpio_write(0) (I see it on logical analyzer)
  3. Set tester (FPGA) 0
  4. gpio_read() return 0. But expect 1.

@mprse
Copy link
Contributor

mprse commented Nov 7, 2019

Test scenario:

  1. Set Mbed GPIO to pulled-up input. Provided value, in this case, is irrelevant.
  2. Set the corresponding pin on the FPGA side to Hi-Z (something like no connection between GPIOs).
  3. Read the Mbed GPIO.
  4. Expect logic 1 since the pin is pulled up.

Maybe pull mode does not work on the cypress board?

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 7, 2019

@mprse Cypress support pull mode.

This case is passed if replace gpio_init_inout() -> gpio_init_in_ex()

Could you please help me understand why?

@mprse
Copy link
Contributor

mprse commented Nov 7, 2019

void gpio_init_inout(gpio_t *gpio, PinName pin, PinDirection direction, PinMode mode, int value)
{
    if (direction == PIN_INPUT) {
        _gpio_init_in(gpio, pin, mode);
        if (pin != NC) {
            gpio_write(gpio, value);    // we prepare the value in case it is switched later
        }
    } else {
        _gpio_init_out(gpio, pin, mode, value);
    }
}
void gpio_init_in_ex(gpio_t *gpio, PinName pin, PinMode mode)
{
    _gpio_init_in(gpio, pin, mode);
}

gpio_init_inout() calls _gpio_init_in() and gpio_write().
gpio_init_in_ex() calls only _gpio_init_in().

This call to gpio_write() is suspicious. Probably this is done to set the value for the future if the port direction is changed (according to #11835 (comment)).
Maybe the gpio_write() changes the port direction?

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 7, 2019

Maybe the gpio_write() changes the port direction?

Looks like no.

But why we have initial state for input pin it should be done for output pin. Right?

@0xc0170
Copy link
Contributor

0xc0170 commented Nov 7, 2019

That is what I dont understand. 😞

anyway, what happens on the pin if you set it to output (it should be floating, no value set?). Is this documented in the reference manual for that MCU ? What is expected behavior for input pin?

In case the pin has different behavior than we expect (@mprse I havent found the behavior defined in the gpio_api header file for this inout function), you can always check in HAL (if pin is output, and something asks to write to the pin, ignore it and keep it floating).

@kjbracey
Copy link
Contributor

kjbracey commented Nov 7, 2019

Looking in apply_config, called from gpio_dir for PSOC6, I see

if (obj->drive_mode == PullUp) {
    gpio_write(obj, 1);
...

Suggesting that the gpio_write control is used to set the pull - presumably it's acting as a "weak drive".

That test (and the init_inout) seems to be assuming that the gpio_write has no effect until the direction is switched.

Seems like achieving that would need a more advanced gpio_write implementation - which is unfortunate as we normally like it to be a nice small inline register write.

@mprse
Copy link
Contributor

mprse commented Nov 7, 2019

static inline void gpio_write(gpio_t *obj, int value)
{
    if (obj->direction == CYHAL_GPIO_DIR_OUTPUT) {    <--- set only if output
        MBED_ASSERT(obj->pin != CYHAL_NC_PIN_VALUE);
        cyhal_gpio_write(obj->pin, value != 0);
    }
}

static inline void gpio_set_pull(gpio_t *obj, int value)  <--- new function for setting pull mode
{
    MBED_ASSERT(obj->pin != CYHAL_NC_PIN_VALUE);
    cyhal_gpio_write(obj->pin, value != 0);
}

void apply_config(gpio_t *obj)
{
    MBED_ASSERT(obj->pin != CYHAL_NC_PIN_VALUE);

    cy_rslt_t rslt;
    if (CY_RSLT_SUCCESS != (rslt = cyhal_gpio_configure(obj->pin, obj->direction, obj->drive_mode))) {
        MBED_ERROR(MBED_MAKE_ERROR(MBED_MODULE_DRIVER_GPIO, CY_RSLT_GET_CODE(rslt)), "cyhal_gpio_configure failed");
    }

    if (obj->drive_mode == PullUp) {
        gpio_set_pull(obj, 1);  <--- use new function for pull mode
    } else if (obj->drive_mode == PullDown) {
        gpio_set_pull(obj, 0);  <--- use new function for pull mode
    }
}

Maybe something like this?

@kjbracey
Copy link
Contributor

kjbracey commented Nov 7, 2019

I think so, but it seems that needs to be extended so that if you're told to write while an input, you should be remembering the written value (in obj, I guess) to write next time you switch to output.

@kjbracey
Copy link
Contributor

kjbracey commented Nov 7, 2019

(I guess that sort of thing is a valid use case, as you could leave the output set to 0 always, then flip between input and output to bitbang I2C, for example, where you only ever drive low)

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 11, 2019

@0xc0170 @mprse Do we have some updates?

@0xc0170
Copy link
Contributor

0xc0170 commented Nov 11, 2019

@yarbcy Can you review the proposal above #11835 (comment) ?

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 12, 2019

@0xc0170 Looks good. But I m not expert in mbed_hal.

@mprse
Copy link
Contributor

mprse commented Nov 12, 2019

@yarbcy Can you test this code?

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 12, 2019

@mprse Yes.

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 13, 2019

@mprse I tested and it failed communication with FPGA tester: "An MbedTester communication channel could not be created"

@mprse
Copy link
Contributor

mprse commented Nov 13, 2019

The communication with the FPGA-test-shield is established using bit-banged SPI communication - based on GPIOs (DigitalInOut). So dealing with GPIO driver may have influence on this.
Can you share your code changes?

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 13, 2019

I replaced cy_gpio_api.c line 32 apply_config():

void apply_config(gpio_t *obj)
{
MBED_ASSERT(obj->pin != CYHAL_NC_PIN_VALUE);

cy_rslt_t rslt;
if (CY_RSLT_SUCCESS != (rslt = cyhal_gpio_configure(obj->pin, obj->direction, obj->drive_mode))) {
    MBED_ERROR(MBED_MAKE_ERROR(MBED_MODULE_DRIVER_GPIO, CY_RSLT_GET_CODE(rslt)), "cyhal_gpio_configure failed");
}

if (obj->drive_mode == PullUp) {
    gpio_set_pull(obj, 1);  <--- use new function for pull mode
} else if (obj->drive_mode == PullDown) {
    gpio_set_pull(obj, 0);  <--- use new function for pull mode
}

}

Replaced gpio_object.h line 59 gpio_write():

static inline void gpio_write(gpio_t *obj, int value)
{
if (obj->direction == CYHAL_GPIO_DIR_OUTPUT) { <--- set only if output
MBED_ASSERT(obj->pin != CYHAL_NC_PIN_VALUE);
cyhal_gpio_write(obj->pin, value != 0);
}
}

Added new after gpio_write():

static inline void gpio_set_pull(gpio_t *obj, int value) <--- new function for setting pull mode
{
MBED_ASSERT(obj->pin != CYHAL_NC_PIN_VALUE);
cyhal_gpio_write(obj->pin, value != 0);
}

@ciarmcom
Copy link
Member

Internal Jira reference: https://jira.arm.com/browse/MBOTRIAGE-2322

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 14, 2019

@mprse My proposal for code change is:

mbed-os/hal/mbed_gpio.c remove line 63-65 because initial value doesn't make sense when pin direction is in input direction.

@kjbracey
Copy link
Contributor

mbed-os/hal/mbed_gpio.c remove line 63-65 because initial value doesn't make sense when pin direction is in input direction.

As I noted in my example above, there is a use-case for this. Set the output to low, and flip between input and output to manually bit-bang an I2C open-drain output.

That would be efficient on a chip with "OUT" and "DIR" registers where OUT was ignored when DIR was set to input.

I don't know whether any Mbed application in the word is currently doing this, but it does currently work, those lines 63-65 seem to be intended for that, and that test makes sure it works.

@kjbracey
Copy link
Contributor

Annoyingly, the commit that added lines 63-65 (be8bca4) only has the commit message "proposed change of gpio_api", so it's not 100% clear what they were intending. But it was deliberate.

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 14, 2019

@kjbracey-arm I don't understand next steps. If you don't agree (line 63-65). Please propose your approach.

@kjbracey
Copy link
Contributor

My suggestion is roughly as @mprse suggested above, but with the addition as I stated:

if you're told to write while an input, you should be remembering the written value (in obj, I guess) to write next time you switch to output.

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 14, 2019

@mprse @0xc0170 Could you please take a look?

@0xc0170
Copy link
Contributor

0xc0170 commented Nov 14, 2019

@yarbcy @mprse will update the suggestion above with written value storing, it will be good to take this to PR to propose a change. It should fix the failures you have been seeing

Annoyingly, the commit that added lines 63-65 (be8bca4) only has the commit message "proposed change of gpio_api", so it's not 100% clear what they were intending. But it was deliberate.

👍 , the comment in the PR itself states something similar about the intention #198 (comment) . Sadly, this is not included in the commit itself

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 14, 2019

@mprse I don't have clear understanding what needs to be done. Can you do these changes?

@mprse
Copy link
Contributor

mprse commented Nov 14, 2019

I will create a fix proposition.

@mprse
Copy link
Contributor

mprse commented Nov 14, 2019

The fix can be found here: PR #11867

@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 15, 2019

@mprse I tested. All GPIO tests PASSED.

But please fix in file gpio_object.h line 66: change '==' to '='.

[1573807873.51][CONN][RXD] >>> Running case #1: 'generic init, input & output'...
[1573807873.56][CONN][INF] found KV pair in stream: {{__testcase_start;generic init, input & output}}, queued...
[1573807873.59][CONN][RXD] Skipping IO pin D0 (327680)
[1573807873.62][CONN][RXD] Skipping IO pin D1 (327681)
[1573807873.64][CONN][RXD] Skipping IO pin D2 (327682)
[1573807873.67][CONN][RXD] Skipping IO pin D3 (327683)
[1573807873.71][CONN][RXD] Skipping IO pin D11 (786432)
[1573807873.74][CONN][RXD] Skipping IO pin D12 (786433)
[1573807873.77][CONN][RXD] Skipping IO pin D13 (786434)
[1573807873.80][CONN][RXD] Skipping IO pin D14 (393217)
[1573807873.83][CONN][RXD] Skipping IO pin D15 (393216)
[1573807873.88][CONN][RXD] Testing GPIO on all form factor ports
[1573807873.95][CONN][RXD] D4 - IO pin tested on port: peripheral=(0) IO=(D4) ...succeeded
[1573807874.01][CONN][RXD] D5 - IO pin tested on port: peripheral=(0) IO=(D5) ...succeeded
[1573807874.09][CONN][RXD] D6 - IO pin tested on port: peripheral=(0) IO=(D6) ...succeeded
[1573807874.15][CONN][RXD] D7 - IO pin tested on port: peripheral=(0) IO=(D7) ...succeeded
[1573807874.21][CONN][RXD] D8 - IO pin tested on port: peripheral=(0) IO=(D8) ...succeeded
[1573807874.29][CONN][RXD] D9 - IO pin tested on port: peripheral=(0) IO=(D9) ...succeeded
[1573807874.35][CONN][RXD] D10 - IO pin tested on port: peripheral=(0) IO=(D10) ...succeeded
[1573807874.42][CONN][RXD] A0 - IO pin tested on port: peripheral=(0) IO=(A0) ...succeeded
[1573807874.49][CONN][RXD] A1 - IO pin tested on port: peripheral=(0) IO=(A1) ...succeeded
[1573807874.56][CONN][RXD] A2 - IO pin tested on port: peripheral=(0) IO=(A2) ...succeeded
[1573807874.62][CONN][RXD] A3 - IO pin tested on port: peripheral=(0) IO=(A3) ...succeeded
[1573807874.69][CONN][RXD] A4 - IO pin tested on port: peripheral=(0) IO=(A4) ...succeeded
[1573807874.76][CONN][RXD] A5 - IO pin tested on port: peripheral=(0) IO=(A5) ...succeeded
[1573807874.81][CONN][INF] found KV pair in stream: {{__testcase_finish;generic init, input & output;1;0}}, queued...
[1573807874.88][CONN][RXD] >>> 'generic init, input & output': 1 passed, 0 failed
[1573807874.88][CONN][RXD]
[1573807874.93][CONN][RXD] >>> Running case #2: 'explicit init, input'...
[1573807874.97][CONN][INF] found KV pair in stream: {{__testcase_start;explicit init, input}}, queued...
[1573807875.00][CONN][RXD] Skipping IO pin D0 (327680)
[1573807875.02][CONN][RXD] Skipping IO pin D1 (327681)
[1573807875.05][CONN][RXD] Skipping IO pin D2 (327682)
[1573807875.09][CONN][RXD] Skipping IO pin D3 (327683)
[1573807875.12][CONN][RXD] Skipping IO pin D11 (786432)
[1573807875.15][CONN][RXD] Skipping IO pin D12 (786433)
[1573807875.18][CONN][RXD] Skipping IO pin D13 (786434)
[1573807875.21][CONN][RXD] Skipping IO pin D14 (393217)
[1573807875.24][CONN][RXD] Skipping IO pin D15 (393216)
[1573807875.29][CONN][RXD] Testing GPIO on all form factor ports
[1573807875.36][CONN][RXD] D4 - IO pin tested on port: peripheral=(0) IO=(D4) ...succeeded
[1573807875.42][CONN][RXD] D5 - IO pin tested on port: peripheral=(0) IO=(D5) ...succeeded
[1573807875.50][CONN][RXD] D6 - IO pin tested on port: peripheral=(0) IO=(D6) ...succeeded
[1573807875.56][CONN][RXD] D7 - IO pin tested on port: peripheral=(0) IO=(D7) ...succeeded
[1573807875.62][CONN][RXD] D8 - IO pin tested on port: peripheral=(0) IO=(D8) ...succeeded
[1573807875.70][CONN][RXD] D9 - IO pin tested on port: peripheral=(0) IO=(D9) ...succeeded
[1573807875.76][CONN][RXD] D10 - IO pin tested on port: peripheral=(0) IO=(D10) ...succeeded
[1573807875.83][CONN][RXD] A0 - IO pin tested on port: peripheral=(0) IO=(A0) ...succeeded
[1573807875.90][CONN][RXD] A1 - IO pin tested on port: peripheral=(0) IO=(A1) ...succeeded
[1573807875.97][CONN][RXD] A2 - IO pin tested on port: peripheral=(0) IO=(A2) ...succeeded
[1573807876.03][CONN][RXD] A3 - IO pin tested on port: peripheral=(0) IO=(A3) ...succeeded
[1573807876.10][CONN][RXD] A4 - IO pin tested on port: peripheral=(0) IO=(A4) ...succeeded
[1573807876.17][CONN][RXD] A5 - IO pin tested on port: peripheral=(0) IO=(A5) ...succeeded
[1573807876.22][CONN][INF] found KV pair in stream: {{__testcase_finish;explicit init, input;1;0}}, queued...
[1573807876.26][CONN][RXD] >>> 'explicit init, input': 1 passed, 0 failed
[1573807876.26][CONN][RXD]
[1573807876.32][CONN][RXD] >>> Running case #3: 'explicit init, output'...
[1573807876.37][CONN][INF] found KV pair in stream: {{__testcase_start;explicit init, output}}, queued...
[1573807876.39][CONN][RXD] Skipping IO pin D0 (327680)
[1573807876.42][CONN][RXD] Skipping IO pin D1 (327681)
[1573807876.45][CONN][RXD] Skipping IO pin D2 (327682)
[1573807876.48][CONN][RXD] Skipping IO pin D3 (327683)
[1573807876.51][CONN][RXD] Skipping IO pin D11 (786432)
[1573807876.55][CONN][RXD] Skipping IO pin D12 (786433)
[1573807876.58][CONN][RXD] Skipping IO pin D13 (786434)
[1573807876.61][CONN][RXD] Skipping IO pin D14 (393217)
[1573807876.64][CONN][RXD] Skipping IO pin D15 (393216)
[1573807876.69][CONN][RXD] Testing GPIO on all form factor ports
[1573807876.75][CONN][RXD] D4 - IO pin tested on port: peripheral=(0) IO=(D4) ...succeeded
[1573807876.82][CONN][RXD] D5 - IO pin tested on port: peripheral=(0) IO=(D5) ...succeeded
[1573807876.89][CONN][RXD] D6 - IO pin tested on port: peripheral=(0) IO=(D6) ...succeeded
[1573807876.95][CONN][RXD] D7 - IO pin tested on port: peripheral=(0) IO=(D7) ...succeeded
[1573807877.02][CONN][RXD] D8 - IO pin tested on port: peripheral=(0) IO=(D8) ...succeeded
[1573807877.09][CONN][RXD] D9 - IO pin tested on port: peripheral=(0) IO=(D9) ...succeeded
[1573807877.15][CONN][RXD] D10 - IO pin tested on port: peripheral=(0) IO=(D10) ...succeeded
[1573807877.23][CONN][RXD] A0 - IO pin tested on port: peripheral=(0) IO=(A0) ...succeeded
[1573807877.29][CONN][RXD] A1 - IO pin tested on port: peripheral=(0) IO=(A1) ...succeeded
[1573807877.36][CONN][RXD] A2 - IO pin tested on port: peripheral=(0) IO=(A2) ...succeeded
[1573807877.43][CONN][RXD] A3 - IO pin tested on port: peripheral=(0) IO=(A3) ...succeeded
[1573807877.49][CONN][RXD] A4 - IO pin tested on port: peripheral=(0) IO=(A4) ...succeeded
[1573807877.57][CONN][RXD] A5 - IO pin tested on port: peripheral=(0) IO=(A5) ...succeeded
[1573807877.61][CONN][INF] found KV pair in stream: {{__testcase_finish;explicit init, output;1;0}}, queued...
[1573807877.66][CONN][RXD] >>> 'explicit init, output': 1 passed, 0 failed
[1573807877.66][CONN][RXD]
[1573807877.70][CONN][RXD] >>> Test cases: 3 passed, 0 failed

@mprse
Copy link
Contributor

mprse commented Nov 15, 2019

Great news! 🎉

But please fix in file gpio_object.h line 66: change '==' to '='.

Fixed! Thanks for catching this.

BTW. Probably the previous implementation faulty because the direction check was invalid:

static inline void gpio_write(gpio_t *obj, int value)
{
    if (obj->direction == CYHAL_GPIO_DIR_OUTPUT) {    <--- issue: when output direction is set to CYHAL_GPIO_DIR_BIDIRECTIONAL
        MBED_ASSERT(obj->pin != CYHAL_NC_PIN_VALUE);
        cyhal_gpio_write(obj->pin, value != 0);
    }
}

0xc0170 added a commit that referenced this issue Nov 19, 2019
Fix for Cypress GPIO driver (fix for issue #11835)
@yarbcy
Copy link
Contributor Author

yarbcy commented Nov 19, 2019

All GPIO tests are PASSED.

[1574155268.32][CONN][RXD] >>> Running case #1: 'generic init, input & output'...
[1574155268.38][CONN][INF] found KV pair in stream: {{__testcase_start;generic init, input & output}}, queued...
[1574155268.41][CONN][RXD] Skipping IO pin D0 (327680)
[1574155268.44][CONN][RXD] Skipping IO pin D1 (327681)
[1574155268.46][CONN][RXD] Skipping IO pin D2 (327682)
[1574155268.50][CONN][RXD] Skipping IO pin D3 (327683)
[1574155268.53][CONN][RXD] Skipping IO pin D11 (786432)
[1574155268.56][CONN][RXD] Skipping IO pin D12 (786433)
[1574155268.59][CONN][RXD] Skipping IO pin D13 (786434)
[1574155268.62][CONN][RXD] Skipping IO pin D14 (393217)
[1574155268.66][CONN][RXD] Skipping IO pin D15 (393216)
[1574155268.70][CONN][RXD] Testing GPIO on all form factor ports
[1574155268.76][CONN][RXD] D4 - IO pin tested on port: peripheral=(0) IO=(D4) ...succeeded
[1574155268.84][CONN][RXD] D5 - IO pin tested on port: peripheral=(0) IO=(D5) ...succeeded
[1574155268.90][CONN][RXD] D6 - IO pin tested on port: peripheral=(0) IO=(D6) ...succeeded
[1574155268.96][CONN][RXD] D7 - IO pin tested on port: peripheral=(0) IO=(D7) ...succeeded
[1574155269.04][CONN][RXD] D8 - IO pin tested on port: peripheral=(0) IO=(D8) ...succeeded
[1574155269.10][CONN][RXD] D9 - IO pin tested on port: peripheral=(0) IO=(D9) ...succeeded
[1574155269.17][CONN][RXD] D10 - IO pin tested on port: peripheral=(0) IO=(D10) ...succeeded
[1574155269.24][CONN][RXD] A0 - IO pin tested on port: peripheral=(0) IO=(A0) ...succeeded
[1574155269.31][CONN][RXD] A1 - IO pin tested on port: peripheral=(0) IO=(A1) ...succeeded
[1574155269.38][CONN][RXD] A2 - IO pin tested on port: peripheral=(0) IO=(A2) ...succeeded
[1574155269.44][CONN][RXD] A3 - IO pin tested on port: peripheral=(0) IO=(A3) ...succeeded
[1574155269.51][CONN][RXD] A4 - IO pin tested on port: peripheral=(0) IO=(A4) ...succeeded
[1574155269.57][CONN][RXD] A5 - IO pin tested on port: peripheral=(0) IO=(A5) ...succeeded
[1574155269.64][CONN][INF] found KV pair in stream: {{__testcase_finish;generic init, input & output;1;0}}, queued...
[1574155269.69][CONN][RXD] >>> 'generic init, input & output': 1 passed, 0 failed
[1574155269.69][CONN][RXD]
[1574155269.74][CONN][RXD] >>> Running case #2: 'explicit init, input'...
[1574155269.79][CONN][INF] found KV pair in stream: {{__testcase_start;explicit init, input}}, queued...
[1574155269.82][CONN][RXD] Skipping IO pin D0 (327680)
[1574155269.85][CONN][RXD] Skipping IO pin D1 (327681)
[1574155269.88][CONN][RXD] Skipping IO pin D2 (327682)
[1574155269.90][CONN][RXD] Skipping IO pin D3 (327683)
[1574155269.93][CONN][RXD] Skipping IO pin D11 (786432)
[1574155269.97][CONN][RXD] Skipping IO pin D12 (786433)
[1574155270.00][CONN][RXD] Skipping IO pin D13 (786434)
[1574155270.03][CONN][RXD] Skipping IO pin D14 (393217)
[1574155270.06][CONN][RXD] Skipping IO pin D15 (393216)
[1574155270.11][CONN][RXD] Testing GPIO on all form factor ports
[1574155270.18][CONN][RXD] D4 - IO pin tested on port: peripheral=(0) IO=(D4) ...succeeded
[1574155270.24][CONN][RXD] D5 - IO pin tested on port: peripheral=(0) IO=(D5) ...succeeded
[1574155270.31][CONN][RXD] D6 - IO pin tested on port: peripheral=(0) IO=(D6) ...succeeded
[1574155270.37][CONN][RXD] D7 - IO pin tested on port: peripheral=(0) IO=(D7) ...succeeded
[1574155270.45][CONN][RXD] D8 - IO pin tested on port: peripheral=(0) IO=(D8) ...succeeded
[1574155270.51][CONN][RXD] D9 - IO pin tested on port: peripheral=(0) IO=(D9) ...succeeded
[1574155270.58][CONN][RXD] D10 - IO pin tested on port: peripheral=(0) IO=(D10) ...succeeded
[1574155270.65][CONN][RXD] A0 - IO pin tested on port: peripheral=(0) IO=(A0) ...succeeded
[1574155270.72][CONN][RXD] A1 - IO pin tested on port: peripheral=(0) IO=(A1) ...succeeded
[1574155270.78][CONN][RXD] A2 - IO pin tested on port: peripheral=(0) IO=(A2) ...succeeded
[1574155270.86][CONN][RXD] A3 - IO pin tested on port: peripheral=(0) IO=(A3) ...succeeded
[1574155270.92][CONN][RXD] A4 - IO pin tested on port: peripheral=(0) IO=(A4) ...succeeded
[1574155270.98][CONN][RXD] A5 - IO pin tested on port: peripheral=(0) IO=(A5) ...succeeded
[1574155271.04][CONN][INF] found KV pair in stream: {{__testcase_finish;explicit init, input;1;0}}, queued...
[1574155271.09][CONN][RXD] >>> 'explicit init, input': 1 passed, 0 failed
[1574155271.09][CONN][RXD]
[1574155271.14][CONN][RXD] >>> Running case #3: 'explicit init, output'...
[1574155271.18][CONN][INF] found KV pair in stream: {{__testcase_start;explicit init, output}}, queued...
[1574155271.22][CONN][RXD] Skipping IO pin D0 (327680)
[1574155271.25][CONN][RXD] Skipping IO pin D1 (327681)
[1574155271.27][CONN][RXD] Skipping IO pin D2 (327682)
[1574155271.30][CONN][RXD] Skipping IO pin D3 (327683)
[1574155271.33][CONN][RXD] Skipping IO pin D11 (786432)
[1574155271.36][CONN][RXD] Skipping IO pin D12 (786433)
[1574155271.39][CONN][RXD] Skipping IO pin D13 (786434)
[1574155271.43][CONN][RXD] Skipping IO pin D14 (393217)
[1574155271.46][CONN][RXD] Skipping IO pin D15 (393216)
[1574155271.51][CONN][RXD] Testing GPIO on all form factor ports
[1574155271.57][CONN][RXD] D4 - IO pin tested on port: peripheral=(0) IO=(D4) ...succeeded
[1574155271.65][CONN][RXD] D5 - IO pin tested on port: peripheral=(0) IO=(D5) ...succeeded
[1574155271.71][CONN][RXD] D6 - IO pin tested on port: peripheral=(0) IO=(D6) ...succeeded
[1574155271.77][CONN][RXD] D7 - IO pin tested on port: peripheral=(0) IO=(D7) ...succeeded
[1574155271.85][CONN][RXD] D8 - IO pin tested on port: peripheral=(0) IO=(D8) ...succeeded
[1574155271.91][CONN][RXD] D9 - IO pin tested on port: peripheral=(0) IO=(D9) ...succeeded
[1574155271.98][CONN][RXD] D10 - IO pin tested on port: peripheral=(0) IO=(D10) ...succeeded
[1574155272.04][CONN][RXD] A0 - IO pin tested on port: peripheral=(0) IO=(A0) ...succeeded
[1574155272.12][CONN][RXD] A1 - IO pin tested on port: peripheral=(0) IO=(A1) ...succeeded
[1574155272.18][CONN][RXD] A2 - IO pin tested on port: peripheral=(0) IO=(A2) ...succeeded
[1574155272.25][CONN][RXD] A3 - IO pin tested on port: peripheral=(0) IO=(A3) ...succeeded
[1574155272.32][CONN][RXD] A4 - IO pin tested on port: peripheral=(0) IO=(A4) ...succeeded
[1574155272.38][CONN][RXD] A5 - IO pin tested on port: peripheral=(0) IO=(A5) ...succeeded
[1574155272.44][CONN][INF] found KV pair in stream: {{__testcase_finish;explicit init, output;1;0}}, queued...
[1574155272.49][CONN][RXD] >>> 'explicit init, output': 1 passed, 0 failed
[1574155272.49][CONN][RXD]
[1574155272.52][CONN][RXD] >>> Test cases: 3 passed, 0 failed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants