summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJörg Hohensohn <hohensoh@rockbox.org>2003-12-20 10:00:37 +0000
committerJörg Hohensohn <hohensoh@rockbox.org>2003-12-20 10:00:37 +0000
commita5e1d06354fe1cb1dc12edd45b7f9ccb632df3e4 (patch)
tree8ae4aa3cec2e4697289153b641787c495ab8f19d
parent2a8386106b48e94051fe26659b95876cb442e71d (diff)
downloadrockbox-a5e1d06354fe1cb1dc12edd45b7f9ccb632df3e4.zip
rockbox-a5e1d06354fe1cb1dc12edd45b7f9ccb632df3e4.tar.gz
rockbox-a5e1d06354fe1cb1dc12edd45b7f9ccb632df3e4.tar.bz2
rockbox-a5e1d06354fe1cb1dc12edd45b7f9ccb632df3e4.tar.xz
Upside Down option for display (and buttons) now wired into the display settings menu, persistence, simulator stubs
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4168 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/lang/english.lang5
-rw-r--r--apps/settings.c12
-rw-r--r--apps/settings.h1
-rw-r--r--apps/settings_menu.c29
-rw-r--r--firmware/drivers/button.c47
-rw-r--r--firmware/export/button.h3
-rw-r--r--uisimulator/common/lcd-common.c4
-rw-r--r--uisimulator/common/stubs.c5
8 files changed, 99 insertions, 7 deletions
diff --git a/apps/lang/english.lang b/apps/lang/english.lang
index ce2b300..ffdc12b 100644
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -1842,3 +1842,8 @@ id: LANG_MOVE_FAILED
desc: Error message displayed in playlist viewer
eng: "Move failed"
new:
+
+id: LANG_FLIP_DISPLAY
+desc: in settings_menu, option to turn display+buttos by 180 degreed
+eng: "Upside Down"
+new:
diff --git a/apps/settings.c b/apps/settings.c
index 3c56257..b2fa221 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -103,6 +103,7 @@ offset abs
0x1a 0x2e <time until disk spindown>
0x1b 0x2f <browse current, play selected, recursive dir insert>
0x1c 0x30 <peak meter hold timeout (bit 0-4),
+ flip_display (bit 6)
rec_editable (bit 7)>
0x1d 0x31 <(int) Resume shuffle seed, or -1 if no shuffle>
0x21 0x35 <repeat mode (bit 0-1), rec. channels (bit 2),
@@ -362,6 +363,7 @@ int settings_save( void )
((global_settings.recursive_dir_insert & 3) << 2));
config_block[0x1c] = (unsigned char)global_settings.peak_meter_hold |
+ (global_settings.flip_display ? 0x40 : 0) |
(global_settings.rec_editable?0x80:0);
memcpy(&config_block[0x1d], &global_settings.resume_seed, 4);
@@ -516,6 +518,9 @@ void settings_apply(void)
#ifdef HAVE_LCD_BITMAP
lcd_set_invert_display(global_settings.invert);
+ lcd_set_flip(global_settings.flip_display);
+ button_set_flip(global_settings.flip_display);
+ lcd_update(); /* refresh after flipping the screen */
settings_apply_pm_range();
peak_meter_init_times(
global_settings.peak_meter_release, global_settings.peak_meter_hold,
@@ -660,6 +665,8 @@ void settings_load(void)
if (config_block[0x1c] != 0xFF) {
global_settings.peak_meter_hold = (config_block[0x1c]) & 0x1f;
+ global_settings.flip_display =
+ (config_block[0x1c] & 0x40)?true:false;
global_settings.rec_editable =
(config_block[0x1c] & 0x80)?true:false;
}
@@ -970,6 +977,8 @@ bool settings_load_config(char* file)
set_cfg_bool(&global_settings.scrollbar, value);
else if (!strcasecmp(name, "invert"))
set_cfg_bool(&global_settings.invert, value);
+ else if (!strcasecmp(name, "flip diplay"))
+ set_cfg_bool(&global_settings.flip_display, value);
else if (!strcasecmp(name, "invert cursor"))
set_cfg_bool(&global_settings.invert_cursor, value);
else if (!strcasecmp(name, "show icons"))
@@ -1295,6 +1304,8 @@ bool settings_save_config(void)
#ifdef HAVE_LCD_BITMAP
fprintf(fd, "invert: %s\r\n", boolopt[global_settings.invert]);
+ fprintf(fd, "flip display: %s\r\n", boolopt[global_settings.flip_display]);
+
fprintf(fd, "invert cursor: %s\r\n",
boolopt[global_settings.invert_cursor]);
@@ -1446,6 +1457,7 @@ void settings_reset(void) {
global_settings.resume = RESUME_ASK;
global_settings.contrast = lcd_default_contrast();
global_settings.invert = DEFAULT_INVERT_SETTING;
+ global_settings.flip_display= false;
global_settings.poweroff = DEFAULT_POWEROFF_SETTING;
global_settings.backlight_timeout = DEFAULT_BACKLIGHT_TIMEOUT_SETTING;
global_settings.invert_cursor = DEFAULT_INVERT_CURSOR_SETTING;
diff --git a/apps/settings.h b/apps/settings.h
index b96f4c6..074be06 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -92,6 +92,7 @@ struct user_settings
bool invert; /* invert display */
bool invert_cursor; /* invert the current file in dir browser and menu
instead of using the default cursor */
+ bool flip_display; /* turn display (and button layout) by 180 degrees */
int poweroff; /* power off timer */
int backlight_timeout; /* backlight off timeout: 0-18 0=never,
1=always,
diff --git a/apps/settings_menu.c b/apps/settings_menu.c
index c26aa12..c3932f3 100644
--- a/apps/settings_menu.c
+++ b/apps/settings_menu.c
@@ -107,6 +107,20 @@ static bool invert_cursor(void)
}
/**
+ * Menu to turn the display+buttons by 180 degrees
+ */
+static bool flip_display(void)
+{
+ bool rc = set_bool( str(LANG_FLIP_DISPLAY),
+ &global_settings.flip_display);
+
+ button_set_flip(global_settings.flip_display);
+ lcd_set_flip(global_settings.flip_display);
+
+ return rc;
+}
+
+/**
* Menu to configure the battery display on status bar
*/
static bool battery_type(void)
@@ -362,7 +376,7 @@ static bool peak_meter_menu(void)
{ str(LANG_PM_MAX) , peak_meter_max },
};
- m=menu_init( items, sizeof items / sizeof(struct menu_items) );
+ m=menu_init( items, sizeof(items) / sizeof(*items) );
result = menu_run(m);
menu_exit(m);
return result;
@@ -757,7 +771,7 @@ static bool playback_settings_menu(void)
bool old_shuffle = global_settings.playlist_shuffle;
- m=menu_init( items, sizeof items / sizeof(struct menu_items) );
+ m=menu_init( items, sizeof(items) / sizeof(*items) );
result = menu_run(m);
menu_exit(m);
@@ -836,7 +850,7 @@ static bool fileview_settings_menu(void)
{ str(LANG_FOLLOW), browse_current },
};
- m = menu_init( items, sizeof items / sizeof(struct menu_items) );
+ m=menu_init( items, sizeof(items) / sizeof(*items) );
result = menu_run(m);
menu_exit(m);
return result;
@@ -861,7 +875,7 @@ static bool scroll_settings_menu(void)
#endif
};
- m = menu_init( items, sizeof items / sizeof(struct menu_items) );
+ m=menu_init( items, sizeof(items) / sizeof(*items) );
result = menu_run(m);
menu_exit(m);
return result;
@@ -884,6 +898,7 @@ static bool display_settings_menu(void)
{ str(LANG_STATUS_BAR), status_bar },
{ str(LANG_INVERT), invert },
{ str(LANG_INVERT_CURSOR), invert_cursor },
+ { str(LANG_FLIP_DISPLAY), flip_display },
{ str(LANG_PM_MENU), peak_meter_menu },
{ str(LANG_VOLUME_DISPLAY), volume_type },
{ str(LANG_BATTERY_DISPLAY), battery_type },
@@ -892,7 +907,7 @@ static bool display_settings_menu(void)
{ str(LANG_CAPTION_BACKLIGHT), caption_backlight },
};
- m=menu_init( items, sizeof items / sizeof(struct menu_items) );
+ m=menu_init( items, sizeof(items) / sizeof(*items) );
result = menu_run(m);
menu_exit(m);
return result;
@@ -929,7 +944,7 @@ static bool system_settings_menu(void)
{ str(LANG_RESET), reset_settings },
};
- m=menu_init( items, sizeof items / sizeof(struct menu_items) );
+ m=menu_init( items, sizeof(items) / sizeof(*items) );
result = menu_run(m);
menu_exit(m);
return result;
@@ -954,7 +969,7 @@ bool settings_menu(void)
{ str(LANG_SAVE_SETTINGS), settings_save_config },
};
- m = menu_init( items, sizeof items / sizeof(struct menu_items) );
+ m=menu_init( items, sizeof(items) / sizeof(*items) );
result = menu_run(m);
menu_exit(m);
return result;
diff --git a/firmware/drivers/button.c b/firmware/drivers/button.c
index c0cd046..cfe98e2 100644
--- a/firmware/drivers/button.c
+++ b/firmware/drivers/button.c
@@ -34,6 +34,9 @@
struct event_queue button_queue;
long last_keypress;
+#ifdef HAVE_RECORDER_KEYPAD
+static bool flipped; /* bottons can be flipped to match the LCD flip */
+#endif
/* how often we check to see if a button is pressed */
#define POLL_FREQUENCY HZ/20
@@ -212,6 +215,47 @@ void button_init()
#endif
queue_init(&button_queue);
tick_add_task(button_tick);
+ last_keypress = current_tick;
+ flipped = false;
+}
+
+
+/*
+ * set the flip attribute
+ * better only call this when the queue is empty
+ */
+void button_set_flip(bool flip)
+{
+ flipped = flip;
+}
+
+
+/*
+ * helper function to swap UP/DOWN, LEFT/RIGHT, F1/F3
+ */
+static int button_flip(int button)
+{
+ int newbutton;
+
+ newbutton = button &
+ ~(BUTTON_UP | BUTTON_DOWN
+ | BUTTON_LEFT | BUTTON_RIGHT
+ | BUTTON_F1 | BUTTON_F3);
+
+ if (button & BUTTON_UP)
+ newbutton |= BUTTON_DOWN;
+ if (button & BUTTON_DOWN)
+ newbutton |= BUTTON_UP;
+ if (button & BUTTON_LEFT)
+ newbutton |= BUTTON_RIGHT;
+ if (button & BUTTON_RIGHT)
+ newbutton |= BUTTON_LEFT;
+ if (button & BUTTON_F1)
+ newbutton |= BUTTON_F3;
+ if (button & BUTTON_F3)
+ newbutton |= BUTTON_F1;
+
+ return newbutton;
}
/*
@@ -276,6 +320,9 @@ static int button_read(void)
#endif
}
}
+
+ if (btn && flipped)
+ return button_flip(btn); /* swap upside down */
return btn;
}
diff --git a/firmware/export/button.h b/firmware/export/button.h
index 8500ada..efe3684 100644
--- a/firmware/export/button.h
+++ b/firmware/export/button.h
@@ -29,6 +29,9 @@ extern long last_keypress;
void button_init (void);
int button_get (bool block);
int button_get_w_tmo(int ticks);
+#ifdef HAVE_RECORDER_KEYPAD
+void button_set_flip(bool flip); /* turn 180 degrees */
+#endif
#define BUTTON_NONE 0x0000
diff --git a/uisimulator/common/lcd-common.c b/uisimulator/common/lcd-common.c
index 719c61b..0b0d3e0 100644
--- a/uisimulator/common/lcd-common.c
+++ b/uisimulator/common/lcd-common.c
@@ -41,3 +41,7 @@ void lcd_blit(unsigned char* p_data, int x, int y, int width, int height,
(void)stride;
}
+void lcd_set_flip(bool yesno)
+{
+ (void)yesno;
+} \ No newline at end of file
diff --git a/uisimulator/common/stubs.c b/uisimulator/common/stubs.c
index d3e5189..533b909 100644
--- a/uisimulator/common/stubs.c
+++ b/uisimulator/common/stubs.c
@@ -220,3 +220,8 @@ void cpu_sleep(bool enabled)
{
(void)enabled;
}
+
+void button_set_flip(bool yesno)
+{
+ (void)yesno;
+}