1/* 2 SDL - Simple DirectMedia Layer 3 Copyright (C) 1997-2012 Sam Lantinga 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License as published by the Free Software Foundation; either 8 version 2.1 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Lesser General Public License for more details. 14 15 You should have received a copy of the GNU Lesser General Public 16 License along with this library; if not, write to the Free Software 17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 18 19 Sam Lantinga 20 slouken@libsdl.org 21*/ 22#include "SDL_config.h" 23 24#ifdef SDL_TIMER_DC 25 26#include <kos.h> 27 28#include "SDL_thread.h" 29#include "SDL_timer.h" 30#include "../SDL_timer_c.h" 31 32static unsigned start; 33 34/* 35 jif = ms * HZ /1000 36 ms = jif * 1000/HZ 37*/ 38 39void SDL_StartTicks(void) 40{ 41 /* Set first ticks value */ 42 start = jiffies; 43} 44 45Uint32 SDL_GetTicks(void) 46{ 47 return((jiffies-start)*1000/HZ); 48} 49 50void SDL_Delay(Uint32 ms) 51{ 52 thd_sleep(ms); 53} 54 55/* Data to handle a single periodic alarm */ 56static int timer_alive = 0; 57static SDL_Thread *timer = NULL; 58 59static int RunTimer(void *unused) 60{ 61 while ( timer_alive ) { 62 if ( SDL_timer_running ) { 63 SDL_ThreadedTimerCheck(); 64 } 65 SDL_Delay(10); 66 } 67 return(0); 68} 69 70/* This is only called if the event thread is not running */ 71int SDL_SYS_TimerInit(void) 72{ 73 timer_alive = 1; 74 timer = SDL_CreateThread(RunTimer, NULL); 75 if ( timer == NULL ) 76 return(-1); 77 return(SDL_SetTimerThreaded(1)); 78} 79 80void SDL_SYS_TimerQuit(void) 81{ 82 timer_alive = 0; 83 if ( timer ) { 84 SDL_WaitThread(timer, NULL); 85 timer = NULL; 86 } 87} 88 89int SDL_SYS_StartTimer(void) 90{ 91 SDL_SetError("Internal logic error: DC uses threaded timer"); 92 return(-1); 93} 94 95void SDL_SYS_StopTimer(void) 96{ 97 return; 98} 99 100#endif /* SDL_TIMER_DC */ 101