00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "rcs.hh"
00016 #include "emc.hh"
00017 #include "emcio.hh"
00018 #include "emcglb.h"
00019 #include "extintf.h"
00020 #include "inicool.hh"
00021
00022
00023
00024 #ifndef __GNUC__
00025 #ifndef __attribute__
00026 #define __attribute__(x)
00027 #endif
00028 #endif
00029
00030 static char __attribute__((unused)) ident[] = "$Id: bridgeportcool.cc,v 1.3 2001/06/29 20:27:29 wshackle Exp $";
00031
00032
00033
00034 static void mistOn()
00035 {
00036 extDioWrite(MIST_COOLANT_INDEX, MIST_COOLANT_POLARITY);
00037 }
00038
00039 static void mistOff()
00040 {
00041 extDioWrite(MIST_COOLANT_INDEX, ! MIST_COOLANT_POLARITY);
00042 }
00043
00044 static void floodOn()
00045 {
00046 extDioWrite(FLOOD_COOLANT_INDEX, FLOOD_COOLANT_POLARITY);
00047 }
00048
00049 static void floodOff()
00050 {
00051 extDioWrite(FLOOD_COOLANT_INDEX, ! FLOOD_COOLANT_POLARITY);
00052 }
00053
00054 static int isMistOn()
00055 {
00056 int m;
00057
00058 extDioCheck(MIST_COOLANT_INDEX, &m);
00059
00060 return m == MIST_COOLANT_POLARITY;
00061 }
00062
00063 static int isFloodOn()
00064 {
00065 int f;
00066
00067 extDioCheck(FLOOD_COOLANT_INDEX, &f);
00068
00069 return f == FLOOD_COOLANT_POLARITY;
00070 }
00071
00072
00073
00074 EMC_COOLANT_MODULE::EMC_COOLANT_MODULE()
00075 {
00076 setErrorLogChannel(new NML(nmlErrorFormat, "emcError", "coolant", EMC_NMLFILE));
00077
00078 setCmdChannel(new RCS_CMD_CHANNEL(emcFormat, "coolantCmd", "coolant", EMC_NMLFILE));
00079
00080 setStatChannel(new RCS_STAT_CHANNEL(emcFormat, "coolantSts", "coolant", EMC_NMLFILE), &coolantStatus);
00081 }
00082
00083
00084
00085 EMC_COOLANT_MODULE::~EMC_COOLANT_MODULE(void)
00086 {
00087 }
00088
00089 void EMC_COOLANT_MODULE::DECISION_PROCESS(void)
00090 {
00091 switch (commandInData->type)
00092 {
00093 case EMC_COOLANT_INIT_TYPE:
00094 INIT((EMC_COOLANT_INIT *) commandInData);
00095 break;
00096
00097 case EMC_COOLANT_HALT_TYPE:
00098 HALT((EMC_COOLANT_HALT *) commandInData);
00099 break;
00100
00101 case EMC_COOLANT_ABORT_TYPE:
00102 ABORT((EMC_COOLANT_ABORT *) commandInData);
00103 break;
00104
00105 case EMC_COOLANT_MIST_ON_TYPE:
00106 MIST_ON((EMC_COOLANT_MIST_ON *) commandInData);
00107 break;
00108
00109 case EMC_COOLANT_MIST_OFF_TYPE:
00110 MIST_OFF((EMC_COOLANT_MIST_OFF *) commandInData);
00111 break;
00112
00113 case EMC_COOLANT_FLOOD_ON_TYPE:
00114 FLOOD_ON((EMC_COOLANT_FLOOD_ON *) commandInData);
00115 break;
00116
00117 case EMC_COOLANT_FLOOD_OFF_TYPE:
00118 FLOOD_OFF((EMC_COOLANT_FLOOD_OFF *) commandInData);
00119 break;
00120
00121 default:
00122 REPORT_ERROR(commandInData);
00123 break;
00124 }
00125 }
00126
00127 void EMC_COOLANT_MODULE::PRE_PROCESS(void)
00128 {
00129 }
00130
00131 void EMC_COOLANT_MODULE::POST_PROCESS(void)
00132 {
00133
00134 coolantStatus.mist = isMistOn();
00135 coolantStatus.flood = isFloodOn();
00136 }
00137
00138 void EMC_COOLANT_MODULE::INIT(EMC_COOLANT_INIT *cmdIn)
00139 {
00140 if (STATE_MATCH(NEW_COMMAND))
00141 {
00142
00143 iniCoolant(EMC_INIFILE);
00144
00145
00146 mistOff();
00147 floodOff();
00148
00149 status = RCS_DONE;
00150 stateNext(S0);
00151 }
00152 else if (STATE_MATCH(S0))
00153 {
00154
00155 }
00156 }
00157
00158 void EMC_COOLANT_MODULE::HALT(EMC_COOLANT_HALT *cmdIn)
00159 {
00160 if (STATE_MATCH(NEW_COMMAND))
00161 {
00162
00163 mistOff();
00164 floodOff();
00165
00166 status = RCS_DONE;
00167 stateNext(S0);
00168 }
00169 else if (STATE_MATCH(S0))
00170 {
00171
00172 }
00173 }
00174
00175 void EMC_COOLANT_MODULE::ABORT(EMC_COOLANT_ABORT *cmdIn)
00176 {
00177 if (STATE_MATCH(NEW_COMMAND))
00178 {
00179
00180 mistOff();
00181 floodOff();
00182
00183 status = RCS_DONE;
00184 stateNext(S0);
00185 }
00186 else if (STATE_MATCH(S0))
00187 {
00188
00189 }
00190 }
00191
00192 void EMC_COOLANT_MODULE::REPORT_ERROR(RCS_CMD_MSG *cmdIn)
00193 {
00194 if (STATE_MATCH(NEW_COMMAND))
00195 {
00196 rcs_print_error("EMC_COOLANT_MODULE: unknown command %d\n",
00197 cmdIn->type);
00198 status = RCS_ERROR;
00199 stateNext(S0);
00200 }
00201 else if (STATE_MATCH(S0))
00202 {
00203
00204 }
00205 }
00206
00207 void EMC_COOLANT_MODULE::MIST_ON(EMC_COOLANT_MIST_ON *cmdIn)
00208 {
00209 if (STATE_MATCH(NEW_COMMAND))
00210 {
00211 mistOn();
00212
00213 status = RCS_DONE;
00214 stateNext(S0);
00215 }
00216 else if (STATE_MATCH(S0))
00217 {
00218
00219 }
00220 }
00221
00222 void EMC_COOLANT_MODULE::MIST_OFF(EMC_COOLANT_MIST_OFF *cmdIn)
00223 {
00224 if (STATE_MATCH(NEW_COMMAND))
00225 {
00226 mistOff();
00227
00228 status = RCS_DONE;
00229 stateNext(S0);
00230 }
00231 else if (STATE_MATCH(S0))
00232 {
00233
00234 }
00235 }
00236
00237 void EMC_COOLANT_MODULE::FLOOD_ON(EMC_COOLANT_FLOOD_ON *cmdIn)
00238 {
00239 if (STATE_MATCH(NEW_COMMAND))
00240 {
00241 floodOn();
00242
00243 status = RCS_DONE;
00244 stateNext(S0);
00245 }
00246 else if (STATE_MATCH(S0))
00247 {
00248
00249 }
00250 }
00251
00252 void EMC_COOLANT_MODULE::FLOOD_OFF(EMC_COOLANT_FLOOD_OFF *cmdIn)
00253 {
00254 if (STATE_MATCH(NEW_COMMAND))
00255 {
00256 floodOff();
00257
00258 status = RCS_DONE;
00259 stateNext(S0);
00260 }
00261 else if (STATE_MATCH(S0))
00262 {
00263
00264 }
00265 }