Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

TimerPulse Class Reference

#include <TimerPulse.hpp>

Inheritance diagram for TimerPulse::

Basic_PThread TimerPulseTest List of all members.

Public Methods

 TimerPulse (ULONG nsec=Period_500_ms, ULONG sec=0)
virtual __inline void stop ()
void set (ULONG nsec=Period_500_ms, ULONG sec=0)
__inline int getChid ()

Protected Methods

virtual void tick (int signo)=0
virtual void run ()

Protected Attributes

int pulse_id
int timer_pid
int chid
timer_t timer_id
_pulse pulse
sigevent event
_clockperiod clkper
itimerspec t

Constructor & Destructor Documentation

TimerPulse::TimerPulse ULONG    nsec = Period_500_ms,
ULONG    sec = 0
 

Definition at line 8 of file TimerPulse.cpp.

00009  : pulse_id( TimerSignalEvent ), chid( ~0 )
00010 {
00011   memset( &event, 0, sizeof( event ) );
00012 
00013   // Set priority to max, so we don't get disrupted 
00014   // by anything else then interrupts
00015 
00016   printf( "Creating channel" );
00017 
00018   // Create a channel to receive the timer event
00019   chid = ChannelCreate( 0 );
00020   assert( chid != -1 );
00021 
00022   // Setup timer and timer event
00023   event.sigev_notify     = SIGEV_PULSE;
00024   event.sigev_coid       = ConnectAttach( ND_LOCAL_NODE, 0, chid, 0, 0 );
00025   event.sigev_priority   = getprio( 0 ); // fixprio( 20 );
00026   event.sigev_code       = 1023;
00027   event.sigev_value.sival_ptr = (void*)pulse_id;
00028 
00029   assert( event.sigev_coid != -1 );
00030 
00031   // Create the timer, binding it to the event
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 
00042   set( nsec, sec );
00043 
00044 }


Member Function Documentation

__inline int TimerPulse::getChid   [inline]
 

Definition at line 64 of file TimerPulse.hpp.

00064 { return chid; }

void TimerPulse::run   [protected, virtual]
 

Reimplemented from Basic_PThread.

Definition at line 63 of file TimerPulse.cpp.

00064 {
00065   // Start the timer
00066   if ( timer_settime( timer_id, 0, &t, NULL ) == -1 )
00067   {
00068     MC_OnError( errno, Error, "Can't start timer." )
00069     perror( "Can't start timer\n" );
00070     exit( 1 );
00071   }
00072 
00073   for(;;) 
00074   {
00075     // Wait for pulse
00076     if ( MsgReceivePulse( chid, &pulse, sizeof( pulse ), NULL ) ) 
00077     {
00078      MC_OnError( errno, Error, "Invalid pulse received by TimerPulse.\n" )
00079     }
00080     tick( pulse_id );
00081   }
00082 } 

void TimerPulse::set ULONG    nsec = Period_500_ms,
ULONG    sec = 0
 

Definition at line 46 of file TimerPulse.cpp.

Referenced by TimerPulse(), and stop().

00047 {
00048   // Change timer request to alter behavior
00049   t.it_value.tv_sec         = sec;
00050   t.it_value.tv_nsec        = nsec;
00051   t.it_interval.tv_sec      = sec;
00052   t.it_interval.tv_nsec     = nsec;
00053 
00054   // Start the timer
00055   if ( timer_settime( timer_id, 0, &t, NULL ) == -1 )
00056   {
00057     MC_OnError( errno, Error, "Can't start timer." )
00058     perror( "Can't start timer\n" );
00059     exit( 1 );
00060   }
00061 }

virtual __inline void TimerPulse::stop   [inline, virtual]
 

Reimplemented from Basic_PThread.

Definition at line 57 of file TimerPulse.hpp.

00058   {
00059     set( 0, 0 );
00060   }

virtual void TimerPulse::tick int    signo [protected, pure virtual]
 

Reimplemented in TimerPulseTest.

Referenced by run().


Member Data Documentation

int TimerPulse::chid [protected]
 

Definition at line 75 of file TimerPulse.hpp.

struct _clockperiod TimerPulse::clkper [protected]
 

Definition at line 81 of file TimerPulse.hpp.

struct sigevent TimerPulse::event [protected]
 

Definition at line 80 of file TimerPulse.hpp.

struct _pulse TimerPulse::pulse [protected]
 

Definition at line 79 of file TimerPulse.hpp.

int TimerPulse::pulse_id [protected]
 

Definition at line 73 of file TimerPulse.hpp.

struct itimerspec TimerPulse::t [protected]
 

Definition at line 82 of file TimerPulse.hpp.

timer_t TimerPulse::timer_id [protected]
 

Definition at line 77 of file TimerPulse.hpp.

int TimerPulse::timer_pid [protected]
 

Definition at line 74 of file TimerPulse.hpp.


The documentation for this class was generated from the following files:
Generated on Sun Oct 14 18:50:17 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001