You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.2 KiB
C
75 lines
2.2 KiB
C
#include <stdint.h>
|
|
#include "bsp.h"
|
|
|
|
enum { SAMPLE_SIG };
|
|
|
|
/* background code: non-blocking version */
|
|
int main() {
|
|
BSP_init();
|
|
while (1) {
|
|
/* Blinky polling state machine */
|
|
static enum {
|
|
INITIAL,
|
|
OFF_STATE,
|
|
ON_STATE
|
|
} state = INITIAL;
|
|
static uint32_t start;
|
|
static uint8_t prev_button = 1U; /* SW1 is inactive high */
|
|
|
|
/* buffering of intputs... */
|
|
struct {
|
|
uint16_t sig;
|
|
|
|
/* event parameters */
|
|
uint32_t now;
|
|
uint8_t button;
|
|
} evt, *e;
|
|
|
|
evt.sig = SAMPLE_SIG;
|
|
evt.now = BSP_tickCtr();
|
|
evt.button = BSP_SW1();
|
|
|
|
e = &evt;
|
|
switch (state) {
|
|
case INITIAL:
|
|
start = e->now;
|
|
state = OFF_STATE; /* initial transition */
|
|
break;
|
|
case OFF_STATE:
|
|
if ((e->now - start) > BSP_TICKS_PER_SEC * 3U / 4U) {
|
|
BSP_ledGreenOn();
|
|
start = e->now;
|
|
state = ON_STATE; /* state transition */
|
|
}
|
|
else if ((prev_button != 0U) && (e->button == 0U)) { /* derpressed? */
|
|
BSP_ledBlueOn();
|
|
prev_button = e->button;
|
|
}
|
|
else if ((prev_button == 0U) && (e->button != 0U)) { /* released? */
|
|
BSP_ledBlueOff();
|
|
prev_button = e->button;
|
|
}
|
|
break;
|
|
case ON_STATE:
|
|
if ((e->now - start) > BSP_TICKS_PER_SEC / 4U) {
|
|
BSP_ledGreenOff();
|
|
start = e->now;
|
|
state = OFF_STATE; /* state transition */
|
|
}
|
|
else if ((prev_button != 0U) && (e->button == 0U)) { /* derpressed? */
|
|
BSP_ledBlueOn();
|
|
prev_button = e->button;
|
|
}
|
|
else if ((prev_button == 0U) && (e->button != 0U)) { /* released? */
|
|
BSP_ledBlueOff();
|
|
prev_button = e->button;
|
|
}
|
|
break;
|
|
default:
|
|
//error();
|
|
break;
|
|
}
|
|
}
|
|
//return 0;
|
|
}
|