148 lines
2.3 KiB
C
148 lines
2.3 KiB
C
|
#include "lib/system.h"
|
||
|
#include "lib/hal.h"
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
#define TIMER_INMENU TIMER_APP0
|
||
|
#define TIMER_AUX TIMER_APP1
|
||
|
|
||
|
void axl_test()
|
||
|
{
|
||
|
int ret;
|
||
|
struct axl_result measurements;
|
||
|
|
||
|
int dir_x;
|
||
|
int dir_y;
|
||
|
int ledno;
|
||
|
int intens;
|
||
|
|
||
|
if (block_for(TIMER_AUX, timer_ms(50))) {
|
||
|
display_clear(0);
|
||
|
|
||
|
#define THRES 10
|
||
|
ret = mma8653_get_measurements(&measurements);
|
||
|
dir_x = 0;
|
||
|
if (measurements.x > THRES)
|
||
|
dir_x = -1;
|
||
|
else if (measurements.x < -THRES)
|
||
|
dir_x = 1;
|
||
|
dir_y = 0;
|
||
|
if (measurements.y > THRES)
|
||
|
dir_y = 1;
|
||
|
else if (measurements.y < -THRES)
|
||
|
dir_y = -1;
|
||
|
|
||
|
if (dir_y == -1)
|
||
|
ledno = dir_x + 1;
|
||
|
else if (dir_y == 0)
|
||
|
ledno = 3 + 1 -dir_x;
|
||
|
else if (dir_y == 1)
|
||
|
ledno = dir_x + 6 + 1;
|
||
|
|
||
|
intens = abs(measurements.x + measurements.y);
|
||
|
intens = intens >> 2;
|
||
|
if (intens < 1)
|
||
|
intens = 1;
|
||
|
if (measurements.z > 0)
|
||
|
led[ledno].b = intens;
|
||
|
else
|
||
|
led[ledno].r = intens;
|
||
|
|
||
|
if (ret)
|
||
|
led[ret].r = 0x10;
|
||
|
|
||
|
display_update();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void led_test(int first_launch)
|
||
|
{
|
||
|
static int i;
|
||
|
|
||
|
if (first_launch) {
|
||
|
i = 0;
|
||
|
led[0].r = 1;
|
||
|
}
|
||
|
|
||
|
if (block_for(TIMER_AUX, timer_ms(30))) {
|
||
|
led[i].g = 0x0;
|
||
|
i = (i + 1) % STRIPLEN;
|
||
|
led[i].g = 0x10;
|
||
|
if (led[i].r && led[i].b) {
|
||
|
led[i].r = 0;
|
||
|
led[i].b = 1;
|
||
|
} else if (led[i].r) {
|
||
|
led[i].b = 1;
|
||
|
} else {
|
||
|
led[i].r = 1;
|
||
|
led[i].b = 0;
|
||
|
}
|
||
|
display_update();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void system_test()
|
||
|
{
|
||
|
// Display power states on first face
|
||
|
if (HAL_ASSERTED_N(VLED_EN_N))
|
||
|
led[0].b = 1;
|
||
|
else
|
||
|
led[0].b = 0;
|
||
|
|
||
|
if (HAL_ASSERTED_N(CHG_ACTIVE_N))
|
||
|
led[1].r = 1;
|
||
|
else
|
||
|
led[1].r = 0;
|
||
|
|
||
|
if (block_for(TIMER_AUX, timer_ms(50)))
|
||
|
display_update();
|
||
|
}
|
||
|
|
||
|
void app_init()
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
#define APP_COUNT 3
|
||
|
enum app_return app_mainloop()
|
||
|
{
|
||
|
static int app_sel = 0;
|
||
|
static int clr = 1;
|
||
|
|
||
|
if (button_event(EV_PRESS)) {
|
||
|
app_sel = (app_sel + 1) % APP_COUNT;
|
||
|
display_clear();
|
||
|
for (int i = 0; i < STRIPLEN; i += 9) {
|
||
|
led[app_sel + i].g = 4;
|
||
|
}
|
||
|
display_update();
|
||
|
timer_set(TIMER_INMENU, timer_ms(750));
|
||
|
clr = 1;
|
||
|
} else if (button_event(EV_LONGPRESS)) {
|
||
|
return SUSPEND;
|
||
|
}
|
||
|
|
||
|
if (timer_expired(TIMER_INMENU)) {
|
||
|
if (clr) {
|
||
|
display_clear();
|
||
|
}
|
||
|
switch (app_sel) {
|
||
|
case 0:
|
||
|
led_test(clr);
|
||
|
break;
|
||
|
case 1:
|
||
|
axl_test();
|
||
|
break;
|
||
|
case 2:
|
||
|
system_test();
|
||
|
break;
|
||
|
default:
|
||
|
app_sel = 0;
|
||
|
break;
|
||
|
}
|
||
|
clr = 0;
|
||
|
}
|
||
|
|
||
|
return RUN;
|
||
|
}
|