00001
00002
00003
00004 #include <j2k/nto/timer.hpp>
00005
00006 my_timer::my_timer( unsigned long val )
00007 {
00008
00009 chid = ChannelCreate( 0 );
00010 assert( chid!=-1);
00011 set_timer();
00012
00013 timer.it_value.tv_sec = 0;
00014 timer.it_value.tv_nsec =val;
00015 timer.it_interval.tv_sec = 0;
00016 timer.it_interval.tv_nsec = val;
00017 int err = timer_settime( timer_id, 0, &timer, NULL );
00018 MC_OnError( err, Error, "my_timer::timer_start ")
00019 clkper.nsec = 1000000;
00020 clkper.fract = 0;
00021
00022 }
00023
00024 my_timer::~my_timer(){
00025 }
00026
00027
00028
00029 void my_timer::set_timer(){
00030
00031 event.sigev_notify = SIGEV_PULSE;
00032 event.sigev_coid = ConnectAttach ( ND_LOCAL_NODE, 0, chid, 0, 0 );
00033 event.sigev_priority = getprio(0);
00034 event.sigev_code = 1023;
00035 event.sigev_value.sival_ptr = (void*)pulse_id;
00036 assert ( event.sigev_coid != -1 );
00037 int err = timer_create( CLOCK_REALTIME, &event, &timer_id );
00038 MC_OnError( err, Error, "Timer create" )
00039 }
00040
00041
00042 int my_timer::getChid(){
00043
00044 return chid;
00045 }
00046
00047
00048 void my_timer::WaitForPulse(){
00049 int err = MsgReceivePulse(chid ,&pulse , sizeof( pulse ), NULL );
00050 MC_OnError( err, Error,"my_timer::WaitForPulse()");
00051 }
00052
00053 void my_timer::run()
00054 {
00055 for(;;) {
00056 WaitForPulse();
00057 tick();
00058 }
00059 }
00060
00061