unsigned long cobalt_event_clear(cobalt_event_t *event, unsigned long bits) { struct cobalt_event_data *datp = get_event_data(event); return __sync_fetch_and_and(&datp->value, ~bits); }
static int wait_event (int which, int maxfd, fd_set *in, fd_set *out, fd_set *except, struct timeval *timeout) { int retvalue = 0; XVFBEVENT *event_data; event_data = get_event_data (__mg_rtos_xvfb_event_buffer); if (event_data == NULL) return -1; #ifdef _DEBUG fprintf (stderr, "got event: %d \n", event_data->event_type); #endif if (which & IAL_MOUSEEVENT && event_data->event_type == 0) { /* If data is present on the mouse, service it: */ mouse_pt.x = event_data->data.mouse.x; mouse_pt.y = event_data->data.mouse.y; mouse_buttons = event_data->data.mouse.button; retvalue |= IAL_MOUSEEVENT; } if (which & IAL_KEYEVENT && event_data->event_type == 1){ /* If data is present on the keyboard, service it: */ kbd_data = event_data->data.key; retvalue |= IAL_KEYEVENT; } return retvalue; }
int cobalt_event_inquire(cobalt_event_t *event, unsigned long *bits_r) { struct cobalt_event_data *datp = get_event_data(event); /* * We don't guarantee clean readings, this service is * primarily for debug purposes when the caller won't bet the * house on the values returned. */ __sync_synchronize(); *bits_r = datp->value; return datp->nwaiters; }
int cobalt_event_post(cobalt_event_t *event, unsigned long bits) { struct cobalt_event_data *datp = get_event_data(event); if (bits == 0) return 0; __sync_or_and_fetch(&datp->value, bits); /* full barrier. */ if ((datp->flags & COBALT_EVENT_PENDED) == 0) return 0; return XENOMAI_SKINCALL1(__cobalt_muxid, sc_cobalt_event_sync, event); }
int cobalt_event_init(cobalt_event_t *event, unsigned long value, int flags) { struct cobalt_event_data *datp; int ret; ret = XENOMAI_SKINCALL3(__cobalt_muxid, sc_cobalt_event_init, event, value, flags); if (ret) return ret; if ((flags & COBALT_EVENT_SHARED) == 0) { datp = (void *)cobalt_sem_heap[0] + event->u.data_offset; event->u.data = datp; } else datp = get_event_data(event); __cobalt_prefault(datp); return 0; }
int main(int argc, char *argv[]){ if ( argc < 3 ){ cout << "execute as ./rec_had_show <param file> <no. events>" <<endl; exit(1); } bool succ; double truP[3], recDir[3]; string param_file = argv[1]; int nEvent = atoi( argv[2] ); bhep::gstore data_store; bhep::sreader reader(data_store); reader.file(param_file); reader.group("DATA"); reader.read(); bhep::sreader reader2(data_store); reader2.file(param_file); reader2.group("ANA");reader2.read(); //EventManager2 *eman = new EventManager2(data_store,bhep::MUTE); //eman->initialize(); bhep::reader_root inDst; inDst.open( data_store.fetch_sstore("idst_file") ); shower_rec* recon = new shower_rec(); recon->initialize( data_store.fetch_dstore("tol"), data_store.fetch_dstore("res") ); TFile *output = new TFile("test_out.root", "recreate"); TTree *data = new TTree("t1","had. rec. info."); data->Branch("Success",&succ,"succ/B"); data->Branch("TrueMom",&truP,"truP[3]/D"); data->Branch("RecDirection",&recDir,"dir[3]/D"); measurement_vector meas; EVector vert(3,0); for (int i = 0;i < nEvent;i++){ //succ = eman->status(); //if ( !succ ) return -1; //bhep::event& e = eman->read(); bhep::event& e = inDst.read_event( i ); std::cout << "...got event " << i <<std::endl; get_event_data( e, meas, vert, truP ); if ( meas.size() != 0 ){ shower *had_show = new shower( meas, vert ); succ = recon->execute( *had_show ); recDir[0] = had_show->get_direction()[0]; recDir[1] = had_show->get_direction()[1]; recDir[2] = had_show->get_direction()[2]; data->Fill(); delete had_show; stc_tools::destroy( meas ); } } output->Write(); output->Close(); recon->finalize(); //eman->finalize(); inDst.close(); return 0; }