00001 #ifndef __J2K__TimerContainer_CPP__
00002 #define __J2K__TimerContainer_CPP__
00003
00004 #include <j2k/nto/TimerContainer.hpp>
00005 #include <j2k/nto/fixprio.hpp>
00006
00007
00008 TimerContainer::TimerContainer( ULONG nsec, ULONG sec )
00009 : pulse_id( TimerSignalEvent ), chid( ~0 )
00010 {
00011 memset( &event, 0, sizeof( event ) );
00012
00013
00014
00015
00016 printf( "Creating channel for TimerContainer \n" );
00017
00018
00019 chid = ChannelCreate( 0 );
00020 assert( chid != -1 );
00021
00022
00023 event.sigev_notify = SIGEV_PULSE;
00024 event.sigev_coid = ConnectAttach( ND_LOCAL_NODE, 0, chid, 0, 0 );
00025 event.sigev_priority = getprio( 0 );
00026 event.sigev_code = 1023;
00027 event.sigev_value.sival_ptr = (void*)pulse_id;
00028
00029 assert( event.sigev_coid != -1 );
00030
00031
00032
00033 if ( timer_create( CLOCK_REALTIME, &event, &timer_id ) == -1 )
00034 {
00035 MC_OnError( errno, Error, "while creating a timer." )
00036 perror( "Can't create timer.\n" );
00037 exit( 1 );
00038 }
00039
00040 memset( &t, 0, sizeof( t ) );
00041 set( nsec, sec );
00042 }
00043
00044 void TimerContainer::set( ULONG nsec, ULONG sec )
00045 {
00046
00047 t.it_value.tv_sec = sec;
00048 t.it_value.tv_nsec = nsec;
00049 t.it_interval.tv_sec = sec;
00050 t.it_interval.tv_nsec = nsec;
00051
00052 startTimer();
00053 }
00054
00055
00056 void TimerContainer::startTimer()
00057 {
00058 if ( timer_settime( timer_id, 0, &t, NULL ) == -1 )
00059 {
00060 MC_OnError( errno, Error, "Can't start timer." )
00061 perror( "Can't start timer\n" );
00062 exit( 1 );
00063 }
00064 }
00065
00066 #endif