#include <node.hh>
Collaboration diagram for NODE:

|
||||||||||||||||||||
|
Definition at line 73 of file node.cc. 00075 {
00076 /* Indicate to user when the NODE is constructed. */
00077 rcs_print_debug (PRINT_NODE_CONSTRUCTORS,
00078 "%s NODE constructor called.\n", _name);
00079
00080 /* Set all the dynamically allocated pointers to NULL so the */
00081 /* so the destructors won't destroy them if they were never malloced, */
00082 /* and initialize some other NODE variables. */
00083 initialize_node_variables ();
00084
00085 /* Set valid to zero incase we need to return from constructor early. */
00086 valid = 0;
00087
00088 /* Store constructor parameters. */
00089 format_ptr = _format_ptr;
00090 config_file = _config_file;
00091 startup_cmd = _startup_cmd;
00092
00093 /* Store the _name parameter in a new place. */
00094 name_length = strlen (_name);
00095 name = (char *) malloc (name_length + 1);
00096 if (NULL == name)
00097 {
00098 rcs_print_error ("NODE constructor: Couldn`t malloc space for name.\n");
00099 return;
00100 }
00101 strcpy (name, _name);
00102
00103 /* Create an empty subordinate list. */
00104 sub_list = new RCS_LINKED_LIST;
00105 if (NULL == sub_list)
00106 {
00107 rcs_print_error ("%s: Couldn`t malloc space for list.\n", name);
00108 return;
00109 }
00110
00111 wm_in_list = new RCS_LINKED_LIST;
00112 if (NULL == wm_in_list)
00113 {
00114 rcs_print_error ("%s: Couldn`t malloc space for list.\n", name);
00115 return;
00116 }
00117
00118
00119 if (-1 == initialize_command_buffer ())
00120 {
00121 return;
00122 }
00123 if (config_flags & NODE_SAVE_LAST_COMMAND && NULL != cmd_in)
00124 {
00125 if (NULL != cmd_in->cms)
00126 {
00127 last_cmd_in_msg = (RCS_CMD_MSG *) malloc (cmd_in->cms->size);
00128 }
00129 }
00130
00131 if (config_flags & NODE_USE_STAT_BUFFER)
00132 {
00133 if (-1 == initialize_status_buffer ())
00134 {
00135 return;
00136 }
00137 }
00138
00139 if (config_flags & NODE_USE_WM_BUFFER)
00140 {
00141 if (-1 == initialize_world_model_buffer ())
00142 {
00143 return;
00144 }
00145 }
00146
00147 /* Set the valid flag to 1 since we made it this far. */
00148 valid = 1;
00149
00150 /* Spawn servers for the command, status, and/or wm buffers if config */
00151 /* file says to. */
00152 nml_start ();
00153
00154 /* Check if valid will set valid to zero if running this node could crash */
00155 /* the system. NODE::run() will do nothing if valid == 0 to avoid this. */
00156 check_if_valid ();
00157
00158 rcs_print_debug (PRINT_NODE_CONSTRUCTORS,
00159 "%s NODE constructor finished. (valid = %d)\n", _name,
00160 valid);
00161 }
|
|
|
Definition at line 457 of file node.cc. 00458 {
00459 /* Indicate to user when the node is deleted. */
00460 rcs_print_debug (PRINT_NODE_DESTRUCTORS, "%s: Destructor called.\n", name);
00461
00462 if (NULL != name)
00463 {
00464 free (name);
00465 name = NULL;
00466 }
00467 if (NULL != generic_status)
00468 {
00469 delete generic_status;
00470 generic_status = NULL;
00471 }
00472 if (NULL != sub_list)
00473 {
00474 delete sub_list;
00475 sub_list = NULL;
00476 }
00477 if (NULL != wm_in_list)
00478 {
00479 delete wm_in_list;
00480 wm_in_list = NULL;
00481 }
00482 if (NULL != last_cmd_in_msg)
00483 {
00484 free (last_cmd_in_msg);
00485 last_cmd_in_msg = NULL;
00486 }
00487 nml_cleanup ();
00488
00489 rcs_print_debug (PRINT_NODE_DESTRUCTORS, "Destructor finished.\n");
00490 }
|
|
|
Definition at line 173 of file node.cc. Referenced by NODE().
00174 {
00175
00176 /* Set all the dynamically allocated pointers to NULL so the */
00177 /* so the destructors won't destroy them if they were never malloced. */
00178 name = (char *) NULL;
00179 name_length = 0;
00180 cmd_in = (RCS_CMD_CHANNEL *) NULL;
00181 status_up = (RCS_STAT_CHANNEL *) NULL;
00182 wm_out = (RCS_WM_CHANNEL *) NULL;
00183
00184 sub_list = (RCS_LINKED_LIST *) NULL;
00185 generic_status = (RCS_GENERIC_STATUS *) NULL;
00186 cycle_timer = (RCS_TIMER *) NULL;
00187 wm_in_list = (RCS_LINKED_LIST *) NULL;
00188
00189 cmd_in_msg = (RCS_CMD_MSG *) NULL;
00190 last_cmd_in_msg = (RCS_CMD_MSG *) NULL;
00191
00192 /* Initialize some other NODE variables. */
00193 node_status = NODE_INIT;
00194 status_up_new = 0;
00195 cmd_in_new = 1;
00196 cmd_in_type_new = 1;
00197 config_flags = default_node_config_flags;
00198 wm_out_new = 0;
00199 oper_in_new = 0;
00200 state = 0;
00201 error_code = 0;
00202 num_of_subord = 0;
00203 all_subordinates_done = 0;
00204 cycle_count = 0;
00205 abort_flag = 0;
00206 min_cycle_time = 360000;
00207 max_cycle_time = 0;
00208 min_process_time = 360000;
00209 max_process_time = 0;
00210 return (0);
00211 }
|
|
|
Definition at line 222 of file node.cc. Referenced by NODE().
00223 {
00224
00225 if (NULL == cmd_in)
00226 {
00227 /* Compute the name of the command buffer. */
00228 char *command_buffer_name;
00229 command_buffer_name =
00230 (char *) malloc (name_length + RCS_COMMAND_SUFFIX_LENGTH + 1);
00231 if (NULL == command_buffer_name)
00232 {
00233 rcs_print_error ("%s: malloc failed.\n", name);
00234 return (-1);
00235 }
00236 strcpy (command_buffer_name, name);
00237 strcat (command_buffer_name, RCS_COMMAND_SUFFIX);
00238
00239 /* Create a channel to the command buffer. */
00240 cmd_in = new RCS_CMD_CHANNEL (format_ptr, command_buffer_name,
00241 name, config_file);
00242 free (command_buffer_name);
00243 command_buffer_name = (char *) NULL;
00244 }
00245
00246 /* Make sure cmd in object created. */
00247 if (NULL == cmd_in)
00248 {
00249 rcs_print_error ("%s: Couldn`t create cmd_in channel.\n", name);
00250 return -1;
00251 }
00252
00253 /* Check to see if cmd_in properly constructed. */
00254 if (!cmd_in->valid ())
00255 {
00256 rcs_print_error ("%s: Command buffer channel invalid. \n", name);
00257 return -1;
00258 }
00259
00260 /* Create the startup command if none was passed to constructor. */
00261 int startup_cmd_created = 0;
00262 if (NULL == startup_cmd)
00263 {
00264 startup_cmd = new RCS_GENERIC_CMD;
00265 startup_cmd_created = 1;
00266 }
00267 if (NULL == startup_cmd)
00268 {
00269 rcs_print_error ("%s: Can't create startup command.\n", name);
00270 return -1;
00271 }
00272 ((RCS_GENERIC_CMD *) startup_cmd)->gen_id = GENERIC_INIT;
00273
00274 /* Write the startup command into the command buffer. */
00275 if (-1 == cmd_in->write (startup_cmd))
00276 {
00277 rcs_print_error ("%s: Error on initial write to command buffer.\n",
00278 name);
00279 return -1;
00280 }
00281
00282 /* Read back the startup command. */
00283 if (-1 == cmd_in->read ())
00284 {
00285 rcs_print_error ("%s: Error on initial read of command buffer.\n",
00286 name);
00287 return -1;
00288 }
00289 cmd_in_msg = (RCS_CMD_MSG *) cmd_in->get_address ();
00290 cmd_in_type = cmd_in_msg->type;
00291
00292 /* Check to see if startup command matches command read back. */
00293 if (cmd_in_type != startup_cmd->type ||
00294 cmd_in_msg->serial_number != startup_cmd->serial_number)
00295 {
00296 rcs_print_error ("%s: Error initializing the command buffer. \n", name);
00297 return -1;
00298 }
00299
00300 if (startup_cmd_created)
00301 {
00302 delete startup_cmd;
00303 startup_cmd = (RCS_CMD_MSG *) NULL;
00304 }
00305
00306 /* Return "success". */
00307 return (0);
00308 }
|
|
|
Definition at line 319 of file node.cc. Referenced by NODE().
00320 {
00321 if (status_up == NULL)
00322 {
00323 /* Compute the name of the status buffer. */
00324 char *status_buffer_name;
00325 status_buffer_name =
00326 (char *) malloc (name_length + RCS_STATUS_SUFFIX_LENGTH + 1);
00327 if (NULL == status_buffer_name)
00328 {
00329 rcs_print_error ("%s: malloc error.\n", name);
00330 return (-1);
00331 }
00332 strcpy (status_buffer_name, name);
00333 strcat (status_buffer_name, RCS_STATUS_SUFFIX);
00334
00335 /* Create a new channel to the status buffer. */
00336 status_up = new RCS_STAT_CHANNEL (format_ptr, status_buffer_name,
00337 name, config_file);
00338
00339 /* Free the space for the status_buffer_name */
00340 free (status_buffer_name);
00341 status_buffer_name = (char *) NULL;
00342 }
00343
00344 /* Make sure status up object created. \n"); */
00345 if (NULL == status_up)
00346 {
00347 rcs_print_error ("%s: Couldn`t create status_up channel.\n", name);
00348 return (-1);
00349 }
00350
00351 /* Check to see if status_up buffer properly constructed. */
00352 if (!status_up->valid ())
00353 {
00354 rcs_print_error ("%s: status_up object not properly constructed.\n",
00355 name);
00356 return -1;
00357 }
00358
00359 /* Create initial status object. */
00360 generic_status = new RCS_GENERIC_STATUS;
00361 if (NULL == generic_status)
00362 {
00363 rcs_print_error ("%s: Can't create initial status message.\n", name);
00364 return -1;
00365 }
00366 status_up_msg = generic_status;
00367 status_up_msg->node_status = NODE_INIT;
00368
00369 /* Write initial status into status up buffer. */
00370 if (-1 == status_up->write (status_up_msg))
00371 {
00372 rcs_print_error ("%s: Error on initial write to status buffer.\n",
00373 name);
00374 return -1;
00375 }
00376
00377 /* Return "success". */
00378 return (0);
00379 }
|
|
|
Definition at line 390 of file node.cc. Referenced by NODE().
00391 {
00392 if (NULL == wm_out)
00393 {
00394 /* Compute world model out buffer name. */
00395 char *wm_buffer_name;
00396 wm_buffer_name =
00397 (char *) malloc (name_length + RCS_WM_SUFFIX_LENGTH + 1);
00398 if (NULL == wm_buffer_name)
00399 {
00400 rcs_print_error ("%s: malloc error.\n", name);
00401 }
00402 strcpy (wm_buffer_name, name);
00403 strcat (wm_buffer_name, RCS_WM_SUFFIX);
00404
00405 /* Create world model out channel. */
00406 wm_out =
00407 new RCS_WM_CHANNEL (format_ptr, wm_buffer_name, name, config_file);
00408
00409 /* Release the memory for the buffer name. */
00410 free (wm_buffer_name);
00411 wm_buffer_name = NULL;
00412 }
00413
00414 /* Check to see that wm_out created. */
00415 if (NULL == wm_out)
00416 {
00417 rcs_print_error ("%s: Can't create world model out channel. \n", name);
00418 return -1;
00419 }
00420
00421 /* Check to see if wm_out properly constructed. */
00422 if (!wm_out->valid ())
00423 {
00424 rcs_print_error
00425 ("%s: World model out channel improperly constructed.\n", name);
00426 return -1;
00427 }
00428
00429 /* Create initial world model message. */
00430 wm_out_msg = new RCS_GENERIC_WM;
00431 if (NULL == wm_out_msg)
00432 {
00433 rcs_print_error ("%s: Can't create initial world model message.\n",
00434 name);
00435 return (-1);
00436 }
00437
00438 if (-1 == wm_out->write (wm_out_msg))
00439 {
00440 rcs_print_error ("%s: Error on initial write to world model.\n", name);
00441 return -1;
00442 }
00443 delete wm_out_msg;
00444 wm_out_msg = NULL;
00445
00446 /* Return "success". */
00447 return (0);
00448 }
|
|
||||||||||||
|
Definition at line 1468 of file node.cc. Referenced by get_command_message(), and init().
01469 {
01470 node_status = new_status;
01471 if (NULL != new_msg)
01472 {
01473 new_msg->node_status = new_status;
01474 status_up_msg = new_msg;
01475 }
01476 else
01477 {
01478 generic_status->node_status = new_status;
01479 status_up_msg = generic_status;
01480 }
01481 status_up_new = 1;
01482 }
|
|
|
Definition at line 581 of file node.cc. Referenced by run().
00582 {
00583 double time_check;
00584 static old_cycle_count;
00585 if ((NULL != _timer) && (_timer != cycle_timer))
00586 {
00587 if (NULL != cycle_timer && cycle_timer_created)
00588 {
00589 delete cycle_timer;
00590 }
00591 cycle_timer = _timer;
00592 cycle_timer->sync ();
00593 cycle_timer_created = 0;
00594 }
00595
00596 if (NULL != cycle_timer)
00597 {
00598 cycle_time = cycle_timer->timeout;
00599 }
00600
00601 if (config_flags & NODE_CHECK_TIMES)
00602 {
00603 time_check = etime ();
00604 if (0 != cycle_count)
00605 {
00606 last_cycle_time = time_check - start_time;
00607 if (last_cycle_time < min_cycle_time)
00608 {
00609 min_cycle_time = last_cycle_time;
00610 }
00611 if (last_cycle_time > max_cycle_time)
00612 {
00613 max_cycle_time = last_cycle_time;
00614 }
00615 rcs_print_debug (PRINT_NODE_CYCLE_TIMES,
00616 "%s: cycle times (last, min, max) = (%lf, %lf, %lf)\n",
00617 name, last_cycle_time, min_cycle_time,
00618 max_cycle_time); \}
00619 start_time = time_check;
00620 }
00621 }
|
|
|
Definition at line 633 of file node.cc. Referenced by run().
00634 {
00635 if (config_flags & NODE_CHECK_TIMES)
00636 {
00637 finish_time = etime ();
00638 last_process_time = finish_time - start_time;
00639 if (last_process_time < min_process_time)
00640 {
00641 min_process_time = last_process_time;
00642 }
00643 if (last_process_time > max_process_time)
00644 {
00645 max_process_time = last_process_time;
00646 }
00647 rcs_print_debug (PRINT_NODE_PROCESS_TIMES,
00648 "%s: process times (last, min, max) = (%lf, %lf, %lf)\n",
00649 name, last_process_time, min_process_time,
00650 max_process_time);
00651 }
00652 if (NULL != cycle_timer)
00653 {
00654 int missed_cycles;
00655 missed_cycles = cycle_timer->wait ();
00656 if (missed_cycles > 0)
00657 {
00658 rcs_print_debug (PRINT_NODE_MISSED_CYCLES,
00659 "%s: missed %d cycles.\n", name, missed_cycles);
00660 }
00661 }
00662 return;
00663 }
|
|
|
Definition at line 814 of file node.cc. Referenced by task().
00815 {
00816 if (_time != cycle_time)
00817 {
00818 if (NULL != cycle_timer && cycle_timer_created)
00819 {
00820 delete cycle_timer;
00821 cycle_timer = NULL;
00822 }
00823 }
00824 if (NULL == cycle_timer)
00825 {
00826 cycle_timer = new RCS_TIMER (_time);
00827 cycle_time = _time;
00828 cycle_timer_created = 1;
00829 }
00830 run ();
00831 }
|
|
|
Definition at line 526 of file node.cc. 00527 {
00528 if (!valid)
00529 {
00530 rcs_print_error ("%s: NODE not properly constructed. \n", name);
00531 abort_flag = 1;
00532 return;
00533 }
00534
00535 check_timer (_timer);
00536
00537 cycle_count++;
00538 last_state = state;
00539 rcs_print_debug (PRINT_NODE_CYCLES, "%s: Cycles = %d\n", name, cycle_count);
00540
00541 if (-1 == cyclic_read ())
00542 {
00543 error_handler ();
00544 return;
00545 }
00546
00547 if (-1 == cyclic_process ())
00548 {
00549 error_handler ();
00550 return;
00551 }
00552
00553 if (-1 == cyclic_write ())
00554 {
00555 error_handler ();
00556 return;
00557 }
00558
00559 wait_for_timer (_timer);
00560
00561 if (abort_flag)
00562 {
00563 rcs_print_debug (PRINT_NODE_ABORT, "%s aborting!\n", name);
00564 return;
00565 }
00566 return;
00567 }
|
|
|
Definition at line 845 of file node.cc. 00846 {
00847 if (time != cycle_time)
00848 {
00849 if (NULL != cycle_timer)
00850 {
00851 delete cycle_timer;
00852 cycle_timer = NULL;
00853 }
00854 }
00855 if (NULL == cycle_timer)
00856 {
00857 cycle_timer = new RCS_TIMER (time);
00858 cycle_time = time;
00859 cycle_timer_created = 1;
00860 }
00861 while (!abort_flag)
00862 {
00863 run ();
00864 }
00865 }
|
|
|
Definition at line 878 of file node.cc. 00879 {
00880 if ((NULL != cycle_timer) && cycle_timer_created)
00881 {
00882 delete cycle_timer;
00883 cycle_timer = NULL;
00884 }
00885
00886 cycle_timer = timer;
00887 cycle_time = timer->timeout;
00888 cycle_timer_created = 0;
00889
00890 while (!abort_flag)
00891 {
00892 run ();
00893 }
00894 }
|
|
|
Definition at line 1393 of file node.cc. Referenced by run().
01394 {
01395 rcs_print_error ("%s: error occured in section %d.\n", name,
01396 current_section);
01397 rcs_print_error ("(error_code = %d)\n", error_code);
01398 switch (current_section)
01399 {
01400 case NODE_GET_COMMAND_MESSAGE:
01401 case NODE_GET_SUBORDINATES_STATUS:
01402 case NODE_GET_OI_REQUESTS:
01403 case NODE_READ_WORLD_MODEL_IN:
01404 case NODE_WRITE_WORLD_MODEL_OUT:
01405 case NODE_SEND_SUBORDINATES_COMMANDS:
01406 case NODE_SEND_STATUS_MESSAGE:
01407 valid = 0;
01408 break;
01409 default:
01410 break;
01411 }
01412 }
|
|
|
Definition at line 1204 of file node.cc. Referenced by init().
01205 {
01206 }
|
|
|
Definition at line 672 of file node.cc. Referenced by run().
00673 {
00674 if (-1 == get_command_message ()) /* Read in cmd_in_message. */
00675 {
00676 current_section = NODE_GET_COMMAND_MESSAGE;
00677 return -1;
00678 }
00679
00680 if (-1 == get_subordinates_status ()) /* Get status from subodinates. */
00681 {
00682 current_section = NODE_GET_SUBORDINATES_STATUS;
00683 return -1;;
00684 }
00685
00686 if (-1 == read_world_model_in ()) /* Read wm_in_list */
00687 {
00688 current_section = NODE_READ_WORLD_MODEL_IN;
00689 return -1;
00690 }
00691
00692 if (-1 == get_oi_requests ()) /* USER-DEFINED */
00693 {
00694 current_section = NODE_GET_OI_REQUESTS;
00695 return -1;
00696 }
00697
00698 if (-1 == read_sensors ()) /* USER-DEFINED */
00699 {
00700 current_section = NODE_READ_SENSORS;
00701 return -1;
00702 }
00703 return 0;
00704 }
|
|
|
Definition at line 713 of file node.cc. Referenced by run().
00714 {
00715 if (-1 == process_oi_requests ()) /* USER-DEFINED */
00716 {
00717 current_section = NODE_PROCESS_OI_REQUESTS;
00718 return -1;
00719 }
00720
00721 if (-1 == sensory_processor ()) /* USER-DEFINED */
00722 {
00723 current_section = NODE_SENSORY_PROCESSOR;
00724 return -1;
00725 }
00726
00727 if (-1 == world_modeler ()) /* USER-DEFINED */
00728 {
00729 current_section = NODE_WORLD_MODELER;
00730 return -1;
00731 }
00732
00733 if (-1 == command_independant_planner ()) /* USER-DEFINED */
00734 {
00735 current_section = NODE_COMMAND_INDEPENDANT_PLANNER;
00736 return -1;
00737 }
00738
00739 if (cmd_in_new || !(config_flags & NODE_EXECUTE_NEW_COMMANDS_ONLY))
00740 {
00741 if (-1 == handle_generic_commands ()) /* Call init or halt if recieved. */
00742 {
00743 current_section = NODE_HANDLE_GENERIC_COMMANDS;
00744 return -1;
00745 }
00746
00747 if (cmd_in_type == RCS_GENERIC_CMD_TYPE)
00748 {
00749 return 0;
00750 }
00751
00752 if (-1 == execute_command ()) /* USER-DEFINED */
00753 {
00754 current_section = NODE_EXECUTE_COMMAND;
00755 return -1;
00756 }
00757 }
00758 return 0;
00759 }
|
|
|
Definition at line 770 of file node.cc. Referenced by run().
00771 {
00772 if (-1 == output_to_actuators ()) /* USER-DEFINED */
00773 {
00774 current_section = NODE_OUTPUT_TO_ACTUATORS;
00775 return -1;
00776 }
00777
00778 if (-1 == send_oi_replies ()) /* USER-DEFINED */
00779 {
00780 current_section = NODE_SEND_OI_REPLIES;
00781 return -1;
00782 }
00783
00784 if (-1 == write_world_model_out ()) /* USER-DEFINED */
00785 {
00786 current_section = NODE_WRITE_WORLD_MODEL_OUT;
00787 return -1;
00788 }
00789
00790 if (-1 == send_subordinates_commands ()) /* Send Commands to Subs */
00791 {
00792 current_section = NODE_SEND_SUBORDINATES_COMMANDS;
00793 return -1;
00794 }
00795
00796 if (-1 == send_status_message ()) /* Write status_up for my supervisor. */
00797 {
00798 current_section = NODE_SEND_STATUS_MESSAGE;
00799 return -1;
00800 }
00801 return (0);
00802 }
|
|
|
Definition at line 914 of file node.cc. Referenced by cyclic_read().
00915 {
00916 NMLTYPE read_value;
00917 if (config_flags & NODE_SAVE_LAST_COMMAND && NULL != cmd_in_msg &&
00918 NULL != last_cmd_in_msg)
00919 {
00920 memcpy (last_cmd_in_msg, cmd_in_msg, cmd_in_msg->size);
00921 }
00922
00923 switch (read_value = cmd_in->read ())
00924 {
00925 case -1:
00926 rcs_print_error ("%s::get_command_message: Can`t read command in.\n",
00927 name);
00928 return (-1);
00929 case 0:
00930 cmd_in_new = 0;
00931 return (0);
00932 default:
00933 cmd_in_new = 1;
00934 cmd_in_msg = cmd_in->get_address ();
00935 last_state_of_last_command = state;
00936 if (config_flags & NODE_RESET_STATE_ON_NEW_COMMAND)
00937 {
00938 state = 0;
00939 }
00940 if (config_flags & NODE_SEND_EXECUTING_ON_NEW_COMMAND)
00941 {
00942 send_status (NODE_EXECUTING);
00943 }
00944 node_status = NODE_EXECUTING;
00945 cmd_in_type_new = (cmd_in_type != read_value);
00946 last_cmd_in_type = cmd_in_type;
00947 cmd_in_type = read_value;
00948 rcs_print_debug (PRINT_COMMANDS_RECIEVED,
00949 "%s: New cmd recieved. (type = %ld (0x%lX))\n", name,
00950 cmd_in_type, cmd_in_type);
00951 }
00952 return (0);
00953 }
|
|
|
Definition at line 964 of file node.cc. Referenced by cyclic_read().
00965 {
00966 NODE_LINK *node_link;
00967
00968 if (0 == num_of_subord)
00969 {
00970 all_subordinates_done = 1;
00971 return (0);
00972 }
00973
00974 if (NULL == sub_list)
00975 {
00976 return (-1);
00977 }
00978 all_subordinates_done = 1;
00979
00980 node_link = (NODE_LINK *) sub_list->get_head ();
00981 while (NULL != node_link)
00982 {
00983 if (-1 == node_link->get_status ())
00984 {
00985 rcs_print_error ("%s::get_subodinates_status:\n", name);
00986 rcs_print_error (" Error getting %s's status.\n",
00987 node_link->name);
00988 all_subordinates_done = 0;
00989 return (-1);
00990 }
00991 if (NODE_DONE != node_link->node_status)
00992 {
00993 all_subordinates_done = 0;
00994 }
00995 node_link = (NODE_LINK *) sub_list->get_next ();
00996 }
00997
00998 return (0);
00999 }
|
|
|
Definition at line 1010 of file node.cc. Referenced by cyclic_read().
01011 {
01012 return (0);
01013 }
|
|
|
Definition at line 1024 of file node.cc. Referenced by cyclic_read().
01025 {
01026 NODE_LINK *node_link;
01027 if (NULL == wm_in_list)
01028 {
01029 return (-1);
01030 }
01031
01032 node_link = (NODE_LINK *) wm_in_list->get_head ();
01033 while (NULL != node_link)
01034 {
01035 if (-1 == node_link->read_wm ())
01036 {
01037 rcs_print_error ("%s::read_world_model_in:\n", name);
01038 rcs_print_error (" Error getting %s's wm.\n", node_link->name);
01039 return (-1);
01040 }
01041 node_link = (NODE_LINK *) wm_in_list->get_next ();
01042 }
01043
01044 return (0);
01045 }
|
|
|
Definition at line 1070 of file node.cc. Referenced by cyclic_read().
01071 {
01072 return (0);
01073 }
|
|
|
Definition at line 1056 of file node.cc. Referenced by cyclic_process().
01057 {
01058 return (0);
01059 }
|
|
|
Definition at line 1084 of file node.cc. Referenced by cyclic_process().
01085 {
01086 return (0);
01087 }
|
|
|
Definition at line 1098 of file node.cc. Referenced by cyclic_process().
01099 {
01100 return (0);
01101 }
|
|
|
Definition at line 1112 of file node.cc. Referenced by cyclic_process().
01113 {
01114 return (0);
01115 }
|
|
|
Definition at line 1126 of file node.cc. Referenced by cyclic_process().
01127 {
01128 RCS_GENERIC_CMD *gen_cmd;
01129
01130
01131 if (config_flags & NODE_USE_GENERIC_COMMANDS)
01132 {
01133 /* Check if the last command was a generic commands. */
01134 if ((RCS_GENERIC_CMD_TYPE == cmd_in_type) && (NULL != sub_list))
01135 {
01136 gen_cmd = ((RCS_GENERIC_CMD *) cmd_in_msg);
01137
01138 /* Call the command function associated with this command. */
01139 switch (gen_cmd->gen_id)
01140 {
01141 case GENERIC_INIT:
01142 init ();
01143 break;
01144 case GENERIC_HALT:
01145 halt ();
01146 break;
01147 default:
01148 break;
01149 }
01150 }
01151 }
01152
01153 return (0);
01154 }
|
|
|
Definition at line 1166 of file node.cc. Referenced by halt(), and init().
01167 {
01168 NODE_LINK *node_link;
01169
01170 if (NULL != sub_list)
01171 {
01172 /* Send the generic command to all the subnodes. */
01173 node_link = (NODE_LINK *) sub_list->get_head ();
01174 while (NULL != node_link)
01175 {
01176 node_link->new_command (cmd);
01177 node_link = (NODE_LINK *) sub_list->get_next ();
01178 }
01179 }
01180 }
|
|
|
Definition at line 1191 of file node.cc. Referenced by cyclic_process().
01192 {
01193 return (0);
01194 }
|
|
|
Definition at line 1216 of file node.cc. Referenced by handle_generic_commands().
01217 {
01218 switch (state)
01219 {
01220 case 0:
01221 send_command_to_all (cmd_in_msg);
01222 initialize_state_variables ();
01223 state = 1;
01224 break;
01225 case 1:
01226 if (all_subordinates_done)
01227 {
01228 send_status (NODE_DONE);
01229 state = 2;
01230 }
01231 break;
01232 case 2:
01233 break;
01234 default:
01235 break;
01236 }
01237 }
|
|
|
Definition at line 1247 of file node.cc. Referenced by handle_generic_commands().
01248 {
01249 switch (state)
01250 {
01251 case 0:
01252 send_command_to_all (cmd_in_msg);
01253 abort_flag = 1;
01254 state = 1;
01255 break;
01256 case 1:
01257 break;
01258 default:
01259 break;
01260 }
01261 }
|
|
|
Definition at line 1272 of file node.cc. Referenced by cyclic_write().
01273 {
01274 return (0);
01275 }
|
|
|
Definition at line 1287 of file node.cc. Referenced by cyclic_write().
01288 {
01289 return (0);
01290 }
|
|
|
Definition at line 1301 of file node.cc. Referenced by cyclic_write().
01302 {
01303 if (wm_out_new)
01304 {
01305 wm_out_new = 0;
01306 if (NULL != wm_out_msg)
01307 {
01308 if (-1 == wm_out->write (wm_out_msg))
01309 {
01310 rcs_print_error ("%s: Can`t write to wm.", name);
01311 return (-1);
01312 }
01313 }
01314 rcs_print_debug (PRINT_NEW_WM, "%s: New wm. \n", name);
01315 }
01316 return (0);
01317 }
|
|
|
Definition at line 1328 of file node.cc. Referenced by cyclic_write().
01329 {
01330 NODE_LINK *node_link;
01331 if (NULL == sub_list)
01332 {
01333 return (-1);
01334 }
01335
01336 node_link = (NODE_LINK *) sub_list->get_head ();
01337 while (NULL != node_link)
01338 {
01339 if (-1 == node_link->send_command ())
01340 {
01341 rcs_print_error ("%s::send_subordinates_commands:\n", name);
01342 rcs_print_error (" Error sending %s a command.\n",
01343 node_link->name);
01344 return (-1);
01345 }
01346 node_link = (NODE_LINK *) sub_list->get_next ();
01347 }
01348 return (0);
01349 }
|
|
|
Definition at line 1360 of file node.cc. Referenced by cyclic_write().
01361 {
01362 if (status_up_new)
01363 {
01364 status_up_new = 0;
01365 if (NULL != status_up_msg)
01366 {
01367 status_up_msg->serial_number = cmd_in_msg->serial_number;
01368 if (-1 == status_up->write (status_up_msg))
01369 {
01370 rcs_print_error
01371 ("%s::send_status_up_message: Can`t send status.", name);
01372 return (-1);
01373 }
01374 }
01375 rcs_print_debug (PRINT_STATUS_SENT, "%s: New status sent. \n", name);
01376 rcs_print_debug (PRINT_STATUS_SENT,
01377 " (type = %ld (0x%lX), status = %d)\n",
01378 status_up_msg->type, status_up_msg->type,
01379 status_up_msg->node_status);
01380 }
01381 return (0);
01382 }
|
|
|
Definition at line 1426 of file node.cc. Referenced by NODE().
01427 {
01428 if (NULL == cmd_in)
01429 {
01430 valid = 0;
01431 return;
01432 }
01433 if (!cmd_in->valid ())
01434 {
01435 valid = 0;
01436 return;
01437 }
01438 if (config_flags & NODE_USE_STAT_BUFFER)
01439 {
01440 if (NULL == status_up)
01441 {
01442 valid = 0;
01443 return;
01444 }
01445 if (!status_up->valid ())
01446 {
01447 valid = 0;
01448 return;
01449 }
01450 }
01451 if (config_flags & NODE_USE_WM_BUFFER)
01452 {
01453 if (NULL == wm_out)
01454 {
01455 valid = 0;
01456 return;
01457 }
01458 if (!wm_out->valid ())
01459 {
01460 valid = 0;
01461 return;
01462 }
01463 }
01464 }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Definition at line 126 of file node.hh. Referenced by NODE_LINK::NODE_LINK(), and NODE_LINK::~NODE_LINK().
|
|
|
Definition at line 127 of file node.hh. Referenced by NODE_LINK::NODE_LINK(), and NODE_LINK::~NODE_LINK().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Definition at line 145 of file node.hh. Referenced by NODE_LINK::NODE_LINK().
|
|
|
|
|
|
Definition at line 147 of file node.hh. Referenced by NODE_LINK::NODE_LINK().
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Definition at line 181 of file node.hh. Referenced by NODE_LINK::NODE_LINK(), NODE_LINK::get_status(), NODE_LINK::read_wm(), and NODE_LINK::send_command().
|
|
|
|
|
|
Definition at line 183 of file node.hh. Referenced by NODE_LINK::send_command().
|
|
|
|
1.2.11.1 written by Dimitri van Heesch,
© 1997-2001