Skip to content

Instantly share code, notes, and snippets.

@maclobdell
Created September 22, 2016 16:52
Show Gist options
  • Save maclobdell/17dbe75853de7cf8bf9df3e77224bdee to your computer and use it in GitHub Desktop.
Save maclobdell/17dbe75853de7cf8bf9df3e77224bdee to your computer and use it in GitHub Desktop.
ci test shield feedback
#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