00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 
00038 
00039 
00040 
00041 
00042 
00043 
00044 
00045 
00046 
00047 
00048 
00049 
00050 
00051 
00052 
00053 #include <stdlib.h>             
00054 #include <signal.h>             
00055 #include <string.h>             
00056 
00057 #include "rcs.hh"               
00058 #include "emc.hh"               
00059 
00060 
00061 static RCS_CMD_CHANNEL * emcCommandBuffer = 0;
00062 static RCS_STAT_CHANNEL * emcStatusBuffer = 0;
00063 static NML * emcErrorBuffer = 0;
00064 
00065 
00066 static RCS_CMD_MSG * emcCommand = 0;
00067 
00068 
00069 EMC_STAT * emcStatus = 0;
00070 
00071 
00072 static char nmlFile[256] = "emc.nml";
00073 
00074 static int startup()
00075 {
00076   
00077   emcCommandBuffer = new RCS_CMD_CHANNEL(emcFormat, "emcCommand", "emc", nmlFile);
00078   if (! emcCommandBuffer->valid())
00079     {
00080       rcs_print_error("can't get emcCommand buffer\n");
00081       return -1;
00082     }
00083 
00084   
00085   emcCommand = emcCommandBuffer->get_address();
00086 
00087   
00088   emcStatusBuffer = new RCS_STAT_CHANNEL(emcFormat, "emcStatus", "emc", nmlFile);
00089   if (! emcStatusBuffer->valid())
00090     {
00091       rcs_print_error("can't get emcStatus buffer\n");
00092       return -1;
00093     }
00094 
00095   
00096   emcStatus = new EMC_STAT;
00097 
00098   
00099   emcErrorBuffer = new NML(nmlErrorFormat, "emcError", "emc", nmlFile);
00100   if (! emcErrorBuffer->valid())
00101     {
00102       rcs_print_error("can't get emcError buffer\n");
00103       return -1;
00104     }
00105 
00106   return 0;
00107 }
00108 
00109 
00110 static int shutdown()
00111 {
00112   
00113 
00114   if (0 != emcErrorBuffer)
00115     {
00116       delete emcErrorBuffer;
00117       emcErrorBuffer = 0;
00118     }
00119 
00120   if (0 != emcStatusBuffer)
00121     {
00122       delete emcStatusBuffer;
00123       emcStatusBuffer = 0;
00124       emcStatus = 0;
00125     }
00126 
00127   if (0 != emcCommandBuffer)
00128     {
00129       delete emcCommandBuffer;
00130       emcCommandBuffer = 0;
00131       emcCommand = 0;
00132     }
00133 
00134   if( 0 != emcStatus)
00135     {
00136       delete emcStatus;
00137       emcStatus = 0;
00138     }
00139 
00140   return 0;
00141 }
00142 
00143 
00144 static int done;
00145 static void quit(int sig)
00146 {
00147   
00148   done = 1;
00149 
00150   
00151   signal(SIGINT, quit);
00152 }
00153 
00154 
00155 
00156 
00157 
00158 
00159 
00160 
00161 
00162 
00163 
00164 
00165 int main(int argc, char *argv[])
00166 {
00167   NMLTYPE type;
00168 
00169   
00170   set_rcs_print_destination(RCS_PRINT_TO_STDOUT);
00171 
00172   
00173   rcs_version_printed = 1;
00174 
00175   if (argc > 1)
00176     {
00177       
00178       strcpy(nmlFile, argv[1]);
00179     }
00180 
00181   
00182   if (0 != startup())
00183     {
00184       exit(1);
00185     }
00186 
00187   
00188   emcStatus->command_type = 0;
00189   emcStatus->echo_serial_number = 0;
00190   emcStatus->status = RCS_DONE;
00191 
00192   
00193   done = 0;
00194   while (! done)
00195     {
00196       
00197       type = emcCommandBuffer->read();
00198 
00199       if (0 != type &&
00200           -1 != type)
00201         {
00202           
00203           emcStatus->command_type = emcCommand->type;
00204           emcStatus->echo_serial_number = emcCommand->serial_number;
00205           emcStatus->status = RCS_EXEC;
00206           emcStatusBuffer->write(emcStatus);
00207         }
00208 
00209       
00210       esleep(1.0);
00211 
00212       
00213       emcStatus->status = RCS_DONE;
00214       emcStatusBuffer->write(emcStatus);
00215     }
00216 
00217   if (0 != shutdown())
00218     {
00219       exit(1);
00220     }
00221 
00222   exit(0);
00223 }