-
-
Save maclobdell/17dbe75853de7cf8bf9df3e77224bdee to your computer and use it in GitHub Desktop.
ci test shield feedback
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "mbed.h" | |
#include "greentea-client/test_env.h" | |
#include "unity.h" | |
#include "utest.h" | |
#include "rtos.h" | |
using namespace utest::v1; | |
volatile bool result = false; | |
volatile bool result2 = false; | |
// Callback for all InterruptInput functions | |
void cbfn(void){ | |
result = true; | |
//printf("\t**** Interrupt Triggered!\n"); | |
} | |
// Callback for all InterruptInput functions | |
void cbfn2(void){ | |
result2 = true; | |
//printf("\t**** Interrupt Triggered!\n"); | |
} | |
// Template to check Falling edge and Risign edge interrupts. | |
template <PinName int_pin, PinName dout_pin, bool dir> | |
void InterruptInTest() | |
{ | |
result = false; | |
TEST_ASSERT_MESSAGE(dout_pin != NC, "output pin used in test not connected on platform"); | |
TEST_ASSERT_MESSAGE(int_pin != NC, "input (interrupt) pin used in test not connected on platform"); | |
InterruptIn intin(int_pin); | |
DigitalOut dout(dout_pin); | |
if(dir == true){ | |
// Test Rising Edge InterruptIn | |
//printf("***** Rising Edge Test \n"); | |
dout = 0; | |
result = false; | |
intin.rise(cbfn); | |
dout = 1; | |
wait(0); // dummy wait to get volatile result value | |
//printf("Value of result is : %d\n",result); | |
TEST_ASSERT(result); | |
} | |
else | |
{ | |
// Test Falling Edge InterruptIn | |
//printf("***** Falling Edge Test \n"); | |
dout = 1; | |
result = false; | |
intin.fall(cbfn); | |
dout = 0; | |
wait(0); // dummy wait to get volatile result value | |
//printf("Value of result is : %d\n",result); | |
TEST_ASSERT(result); | |
} | |
// delete intin; | |
} | |
template <PinName int_pin, PinName dout_pin, PinName int_pin2, PinName dout_pin2> | |
void multiInterruptInTest() | |
{ | |
result = false; | |
result2 = false; | |
TEST_ASSERT_MESSAGE(int_pin != NC, "input (interrupt) pin used in test not connected on platform"); | |
TEST_ASSERT_MESSAGE(dout_pin != NC, "output pin used in test not connected on platform"); | |
TEST_ASSERT_MESSAGE(int_pin2 != NC, "input (interrupt) pin used in test not connected on platform"); | |
TEST_ASSERT_MESSAGE(dout_pin2 != NC, "output pin used in test not connected on platform"); | |
InterruptIn intin(int_pin); | |
DigitalOut dout(dout_pin); | |
InterruptIn intin2(int_pin2); | |
DigitalOut dout2(dout_pin2); | |
// Test Rising Edge InterruptIn | |
//printf("***** Rising Edge Test \n"); | |
dout = 0; | |
result = false; | |
intin.rise(cbfn); | |
dout = 1; | |
wait(0); // dummy wait to get volatile result value | |
//printf("Value of result is : %d\n",result); | |
TEST_ASSERT(result); | |
dout2 = 0; | |
result2 = false; | |
intin2.rise(cbfn2); | |
dout2 = 1; | |
wait(0); // dummy wait to get volatile result value | |
//printf("Value of result is : %d\n",result); | |
TEST_ASSERT(result2); | |
// Test Falling Edge InterruptIn | |
//printf("***** Falling Edge Test \n"); | |
//printf("***** Falling Edge Test \n"); | |
dout = 1; | |
result = false; | |
intin.fall(cbfn); | |
dout = 0; | |
wait(0); // dummy wait to get volatile result value | |
//printf("Value of result is : %d\n",result); | |
TEST_ASSERT(result); | |
dout2 = 1; | |
result2 = false; | |
intin2.fall(cbfn2); | |
dout2 = 0; | |
wait(0); // dummy wait to get volatile result value | |
printf("Value of result is : %d\n",result); | |
TEST_ASSERT(result2); | |
} | |
utest::v1::status_t test_setup(const size_t number_of_cases) { | |
// Setup Greentea using a reasonable timeout in seconds | |
GREENTEA_SETUP(40, "default_auto"); | |
return verbose_test_setup_handler(number_of_cases); | |
} | |
// Handle test failures, keep testing, dont stop | |
utest::v1::status_t greentea_failure_handler(const Case *const source, const failure_t reason) { | |
greentea_case_failure_abort_handler(source, reason); | |
return STATUS_CONTINUE; | |
} | |
// Test cases | |
// TODO: take pins from pinnames.h or from config file | |
Case cases[] = { | |
Case("Test InterruptIn Rise on D0", InterruptInTest<D0,D1,1>,greentea_failure_handler), | |
Case("Test InterruptIn Rise on D1", InterruptInTest<D1,D0,1>,greentea_failure_handler), | |
Case("Test InterruptIn Rise on D2", InterruptInTest<D2,D3,1>,greentea_failure_handler), | |
Case("Test InterruptIn Rise on D3", InterruptInTest<D3,D2,1>,greentea_failure_handler), | |
Case("Test InterruptIn Rise on D4", InterruptInTest<D4,D5,1>,greentea_failure_handler), | |
Case("Test InterruptIn Rise on D5", InterruptInTest<D5,D4,1>,greentea_failure_handler), | |
Case("Test InterruptIn Rise on D6", InterruptInTest<D6,D7,1>,greentea_failure_handler), | |
Case("Test InterruptIn Rise on D7", InterruptInTest<D7,D6,1>,greentea_failure_handler), | |
Case("Test InterruptIn Rise on D8", InterruptInTest<D8,D9,1>,greentea_failure_handler), | |
Case("Test InterruptIn Rise on D9", InterruptInTest<D9,D8,1>,greentea_failure_handler), | |
Case("Test InterruptIn Fall on D0", InterruptInTest<D0,D1,0>,greentea_failure_handler), | |
Case("Test InterruptIn Fall on D1", InterruptInTest<D1,D0,0>,greentea_failure_handler), | |
Case("Test InterruptIn Fall on D2", InterruptInTest<D2,D3,0>,greentea_failure_handler), | |
Case("Test InterruptIn Fall on D3", InterruptInTest<D3,D2,0>,greentea_failure_handler), | |
Case("Test InterruptIn Fall on D4", InterruptInTest<D4,D5,0>,greentea_failure_handler), | |
Case("Test InterruptIn Fall on D5", InterruptInTest<D5,D4,0>,greentea_failure_handler), | |
Case("Test InterruptIn Fall on D6", InterruptInTest<D6,D7,0>,greentea_failure_handler), | |
Case("Test InterruptIn Fall on D7", InterruptInTest<D7,D6,0>,greentea_failure_handler), | |
Case("Test InterruptIn Fall on D8", InterruptInTest<D8,D9,0>,greentea_failure_handler), | |
Case("Test InterruptIn Fall on D9", InterruptInTest<D9,D8,0>,greentea_failure_handler), | |
Case("Test Multiple InterruptIn D1, D2", multiInterruptInTest<D1,D0,D2,D3>,greentea_failure_handler), | |
Case("Test Multiple InterruptIn D3, D4", multiInterruptInTest<D3,D2,D4,D5>,greentea_failure_handler), | |
Case("Test Multiple InterruptIn D5, D6", multiInterruptInTest<D5,D4,D6,D7>,greentea_failure_handler), | |
Case("Test Multiple InterruptIn D7, D8", multiInterruptInTest<D7,D6,D8,D9>,greentea_failure_handler), | |
Case("Test Multiple InterruptIn D9, D0", multiInterruptInTest<D9,D8,D0,D1>,greentea_failure_handler), | |
}; | |
Specification specification(test_setup, cases); | |
// Entry point into the tests | |
int main() { | |
return !Harness::run(specification); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment