]> git.donarmstrong.com Git - qmk_firmware.git/blob - tool/mbed/mbed-sdk/libraries/tests/mbed/interruptin/main.cpp
Squashed 'tmk_core/' changes from 7967731..b9e0ea0
[qmk_firmware.git] / tool / mbed / mbed-sdk / libraries / tests / mbed / interruptin / main.cpp
1 #include "test_env.h"
2
3 DigitalOut myled(LED1);
4 DigitalOut led2(LED2);
5
6 volatile int checks = 0;
7 void in_handler() {
8     checks++;
9     led2 = !led2;
10 }
11
12 #if defined(TARGET_KL25Z)
13 #define PIN_OUT     PTC6
14 #define PIN_IN      PTA5
15
16 #elif defined(TARGET_KL05Z)
17 #define PIN_OUT     PTB11
18 #define PIN_IN      PTB1
19
20 #elif defined(TARGET_LPC812)
21 #define PIN_OUT     D10
22 #define PIN_IN      D11
23
24 #elif defined(TARGET_LPC1114)
25 #define PIN_OUT     dp1
26 #define PIN_IN      dp2
27
28 #elif defined(TARGET_LPC1549)
29 // TARGET_FF_ARDUINO cannot be used, because D0 is used as USBRX (USB serial
30 // port pin), D1 is used as USBTX
31 #define PIN_OUT     D2
32 #define PIN_IN      D7
33
34 #elif defined(TARGET_LPC4088)
35 #define PIN_IN      (p11)
36 #define PIN_OUT     (p12)
37
38 #elif defined(TARGET_NUCLEO_F030R8) || \
39       defined(TARGET_NUCLEO_F070RB) || \
40       defined(TARGET_NUCLEO_F072RB) || \
41       defined(TARGET_NUCLEO_F091RC) || \
42       defined(TARGET_NUCLEO_F103RB) || \
43       defined(TARGET_NUCLEO_F302R8) || \
44       defined(TARGET_NUCLEO_F303RE) || \
45       defined(TARGET_NUCLEO_F334R8) || \
46       defined(TARGET_NUCLEO_F401RE) || \
47       defined(TARGET_NUCLEO_F411RE) || \
48       defined(TARGET_NUCLEO_L053R8) || \
49       defined(TARGET_NUCLEO_L073RZ) || \
50       defined(TARGET_NUCLEO_L152RE)
51 #define PIN_IN      PB_8
52 #define PIN_OUT     PC_7
53
54 #elif defined(TARGET_ARCH_MAX) || \
55       defined(TARGET_DISCO_F407VG) || \
56       defined(TARGET_DISCO_F429ZI)|| \
57       defined(TARGET_DISCO_F401VC)
58 #define PIN_OUT    PC_12
59 #define PIN_IN     PD_0
60
61 #elif defined(TARGET_RZ_A1H)
62 #define PIN_OUT    D1
63 #define PIN_IN     D5
64
65 #elif defined(TARGET_FF_ARDUINO)
66 #define PIN_OUT    D0
67 #define PIN_IN     D7
68
69 #elif defined(TARGET_MAXWSNENV)
70 #define PIN_OUT    P0_0
71 #define PIN_IN     P0_1
72
73 #elif defined(TARGET_MAX32600MBED)
74 #define PIN_OUT    P1_0
75 #define PIN_IN     P4_7
76
77 #else
78 #define PIN_IN      (p5)
79 #define PIN_OUT     (p25)
80
81 #endif
82
83 DigitalOut out(PIN_OUT);
84 InterruptIn in(PIN_IN);
85
86 #define IN_OUT_SET      out = 1; myled = 1;
87 #define IN_OUT_CLEAR    out = 0; myled = 0;
88
89 void flipper() {
90     for (int i = 0; i < 5; i++) {
91         IN_OUT_SET;
92         wait(0.2);
93         IN_OUT_CLEAR;
94         wait(0.2);
95     }
96 }
97
98 int main() {
99     MBED_HOSTTEST_TIMEOUT(15);
100     MBED_HOSTTEST_SELECT(default_auto);
101     MBED_HOSTTEST_DESCRIPTION(InterruptIn);
102     MBED_HOSTTEST_START("MBED_A7");
103
104     IN_OUT_CLEAR;
105     //Test falling edges first
106     in.rise(NULL);
107     in.fall(in_handler);
108     flipper();
109
110     if(checks != 5) {
111         printf("MBED: falling edges test failed: %d\r\n",checks);
112         MBED_HOSTTEST_RESULT(false);
113     }
114
115     //Now test rising edges
116     in.rise(in_handler);
117     in.fall(NULL);
118     flipper();
119
120     if (checks != 10) {
121         printf("MBED: raising edges test failed: %d\r\n", checks);
122         MBED_HOSTTEST_RESULT(false);
123     }
124
125     //Now test switch off edge detection
126     in.rise(NULL);
127     in.fall(NULL);
128     flipper();
129
130     if (checks != 10) {
131         printf("MBED: edge detection switch off test failed: %d\r\n", checks);
132         MBED_HOSTTEST_RESULT(false);
133     }
134
135     //Finally test both
136     in.rise(in_handler);
137     in.fall(in_handler);
138     flipper();
139
140     if (checks != 20) {
141         printf("MBED: Simultaneous rising and falling edges failed: %d\r\n", checks);
142         MBED_HOSTTEST_RESULT(false);
143     }
144
145     MBED_HOSTTEST_RESULT(true);
146 }