summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Chapman <dave@dchapman.com>2006-02-05 18:25:41 +0000
committerDave Chapman <dave@dchapman.com>2006-02-05 18:25:41 +0000
commit2924a48ca55e0207d939998307d82e4b7f4502f8 (patch)
tree5271d5b8917a5db9778a2cce6b35fe578c75b02b
parent75a60fbf69fb7d7be5839b35efc8253d682a1c7d (diff)
downloadrockbox-2924a48ca55e0207d939998307d82e4b7f4502f8.zip
rockbox-2924a48ca55e0207d939998307d82e4b7f4502f8.tar.gz
rockbox-2924a48ca55e0207d939998307d82e4b7f4502f8.tar.bz2
rockbox-2924a48ca55e0207d939998307d82e4b7f4502f8.tar.xz
Create config file for iPod 4G greyscale and various iPod 3G/4G greyscale fixes
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8585 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/SOURCES2
-rw-r--r--firmware/boot.lds2
-rw-r--r--firmware/drivers/lcd-2bit-horz.c53
-rw-r--r--firmware/drivers/lcd-ipod.c13
-rw-r--r--firmware/drivers/power.c2
-rw-r--r--firmware/export/config-ipod4g.h95
-rw-r--r--firmware/export/config.h2
-rw-r--r--firmware/usb.c2
8 files changed, 151 insertions, 20 deletions
diff --git a/firmware/SOURCES b/firmware/SOURCES
index ce7be4f..4e32266 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -112,7 +112,7 @@ drivers/mas.c
#ifdef IRIVER_H300_SERIES
drivers/pcf50606.c
#endif
-#if defined(APPLE_IPODCOLOR) || defined(APPLE_IPODNANO) || defined(APPLE_IPODVIDEO) || defined(APPLE_IPOD3G)
+#if defined(APPLE_IPODCOLOR) || defined(APPLE_IPODNANO) || defined(APPLE_IPODVIDEO) || defined(APPLE_IPOD3G) || defined(APPLE_IPOD4G)
drivers/pcf50605.c
#endif
#if (CONFIG_RTC == RTC_M41ST84W) || (CONFIG_RTC == RTC_PCF50606)
diff --git a/firmware/boot.lds b/firmware/boot.lds
index fc0d2c8..2f45941 100644
--- a/firmware/boot.lds
+++ b/firmware/boot.lds
@@ -52,7 +52,7 @@ INPUT(crt0.o)
#define FLASHSIZE 256K - ROM_START
#endif
-#if (CONFIG_CPU!=PP5002) && (CONFIG_CPU!=PP5002)
+#if (CONFIG_CPU!=PP5002) && (CONFIG_CPU!=PP5020)
MEMORY
{
DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
diff --git a/firmware/drivers/lcd-2bit-horz.c b/firmware/drivers/lcd-2bit-horz.c
index 01f5d93..de1af90 100644
--- a/firmware/drivers/lcd-2bit-horz.c
+++ b/firmware/drivers/lcd-2bit-horz.c
@@ -610,8 +610,27 @@ void lcd_putsxy(int x, int y, const unsigned char *str)
/*** line oriented text output ***/
+/* put a string at a given char position */
+void lcd_puts(int x, int y, const unsigned char *str)
+{
+ lcd_puts_style_offset(x, y, str, STYLE_DEFAULT, 0);
+}
+
void lcd_puts_style(int x, int y, const unsigned char *str, int style)
{
+ lcd_puts_style_offset(x, y, str, style, 0);
+}
+
+void lcd_puts_offset(int x, int y, const unsigned char *str, int offset)
+{
+ lcd_puts_style_offset(x, y, str, STYLE_DEFAULT, offset);
+}
+
+/* put a string at a given char position, style, and pixel position,
+ * skipping first offset pixel columns */
+void lcd_puts_style_offset(int x, int y, const unsigned char *str,
+ int style, int offset)
+{
int xpos,ypos,w,h;
int lastmode = drawmode;
@@ -624,23 +643,14 @@ void lcd_puts_style(int x, int y, const unsigned char *str, int style)
lcd_getstringsize(str, &w, &h);
xpos = xmargin + x*w / utf8length((char *)str);
ypos = ymargin + y*h;
- lcd_putsxy(xpos, ypos, str);
- drawmode = (DRMODE_SOLID|DRMODE_INVERSEVID);
+ drawmode = (style & STYLE_INVERT) ?
+ (DRMODE_SOLID|DRMODE_INVERSEVID) : DRMODE_SOLID;
+ lcd_putsxyofs(xpos, ypos, offset, str);
+ drawmode ^= DRMODE_INVERSEVID;
lcd_fillrect(xpos + w, ypos, LCD_WIDTH - (xpos + w), h);
- if (style & STYLE_INVERT)
- {
- drawmode = DRMODE_COMPLEMENT;
- lcd_fillrect(xpos, ypos, LCD_WIDTH - xpos, h);
- }
drawmode = lastmode;
}
-/* put a string at a given char position */
-void lcd_puts(int x, int y, const unsigned char *str)
-{
- lcd_puts_style(x, y, str, STYLE_DEFAULT);
-}
-
/*** scrolling ***/
/* Reverse the invert setting of the scrolling line (if any) at given char
@@ -687,6 +697,17 @@ void lcd_puts_scroll(int x, int y, const unsigned char *string)
void lcd_puts_scroll_style(int x, int y, const unsigned char *string, int style)
{
+ lcd_puts_scroll_style_offset(x, y, string, style, 0);
+}
+
+void lcd_puts_scroll_offset(int x, int y, const unsigned char *string, int offset)
+{
+ lcd_puts_scroll_style_offset(x, y, string, STYLE_DEFAULT, offset);
+}
+
+void lcd_puts_scroll_style_offset(int x, int y, const unsigned char *string,
+ int style, int offset)
+{
struct scrollinfo* s;
int w, h;
@@ -696,10 +717,10 @@ void lcd_puts_scroll_style(int x, int y, const unsigned char *string, int style)
s->invert = false;
if (style & STYLE_INVERT) {
s->invert = true;
- lcd_puts_style(x,y,string,STYLE_INVERT);
+ lcd_puts_style_offset(x,y,string,STYLE_INVERT,offset);
}
else
- lcd_puts(x,y,string);
+ lcd_puts_offset(x,y,string,offset);
lcd_getstringsize(string, &w, &h);
@@ -732,7 +753,7 @@ void lcd_puts_scroll_style(int x, int y, const unsigned char *string, int style)
strncpy(end, (char *)string, LCD_WIDTH/2);
s->len = utf8length((char *)string);
- s->offset = 0;
+ s->offset = offset;
s->startx = x;
s->backward = false;
scrolling_lines |= (1<<y);
diff --git a/firmware/drivers/lcd-ipod.c b/firmware/drivers/lcd-ipod.c
index 2d16555..529509f 100644
--- a/firmware/drivers/lcd-ipod.c
+++ b/firmware/drivers/lcd-ipod.c
@@ -156,6 +156,19 @@ void lcd_set_contrast(int val)
lcd_contrast = val;
}
+void lcd_set_invert_display(bool yesno)
+{
+ /* TODO: Implement lcd_set_invert_display() */
+ (void)yesno;
+}
+
+/* turn the display upside down (call lcd_update() afterwards) */
+void lcd_set_flip(bool yesno)
+{
+ /* TODO: Implement lcd_set_flip() */
+ (void)yesno;
+}
+
void lcd_update_rect(int x, int y, int width, int height)
{
int cursor_pos, xx;
diff --git a/firmware/drivers/power.c b/firmware/drivers/power.c
index 2150040..5feece6 100644
--- a/firmware/drivers/power.c
+++ b/firmware/drivers/power.c
@@ -273,7 +273,7 @@ void power_off(void)
and_l(~0x00080000, &GPIO1_OUT);
#elif defined(IAUDIO_X5)
and_l(~0x00000008, &GPIO_OUT);
-#elif (CONFIG_CPU == PP5002) || (CONFIG_CPU == PP5002)
+#elif (CONFIG_CPU == PP5002) || (CONFIG_CPU == PP5020)
#ifndef BOOTLOADER
/* We don't turn off the ipod, we put it in a deep sleep */
pcf50605_standby_mode();
diff --git a/firmware/export/config-ipod4g.h b/firmware/export/config-ipod4g.h
new file mode 100644
index 0000000..de0388d
--- /dev/null
+++ b/firmware/export/config-ipod4g.h
@@ -0,0 +1,95 @@
+/*
+ * This config file is for the Apple iPod Color/Photo
+ */
+#define APPLE_IPOD4G 1
+
+/* For Rolo and boot loader */
+#define MODEL_NUMBER 8
+
+/* define this if you have recording possibility */
+/*#define HAVE_RECORDING 1*/
+
+/* define this if you have a bitmap LCD display */
+#define HAVE_LCD_BITMAP 1
+
+/* LCD dimensions */
+#define LCD_WIDTH 160
+#define LCD_HEIGHT 128
+#define LCD_DEPTH 2 /* 4 colours - 2bpp */
+
+#define CONFIG_KEYPAD IPOD_4G_PAD
+
+/* Define this if you do software codec */
+#define CONFIG_CODEC SWCODEC
+
+/* define this if you have a real-time clock */
+#ifndef BOOTLOADER
+#define CONFIG_RTC RTC_PCF50605
+#endif
+
+/* Define this if you have a software controlled poweroff */
+#define HAVE_SW_POWEROFF
+
+/* The number of bytes reserved for loadable codecs */
+#define CODEC_SIZE 0x80000
+
+/* The number of bytes reserved for loadable plugins */
+#define PLUGIN_BUFFER_SIZE 0x80000
+
+/* Define this if you have the WM8975 audio codec */
+#define HAVE_WM8975
+
+/* Define this for LCD backlight available */
+#define CONFIG_BACKLIGHT BL_IPOD4G /* port controlled */
+
+#ifndef SIMULATOR
+
+/* Define this if you have a PortalPlayer PP5020 */
+#define CONFIG_CPU PP5020
+
+/* Define this if you want to use the PP5020 i2c interface */
+#define CONFIG_I2C I2C_PP5020
+
+/* Type of mobile power */
+//#define CONFIG_BATTERY BATT_LIPOL1300
+
+#define BATTERY_SCALE_FACTOR 16665 /* FIX: this value is picked at random */
+
+/* Define this if the platform can charge batteries */
+//#define HAVE_CHARGING 1
+
+/* define this if the hardware can be powered off while charging */
+//#define HAVE_POWEROFF_WHILE_CHARGING
+
+/* The start address index for ROM builds */
+#define ROM_START 0x00000000
+
+/* Define this to the CPU frequency */
+#define CPU_FREQ 11289600
+
+#define CONFIG_LCD LCD_IPOD2BPP
+
+/* Offset ( in the firmware file's header ) to the file length */
+#define FIRMWARE_OFFSET_FILE_LENGTH 0
+
+/* Offset ( in the firmware file's header ) to the file CRC */
+#define FIRMWARE_OFFSET_FILE_CRC 0
+
+/* Offset ( in the firmware file's header ) to the real data */
+#define FIRMWARE_OFFSET_FILE_DATA 8
+
+#define USB_IPODSTYLE
+
+/* define this if the unit can be powered or charged via USB */
+#define HAVE_USB_POWER
+
+/* Virtual LED (icon) */
+#define CONFIG_LED LED_VIRTUAL
+
+/* Define this if you have adjustable CPU frequency */
+//#define HAVE_ADJUSTABLE_CPU_FREQ
+
+#define BOOTFILE_EXT "ipod"
+#define BOOTFILE "rockbox." BOOTFILE_EXT
+
+#endif
diff --git a/firmware/export/config.h b/firmware/export/config.h
index f451173..22352f5 100644
--- a/firmware/export/config.h
+++ b/firmware/export/config.h
@@ -153,6 +153,8 @@
#include "config-ipodvideo.h"
#elif defined(IPOD_3G)
#include "config-ipod3g.h"
+#elif defined(IPOD_4G)
+#include "config-ipod4g.h"
#elif defined(IRIVER_IFP7XX)
#include "config-ifp7xx.h"
#else
diff --git a/firmware/usb.c b/firmware/usb.c
index 32e98ef..1c90d63 100644
--- a/firmware/usb.c
+++ b/firmware/usb.c
@@ -172,7 +172,7 @@ void usb_enable(bool on)
if (on)
{
/* The following code is copied from ipodlinux */
-#if defined (APPLE_IPODCOLOR) || defined(APPLE_IPOD3G)
+#if defined (APPLE_IPODCOLOR) || defined(APPLE_IPOD3G) || defined(APPLE_IPOD4G)
unsigned char* storage_ptr = (unsigned char *)0x40017F00;
#elif defined(APPLE_IPODNANO) || defined(APPLE_IPODVIDEO)
unsigned char* storage_ptr = (unsigned char *)0x4001FF00;