Doxygen Source Code Documentation
realtime.h File Reference
Go to the source code of this file.
Define Documentation
|
|
Definition at line 12 of file realtime.h. |
|
|
Definition at line 13 of file realtime.h. |
|
|
Definition at line 6 of file realtime.h. |
|
|
Definition at line 9 of file realtime.h. |
|
|
Definition at line 11 of file realtime.h. |
|
|
Definition at line 7 of file realtime.h. |
|
|
Definition at line 10 of file realtime.h. |
|
|
Definition at line 27 of file realtime.h. Referenced by ART_send_control_info(). |
|
|
Definition at line 21 of file realtime.h. Referenced by ART_send_end_of_run(). |
|
|
Definition at line 22 of file realtime.h. Referenced by ART_send_end_of_run(). |
|
|
Definition at line 24 of file realtime.h. Referenced by init_options(). |
|
|
Definition at line 18 of file realtime.h. Referenced by ART_send_control_info(), ART_send_end_of_run(), ART_send_volume(), find_first_volume(), and find_more_volumes(). |
|
|
Definition at line 15 of file realtime.h. Referenced by ART_init_AC_struct(), ART_open_afni_link(), ART_send_control_info(), ART_send_end_of_run(), ART_send_volume(), and hf_signal(). |
|
|
Definition at line 19 of file realtime.h. |
|
|
Definition at line 16 of file realtime.h. Referenced by ART_open_afni_link(), find_first_volume(), init_extras(), and init_options(). |
|
|
Definition at line 17 of file realtime.h. Referenced by ART_open_afni_link(), ART_send_control_info(), ART_send_end_of_run(), find_first_volume(), and find_more_volumes(). |
|
|
Definition at line 25 of file realtime.h. Referenced by ART_send_control_info(). |
|
|
Definition at line 28 of file realtime.h. |
Function Documentation
|
|
Definition at line 612 of file realtime.c. References ART_comm::ioc, and iochan_close(). Referenced by ART_send_end_of_run(), ART_send_volume(), and hf_signal().
00613 {
00614 static int been_here = 0; /* on an error, we may come back */
00615
00616 if ( been_here == 0 )
00617 {
00618 iochan_close(gAC.ioc);
00619 fprintf( stderr, "ART_exit: closing afni control channel\n" );
00620 been_here = 1;
00621 }
00622
00623 return;
00624 }
|
|
||||||||||||
|
Definition at line 631 of file realtime.c. References ART_comm::byte_order, ART_comm::host, ART_comm::ioc, ART_comm::ioc_name, ART_comm::mode, ART_comm::param, ART_comm::state, ART_comm::swap, ART_comm::use_tcp, and ART_comm::zorder. Referenced by find_first_volume().
00632 {
00633 if ( info )
00634 fputs( info, stdout );
00635
00636 if ( ac == NULL )
00637 {
00638 printf( "ART_idisp_ART_comm: ac == NULL\n" );
00639 return -1;
00640 }
00641
00642 printf( "ART_comm struct at %p :\n"
00643 " (state, mode) = (%d, %d)\n"
00644 " (use_tcp, swap) = (%d, %d)\n"
00645 " byte_order = %d\n"
00646 " zorder = %s\n"
00647 " host = %s\n"
00648 " ioc_name = %s\n"
00649 " (ioc, param) = (0x%p, 0x%p)\n",
00650 ac, ac->state, ac->mode, ac->use_tcp, ac->swap, ac->byte_order,
00651 CHECK_NULL_STR(ac->zorder), CHECK_NULL_STR(ac->host),
00652 CHECK_NULL_STR(ac->ioc_name), ac->ioc, ac->param );
00653
00654 return 0;
00655 }
|
|
|
Definition at line 339 of file realtime.c. References ART_STATE_NO_USE, ART_comm::host, ART_comm::ioc, ART_comm::ioc_name, ART_comm::mode, ART_comm::param, ART_comm::state, ART_comm::swap, ART_comm::use_tcp, and ART_comm::zorder. Referenced by init_options().
00340 {
00341 if ( ac == NULL )
00342 return -1;
00343
00344 ac->state = ART_STATE_NO_USE;
00345 ac->mode = 0;
00346 ac->use_tcp = 1;
00347 ac->swap = 0;
00348 ac->zorder = NULL;
00349 strcpy( ac->host, "localhost" );
00350 ac->ioc_name[0] = '\0';
00351 ac->ioc = NULL;
00352 ac->param = NULL;
00353
00354 return 0;
00355 }
|
|
||||||||||||||||||||
|
Definition at line 288 of file realtime.c. References ART_start_io(), ART_STATE_NO_USE, ART_STATE_TO_OPEN, ART_STATE_TO_SEND_CTRL, ART_comm::host, iochan_sleep(), ART_comm::mode, and ART_comm::state. Referenced by find_first_volume(), and init_extras().
00289 {
00290 int rv = 0, count;
00291
00292 if ( ac == NULL )
00293 return -1;
00294
00295 if ( debug > 1 )
00296 fprintf( stderr, "-- starting I/O to afni\n" );
00297
00298 if ( ac->state != ART_STATE_TO_OPEN )
00299 return 0;
00300
00301 for ( count = 0;
00302 (count < num_tries) && (rv == 0) && (ac->mode != AFNI_CONTINUE_MODE);
00303 count++ )
00304 {
00305 rv = ART_start_io( ac, debug );
00306 iochan_sleep(100); /* even on success, give afni time */
00307 }
00308
00309 if ( ac->mode == AFNI_CONTINUE_MODE ) /* afni comm is ready! */
00310 {
00311 if ( debug > 0 )
00312 fprintf( stderr, "++ comm link to afni established at <%s>\n",
00313 ac->host );
00314 ac->state = ART_STATE_TO_SEND_CTRL;
00315 }
00316 else if ( (rv == 0) && again )
00317 {
00318 if ( debug > 0 )
00319 {
00320 fprintf( stderr, "** failed to connect to afni at '%s' - "
00321 "will try again later\n", ac->host );
00322 }
00323 }
00324 else /* bad news - give up on afni communication */
00325 {
00326 fprintf( stderr, "** failed to connect to afni at '%s' - "
00327 "GIVING UP!\n", ac->host );
00328 ac->state = ART_STATE_NO_USE;
00329 }
00330
00331 return rv;
00332 }
|
|
||||||||||||||||
|
Definition at line 362 of file realtime.c. References opts_t::argc, opts_t::argv, ART_ADD_TO_BUF, ART_STATE_IN_USE, ART_STATE_NO_USE, ART_STATE_TO_SEND_CTRL, ART_TBUF_LEN, ART_comm::buf, ART_comm::byte_order, opts_t::drive_list, ge_header_info::dx, ge_header_info::dy, vol_t::first_file, param_t::ftype, vol_t::geh, vol_t::gex, IFM_IM_FTYPE_DICOM, IFM_IM_FTYPE_GEMS5, ART_comm::ioc, iochan_sendall(), iochan_sleep(), ART_comm::mode, vol_t::nim, opts_t::nt, string_list::nused, ge_header_info::nx, ge_header_info::ny, param_t::opts, orient_side_rai(), ge_header_info::orients, ART_comm::param, opts_t::rt_list, opts_t::sp, ART_comm::state, string_list::str, ART_comm::swap, ge_header_info::tr, v, ge_extras::xorg, ge_extras::yorg, vol_t::z_delta, vol_t::z_first, and ART_comm::zorder. Referenced by find_first_volume(), and find_more_volumes().
00363 {
00364 char tbuf[ART_TBUF_LEN]; /* temporary buffer for adding to buf */
00365 int rv;
00366
00367 if ( (ac == NULL) || (v == NULL) )
00368 {
00369 fprintf( stderr, "failure: ASCI called with invalid parameters\n" );
00370 ac->state = ART_STATE_NO_USE;
00371 return -1;
00372 }
00373
00374 if ( (ac->state != ART_STATE_TO_SEND_CTRL) ||
00375 (ac->mode != AFNI_CONTINUE_MODE) )
00376 return 0;
00377
00378 ac->buf[0] = '\0'; /* init message buffer to empty */
00379
00380 /* data organization style */
00381 strcpy( tbuf, "ACQUISITION_TYPE 2D+zt" );
00382 ART_ADD_TO_BUF( ac->buf, tbuf );
00383
00384 /* slice order */
00385 if ( ac->zorder )
00386 sprintf( tbuf, "ZORDER %s", ac->zorder);
00387 else
00388 strcpy( tbuf, "ZORDER seq" ); /* back to seq for now [v3.3 rickr] */
00389 ART_ADD_TO_BUF( ac->buf, tbuf );
00390
00391 /* timing pattern, this may also come from image files - rcr */
00392 if ( ac->param->opts.sp )
00393 {
00394 sprintf( tbuf, "TPATTERN %s", ac->param->opts.sp );
00395 ART_ADD_TO_BUF( ac->buf, tbuf );
00396 }
00397
00398 /* volume time step */
00399 sprintf( tbuf, "TR %f", v->geh.tr );
00400 ART_ADD_TO_BUF( ac->buf, tbuf );
00401
00402 /* volume dimensions */
00403 sprintf( tbuf, "XYFOV %f %f %f", fabs(v->geh.nx * v->geh.dx),
00404 fabs(v->geh.ny * v->geh.dy),
00405 fabs(v->nim * v->z_delta) );
00406 ART_ADD_TO_BUF( ac->buf, tbuf );
00407
00408 /* matrix sizes */
00409 sprintf( tbuf, "XYMATRIX %d %d %d", v->geh.nx, v->geh.ny, v->nim );
00410 ART_ADD_TO_BUF( ac->buf, tbuf );
00411
00412 /* data type - no mrilib.h, and don't duplicate MRI_TYPE_name list */
00413 strcpy( tbuf, "DATUM short" );
00414 ART_ADD_TO_BUF( ac->buf, tbuf );
00415
00416 /* axes orientations */
00417 sprintf( tbuf, "XYZAXES %c-%c %c-%c %c-%c",
00418 v->geh.orients[0], v->geh.orients[1],
00419 v->geh.orients[2], v->geh.orients[3],
00420 v->geh.orients[4], v->geh.orients[5] );
00421 ART_ADD_TO_BUF( ac->buf, tbuf );
00422
00423 /* volume offsets 2003 June 25 [rickr] */
00424 /* now, base on param->ftype 2005 May 16 [rickr] */
00425 if( ac->param->ftype == IFM_IM_FTYPE_GEMS5 )
00426 {
00427 char o0 = v->geh.orients[0]; /* for ease of typing later */
00428 char o2 = v->geh.orients[2];
00429 char o4 = v->geh.orients[4];
00430 int sx, sy, sz; /* directional sign values */
00431
00432 /* Note - the LPI directions are negatives in GEMS 5.x files, */
00433 /* so when one of those is the origin, negate it. */
00434
00435 /* rcr - this must rely on 0,0,0 being within the volume - fix it */
00436
00437 /* just note o_i directions in s_i */
00438 if ( o0 == 'L' || o0 == 'P' || o0 == 'I' ) sx = -1; else sx = 1;
00439 if ( o2 == 'L' || o2 == 'P' || o2 == 'I' ) sy = -1; else sy = 1;
00440 if ( o4 == 'L' || o4 == 'P' || o4 == 'I' ) sz = -1; else sz = 1;
00441
00442 /* note - we do not use a dz/2 offset, as we have slice locations */
00443 sprintf(tbuf,"XYZFIRST %f %f %f",
00444 sx * v->gex.xorg - v->geh.dx/2.0,
00445 sy * v->gex.yorg - v->geh.dy/2.0,
00446 sz * v->z_first );
00447
00448 ART_ADD_TO_BUF( ac->buf, tbuf );
00449 }
00450 else if( ac->param->ftype == IFM_IM_FTYPE_DICOM ) /* 16 May 2005 */
00451 {
00452 char o0 = v->geh.orients[0]; /* for ease of typing later */
00453 char o2 = v->geh.orients[2];
00454 char o4 = v->geh.orients[4];
00455
00456 /* if the files were DICOM, then the origin should be accurate */
00457 /* (so pick code based on sign, and remove sign) */
00458
00459 sprintf(tbuf,"XYZFIRST %f%c %f%c %f%c",
00460 fabs(v->gex.xorg), orient_side_rai(v->gex.xorg, o0),
00461 fabs(v->gex.yorg), orient_side_rai(v->gex.yorg, o2),
00462 fabs(v->z_first), orient_side_rai(v->z_first, o4));
00463 ART_ADD_TO_BUF( ac->buf, tbuf );
00464 }
00465
00466 /* BYTEORDER interface - send if swap flag is not set */
00467 if ( ! ac->swap )
00468 {
00469 sprintf( tbuf, "BYTEORDER %s", (ac->byte_order == LSB_FIRST) ?
00470 "LSB_FIRST" : "MSB_FIRST" );
00471 ART_ADD_TO_BUF( ac->buf, tbuf );
00472 }
00473
00474 /* DRIVE_AFNI interface - open afni windows */
00475 {
00476 char * graph_win; /* graph window to open */
00477 char * image_win; /* image window to open */
00478 char o4 = v->geh.orients[4]; /* note last axis */
00479 int nt = ac->param->opts.nt; /* note user defined nt */
00480
00481 if ( (o4 == 'R') || (o4 == 'r') || (o4 == 'L') || (o4 == 'l') )
00482 {
00483 graph_win = "sagittalgraph";
00484 image_win = "sagittalimage";
00485 }
00486 else if ( (o4 == 'I') || (o4 == 'i') || (o4 == 'S') || (o4 == 's') )
00487 {
00488 graph_win = "axialgraph";
00489 image_win = "axialimage";
00490 }
00491 else
00492 {
00493 graph_win = "coronalgraph";
00494 image_win = "coronalimage";
00495 }
00496
00497 /* open image and graph window - possibly adding pinnum */
00498 sprintf(tbuf, "DRIVE_AFNI OPEN_WINDOW %s\n"
00499 "DRIVE_AFNI OPEN_WINDOW %s", image_win, graph_win );
00500
00501 if ( nt > 0 )
00502 sprintf( tbuf+strlen(tbuf), " pinnum=%d", nt );
00503
00504 ART_ADD_TO_BUF( ac->buf, tbuf );
00505 }
00506
00507 /* pass along any user specified realtime command(s) v3.2 [rickr] */
00508 if ( ac->param->opts.rt_list.str )
00509 {
00510 string_list * list = &ac->param->opts.rt_list;
00511 char * cp;
00512 int ns;
00513
00514 for ( ns = 0; ns < list->nused; ns++ )
00515 {
00516 strncpy( tbuf, list->str[ns], 256 );
00517
00518 /* sneaky... change any "\n" pairs to '\n' */
00519 for ( cp = tbuf; cp < (tbuf + strlen(tbuf) - 1); cp++ )
00520 if ( cp[0] == '\\' && cp[1] == 'n' )
00521 {
00522 cp[0] = ' ';
00523 cp[1] = '\n';
00524 cp++;
00525 }
00526
00527 ART_ADD_TO_BUF( ac->buf, tbuf );
00528 }
00529 }
00530
00531 /* pass along any user specified drive command(s) */
00532 if ( ac->param->opts.drive_list.str )
00533 {
00534 string_list * list = &ac->param->opts.drive_list;
00535 char * cp;
00536 int ns;
00537
00538 for ( ns = 0; ns < list->nused; ns++ )
00539 {
00540 sprintf( tbuf, "DRIVE_AFNI %s", list->str[ns] );
00541
00542 /* sneaky... change any "\n" pairs to '\n' */
00543 for ( cp = tbuf; cp < (tbuf + strlen(tbuf) - 1); cp++ )
00544 if ( cp[0] == '\\' && cp[1] == 'n' )
00545 {
00546 cp[0] = ' ';
00547 cp[1] = '\n';
00548 cp++;
00549 }
00550
00551 ART_ADD_TO_BUF( ac->buf, tbuf );
00552 }
00553 }
00554
00555 /* NOTE interface - add a note to the dataset: the actual Imon command */
00556 {
00557 int count, len, tot_len;
00558
00559 /* form-feeds will be replaced with newlines in plug_realtime */
00560 sprintf( tbuf, "NOTE created remotely via real-time afni\f"
00561 " starting with file : '%s'\f"
00562 " creation command :",
00563 v->first_file );
00564 tot_len = strlen( tbuf );
00565
00566 for ( count = 0; count < ac->param->opts.argc; count++ )
00567 {
00568 len = strlen( ac->param->opts.argv[count] );
00569
00570 /* are we out of space? */
00571 if ( tot_len + len + 5 >= ART_TBUF_LEN )
00572 {
00573 strcat( tbuf, " ..." );
00574 break;
00575 }
00576
00577 strcat( tbuf, " " );
00578 strcat( tbuf, ac->param->opts.argv[count] );
00579 }
00580
00581 ART_ADD_TO_BUF( ac->buf, tbuf );
00582 }
00583
00584 if ( debug > 1 )
00585 fprintf( stderr, "++ dataset control info for afni:\n %s", ac->buf );
00586 if ( (debug > 0) && (strlen(ac->buf) > (ART_TBUF_LEN * 0.8)) )
00587 fprintf(stderr,"** warning: ac->buf len uses %d of %d bytes\n",
00588 (int)strlen(ac->buf), ART_TBUF_LEN);
00589
00590 rv = iochan_sendall( ac->ioc, ac->buf, strlen(ac->buf)+1 );
00591
00592 if ( rv < 0 )
00593 {
00594 fprintf( stderr, "** failure to send control info to afni\n" );
00595 ac->state = ART_STATE_NO_USE;
00596
00597 return -1;
00598 }
00599
00600 ac->state = ART_STATE_IN_USE; /* declaration of success */
00601
00602 iochan_sleep(50); /* give afni some time */
00603
00604 return 0;
00605 }
|
|
||||||||||||||||||||
|
A negative return is bad news * Definition at line 182 of file realtime.c. References ART_COMMAND_MARKER, ART_COMMAND_MARKER_LEN, ART_exit(), ART_STATE_IN_USE, ART_STATE_NO_USE, ART_STATE_TO_SEND_CTRL, ART_comm::host, im_store_t::im_size, param_t::im_store, ART_comm::ioc, iochan_sendall(), iochan_sleep(), ART_comm::param, ART_comm::state, and im_store_t::x_im. Referenced by find_more_volumes().
00183 {
00184 static int prev_run = -1;
00185 static int prev_seq = -1;
00186 char * image;
00187
00188 if ( ac->state != ART_STATE_IN_USE )
00189 return 0;
00190
00191 if ( (run != prev_run) || (seq != prev_seq) )
00192 {
00193 prev_run = run;
00194 prev_seq = seq;
00195
00196 image = (char *)ac->param->im_store.x_im;
00197
00198 if ( image == NULL )
00199 {
00200 fprintf( stderr, "** failure: x_im is NULL\n"
00201 " - closing afni connection\n" );
00202
00203 ac->state = ART_STATE_NO_USE;
00204 ART_exit();
00205 return -1;
00206 }
00207
00208 strcpy( image, ART_COMMAND_MARKER );
00209 image[ART_COMMAND_MARKER_LEN] = '\0';
00210
00211 if ( iochan_sendall( ac->ioc, image, ac->param->im_store.im_size ) < 0 )
00212 {
00213 fprintf( stderr, "** failed to transmit EOR to afni @ %s\n"
00214 " - closing afni connection\n", ac->host );
00215
00216 ac->state = ART_STATE_NO_USE;
00217 ART_exit();
00218 return -1;
00219 }
00220
00221 if ( debug > 1 )
00222 fprintf( stderr, "-- EOR: end of run signal (%d,%d)\n", run, seq );
00223
00224 /* we will need to send new control info to afni */
00225 ac->state = ART_STATE_TO_SEND_CTRL;
00226
00227 iochan_sleep(50); /* give afni some time */
00228
00229 return 1;
00230 }
00231
00232 return 0;
00233 }
|
|
||||||||||||||||
|
Definition at line 240 of file realtime.c. References ART_exit(), ART_STATE_IN_USE, ART_STATE_NO_USE, vol_t::fl_1, ART_comm::host, im_store_t::im_ary, im_store_t::im_size, param_t::im_store, ART_comm::ioc, iochan_sendall(), vol_t::nim, ART_comm::param, vol_t::run, vol_t::seq_num, ART_comm::state, ART_comm::swap, swap_2(), and v. Referenced by find_first_volume(), and find_more_volumes().
00241 {
00242 char * image;
00243 int slice, bytes;
00244
00245 if ( ac == NULL || v == NULL )
00246 {
00247 fprintf( stderr, "failure: ASV called with invalid arguments!\n" );
00248 return -1;
00249 }
00250
00251 if ( ac->state != ART_STATE_IN_USE )
00252 return 0;
00253
00254 /* send one complete volume */
00255
00256 bytes = ac->param->im_store.im_size;
00257
00258 for ( slice = 0; slice < v->nim; slice++ )
00259 {
00260 image = (char *)ac->param->im_store.im_ary[v->fl_1 + slice];
00261
00262 if ( ac->swap ) /* maybe we must swap the bytes first */
00263 swap_2( image, bytes/2 );
00264
00265 if ( iochan_sendall( ac->ioc, image, bytes ) < 0 )
00266 {
00267 fprintf( stderr, "** failed to transmit data to afni @ %s\n"
00268 " - closing afni connection\n", ac->host );
00269
00270 ac->state = ART_STATE_NO_USE;
00271 ART_exit();
00272 return -1;
00273 }
00274 }
00275
00276 if ( debug > 2 )
00277 fprintf( stderr, "++ sent images from volume (%d:%d) to host %s\n",
00278 v->run, v->seq_num, ac->host );
00279
00280 return 0;
00281 }
|
|
||||||||||||
|
Definition at line 46 of file realtime.c. References ART_comm::buf, ART_comm::host, ART_comm::ioc, ART_comm::ioc_name, iochan_clearcheck(), IOCHAN_CLOSENOW, iochan_init(), iochan_sendall(), iochan_sleep(), iochan_writecheck(), ART_comm::mode, and ART_comm::use_tcp. Referenced by ART_open_afni_link().
00048 {
00049 int ii ;
00050
00051 /***** Check for illegal conditions *****/
00052
00053 if( ac->mode <= 0 || ac->mode == AFNI_CONTINUE_MODE ) return 0 ;
00054
00055 /***** If we are at the first time in,
00056 try to open a control socket to talk to AFNI *****/
00057
00058 if( ac->mode == AFNI_OPEN_CONTROL_MODE ){
00059
00060 sprintf( ac->ioc_name , "tcp:%s:%d" , ac->host , AFNI_CONTROL_PORT ) ;
00061
00062 if( debug > 1 )
00063 fprintf(stderr,"Opening control channel %s to AFNI.\n",ac->ioc_name) ;
00064
00065 ac->ioc = iochan_init( ac->ioc_name , "w" ) ;
00066
00067 if( ac->ioc == NULL ){
00068 fprintf(stderr,"Can't open control channel %s to AFNI!\a\n",
00069 ac->ioc_name) ;
00070 return -1;
00071 } else {
00072 if( debug > 1 )
00073 fprintf(stderr,"Entering AFNI_WAIT_CONTROL_MODE.\n") ;
00074
00075 /* begin waiting for AFNI connection */
00076 ac->mode = AFNI_WAIT_CONTROL_MODE ;
00077 }
00078 }
00079
00080 /***** Check if the control socket is connected to AFNI *****/
00081
00082 if( ac->mode == AFNI_WAIT_CONTROL_MODE ){
00083
00084 ii = iochan_writecheck( ac->ioc , 1 ) ; /* Check; wait at most 1 msec */
00085
00086 /** if ii == 0, then the channel is still pending,
00087 so do nothing; otherwise, take some action. **/
00088
00089 if( ii < 0 ){
00090 fprintf(stderr,"Control channel to AFNI failed!\n") ;
00091 IOCHAN_CLOSENOW(ac->ioc) ;
00092 ac->mode = 0 ; /* disable AFNI */
00093 return -1;
00094 } else if( ii > 0 ){
00095 if( debug > 1 )
00096 {
00097 fprintf(stderr,"Control channel connected to AFNI.");
00098 fprintf(stderr," Entering AFNI_OPEN_DATA_MODE.\n") ;
00099 }
00100
00101 ac->mode = AFNI_OPEN_DATA_MODE ; /* prepare to send data to AFNI */
00102 }
00103 }
00104
00105 /***** Send the control information, which says
00106 how we will talk to AFNI in the future (shmem or TCP/IP),
00107 then close the control channel and open this new data channel *****/
00108
00109 if( ac->mode == AFNI_OPEN_DATA_MODE ){
00110
00111 /* decide name of data channel: it can be TCP/IP or shared memory */
00112
00113 if ( ac->use_tcp )
00114 sprintf(ac->ioc_name,"tcp:%s:%d",ac->host,AFNI_TCP_PORT) ;
00115
00116 strcpy(ac->buf, ac->ioc_name) ; /* tell AFNI where to read data */
00117
00118 if( debug > 1 )
00119 fprintf(stderr,"Sending control information to AFNI:\n%s\n",ac->buf) ;
00120
00121 ii = iochan_sendall( ac->ioc , ac->buf , strlen(ac->buf)+1 ) ;
00122
00123 /** A negative return is bad news **/
00124
00125 if( ii < 0 ){
00126 fprintf(stderr,"Transmission of control data to AFNI failed!\a\n") ;
00127 IOCHAN_CLOSENOW(ac->ioc) ;
00128 ac->mode = 0 ;
00129 return -1;
00130 } else {
00131 /* wait for control data to clear */
00132 while( ! iochan_clearcheck(ac->ioc,2) )
00133 iochan_sleep(2) ;
00134 IOCHAN_CLOSENOW(ac->ioc) ; /* close control channel */
00135
00136 if( debug > 1 )
00137 fprintf(stderr,"Opening data channel %s to AFNI.\n",ac->ioc_name) ;
00138
00139 ac->ioc = iochan_init( ac->ioc_name , "w" ) ; /* open data channel */
00140 if( ac->ioc == NULL ){
00141 fprintf(stderr,"Can't open data channel %s to AFNI!\a\n",
00142 ac->ioc_name) ;
00143 ac->mode = 0 ;
00144 return -1;
00145 } else {
00146 if( debug > 1 ) fprintf(stderr,"Entering AFNI_CATCHUP_MODE.\n") ;
00147 ac->mode = AFNI_CATCHUP_MODE ;
00148 }
00149 }
00150 }
00151
00152 /***** Wait for the data channel to be connected to AFNI,
00153 and then send any images that are reconstructed and ready to go *****/
00154
00155 if( ac->mode == AFNI_CATCHUP_MODE ){
00156
00157 ii = iochan_writecheck( ac->ioc , 1 ) ; /* wait at most 1 msec */
00158 if( ii < 0 ){
00159 fprintf(stderr,
00160 "AFNI data channel aborted before any data was sent!\a\n") ;
00161 IOCHAN_CLOSENOW(ac->ioc) ;
00162 ac->mode = 0 ;
00163 return -1;
00164 } else if( ii > 0 ){ /* can now send data to AFNI! */
00165 ac->mode = AFNI_CONTINUE_MODE ;
00166
00167 if ( debug > 1 )
00168 fprintf(stderr,"Entering AFNI_CONTINUE_MODE.\n");
00169 }
00170 }
00171
00172 return 0;
00173 }
|
|
||||||||||||
|
Definition at line 662 of file realtime.c.
00663 {
00664 unsigned char * addr = ptr;
00665 int count;
00666
00667 for ( count = 0; count < npairs; count++ )
00668 {
00669 addr[0] ^= addr[1]; addr[1] ^= addr[0]; addr[0] ^= addr[1];
00670 addr += 2;
00671 }
00672
00673 return 0;
00674 }
|