/***************************************************************************/
/*  Description: Timer.cxx		                                           */
/*                                                                         */
/*  Author: M. Trabucato                                                   */
/*  Last Update : 30/04/98 Take PSX account								   */
/***************************************************************************/
 
 
/* this file is included by Timer.c*/
 
/*
  Makes some internal initializations.
*/
short __stdcall TMR_fn_wInitLibrary( void )
{
    /* Test if the library has already been initialized */
    if (TimerLibOk != 0) return (0);
 
    memset((unsigned char*)a_stTimerTab,0,sizeof(tdstTimer)*C_uwTimerMaxCount);
    wTimerCount = 0;
 
    /* Set the low frequency timer number of ticks per second */
    a3_ulTimerFrequency[C_wTimerFrequencyLow] = fn_ulTimerTickPerSecond(C_wTimerFrequencyLow);
    
    /* Set the medium frequency timer number of ticks per second */
    a3_ulTimerFrequency[C_wTimerFrequencyMedium] = fn_ulTimerTickPerSecond(C_wTimerFrequencyMedium);
 
    /* Set the high frequency timer number of ticks per second */
    a3_ulTimerFrequency[C_wTimerFrequencyHigh] = fn_ulTimerTickPerSecond(C_wTimerFrequencyHigh);
 
    /* Define the Timer event resolution */
    a3_ulEventFrequency[C_wTimerFrequencyLow] = fn_ulTimerEventTickPerSecond(C_wTimerFrequencyLow);
 
    /* Define the Timer event resolution */
    a3_ulEventFrequency[C_wTimerFrequencyMedium] = fn_ulTimerEventTickPerSecond(C_wTimerFrequencyMedium);
 
    /* Define the Timer event resolution */
    a3_ulEventFrequency[C_wTimerFrequencyHigh] = fn_ulTimerEventTickPerSecond(C_wTimerFrequencyHigh);
 
    /* Init CPA errors */
    if (!TMR_g_wErmOK)
    {
        Erm_M_InitErrMsg(Tmr);
        TMR_g_wErmOK = 1;
    }
 
    TimerLibOk++;
 
    return (0);
}
 
 
/*
  Makes some internal initializations.
*/
short __stdcall TMR_fn_wExitLibrary( void )
{
    short wTimerNum;
 
    if (TimerLibOk > 0)
    {
        /* Destroy all Timer*/
        for (wTimerNum=0 ; wTimerNum < C_uwTimerMaxCount ; wTimerNum++)
            if (a_stTimerTab[wTimerNum].m_wTimerState != C_wTimerUnused)
                TMR_fn_wDestroyTimer(wTimerNum);
        fn_wTimerReleaseEvents();
        wTimerCount = 0;
 
        TimerLibOk = 0;
    }
 
    return (0);
}
