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 }