From 28f6056a1592d14ec7dfcfc7b25441a053b46727 Mon Sep 17 00:00:00 2001 From: Wintermute Date: Thu, 10 Oct 2013 19:30:02 +0200 Subject: [PATCH] Eingabetaster. --- badge/jumpnrun/jumpnrun.c | 4 +-- badge/main.c | 70 +++++++++++++++++++++++++-------------- badge/ui/display.c | 7 ++-- badge/ui/event.c | 15 ++++++--- r0ketports.h | 26 ++++++++------- 5 files changed, 77 insertions(+), 45 deletions(-) diff --git a/badge/jumpnrun/jumpnrun.c b/badge/jumpnrun/jumpnrun.c index 45323fc..ef3c471 100644 --- a/badge/jumpnrun/jumpnrun.c +++ b/badge/jumpnrun/jumpnrun.c @@ -148,7 +148,7 @@ static void jumpnrun_apply_movement(jumpnrun_level const *lv, if(state->jumpable_frames == 0) { // intentionally left blank. - } else if(badge_event_current_input_state() & BADGE_EVENT_KEY_UP) { + } else if(badge_event_current_input_state() & BADGE_EVENT_KEY_BTN_A) { state->inertia.y = fixed_point_sub(state->inertia.y, accel_vert); // fixed_point_neg(move_max.y) --state->jumpable_frames; @@ -284,7 +284,7 @@ uint8_t jumpnrun_play(char const *lvname) { uint8_t new_state = badge_event_new_input_state(ev); uint8_t new_buttons = new_state & (old_state ^ new_state); - if((new_buttons & BADGE_EVENT_KEY_UP) && gs.touching_ground) { + if((new_buttons & BADGE_EVENT_KEY_BTN_B) && gs.touching_ground) { gs.jumpable_frames = 8; } diff --git a/badge/main.c b/badge/main.c index 69402f0..d72e643 100644 --- a/badge/main.c +++ b/badge/main.c @@ -64,8 +64,14 @@ void backlightInit(void) { #if HW_IS_PROTOTYPE + + // prototype uses WDT CLKOUT to drive the LCD backlight // init without a reset + + IOCON_PIO0_1 &= ~(IOCON_PIO0_1_FUNC_MASK); + IOCON_PIO0_1 |= IOCON_PIO0_1_FUNC_CLKOUT; + wdtInit(false); // use the WDT clock as the default WDT frequency is best frequency @@ -80,13 +86,17 @@ void backlightInit(void) { // divide by 30, to get almost 10 kHz SCB_CLKOUTCLKDIV = 30; + + #else + + /* Enable the clock for CT16B1 */ SCB_SYSAHBCLKCTRL |= (SCB_SYSAHBCLKCTRL_CT16B1); /* Configure PIO1.9 as Timer1_16 MAT0 Output */ IOCON_PIO1_9 &= ~IOCON_PIO1_9_FUNC_MASK; - IOCON_PIO1_9 |= IOCON_PIO1_9_FUNC_CT16B1_MAT0; + IOCON_PIO1_9 |= IOCON_PIO1_9_FUNC_CT16B1_MAT0; /* Set default duty cycle (MR1) */ TMR_TMR16B1MR0 = 0; //(0xFFFF * (100 - brightness)) / 100; @@ -103,6 +113,8 @@ void backlightInit(void) { // Enable Step-UP gpioSetDir(RB_PWR_LCDBL, gpioDirection_Output); gpioSetValue(RB_PWR_LCDBL, 0); + + #endif } @@ -118,31 +130,34 @@ void rbInit() { int port; int pin; uint32_t volatile *reg; + gpioPullupMode_t mode; } const input_pins[] = { - { RB_BTN0 , &RB_BTN0_IO }, - { RB_BTN1 , &RB_BTN1_IO }, - { RB_BTN2 , &RB_BTN2_IO }, - { RB_BTN3 , &RB_BTN3_IO }, - { RB_BTN4 , &RB_BTN4_IO }, #if HW_IS_PROTOTYPE - { RB_BTN_A , &RB_BTN_A_IO }, - { RB_BTN_B , &RB_BTN_B_IO }, + { RB_BTN0 , &RB_BTN0_IO , gpioPullupMode_PullDown }, + { RB_BTN1 , &RB_BTN1_IO , gpioPullupMode_PullDown }, + { RB_BTN2 , &RB_BTN2_IO , gpioPullupMode_PullDown }, + { RB_BTN3 , &RB_BTN3_IO , gpioPullupMode_PullDown }, + { RB_BTN4 , &RB_BTN4_IO , gpioPullupMode_PullDown }, + { RB_BTN_A , &RB_BTN_A_IO , gpioPullupMode_PullDown }, + { RB_BTN_B , &RB_BTN_B_IO , gpioPullupMode_PullDown }, #else - { RB_HB0 , &RB_HB0_IO }, - { RB_HB1 , &RB_HB1_IO }, - { RB_PWR_CHRG, &RB_PWR_CHRG_IO } + { RB_BTN0 , &RB_BTN0_IO , gpioPullupMode_PullUp }, + { RB_BTN1 , &RB_BTN1_IO , gpioPullupMode_PullUp }, + { RB_BTN2 , &RB_BTN2_IO , gpioPullupMode_PullUp }, + { RB_BTN3 , &RB_BTN3_IO , gpioPullupMode_PullUp }, + { RB_BTN4 , &RB_BTN4_IO , gpioPullupMode_PullUp }, + { RB_HB0 , &RB_HB0_IO , gpioPullupMode_PullUp }, + { RB_HB1 , &RB_HB1_IO , gpioPullupMode_PullUp }, + { RB_PWR_CHRG, &RB_PWR_CHRG_IO, gpioPullupMode_PullUp } #endif }; for(int i = 0; i < ARRAY_SIZE(input_pins); ++i) { gpioSetDir(input_pins[i].port, input_pins[i].pin, gpioDirection_Input); - gpioSetPullup(input_pins[i].reg, gpioPullupMode_PullUp); + gpioSetPullup(input_pins[i].reg, input_pins[i].mode); } #if HW_IS_PROTOTYPE - IOCON_PIO0_1 &= ~(IOCON_PIO0_1_FUNC_MASK); - IOCON_PIO0_1 |= IOCON_PIO0_1_FUNC_CLKOUT; - IOCON_JTAG_TMS_PIO1_0 &= ~(IOCON_JTAG_TMS_PIO1_0_FUNC_MASK); IOCON_JTAG_TMS_PIO1_0 |= IOCON_JTAG_TMS_PIO1_0_FUNC_GPIO; #else @@ -162,12 +177,12 @@ void rbInit() { } const output_pins[] = { { RB_PWR_GOOD, 0 }, { USB_CONNECT, 1 }, + { RB_LCD_CS , 1 }, +#if !HW_IS_PROTOTYPE { RB_SPI_SS2 , 1 }, { RB_SPI_SS3 , 1 }, { RB_SPI_SS4 , 1 }, { RB_SPI_SS5 , 1 }, - { RB_LCD_CS , 1 }, -#if !HW_IS_PROTOTYPE { RB_LED0 , 0 }, { RB_LED1 , 0 }, { RB_LED2 , 0 }, @@ -219,9 +234,11 @@ int main(void) badge_display_init(); + /* gpioSetDir(0, 11, gpioDirection_Output); gpioSetValue(0, 11, 0); + { badge_framebuffer fb; int res = 0; @@ -250,24 +267,24 @@ int main(void) badge_framebuffer_flush(&fb); } + */ - for(;;); - - /* badge_event_start(); - + /* for(;;) { if(JUMPNRUN_ERROR == jumpnrun_play("smb.lvl")) { break; } } + */ -/* uint8_t buttons = 0; for(uint8_t i = 0; ; ++i) { badge_event_t event = badge_event_wait(); + // SCB_CLKOUTCLKDIV = i; + switch(badge_event_type(event)) { case BADGE_EVENT_USER_INPUT: { buttons = badge_event_current_input_state(); @@ -275,7 +292,13 @@ int main(void) } case BADGE_EVENT_GAME_TICK: { badge_sprite const sp = { 4, 4, (uint8_t const *) "\xff\xff" }; - badge_framebuffer fb = { { { 0 } } }; + badge_framebuffer fb = { { { 0xcc } } }; + + /* + for(int i = 0; i < 9 * 96; ++i) { + fb.data[0][i] = 0xbb; + } + */ if(buttons & BADGE_EVENT_KEY_UP) { badge_framebuffer_blt(&fb, 30, 10, &sp, 0); } if(buttons & BADGE_EVENT_KEY_DOWN) { badge_framebuffer_blt(&fb, 30, 50, &sp, 0); } @@ -290,7 +313,6 @@ int main(void) } } } -*/ return 0; } diff --git a/badge/ui/display.c b/badge/ui/display.c index cb91904..e1fb67b 100644 --- a/badge/ui/display.c +++ b/badge/ui/display.c @@ -104,12 +104,13 @@ void badge_display_init(void) { * 10: set x address (upper bits): X[6-4] = 0 */ static uint8_t const initseq[]= { 0xE2, 0xAF, // Display ON - // 0xA1, // Mirror-X + //0xA1, // Mirror-X 0xc8, // mirror-y 0xa7, // invert (1 = black) 0xA4, 0x2F, + // 0x9f, 0x24 0xB0, 0x10, - 0x9f, 0x24 }; + }; for(uint8_t i = 0; i < sizeof(initseq); ++i){ lcd_write_command(initseq[i]); systickDelay(5); @@ -126,7 +127,7 @@ void badge_framebuffer_flush(badge_framebuffer const *fb) { lcd_write_command(0x00); - for(int i = 0; i < 9 * 96; ++i) { + for(int i = 0; i < BADGE_DISPLAY_STRIPE_COUNT * BADGE_DISPLAY_WIDTH; ++i) { lcd_write_data(fb->data[0][i]); } diff --git a/badge/ui/event.c b/badge/ui/event.c index 4e341de..70b79a6 100644 --- a/badge/ui/event.c +++ b/badge/ui/event.c @@ -16,15 +16,22 @@ enum { static uint8_t badge_input_raw(void) { uint8_t result = BTN_NONE; +#if HW_IS_PROTOTYPE + if (gpioGetValue(RB_BTN3 ) == 1) { result |= BADGE_EVENT_KEY_UP ; } + if (gpioGetValue(RB_BTN2 ) == 1) { result |= BADGE_EVENT_KEY_DOWN ; } + if (gpioGetValue(RB_BTN4 ) == 1) { result |= BADGE_EVENT_KEY_CENTER; } + if (gpioGetValue(RB_BTN0 ) == 1) { result |= BADGE_EVENT_KEY_LEFT ; } + if (gpioGetValue(RB_BTN1 ) == 1) { result |= BADGE_EVENT_KEY_RIGHT ; } + if (gpioGetValue(RB_BTN_A) == 1) { result |= BADGE_EVENT_KEY_BTN_A ; } + if (gpioGetValue(RB_BTN_B) == 1) { result |= BADGE_EVENT_KEY_BTN_B ; } +#else if (gpioGetValue(RB_BTN3) == 0) { result |= BADGE_EVENT_KEY_UP ; } if (gpioGetValue(RB_BTN2) == 0) { result |= BADGE_EVENT_KEY_DOWN ; } if (gpioGetValue(RB_BTN4) == 0) { result |= BADGE_EVENT_KEY_CENTER; } if (gpioGetValue(RB_BTN0) == 0) { result |= BADGE_EVENT_KEY_LEFT ; } if (gpioGetValue(RB_BTN1) == 0) { result |= BADGE_EVENT_KEY_RIGHT ; } - // TODO: Knöpfe. -#if !HARDWARE_IS_PROTOTYPE - if (gpioGetValue(RB_HB0) == 0) { result |= BADGE_EVENT_KEY_UP ; } - if (gpioGetValue(RB_HB1) == 0) { result |= BADGE_EVENT_KEY_UP ; } + if (gpioGetValue(RB_HB0 ) == 0) { result |= BADGE_EVENT_KEY_BTN_A ; } + if (gpioGetValue(RB_HB1 ) == 0) { result |= BADGE_EVENT_KEY_BTN_B ; } #endif return result; diff --git a/r0ketports.h b/r0ketports.h index 8ef517a..47bb247 100644 --- a/r0ketports.h +++ b/r0ketports.h @@ -26,20 +26,20 @@ // TODO // FIXME: // order of buttons is without sense! -#define RB_BTN0 1,5 -#define RB_BTN0_IO IOCON_PIO0_1 +#define RB_BTN1 1,5 +#define RB_BTN1_IO IOCON_PIO1_5 -#define RB_BTN1 1,6 -#define RB_BTN1_IO IOCON_PIO2_9 +#define RB_BTN2 1,6 +#define RB_BTN2_IO IOCON_PIO1_6 -#define RB_BTN2 3,2 -#define RB_BTN2_IO IOCON_PIO2_6 +#define RB_BTN3 3,2 +#define RB_BTN3_IO IOCON_PIO3_2 -#define RB_BTN3 3,3 -#define RB_BTN3_IO IOCON_PIO3_3 +#define RB_BTN0 3,3 +#define RB_BTN0_IO IOCON_PIO3_3 -#define RB_BTN4 2,7 -#define RB_BTN4_IO IOCON_PIO2_7 +#define RB_BTN4 1,7 +#define RB_BTN4_IO IOCON_PIO1_7 // A and B buttons on the hackover badge only #define RB_BTN_A 1,11 @@ -79,12 +79,16 @@ #define RB_LCD_CS 1,0 #define RB_LCD_RST 1,1 +#define RB_SPI_CS_DF 0,7 + #else #define RB_LCD_BL 1,9 #define RB_LCD_CS 2,1 #define RB_LCD_RST 2,2 +#define RB_SPI_CS_DF 2,0 + #endif @@ -101,8 +105,6 @@ #define RB_SPI_SCK 2,11 -#define RB_SPI_CS_DF 2,0 - #define RB_SPI_SS0 2,5 #define RB_SPI_SS1 2,4 -- 2.20.1