forked from len0rd/rockbox
		
	- "talkbox" functionality added, but yet without thumbnail recording - menu under "general settings" to configure voice - directories and folders can be voiced as a numbers git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4440 a1c6a512-1295-4272-9138-f99709370657
		
			
				
	
	
		
			180 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			180 lines
		
	
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /***************************************************************************
 | |
|  *             __________               __   ___.
 | |
|  *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
 | |
|  *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
 | |
|  *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
 | |
|  *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
 | |
|  *                     \/            \/     \/    \/            \/
 | |
|  * $Id$
 | |
|  *
 | |
|  * Copyright (C) 2002 Linus Nielsen Feltzing
 | |
|  *
 | |
|  * All files in this archive are subject to the GNU General Public License.
 | |
|  * See the file COPYING in the source tree root for full license agreement.
 | |
|  *
 | |
|  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 | |
|  * KIND, either express or implied.
 | |
|  *
 | |
|  ****************************************************************************/
 | |
| #include "config.h"
 | |
| #include "options.h"
 | |
| 
 | |
| #include "lcd.h"
 | |
| #include "font.h"
 | |
| #include "button.h"
 | |
| #include "kernel.h"
 | |
| #include "sprintf.h"
 | |
| #include <string.h>
 | |
| #include "settings.h"
 | |
| #include "power.h"
 | |
| #include "powermgmt.h"
 | |
| #include "status.h"
 | |
| #include "debug.h"
 | |
| #include "talk.h"
 | |
| 
 | |
| #include "lang.h"
 | |
| 
 | |
| #define SMALL_STEP_SIZE 15*60    /* Seconds */
 | |
| #define LARGE_STEP_SIZE 30*60    /* Seconds */
 | |
| #define THRESHOLD       60       /* Minutes */
 | |
| #define MAX_TIME        5*60*60  /* Hours */
 | |
| 
 | |
| bool sleeptimer_screen(void)
 | |
| {
 | |
| #ifdef HAVE_LCD_BITMAP
 | |
|     int w, h;
 | |
| #endif
 | |
|     unsigned long seconds;
 | |
|     int hours, minutes;
 | |
|     int button;
 | |
|     bool done = false;
 | |
|     char buf[32];
 | |
|     int oldtime, newtime;
 | |
|     int amount = 0;
 | |
|     int org_timer=get_sleep_timer();
 | |
|     bool changed=false;
 | |
|     bool sayit = true;
 | |
| 
 | |
| #ifdef HAVE_LCD_BITMAP
 | |
|     lcd_setfont(FONT_UI);
 | |
|     lcd_getstringsize("M", &w, &h);
 | |
|     lcd_setmargins(w, 8);
 | |
| #endif
 | |
|     
 | |
|     lcd_clear_display();
 | |
|     lcd_puts_scroll(0, 0, str(LANG_SLEEP_TIMER));
 | |
| 
 | |
|     while(!done)
 | |
|     {
 | |
|         button = button_get_w_tmo(HZ);
 | |
|         switch(button)
 | |
|         {
 | |
| #ifdef HAVE_RECORDER_KEYPAD
 | |
|         case BUTTON_LEFT:
 | |
|         case BUTTON_PLAY:
 | |
| #else
 | |
|         case BUTTON_PLAY:
 | |
| #endif
 | |
|           done = true;
 | |
|           break;
 | |
| 
 | |
| #ifdef HAVE_RECORDER_KEYPAD
 | |
|         case BUTTON_OFF:
 | |
| #else
 | |
|         case BUTTON_STOP:
 | |
|         case BUTTON_MENU:
 | |
| #endif
 | |
|           if (changed) {
 | |
|             lcd_stop_scroll();
 | |
|             lcd_puts(0, 0, str(LANG_MENU_SETTING_CANCEL));
 | |
|             lcd_update();
 | |
|             set_sleep_timer(org_timer);
 | |
|             sleep(HZ/2);
 | |
|           }
 | |
|           done = true;
 | |
|           break;
 | |
| 
 | |
| #if defined(HAVE_PLAYER_KEYPAD) || defined(HAVE_NEO_KEYPAD)
 | |
|         case BUTTON_RIGHT:
 | |
| #else
 | |
|         case BUTTON_UP:
 | |
| #endif
 | |
|             oldtime = (get_sleep_timer()+59) / 60;
 | |
|             if(oldtime < THRESHOLD)
 | |
|                 amount = SMALL_STEP_SIZE;
 | |
|             else
 | |
|                 amount = LARGE_STEP_SIZE;
 | |
|             
 | |
|             newtime = oldtime * 60 + amount;
 | |
|             if(newtime > MAX_TIME)
 | |
|                 newtime = MAX_TIME;
 | |
| 
 | |
|             changed = sayit = true;
 | |
|             set_sleep_timer(newtime);
 | |
|             break;
 | |
|                 
 | |
| #ifdef HAVE_PLAYER_KEYPAD
 | |
|         case BUTTON_LEFT:
 | |
| #else
 | |
|         case BUTTON_DOWN:
 | |
| #endif
 | |
|             oldtime = (get_sleep_timer()+59) / 60;
 | |
|             if(oldtime <= THRESHOLD)
 | |
|                 amount = SMALL_STEP_SIZE;
 | |
|             else
 | |
|                 amount = LARGE_STEP_SIZE;
 | |
|             
 | |
|             newtime = oldtime*60 - amount;
 | |
|             if(newtime < 0)
 | |
|                 newtime = 0;
 | |
|             
 | |
|             changed = sayit = true;
 | |
|             set_sleep_timer(newtime);
 | |
|             break;
 | |
|         }
 | |
| 
 | |
|         seconds = get_sleep_timer();
 | |
| 
 | |
|         if(seconds)
 | |
|         {
 | |
|             seconds += 59; /* Round up for a "friendlier" display */
 | |
|             hours = seconds / 3600;
 | |
|             minutes = (seconds - (hours * 3600)) / 60;
 | |
|             snprintf(buf, 32, "%d:%02d",
 | |
|                      hours, minutes);
 | |
|             lcd_puts(0, 1, buf);
 | |
| 
 | |
|             if (sayit && global_settings.talk_menu)
 | |
|             {
 | |
|                 bool enqueue = false; /* first one should not ne queued */
 | |
| 
 | |
|                 if (hours)
 | |
|                 {   
 | |
|                     talk_value(hours, UNIT_HOUR, enqueue);
 | |
|                     enqueue = true; /* queue any following */
 | |
|                 }
 | |
|                 if (minutes)
 | |
|                 {
 | |
|                     talk_value(minutes, UNIT_MIN, enqueue);
 | |
|                 }
 | |
| 
 | |
|                 sayit = false;
 | |
|             }
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|             lcd_puts(0, 1, str(LANG_OFF));
 | |
|             if (sayit)
 | |
|             {
 | |
|                 talk_id(LANG_OFF, false);
 | |
|                 sayit = false;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         status_draw(true);
 | |
| 
 | |
|         lcd_update();
 | |
|     }
 | |
|     lcd_stop_scroll();
 | |
|     return false;
 | |
| }
 |