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 }