diff options
| author | Jörg Hohensohn <hohensoh@rockbox.org> | 2005-02-19 14:45:34 +0000 |
|---|---|---|
| committer | Jörg Hohensohn <hohensoh@rockbox.org> | 2005-02-19 14:45:34 +0000 |
| commit | 7e1d36f35b7757c7d3482d973370e71a9dfc9504 (patch) | |
| tree | a5f1dc299f7e64f2478e38392e257a7cbc67d66f | |
| parent | 2e429ff76221e2d39a35d8875c6a3add76191519 (diff) | |
| download | rockbox-7e1d36f35b7757c7d3482d973370e71a9dfc9504.zip rockbox-7e1d36f35b7757c7d3482d973370e71a9dfc9504.tar.gz rockbox-7e1d36f35b7757c7d3482d973370e71a9dfc9504.tar.bz2 rockbox-7e1d36f35b7757c7d3482d973370e71a9dfc9504.tar.xz | |
Ondio: disk activity indication in USB mode, too
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6020 a1c6a512-1295-4272-9138-f99709370657
| -rw-r--r-- | apps/screens.c | 3 | ||||
| -rw-r--r-- | firmware/drivers/ata_mmc.c | 22 | ||||
| -rw-r--r-- | firmware/export/adc.h | 1 | ||||
| -rw-r--r-- | firmware/export/ata_mmc.h | 1 |
4 files changed, 24 insertions, 3 deletions
diff --git a/apps/screens.c b/apps/screens.c index 10f9dd2..145d2bb 100644 --- a/apps/screens.c +++ b/apps/screens.c @@ -111,6 +111,9 @@ void usb_screen(void) usb_display_info(); while(usb_wait_for_disconnect_w_tmo(&button_queue, HZ)) { if(usb_inserted()) { +#ifdef HAVE_MMC /* USB-MMC bridge can report activity */ + led(mmc_usb_active(HZ)); +#endif status_draw(false); } } diff --git a/firmware/drivers/ata_mmc.c b/firmware/drivers/ata_mmc.c index 7139f03..2ba465f 100644 --- a/firmware/drivers/ata_mmc.c +++ b/firmware/drivers/ata_mmc.c @@ -121,6 +121,8 @@ static int current_card = 0; #endif static bool last_mmc_status = false; static int countdown; /* for mmc switch debouncing */ +static bool usb_activity; /* monitoring the USB bridge */ +static long last_activity; /* private function declarations */ @@ -708,7 +710,7 @@ int ata_write_sectors(IF_MV2(int drive,) addr = start * SECTOR_SIZE; mutex_lock(&mmc_mutex); - led(true); + led(true); #ifdef HAVE_MULTIVOLUME card = &card_info[drive]; ret = select_card(drive); @@ -753,7 +755,7 @@ int ata_write_sectors(IF_MV2(int drive,) } deselect_card(); - led(false); + led(false); mutex_unlock(&mmc_mutex); /* only flush if writing went ok */ @@ -842,12 +844,26 @@ bool mmc_detect(void) return adc_read(ADC_MMC_SWITCH) < 0x200 ? true : false; } +bool mmc_usb_active(int delayticks) +{ + /* reading "inactive" is delayed by user-supplied monoflop value */ + return (usb_activity || + TIME_BEFORE(current_tick, last_activity+delayticks)); +} + static void mmc_tick(void) { bool current_status; + /* USB bridge activity is 0 on idle, ~527 on active */ + current_status = adc_read(ADC_USB_ACTIVE) > 0x100; + if (!current_status && usb_activity) + { + last_activity = current_tick; + } + usb_activity = current_status; + current_status = mmc_detect(); - /* Only report when the status has changed */ if (current_status != last_mmc_status) { diff --git a/firmware/export/adc.h b/firmware/export/adc.h index b1d78ea..a18cb19 100644 --- a/firmware/export/adc.h +++ b/firmware/export/adc.h @@ -40,6 +40,7 @@ #define ADC_BUTTON_ONOFF 3 /* the on/off button, high value if pressed */ #define ADC_BUTTON_ROW1 4 /* Used for scanning the keys, different voltages for different keys */ +#define ADC_USB_ACTIVE 5 /* USB bridge activity */ #define ADC_UNREG_POWER 7 /* Battery voltage */ #else diff --git a/firmware/export/ata_mmc.h b/firmware/export/ata_mmc.h index 9578499..6c5141d 100644 --- a/firmware/export/ata_mmc.h +++ b/firmware/export/ata_mmc.h @@ -41,5 +41,6 @@ bool mmc_detect(void); unsigned long mmc_extract_bits(const unsigned long *p, unsigned int start, unsigned int size); tCardInfo *mmc_card_info(int card_no); +bool mmc_usb_active(int delayticks); #endif |