00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #include "rcs.hh"
00015 #include "emc.hh"
00016 #include "emcio.hh"
00017 #include "emcglb.h"
00018 #include "extintf.h"
00019 #include "iniaux.hh"
00020
00021
00022 #ifndef __GNUC__
00023 #ifndef __attribute__
00024 #define __attribute__(x)
00025 #endif
00026 #endif
00027
00028 static char __attribute__((unused)) ident[] = "$Id: minimillaux.cc,v 1.2 2000/10/27 20:34:42 terrylr Exp $";
00029
00030
00031
00032 static int estopState = 1;
00033
00034 static void estopOn()
00035 {
00036 estopState = 1;
00037 }
00038
00039 static void estopOff()
00040 {
00041 estopState = 0;
00042 }
00043
00044 static int isEstop()
00045 {
00046 return estopState;
00047 }
00048
00049
00050
00051 EMC_AUX_MODULE::EMC_AUX_MODULE()
00052 {
00053 setErrorLogChannel(new NML(nmlErrorFormat, "emcError", "aux", EMC_NMLFILE));
00054
00055 setCmdChannel(new RCS_CMD_CHANNEL(emcFormat, "auxCmd", "aux", EMC_NMLFILE));
00056
00057 setStatChannel(new RCS_STAT_CHANNEL(emcFormat, "auxSts", "aux", EMC_NMLFILE), &auxStatus);
00058 }
00059
00060
00061
00062 EMC_AUX_MODULE::~EMC_AUX_MODULE(void)
00063 {
00064 }
00065
00066 void EMC_AUX_MODULE::DECISION_PROCESS(void)
00067 {
00068 switch (commandInData->type)
00069 {
00070 case EMC_AUX_INIT_TYPE:
00071 INIT((EMC_AUX_INIT *) commandInData);
00072 break;
00073
00074 case EMC_AUX_HALT_TYPE:
00075 HALT((EMC_AUX_HALT *) commandInData);
00076 break;
00077
00078 case EMC_AUX_ABORT_TYPE:
00079 ABORT((EMC_AUX_ABORT *) commandInData);
00080 break;
00081
00082 case EMC_AUX_DIO_WRITE_TYPE:
00083 DIO_WRITE((EMC_AUX_DIO_WRITE *) commandInData);
00084 break;
00085
00086 case EMC_AUX_AIO_WRITE_TYPE:
00087 AIO_WRITE((EMC_AUX_AIO_WRITE *) commandInData);
00088 break;
00089
00090 case EMC_AUX_ESTOP_ON_TYPE:
00091 ESTOP_ON((EMC_AUX_ESTOP_ON *) commandInData);
00092 break;
00093
00094 case EMC_AUX_ESTOP_OFF_TYPE:
00095 ESTOP_OFF((EMC_AUX_ESTOP_OFF *) commandInData);
00096 break;
00097
00098 default:
00099 REPORT_ERROR(commandInData);
00100 break;
00101 }
00102 }
00103
00104 void EMC_AUX_MODULE::PRE_PROCESS(void)
00105 {
00106 }
00107
00108 void EMC_AUX_MODULE::POST_PROCESS(void)
00109 {
00110 int t;
00111 unsigned char in;
00112
00113 auxStatus.estopIn = auxStatus.estop = isEstop();
00114
00115
00116 for (t = 0; t < EMC_AUX_MAX_DIN; t++)
00117 {
00118 extDioByteRead(t, &in);
00119 auxStatus.din[t] = in;
00120 }
00121 for (t = 0; t < EMC_AUX_MAX_DOUT; t++)
00122 {
00123 extDioByteCheck(t, &in);
00124 auxStatus.dout[t] = in;
00125 }
00126
00127
00128 for (t = 0; t < EMC_AUX_MAX_AIN; t++)
00129 {
00130 extAioRead(t, &auxStatus.ain[t]);
00131 }
00132 for (t = 0; t < EMC_AUX_MAX_AOUT; t++)
00133 {
00134 extAioCheck(t, &auxStatus.aout[t]);
00135 }
00136 }
00137
00138 void EMC_AUX_MODULE::INIT(EMC_AUX_INIT *cmdIn)
00139 {
00140 if (STATE_MATCH(NEW_COMMAND))
00141 {
00142
00143 iniAux(EMC_INIFILE);
00144
00145
00146 estopOn();
00147
00148 status = RCS_DONE;
00149 stateNext(S0);
00150 }
00151 else if (STATE_MATCH(S0))
00152 {
00153
00154 }
00155 }
00156
00157 void EMC_AUX_MODULE::HALT(EMC_AUX_HALT *cmdIn)
00158 {
00159 if (STATE_MATCH(NEW_COMMAND))
00160 {
00161
00162 estopOn();
00163
00164 status = RCS_DONE;
00165 stateNext(S0);
00166 }
00167 else if (STATE_MATCH(S0))
00168 {
00169
00170 }
00171 }
00172
00173 void EMC_AUX_MODULE::ABORT(EMC_AUX_ABORT *cmdIn)
00174 {
00175 if (STATE_MATCH(NEW_COMMAND))
00176 {
00177
00178 status = RCS_DONE;
00179 stateNext(S0);
00180 }
00181 else if (STATE_MATCH(S0))
00182 {
00183
00184 }
00185 }
00186
00187 void EMC_AUX_MODULE::REPORT_ERROR(RCS_CMD_MSG *cmdIn)
00188 {
00189 if (STATE_MATCH(NEW_COMMAND))
00190 {
00191 rcs_print_error("EMC_AUX_MODULE: unknown command %d\n",
00192 cmdIn->type);
00193 status = RCS_ERROR;
00194 stateNext(S0);
00195 }
00196 else if (STATE_MATCH(S0))
00197 {
00198
00199 }
00200 }
00201
00202 void EMC_AUX_MODULE::ESTOP_ON(EMC_AUX_ESTOP_ON *cmdIn)
00203 {
00204 if (STATE_MATCH(NEW_COMMAND))
00205 {
00206
00207 estopOn();
00208
00209 status = RCS_DONE;
00210 stateNext(S0);
00211 }
00212 else if (STATE_MATCH(S0))
00213 {
00214
00215 }
00216 }
00217
00218 void EMC_AUX_MODULE::DIO_WRITE(EMC_AUX_DIO_WRITE *cmdIn)
00219 {
00220 if (STATE_MATCH(NEW_COMMAND))
00221 {
00222
00223 extDioWrite(cmdIn->index, cmdIn->value);
00224
00225 status = RCS_DONE;
00226 stateNext(S0);
00227 }
00228 else if (STATE_MATCH(S0))
00229 {
00230
00231 }
00232 }
00233
00234 void EMC_AUX_MODULE::AIO_WRITE(EMC_AUX_AIO_WRITE *cmdIn)
00235 {
00236 if (STATE_MATCH(NEW_COMMAND))
00237 {
00238
00239 extAioWrite(cmdIn->index, cmdIn->value);
00240
00241 status = RCS_DONE;
00242 stateNext(S0);
00243 }
00244 else if (STATE_MATCH(S0))
00245 {
00246
00247 }
00248 }
00249
00250 void EMC_AUX_MODULE::ESTOP_OFF(EMC_AUX_ESTOP_OFF *cmdIn)
00251 {
00252 if (STATE_MATCH(NEW_COMMAND))
00253 {
00254
00255 estopOff();
00256
00257 status = RCS_DONE;
00258 stateNext(S0);
00259 }
00260 else if (STATE_MATCH(S0))
00261 {
00262
00263 }
00264 }