test pattern + fix typematic
This commit is contained in:
parent
7ea4e6e6e0
commit
a8695c0019
46
main.c
46
main.c
|
@ -36,7 +36,8 @@ enum {
|
||||||
SETUP,
|
SETUP,
|
||||||
JAM,
|
JAM,
|
||||||
LINEUP,
|
LINEUP,
|
||||||
TIMEOUT
|
TIMEOUT,
|
||||||
|
KONAMI
|
||||||
} state = SETUP;
|
} state = SETUP;
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,6 +52,17 @@ enum {
|
||||||
#define BTN_LEFT _BV(1)
|
#define BTN_LEFT _BV(1)
|
||||||
#define BTN_RIGHT _BV(0)
|
#define BTN_RIGHT _BV(0)
|
||||||
|
|
||||||
|
const uint8_t konami_code[] = {
|
||||||
|
BTN_UP, BTN_UP, BTN_DOWN, BTN_DOWN,
|
||||||
|
BTN_LEFT, BTN_RIGHT, BTN_LEFT, BTN_RIGHT,
|
||||||
|
BTN_B, BTN_A,
|
||||||
|
0
|
||||||
|
};
|
||||||
|
int konami_pos = 0;
|
||||||
|
const uint8_t test_pattern[] = {
|
||||||
|
_BV(2), _BV(3), _BV(4), _BV(5), _BV(6), _BV(1), _BV(0), _BV(7)
|
||||||
|
};
|
||||||
|
|
||||||
const uint8_t seven_segment_digits[] = {
|
const uint8_t seven_segment_digits[] = {
|
||||||
0x7b, 0x60, 0x37, 0x76, 0x6c, 0x5e, 0x5f, 0x70, 0x7f, 0x7e
|
0x7b, 0x60, 0x37, 0x76, 0x6c, 0x5e, 0x5f, 0x70, 0x7f, 0x7e
|
||||||
};
|
};
|
||||||
|
@ -120,6 +132,19 @@ draw()
|
||||||
uint16_t pclk;
|
uint16_t pclk;
|
||||||
bool blank = ((state == TIMEOUT) && (jiffies % 8 == 0));
|
bool blank = ((state == TIMEOUT) && (jiffies % 8 == 0));
|
||||||
|
|
||||||
|
// Segments test mode
|
||||||
|
if (KONAMI == state) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < 12; i += 1) {
|
||||||
|
write(test_pattern[jiffies % (sizeof test_pattern)]);;
|
||||||
|
}
|
||||||
|
|
||||||
|
latch();
|
||||||
|
pulse();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
jclk = (abs(jam_clock / 600) % 10) * 1000;
|
jclk = (abs(jam_clock / 600) % 10) * 1000;
|
||||||
jclk += abs(jam_clock) % 600;
|
jclk += abs(jam_clock) % 600;
|
||||||
|
|
||||||
|
@ -195,7 +220,8 @@ void
|
||||||
update_controller()
|
update_controller()
|
||||||
{
|
{
|
||||||
static uint8_t last_val = 0;
|
static uint8_t last_val = 0;
|
||||||
static uint8_t last_change = 0;
|
static uint32_t last_change = 0;
|
||||||
|
static uint32_t last_typematic = 0;
|
||||||
uint8_t cur;
|
uint8_t cur;
|
||||||
uint8_t pressed;
|
uint8_t pressed;
|
||||||
int inc = 1;
|
int inc = 1;
|
||||||
|
@ -206,6 +232,19 @@ update_controller()
|
||||||
last_change = jiffies;
|
last_change = jiffies;
|
||||||
last_val = cur;
|
last_val = cur;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pressed == konami_code[konami_pos]) {
|
||||||
|
konami_pos += 1;
|
||||||
|
|
||||||
|
if (konami_code[konami_pos] == 0) {
|
||||||
|
state = KONAMI;
|
||||||
|
konami_pos = 0;
|
||||||
|
return;
|
||||||
|
} else if (konami_pos > 3) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Select means subtract
|
// Select means subtract
|
||||||
if (cur & BTN_SELECT) {
|
if (cur & BTN_SELECT) {
|
||||||
inc = -1;
|
inc = -1;
|
||||||
|
@ -229,8 +268,9 @@ update_controller()
|
||||||
if ((state == TIMEOUT) || (state == SETUP)) {
|
if ((state == TIMEOUT) || (state == SETUP)) {
|
||||||
uint8_t v = pressed;
|
uint8_t v = pressed;
|
||||||
|
|
||||||
if (jiffies - last_change > 10) {
|
if ((jiffies - last_change > 10) && (last_typematic < jiffies)) {
|
||||||
v = cur;
|
v = cur;
|
||||||
|
last_typematic = jiffies;
|
||||||
}
|
}
|
||||||
if (v & BTN_UP) {
|
if (v & BTN_UP) {
|
||||||
period_clock -= 10;
|
period_clock -= 10;
|
||||||
|
|
Loading…
Reference in New Issue