Ejemplo n.º 1
0
void GoToSleep()
{
	gFlags.light_sleep = !( gFlags.has_x32 || dfStatus.lsloff || gFlags.noclock );

	ScreenOff();
	LEDOff();
	gFlags.firing = 0;
	BatReadTimer = 50;
	RTCSleep();
	DevicesOnOff( 1 );
	CLK_SysTickDelay( 250 );
	CLK_SysTickDelay( 250 );
	CLK_SysTickDelay( 250 );
	if ( dfStatus.off || PE0 || KeyPressTime == 1100 )
	{
		SYS_UnlockReg();
		WDT_Close();
		FlushAndSleep();
		PreheatDelay = 0;
	}
	WDT_Open( WDT_TIMEOUT_2POW14, WDT_RESET_DELAY_18CLK, TRUE, FALSE );
	SYS_LockReg();
	gFlags.refresh_battery = 1;
	DevicesOnOff( 0 );
	RTCWakeUp();
	InitDisplay();
}
Ejemplo n.º 2
0
/*************************************************
  Function:     timer_reboot_control
  Description:  定时重启屏背光控制切换
  Input:        
    1.flag       1: 单片机控制屏背光 
                 0: N32926控制屏背光
  Output:       无
  Return:       无
  Others:   
  夜间重启时不能亮屏、不能响开机声音
  ,以免用户察觉异常。
*************************************************/
void timer_reboot_control(uint8 flag)
{	
	dprintf("flag : %d\n", flag);
    if(flag == TRUE)
    {
    	storage_set_McuControlLcd(1);
    }
    else
    {
    	storage_set_McuControlLcd(0);
		ScreenOff();
		// 为了保证网络芯片模块重启后正常工作
		//sleep(2); 
    }
	hw_set_lcd_pwm0(flag);
}
Ejemplo n.º 3
0
static inline void OnBTNChange(bool btn_pressed, uint btn) {
    // Assumes btn 1..4

    // De-bouncing
    bool *state = &btn_state[btn];
    uint *tick = &btn_debounce_tick[btn];
    bool *debouncing = &btn_debouncing[btn];

    if (*debouncing && systick < *tick) {
        return; // Event occurred within debounce interval
    }

    // Change state
    *state = btn_pressed;
    *tick = systick + DEBOUNCE_INTERVAL;
    *debouncing = true;

    //printf("btn %d : %d\n", btn, btn_pressed);

    reset_auto_screen_off();

    // Event handling
    if (btn_pressed) {
        if (!displayOn) {
            ScreenOn();
        }
        else {
            switch (btn) {
                case 1:
                    break;
                case 2:
                    PrevApp();
                    break;
                case 3:
                    NextApp();
                    break;
                case 4:
                    ScreenOff();
                    break;
            }
        }

        AppForegroundEvent(evtBtnPress, btn);
    } else {
        AppForegroundEvent(evtBtnRelease, btn);
    }
}
Ejemplo n.º 4
0
void ProcessCore() {
    while (1) {
        ProcessPowerMonitor();

        // Reset debouncing when timeout period expires,
        // to prevent lock-up when a roll-over occurrs.
        uint i;
        for (i=1; i<=4; i++) {
            if (btn_debouncing[i] && systick >= btn_debounce_tick[i]) {
                btn_debouncing[i] = false;
            }
        }

        // Turn off screen automatically after some amount of time
        if (auto_screen_off && displayOn && systick > sleep_time) {
            ScreenOff();
        }

        if (displayOn)
            Delay(CORE_PROCESS_INTERVAL);
        else
            Delay(CORE_STANDBY_INTERVAL);
    }
}
Ejemplo n.º 5
0
/* Extract a ch completely from the world, and leave his stuff behind */
void extract_char_smarter(struct char_data *ch, int save_room)
{
  struct obj_data *i;
  struct char_data *k, *next_char;
  struct descriptor_data *t_desc;
  int l, was_in, j;

  extern long mob_count;  
  extern struct char_data *combat_list;
  
  void do_save(struct char_data *ch, char *argument, int cmd);
  void do_return(struct char_data *ch, char *argument, int cmd);
  
  void die_follower(struct char_data *ch);

  if(IS_SET(ch->specials.act, ACT_FIGURINE) && ch->link)
     extract_obj(ch->link);
  
  if(!IS_NPC(ch) && !ch->desc)	{
    for(t_desc = descriptor_list; t_desc; t_desc = t_desc->next)
      if(t_desc->original==ch)
	do_return(t_desc->character, "", 0);
  }
  
  if (ch->in_room == NOWHERE) {
    logE("NOWHERE extracting char. (handler.c, extract_char)");
    /*
     **  problem from linkdeath
     */
    char_to_room(ch, 4);  /* 4 == all purpose store */
  }
  
  if (ch->followers || ch->master)
    die_follower(ch);
  
  if(ch->desc) {
    /* Forget snooping */
    if ((ch->desc->snoop.snooping) && (ch->desc->snoop.snooping->desc))
      ch->desc->snoop.snooping->desc->snoop.snoop_by = 0;
    
    if (ch->desc->snoop.snoop_by) {
      send_to_char("Your victim is no longer among us.\n\r",
		   ch->desc->snoop.snoop_by);
      if (ch->desc->snoop.snoop_by->desc)
      ch->desc->snoop.snoop_by->desc->snoop.snooping = 0;
    }
    
    ch->desc->snoop.snooping = ch->desc->snoop.snoop_by = 0;
  }
  
  if (ch->carrying)	{
    /* transfer ch's objects to room */
    
    if (!IS_IMMORTAL(ch)) {

      while(ch->carrying) {
	i=ch->carrying;
	obj_from_char(i);
	obj_to_room(i, ch->in_room);
	check_falling_obj(i, ch->in_room);

      }
    } else {

      send_to_char("Here, you dropped some stuff, let me help you get rid of that.\n\r",ch);

      /*
	equipment too
	*/
      for (j=0; j<MAX_WEAR; j++) {
	if (ch->equipment[j])
	  obj_to_char(unequip_char(ch, j), ch);
      }      

      while (ch->carrying) {
         i = ch->carrying;
	 obj_from_char(i);
	 extract_obj(i);
      }
    }
    
  }
  
  if (ch->specials.fighting)
    stop_fighting(ch);
  
  for (k = combat_list; k ; k = next_char)	{
    next_char = k->next_fighting;
    if (k->specials.fighting == ch)
      stop_fighting(k);
  }

  if (MOUNTED(ch)) {
    Dismount(ch, MOUNTED(ch), POSITION_STANDING);    
  }

  if (RIDDEN(ch)) {
    Dismount(RIDDEN(ch), ch, POSITION_STANDING);
  }
  
  /* Must remove from room before removing the equipment! */
  was_in = ch->in_room;
  char_from_room(ch);
  
  /* clear equipment_list */
  for (l = 0; l < MAX_WEAR; l++)
    if (ch->equipment[l])
      obj_to_room(unequip_char(ch,l), was_in);
  
  
  if (IS_NPC(ch)) {
    for (k=character_list; k; k=k->next) {
      if (k->specials.hunting)
	if (k->specials.hunting == ch) {
	  k->specials.hunting = 0;
	}
      if (Hates(k, ch)) {
	RemHated(k, ch);
      }
      if (Fears(k, ch)) {
	RemFeared(k, ch);
      }
      if (k->orig == ch) {
	k->orig = 0;
      }
    }          
  } else {
    for (k=character_list; k; k=k->next) {
      if (k->specials.hunting)
	if (k->specials.hunting == ch) {
	  k->specials.hunting = 0;
	}
      if (Hates(k, ch)) {
	ZeroHatred(k, ch);
      }
      if (Fears(k, ch)) {
	ZeroFeared(k, ch);
      }
      if (k->orig == ch) {
	k->orig = 0;
      }
    }
    
  }
  /* pull the char from the list */
  
  if (ch == character_list)  
    character_list = ch->next;
  else   {
    for(k = character_list; (k) && (k->next != ch); k = k->next);
    if(k)
      k->next = ch->next;
    else {
      logE("Trying to remove ?? from character_list.(handler.c,extract_char)");
      exit(0);
    }
  }

  if (ch->specials.gname)
    free(ch->specials.gname);
  
  GET_AC(ch) = 100;
  
  if (ch->desc)	{
    if (ch->desc->original)
      do_return(ch, "", 0);
    if (!strcmp(GET_NAME(ch), "Odin's heroic minion")) {
      free(GET_NAME(ch));
      GET_NAME(ch) = strdup("111111");
    }
    save_char(ch, save_room);
  }
  

  t_desc = ch->desc;

  if(ch->term) {
    ScreenOff(ch);
    ch->term = 0;
  }

  if (IS_NPC(ch)) 	{
    if (ch->nr > -1) /* if mobile */
      mob_index[ch->nr].number--;
    FreeHates(ch);
    FreeFears(ch);
    mob_count--;
    free_char(ch);
  }
  
  if (t_desc) {
    t_desc->connected = CON_SLCT;
    SEND_TO_Q(MENU, t_desc);
  }
}
Ejemplo n.º 6
0
/*************************************************
  Function:		SceneRun
  Description: 	
  Input:		
  Output:		��
  Return:		��
  Others:
*************************************************/
int SceneRun(void)
{
    SDL_Event ev;
    int delay, frames, lastx, lasty, ret;
    uint32_t tick, dblclk, lasttick, mouseDownTick, feetdogtick;
	bool mouseDownDeal = true;
	bool mouseDownResult = false;
	Uint32 pre_type = 0;
	
    /* Watch keystrokes */
    dblclk = frames = lasttick = lastx = lasty = mouseDownTick = feetdogtick = 0;
	
    for (;;)
    {
        bool result = false;
	
        if (CheckQuitValue())
        {
        	debug_log(" CheckQuitValue: %d \n", CheckQuitValue());
            break;
        }

        ProcessCommand();       

        tick = SDL_GetTicks();

		// add by chenbh 2016-10-17 feet dog 2s pertimes		
		if (tick - feetdogtick >= 1500)
		{
			feetdogtick = tick;
			feetdog_task();
		}
		
    #ifdef FPS_ENABLE
        frames++;
        if (tick - lasttick >= 1000)
        {
            printf("fps: %d\n", frames);
            frames = 0;
            lasttick = tick;
        }
    #endif // FPS_ENABLE

        while (SDL_PollEvent(&ev))
        {
            switch (ev.type)
            {            
            	case SDL_KEYDOWN:
					{
						// add by chenbh
						if (ScreenSaverIsScreenSaving() || SceneGetCleanScreenFlg())
						{
							ScreenSaverRefresh();
							g_LcdFuncNoDeal = true;
							break;
						}
						
		                ScreenSaverRefresh();
		                result = ituSceneUpdate(&theScene, ITU_EVENT_KEYDOWN, ev.key.keysym.sym, 0, 0);
						printf("ev.key.keysym.sym: %x\n", ev.key.keysym.sym);
		                switch (ev.key.keysym.sym)
						{						
						    case TK_CENTER:
						        {						            
									TouchManagerKey();
						            result = true;									
						        }
						        break;

						    case TK_MONITOR:
						        {
									TouchMonitorKey();
									result = true;	
									//ScreenOn();
								}						        
						        break;

						    case TK_LOCK:
								{
									#ifdef CFG_SCREENSHOT_ENABLE					
			                        	Screenshot(g_ScreenSurf);
									#else
									{
										Command cmd;
										memset(&cmd, 0, sizeof(Command));

										cmd.id = CMD_KEY_DOWN;
										sprintf(cmd.strarg1, "%d", (ev.key.keysym.sym - TK_LOCK));
										mq_send(g_CommandQueue, (const char*)&cmd, sizeof (Command), 0);
										result = true;
									}
			                		#endif 									
						    	}
								break;

						    case TK_TALK:
						        {
									Command cmd;
									memset(&cmd, 0, sizeof(Command));

									cmd.id = CMD_KEY_DOWN;
									sprintf(cmd.strarg1, "%d", (ev.key.keysym.sym - TK_LOCK));
									mq_send(g_CommandQueue, (const char*)&cmd, sizeof (Command), 0);
									result = true;
								}						        
						        break;

							default:
								break;

						}
						
		                if (result && !ScreenIsOff())
		                    sys_key_beep();		                  
		        }
                break;

            case SDL_KEYUP:
				{
					if (g_LcdFuncNoDeal == false)
					{
                		result = ituSceneUpdate(&theScene, ITU_EVENT_KEYUP, ev.key.keysym.sym, 0, 0);
					}
					g_LcdFuncNoDeal = false;
            	}
                break;

            case SDL_MOUSEMOTION:
				{
					// add by chenbh
					if (ScreenSaverIsScreenSaving())
					{
						ScreenSaverRefresh();
					}
					else
					{
	                	ScreenSaverRefresh();
	                	result = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEMOVE, ev.button.button, ev.button.x, ev.button.y);
					}
					g_LcdFuncNoDeal = false;
            	}
                break;

            case SDL_MOUSEBUTTONDOWN:
				{
					// add by chenbh
					if (ScreenSaverIsScreenSaving())
					{
						ScreenSaverRefresh();
						g_LcdFuncNoDeal = true;
						break;
					}
					
	                ScreenSaverRefresh();
	                {
	                    mouseDownTick = SDL_GetTicks();
	                #ifdef DOUBLE_KEY_ENABLE
	                    if (mouseDownTick - dblclk <= 200)
	                    {
	                        result = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEDOUBLECLICK, ev.button.button, ev.button.x, ev.button.y);
	                        dblclk = 0;
	                    }
	                    else
	                #endif // DOUBLE_KEY_ENABLE					
	                    {
	                        result = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEDOWN, ev.button.button, ev.button.x, ev.button.y);
	                        dblclk = mouseDownTick;
	                        lastx = ev.button.x;
	                        lasty = ev.button.y;
							
	                        if (result && !ScreenIsOff())
	                            sys_key_beep();
	                           
	                    }					
	                }
            	}
                break;

            case SDL_MOUSEBUTTONUP:
				{
					if (g_LcdFuncNoDeal == false)
					{
						if (SDL_GetTicks() - dblclk <= 200)
		                {
		                    int xdiff = abs(ev.button.x - lastx);
		                    int ydiff = abs(ev.button.y - lasty);

		                    if (xdiff >= GESTURE_THRESHOLD && xdiff > ydiff)
		                    {
		                        if (ev.button.x > lastx)
		                        {
		                            printf("mouse: slide to right\n");
		                            result |= ituSceneUpdate(&theScene, ITU_EVENT_TOUCHSLIDERIGHT, 1, ev.button.x, ev.button.y);
		                        }
		                        else
		                        {
		                            printf("mouse: slide to left\n");
		                            result |= ituSceneUpdate(&theScene, ITU_EVENT_TOUCHSLIDELEFT, 1, ev.button.x, ev.button.y);
		                        }
		                    }
		                    else if (ydiff >= GESTURE_THRESHOLD)
		                    {
		                        if (ev.button.y > lasty)
		                        {
		                            printf("mouse: slide to down\n");
		                            result |= ituSceneUpdate(&theScene, ITU_EVENT_TOUCHSLIDEDOWN, 1, ev.button.x, ev.button.y);
		                        }
		                        else
		                        {
		                            printf("mouse: slide to up\n");
		                            result |= ituSceneUpdate(&theScene, ITU_EVENT_TOUCHSLIDEUP, 1, ev.button.x, ev.button.y);
		                        }
		                    }
		                }
		                result |= ituSceneUpdate(&theScene, ITU_EVENT_MOUSEUP, ev.button.button, ev.button.x, ev.button.y);
		                mouseDownTick = 0;
					}					
	               	g_LcdFuncNoDeal = false;
            	}
                break;

            case SDL_FINGERMOTION:
				{
					// add by chenbh
					if (ScreenSaverIsScreenSaving())
					{
						ScreenSaverRefresh();
					}
					else
					{
						ScreenSaverRefresh();
						#ifdef USE_ANDROID_MODE
						if (mouseDownDeal == false && pre_type == SDL_FINGERDOWN)
			            {
			                printf("ANDROID press: %d %d\n", lastx, lasty);
							result = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEDOWN, 1, lastx, lasty);
							mouseDownDeal = true;
							usleep(20*1000);
			            }
						#endif
	                	//printf("touch: move %d, %d\n", ev.tfinger.x, ev.tfinger.y);
	                	result = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEMOVE, 1, ev.tfinger.x, ev.tfinger.y);
					}	
					g_LcdFuncNoDeal = false;
					pre_type = ev.type;
            	}
                break;

            case SDL_FINGERDOWN:
				{
					// add by chenbh
					if (ScreenSaverIsScreenSaving())
					{
						ScreenSaverRefresh();
						g_LcdFuncNoDeal = true;
						break;
					}

					#ifdef USE_ANDROID_MODE
					ScreenSaverRefresh();
	                //printf("touch: down %d, %d\n", ev.tfinger.x, ev.tfinger.y);
                    mouseDownTick = SDL_GetTicks();
			 		dblclk = mouseDownTick;
                    lastx = ev.tfinger.x;
                    lasty = ev.tfinger.y;
					pre_type = ev.type;
					mouseDownDeal = false;
					mouseDownResult = false;
					SceneSetProgressBarCustomData();
					#else
	                ScreenSaverRefresh();
	                //printf("touch: down %d, %d\n", ev.tfinger.x, ev.tfinger.y);
                    mouseDownTick = SDL_GetTicks();
                	#ifdef DOUBLE_KEY_ENABLE
	                    if (mouseDownTick - dblclk <= 200)
	                    {
	                        printf("double touch!\n");
	                        result = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEDOUBLECLICK, 1, ev.tfinger.x, ev.tfinger.y);
	                        dblclk = mouseDownTick = 0;
	                    }
	                    else
                	#endif // DOUBLE_KEY_ENABLE
	                    {
	                        result = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEDOWN, 1, ev.tfinger.x, ev.tfinger.y);
	                        dblclk = mouseDownTick;
	                        lastx = ev.tfinger.x;
	                        lasty = ev.tfinger.y;
							
	                        if (result && !ScreenIsOff())
	                            sys_key_beep();	                            
	                    }
					
					#endif
            	}
                break;

            case SDL_FINGERUP:
				{
					if (g_LcdFuncNoDeal == false)
					{
		                //printf("touch: up %d, %d\n", ev.tfinger.x, ev.tfinger.y);
		                if (SDL_GetTicks() - dblclk <= 300)
		                {
		                    int xdiff = abs(ev.tfinger.x - lastx);
		                    int ydiff = abs(ev.tfinger.y - lasty);

		                    if (xdiff >= GESTURE_THRESHOLD && xdiff > ydiff)
		                    {
		                        if (ev.tfinger.x > lastx)
		                        {
		                            printf("touch: slide to right %d %d\n", ev.tfinger.x, ev.tfinger.y);
		                            result |= ituSceneUpdate(&theScene, ITU_EVENT_TOUCHSLIDERIGHT, 1, ev.tfinger.x, ev.tfinger.y);
		                        }
		                        else
		                        {
		                            printf("touch: slide to left %d %d\n", ev.button.x, ev.button.y);
		                            result |= ituSceneUpdate(&theScene, ITU_EVENT_TOUCHSLIDELEFT, 1, ev.tfinger.x, ev.tfinger.y);
		                        }
		                    }
		                    else if (ydiff >= GESTURE_THRESHOLD)
		                    {
		                        if (ev.tfinger.y > lasty)
		                        {
		                            printf("touch: slide to down %d %d\n", ev.tfinger.x, ev.tfinger.y);
		                            result |= ituSceneUpdate(&theScene, ITU_EVENT_TOUCHSLIDEDOWN, 1, ev.tfinger.x, ev.tfinger.y);
		                        }
		                        else
		                        {
		                            printf("touch: slide to up %d %d\n", ev.tfinger.x, ev.tfinger.y);
		                            result |= ituSceneUpdate(&theScene, ITU_EVENT_TOUCHSLIDEUP, 1, ev.tfinger.x, ev.tfinger.y);
		                        }
		                    }
		                }

						#ifdef USE_ANDROID_MODE
						if (pre_type == SDL_FINGERDOWN)
			            {
			            	if (mouseDownDeal == false)
			            	{
								mouseDownResult = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEDOWN, 1, lastx, lasty);
								result |= mouseDownResult;
								mouseDownDeal = true;
			            	}
							
							if (!ScreenIsOff() && mouseDownResult)
							{
								//added by WuZ in 2016-10-13
								if (!mainLayer)
								{
									mainLayer = ituSceneFindWidget(&theScene, "mainLayer");
									assert(mainLayer);
								}
								
								if (ituWidgetIsVisible(mainLayer))
								{
									if (!mainSOSOffButton)
									{
										mainSOSOffButton = ituSceneFindWidget(&theScene, "mainSOSOffButton");
										assert(mainSOSOffButton);
									}
									if (((lastx > mainSOSOffButton->bg.icon.widget.rect.x && lastx < (mainSOSOffButton->bg.icon.widget.rect.x + mainSOSOffButton->bg.icon.widget.rect.width)) &&
										(lasty > mainSOSOffButton->bg.icon.widget.rect.y && lasty < (mainSOSOffButton->bg.icon.widget.rect.y + mainSOSOffButton->bg.icon.widget.rect.height))))
									{
										
									}
									else
									{
										sys_key_beep();
									}
								}
								else
								{
									sys_key_beep();
								}
							}
							
							result |= ituSceneUpdate(&theScene, ITU_EVENT_TIMER, 0, 0, 0);
					        if (result)
					        {
					            ituSceneDraw(&theScene, g_ScreenSurf);
					            ituFlip(g_ScreenSurf);
					        }								
			            }
						#endif

		                result |= ituSceneUpdate(&theScene, ITU_EVENT_MOUSEUP, 1, ev.tfinger.x, ev.tfinger.y);						
		                mouseDownTick = 0;
					}
					g_LcdFuncNoDeal = false;
					pre_type = ev.type;
            	}
                break;
            }
        }

		if (SYS_MEDIA_NONE != sys_get_media_state())
            ScreenSaverRefresh();
		
        if (!ScreenIsOff())
        {
        	#ifdef USE_ANDROID_MODE
			if (mouseDownTick > 0 && (SDL_GetTicks() - mouseDownTick >= ANDROID_PRESS_DELAY) && 
				pre_type == SDL_FINGERDOWN && mouseDownDeal == false)
            {
                //printf("ANDROID press: %d %d\n", lastx, lasty);
				result = ituSceneUpdate(&theScene, ITU_EVENT_MOUSEDOWN, 1, lastx, lasty);
				mouseDownDeal = true;
				mouseDownResult = result;
            }
			#endif
			
            if (mouseDownTick > 0 && (SDL_GetTicks() - mouseDownTick >= MOUSEDOWN_LONGPRESS_DELAY) && 
				pre_type == SDL_FINGERDOWN)
            {
                printf("long press: %d %d\n", lastx, lasty);
                result |= ituSceneUpdate(&theScene, ITU_EVENT_MOUSELONGPRESS, 255, lastx, lasty);
                mouseDownTick = 0;
            }
            result |= ituSceneUpdate(&theScene, ITU_EVENT_TIMER, 0, 0, 0);

			//printf("aaaaaaaaaaaaaaaaaa %d\n", result);
        	#ifndef _WIN32
            if (result)
        	#endif
            {
                ituSceneDraw(&theScene, g_ScreenSurf);
                ituFlip(g_ScreenSurf);
            }

			if (SYS_MEDIA_NONE == sys_get_media_state())
			{
				ret = ScreenSaverCheck();
	            if (ret == -1)
	            {
	               ScreenProtect();
	            }
				else if (ret == -2)
				{
					ScreenOff();
				}
			}
        }
		else
		{
			result |= ituSceneUpdate(&theScene, ITU_EVENT_TIMER, 0, 0, 0);
			//printf("aaaaaaaaaaaaaaaaaa %d\n", result);
        	#ifndef _WIN32
            if (result)
        	#endif
            {
                ituSceneDraw(&theScene, g_ScreenSurf);
                ituFlip(g_ScreenSurf);
            }
		}
		
		// add by chenbh 
		if ((sys_get_media_state() == SYS_MEDIA_INTERCOM) ||
			(sys_get_media_state() == SYS_MEDIA_MONITOR) ||
			(sys_get_media_state() == SYS_MEDIA_LEAVEWORD_PLAY) ||
			ScreenIsOff())
		{
			delay = MS_PER_FRAME_EXT - (SDL_GetTicks() - tick);
		}
		else
		{
        	delay = MS_PER_FRAME - (SDL_GetTicks() - tick);
		}
        //printf("scene loop delay=%d\n", delay);
        if (delay > 0)
            SDL_Delay(delay);
        else
            sched_yield();
    }

    return g_QuitValue;
}