diff options
author | Maurus Cuelenaere <mcuelenaere@gmail.com> | 2008-09-10 19:35:15 +0000 |
---|---|---|
committer | Maurus Cuelenaere <mcuelenaere@gmail.com> | 2008-09-10 19:35:15 +0000 |
commit | 1ff9ce202dd1868ab1fd5dda727117500e30d82b (patch) | |
tree | df94fc3e8d424ddbb8b60b442eb929a5f287e1dc | |
parent | c104c24887c756f82a791ed7428c0ce4c9b34890 (diff) | |
download | rockbox-1ff9ce202dd1868ab1fd5dda727117500e30d82b.tar.gz rockbox-1ff9ce202dd1868ab1fd5dda727117500e30d82b.zip |
Fix mrobe500 svn:*
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18482 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--[-rwxr-xr-x] | bootloader/mrobe500.c | 564 |
1 files changed, 282 insertions, 282 deletions
diff --git a/bootloader/mrobe500.c b/bootloader/mrobe500.c index c71d43d40e..8389d11b4b 100755..100644 --- a/bootloader/mrobe500.c +++ b/bootloader/mrobe500.c @@ -1,282 +1,282 @@ -/***************************************************************************
- * __________ __ ___.
- * Open \______ \ ____ ____ | | _\_ |__ _______ ___
- * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
- * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
- * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
- * \/ \/ \/ \/ \/
- * $Id: $
- *
- * Copyright (C) 2007 by Karl Kurbjun
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ****************************************************************************/
-
-#include "inttypes.h"
-#include "string.h"
-#include "cpu.h"
-#include "system.h"
-#include "lcd.h"
-#include "kernel.h"
-#include "thread.h"
-#include "ata.h"
-#include "fat.h"
-#include "disk.h"
-#include "font.h"
-#include "adc.h"
-#include "backlight.h"
-#include "backlight-target.h"
-#include "button.h"
-#include "panic.h"
-#include "power.h"
-#include "file.h"
-#include "common.h"
-#include "rbunicode.h"
-#include "usb.h"
-#include "spi.h"
-#include "uart-target.h"
-#include "tsc2100.h"
-#include "time.h"
-#include "system-arm.h"
-
-#define MRDEBUG
-
-#if defined(MRDEBUG)
-
-extern int line;
-#if 0
-struct touch_calibration_point tl, br;
-
-void touchscreen_get_one_point(struct touch_calibration_point *p)
-{
- int data = 0;
- int start = current_tick;
- while (TIME_AFTER(start+(HZ/3), current_tick))
- {
- if (button_read_device()&BUTTON_TOUCHSCREEN)
- {
- data = button_get_last_touch();
- p->val_x = data>>16;
- p->val_y = data&0xffff;
- start = current_tick;
- }
- else if (data == 0)
- start = current_tick;
- }
-}
-
-#define MARGIN 25
-#define LEN 7
-void touchscreen_calibrate_screen(void)
-{
- reset_screen();
- printf("touch the center of the crosshairs to calibrate");
- /* get the topleft value */
- lcd_hline(MARGIN-LEN, MARGIN+LEN, MARGIN);
- lcd_vline(MARGIN, MARGIN-LEN, MARGIN+LEN);
- lcd_update();
- tl.px_x = MARGIN; tl.px_y = MARGIN;
- touchscreen_get_one_point(&tl);
- reset_screen();
- printf("touch the center of the crosshairs to calibrate");
- /* get the topright value */
- lcd_hline(LCD_WIDTH-MARGIN-LEN, LCD_WIDTH-MARGIN+LEN, LCD_HEIGHT-MARGIN);
- lcd_vline(LCD_WIDTH-MARGIN, LCD_HEIGHT-MARGIN-LEN, LCD_HEIGHT-MARGIN+LEN);
- lcd_update();
- br.px_x = LCD_WIDTH-MARGIN; br.px_y = LCD_HEIGHT-MARGIN;
- touchscreen_get_one_point(&br);
- reset_screen();
- line++;
- printf("tl %d %d", tl.val_x, tl.val_y);
- printf("br %d %d", br.val_x, br.val_y);
- line++;
- set_calibration_points(&tl, &br);
-}
-#endif
-static uint8_t bl_command[] = {0xa4, 0x00, 0x00, 0xbb};
-int brightness = 0;
-
-void mrdebug(void)
-{
- int button=0;
-#if 0
- use_calibration(false);
- touchscreen_calibrate_screen();
- use_calibration(true);
-#endif
-
- while(true)
- {
-#if 0
- struct tm *t = get_time();
- printf("%d:%d:%d %d %d %d", t->tm_hour, t->tm_min, t->tm_sec, t->tm_mday, t->tm_mon, t->tm_year);
- printf("time: %d", mktime(t));
-#endif
- button = button_get(false);
- if (button == BUTTON_POWER)
- {
- printf("reset");
- IO_GIO_BITSET1|=1<<10;
- }
- if (button==BUTTON_RC_VOL_DOWN)
- {
- brightness = (brightness - 5) & 0x7f;
- bl_command[2] = brightness;
- spi_block_transfer(SPI_target_BACKLIGHT, bl_command, 4, 0, 0);
- }
- else if (button==BUTTON_RC_VOL_UP)
- {
- brightness = (brightness + 5) & 0x7f;
- bl_command[2] = brightness;
- spi_block_transfer(SPI_target_BACKLIGHT, bl_command, 4, 0, 0);
- }
-// {
-// short x,y,z1,z2;
-// tsc2100_read_values(&x, &y, &z1, &z2);
-// printf("x: %04x y: %04x z1: %04x z2: %04x", x, y, z1, z2);
-// printf("tsadc: %4x", tsc2100_readreg(TSADC_PAGE, TSADC_ADDRESS)&0xffff);
-// // tsc2100_keyclick(); /* doesnt work :( */
-// line -= 6;
-// }
- else if (button == BUTTON_RC_HEART)
- {
- printf("POINT");
- touchscreen_set_mode(TOUCHSCREEN_POINT);
- }
- else if (button == BUTTON_RC_MODE)
- {
- printf("BUTTON");
- touchscreen_set_mode(TOUCHSCREEN_BUTTON);
- }
-#if 1
- else if (button&BUTTON_TOUCHSCREEN)
- {
- if (button&BUTTON_REL)
- continue;
- unsigned int data = button_get_data();
- int x = (data&0xffff0000)>>16, y = data&0x0000ffff;
- reset_screen();
- line = 9;
- printf("BB: %x %d %d", button, x,y);
- lcd_hline(x-5, x+5, y);
- lcd_vline(x, y-5, y+5);
- lcd_update();
- }
- else if (button == BUTTON_RC_PLAY)
- {
- reset_screen();
- }
-
- else if (button)
- {
- // if (button&BUTTON_REL)
- {
- printf("%08x %s\n", button, (button&BUTTON_REL)?"yes":"no");
- }
- }
-
-#endif
- }
-}
-#endif
-
-void main(void)
-{
- unsigned char* loadbuffer;
- int buffer_size;
- int rc;
- int(*kernel_entry)(void);
-
- power_init();
- lcd_init();
- system_init();
- kernel_init();
-
- enable_irq();
- enable_fiq();
-
- adc_init();
- button_init();
- backlight_init();
-
- font_init();
-
- lcd_setfont(FONT_SYSFIXED);
-
- /* Show debug messages if button is pressed */
-// if(button_read_device())
- verbose = true;
-
- printf("Rockbox boot loader");
- printf("Version %s", APPSVERSION);
-
- usb_init();
-
- /* Enter USB mode without USB thread */
- if(usb_detect() == USB_INSERTED)
- {
- const char msg[] = "Bootloader USB mode";
- reset_screen();
- lcd_putsxy( (LCD_WIDTH - (SYSFONT_WIDTH * strlen(msg))) / 2,
- (LCD_HEIGHT - SYSFONT_HEIGHT) / 2, msg);
- lcd_update();
-
- ide_power_enable(true);
- ata_enable(false);
- sleep(HZ/20);
- usb_enable(true);
-
- while (usb_detect() == USB_INSERTED)
- {
- ata_spin(); /* Prevent the drive from spinning down */
- sleep(HZ);
- }
-
- usb_enable(false);
-
- reset_screen();
- lcd_update();
- }
-#if defined(MRDEBUG)
- mrdebug();
-#endif
- printf("ATA");
- rc = ata_init();
- if(rc)
- {
- reset_screen();
- error(EATA, rc);
- }
-
- printf("disk");
- disk_init();
-
- printf("mount");
- rc = disk_mount_all();
- if (rc<=0)
- {
- error(EDISK,rc);
- }
-
- printf("Loading firmware");
-
- loadbuffer = (unsigned char*) 0x00900000;
- buffer_size = (unsigned char*)0x01900000 - loadbuffer;
-
- rc = load_firmware(loadbuffer, BOOTFILE, buffer_size);
- if(rc < 0)
- error(EBOOTFILE, rc);
-
- if (rc == EOK)
- {
- kernel_entry = (void*) loadbuffer;
- rc = kernel_entry();
- }
-}
+/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2007 by Karl Kurbjun + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "inttypes.h" +#include "string.h" +#include "cpu.h" +#include "system.h" +#include "lcd.h" +#include "kernel.h" +#include "thread.h" +#include "ata.h" +#include "fat.h" +#include "disk.h" +#include "font.h" +#include "adc.h" +#include "backlight.h" +#include "backlight-target.h" +#include "button.h" +#include "panic.h" +#include "power.h" +#include "file.h" +#include "common.h" +#include "rbunicode.h" +#include "usb.h" +#include "spi.h" +#include "uart-target.h" +#include "tsc2100.h" +#include "time.h" +#include "system-arm.h" + +#define MRDEBUG + +#if defined(MRDEBUG) + +extern int line; +#if 0 +struct touch_calibration_point tl, br; + +void touchscreen_get_one_point(struct touch_calibration_point *p) +{ + int data = 0; + int start = current_tick; + while (TIME_AFTER(start+(HZ/3), current_tick)) + { + if (button_read_device()&BUTTON_TOUCHSCREEN) + { + data = button_get_last_touch(); + p->val_x = data>>16; + p->val_y = data&0xffff; + start = current_tick; + } + else if (data == 0) + start = current_tick; + } +} + +#define MARGIN 25 +#define LEN 7 +void touchscreen_calibrate_screen(void) +{ + reset_screen(); + printf("touch the center of the crosshairs to calibrate"); + /* get the topleft value */ + lcd_hline(MARGIN-LEN, MARGIN+LEN, MARGIN); + lcd_vline(MARGIN, MARGIN-LEN, MARGIN+LEN); + lcd_update(); + tl.px_x = MARGIN; tl.px_y = MARGIN; + touchscreen_get_one_point(&tl); + reset_screen(); + printf("touch the center of the crosshairs to calibrate"); + /* get the topright value */ + lcd_hline(LCD_WIDTH-MARGIN-LEN, LCD_WIDTH-MARGIN+LEN, LCD_HEIGHT-MARGIN); + lcd_vline(LCD_WIDTH-MARGIN, LCD_HEIGHT-MARGIN-LEN, LCD_HEIGHT-MARGIN+LEN); + lcd_update(); + br.px_x = LCD_WIDTH-MARGIN; br.px_y = LCD_HEIGHT-MARGIN; + touchscreen_get_one_point(&br); + reset_screen(); + line++; + printf("tl %d %d", tl.val_x, tl.val_y); + printf("br %d %d", br.val_x, br.val_y); + line++; + set_calibration_points(&tl, &br); +} +#endif +static uint8_t bl_command[] = {0xa4, 0x00, 0x00, 0xbb}; +int brightness = 0; + +void mrdebug(void) +{ + int button=0; +#if 0 + use_calibration(false); + touchscreen_calibrate_screen(); + use_calibration(true); +#endif + + while(true) + { +#if 0 + struct tm *t = get_time(); + printf("%d:%d:%d %d %d %d", t->tm_hour, t->tm_min, t->tm_sec, t->tm_mday, t->tm_mon, t->tm_year); + printf("time: %d", mktime(t)); +#endif + button = button_get(false); + if (button == BUTTON_POWER) + { + printf("reset"); + IO_GIO_BITSET1|=1<<10; + } + if (button==BUTTON_RC_VOL_DOWN) + { + brightness = (brightness - 5) & 0x7f; + bl_command[2] = brightness; + spi_block_transfer(SPI_target_BACKLIGHT, bl_command, 4, 0, 0); + } + else if (button==BUTTON_RC_VOL_UP) + { + brightness = (brightness + 5) & 0x7f; + bl_command[2] = brightness; + spi_block_transfer(SPI_target_BACKLIGHT, bl_command, 4, 0, 0); + } +// { +// short x,y,z1,z2; +// tsc2100_read_values(&x, &y, &z1, &z2); +// printf("x: %04x y: %04x z1: %04x z2: %04x", x, y, z1, z2); +// printf("tsadc: %4x", tsc2100_readreg(TSADC_PAGE, TSADC_ADDRESS)&0xffff); +// // tsc2100_keyclick(); /* doesnt work :( */ +// line -= 6; +// } + else if (button == BUTTON_RC_HEART) + { + printf("POINT"); + touchscreen_set_mode(TOUCHSCREEN_POINT); + } + else if (button == BUTTON_RC_MODE) + { + printf("BUTTON"); + touchscreen_set_mode(TOUCHSCREEN_BUTTON); + } +#if 1 + else if (button&BUTTON_TOUCHSCREEN) + { + if (button&BUTTON_REL) + continue; + unsigned int data = button_get_data(); + int x = (data&0xffff0000)>>16, y = data&0x0000ffff; + reset_screen(); + line = 9; + printf("BB: %x %d %d", button, x,y); + lcd_hline(x-5, x+5, y); + lcd_vline(x, y-5, y+5); + lcd_update(); + } + else if (button == BUTTON_RC_PLAY) + { + reset_screen(); + } + + else if (button) + { + // if (button&BUTTON_REL) + { + printf("%08x %s\n", button, (button&BUTTON_REL)?"yes":"no"); + } + } + +#endif + } +} +#endif + +void main(void) +{ + unsigned char* loadbuffer; + int buffer_size; + int rc; + int(*kernel_entry)(void); + + power_init(); + lcd_init(); + system_init(); + kernel_init(); + + enable_irq(); + enable_fiq(); + + adc_init(); + button_init(); + backlight_init(); + + font_init(); + + lcd_setfont(FONT_SYSFIXED); + + /* Show debug messages if button is pressed */ +// if(button_read_device()) + verbose = true; + + printf("Rockbox boot loader"); + printf("Version %s", APPSVERSION); + + usb_init(); + + /* Enter USB mode without USB thread */ + if(usb_detect() == USB_INSERTED) + { + const char msg[] = "Bootloader USB mode"; + reset_screen(); + lcd_putsxy( (LCD_WIDTH - (SYSFONT_WIDTH * strlen(msg))) / 2, + (LCD_HEIGHT - SYSFONT_HEIGHT) / 2, msg); + lcd_update(); + + ide_power_enable(true); + ata_enable(false); + sleep(HZ/20); + usb_enable(true); + + while (usb_detect() == USB_INSERTED) + { + ata_spin(); /* Prevent the drive from spinning down */ + sleep(HZ); + } + + usb_enable(false); + + reset_screen(); + lcd_update(); + } +#if defined(MRDEBUG) + mrdebug(); +#endif + printf("ATA"); + rc = ata_init(); + if(rc) + { + reset_screen(); + error(EATA, rc); + } + + printf("disk"); + disk_init(); + + printf("mount"); + rc = disk_mount_all(); + if (rc<=0) + { + error(EDISK,rc); + } + + printf("Loading firmware"); + + loadbuffer = (unsigned char*) 0x00900000; + buffer_size = (unsigned char*)0x01900000 - loadbuffer; + + rc = load_firmware(loadbuffer, BOOTFILE, buffer_size); + if(rc < 0) + error(EBOOTFILE, rc); + + if (rc == EOK) + { + kernel_entry = (void*) loadbuffer; + rc = kernel_entry(); + } +} |