Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DMBasicGUI DMSupport
GCStateAndFaultCodes.cpp
00001 #include "GCStateAndFaultCodes.h" 00002 00003 #include <string.h> 00004 00005 00006 /* 00007 Passed three 8-bit colour components - red, green and blue. 00008 Returns the corresponding 16-bit colour value (5 bits for red, 6 bits for green, 5 bits for blue). 00009 00010 Defined in main.cpp 00011 */ 00012 extern GuiConst_INTCOLOR SixteenBitColorValue(GuiConst_INT8U red, GuiConst_INT8U green, GuiConst_INT8U blue); 00013 00014 00015 /* 00016 Classes that match state or fault code integer values to the corresponding strings 00017 */ 00018 00019 GCStateOrFaultCode::GCStateOrFaultCode(int theCodeNumber, char* theCodeString) 00020 { 00021 codeNumber = theCodeNumber; 00022 00023 strcpy(codeString, theCodeString); 00024 } 00025 00026 int GCStateOrFaultCode::GetCodeNumber(void) 00027 { 00028 return codeNumber; 00029 } 00030 00031 void GCStateOrFaultCode::GetCodeString(char *buff) 00032 { 00033 strcpy(buff, codeString); 00034 } 00035 00036 // Static member function - provided so that we do not need to have 00037 // '#ifdef USE_VERSION_102' code everywhere 00038 GCStateSimplified GCStateOrFaultCode::GetSimplifiedGCState(int rawGCState) 00039 { 00040 #ifdef USE_VERSION_102 // #defined (or not) in GCStateAndFaultCodes.h 00041 if ((rawGCState >= GC_STATE_102_METHOD_RUNNING_MINIMUM) 00042 && (rawGCState <= GC_STATE_102_METHOD_RUNNING_MAXIMUM)) { 00043 return GC_RUNNING; 00044 } 00045 00046 // 'else'... 00047 switch(rawGCState) { 00048 case GC_STATE_102_METHOD_IDLE: 00049 return GC_IDLE; 00050 00051 case GC_STATE_102_METHOD_EQUILIBRATING: 00052 return GC_EQUILIBRATING; 00053 00054 case GC_STATE_102_METHOD_STABILISING: 00055 return GC_STABILISING; 00056 00057 case GC_STATE_102_METHOD_WAIT_READY_IO: 00058 return GC_WAIT_READY_IO; 00059 00060 case GC_STATE_102_METHOD_READY_TO_RUN: 00061 return GC_READY_TO_RUN; 00062 00063 case GC_STATE_102_METHOD_COOLING: 00064 return GC_COOLING; 00065 00066 default: // Assume faulted 00067 break; 00068 } 00069 #else 00070 if ((rawGCState >= GC_STATE_RUNNING_MINIMUM) 00071 && (rawGCState <= GC_STATE_RUNNING_MAXIMUM)) { 00072 return GC_RUNNING; 00073 } 00074 00075 00076 // 'else'... 00077 switch(rawGCState) { 00078 case GC_STATE_IDLE: 00079 return GC_IDLE; 00080 00081 case GC_STATE_EQUILIBRATING: 00082 return GC_EQUILIBRATING; 00083 00084 case GC_STATE_READY_TO_RUN: 00085 return GC_READY_TO_RUN; 00086 00087 case GC_STATE_READY_TO_PRE_RUN: 00088 case GC_STATE_PRE_RUNNING: 00089 return GC_STABILISING; 00090 00091 default: // Assume faulted 00092 break; 00093 } 00094 #endif 00095 return GC_FAULTED; 00096 } 00097 00098 /* 00099 Static member function to draw a message over the Run button location on the Home page, 00100 showing the GC state. 00101 00102 Args: the GC state, as a value in the "GCStateSimplified" enumeration 00103 00104 No return code 00105 */ 00106 void GCStateOrFaultCode::DrawSimplifiedStateMessageOnHomePageRunButton(GCStateSimplified simplifiedState) 00107 { 00108 switch (simplifiedState) { 00109 case GC_STABILISING: 00110 DrawTextOnRunButton("Stabilising", SixteenBitColorValue(0, 0xFF, 0), SixteenBitColorValue(0, 0, 0), GuiFont_Helv36Bold); 00111 break; 00112 case GC_EQUILIBRATING: 00113 DrawTextOnRunButton("Equilibrating", SixteenBitColorValue(255, 255, 50), SixteenBitColorValue(0, 0, 0), GuiFont_Helv36Bold); 00114 break; 00115 case GC_COOLING: 00116 DrawTextOnRunButton("Cooling", SixteenBitColorValue(0, 243, 255), SixteenBitColorValue(0, 0, 0), GuiFont_Helv36Bold); 00117 break; 00118 case GC_READY_TO_RUN: 00119 // DrawTextOnRunButton("Ready", SixteenBitColorValue(0, 0xFF, 0), SixteenBitColorValue(0, 0, 0), GuiFont_Helv36Bold); 00120 // Test - don't display "Ready" message on top of green, enabled, Run button 00121 break; 00122 case GC_IDLE: 00123 DrawTextOnRunButton("Idle", SixteenBitColorValue(192, 0, 0), SixteenBitColorValue(0, 0, 0), GuiFont_Helv36Bold); 00124 break; 00125 case GC_WAIT_READY_IO: 00126 DrawTextOnRunButton("Waiting IO", SixteenBitColorValue(192, 192, 0), SixteenBitColorValue(0, 0, 0), GuiFont_Helv36Bold); 00127 break; 00128 case GC_FAULTED: 00129 DrawTextOnRunButton("Faulted", SixteenBitColorValue(255, 0, 0), SixteenBitColorValue(0, 0, 0), GuiFont_Helv36Bold); 00130 break; 00131 default: 00132 // Some other state - do nothing 00133 break; 00134 } 00135 } 00136 00137 /* 00138 Draws the specified text on top of the Run button in the centre of the Home page, 00139 in the specified colour. 00140 00141 It is up to the caller to display the Home page before calling this function. 00142 00143 Args: pointer to the (null-terminated) text 00144 the foregound (i.e. text) colour 00145 the background colour 00146 the font ID (from the GuiFont_xxx list at the bottom of GuiFont.h) 00147 (caller may want to e.g. use a larger font for shorter strings) 00148 00149 No return code. 00150 */ 00151 void GCStateOrFaultCode::DrawTextOnRunButton(char* text, GuiConst_INTCOLOR foreColor, GuiConst_INTCOLOR backColor, GuiConst_INT16U fontNo) 00152 { 00153 const GuiConst_INT16S X = 400; // Approx centre of Run button 00154 const GuiConst_INT16S Y = 220; 00155 00156 GuiLib_DrawStr( 00157 X, //GuiConst_INT16S X, 00158 Y, //GuiConst_INT16S Y, 00159 fontNo, //GuiConst_INT16U FontNo, 00160 text, //GuiConst_TEXT PrefixLocate *String, 00161 GuiLib_ALIGN_CENTER, //GuiConst_INT8U Alignment, 00162 GuiLib_PS_ON, //GuiConst_INT8U PsWriting, 00163 GuiLib_TRANSPARENT_ON, //GuiConst_INT8U Transparent, 00164 GuiLib_UNDERLINE_OFF, //GuiConst_INT8U Underlining, 00165 0, //GuiConst_INT16S BackBoxSizeX, 00166 0, //GuiConst_INT16S BackBoxSizeY1, 00167 0, //GuiConst_INT16S BackBoxSizeY2, 00168 GuiLib_BBP_NONE, //GuiConst_INT8U BackBorderPixels, 00169 foreColor, //GuiConst_INTCOLOR ForeColor, 00170 backColor //GuiConst_INTCOLOR BackColor 00171 ); 00172 } 00173 00174 00175 /* 00176 Set up the arrays of state and fault codes. 00177 00178 The state and fault codes below are taken from the Nemesis 2 GC Control Protocol, 00179 version 1.0, dated 01/10/15. Note that the fault codes include those marked 'not used'. 00180 */ 00181 GCStateAndFaultCodes::GCStateAndFaultCodes() 00182 { 00183 // First - the state codes 00184 00185 #ifdef USE_VERSION_102 00186 stateCodeArray[0] = new GCStateOrFaultCode(GC_STATE_102_METHOD_IDLE, "Idle"); 00187 stateCodeArray[1] = new GCStateOrFaultCode(GC_STATE_102_METHOD_EQUILIBRATING, "Equilibrating"); 00188 stateCodeArray[2] = new GCStateOrFaultCode(GC_STATE_102_METHOD_STABILISING, "Stabilising"); 00189 stateCodeArray[3] = new GCStateOrFaultCode(GC_STATE_102_METHOD_WAIT_READY_IO, "Wait Ready IO"); 00190 stateCodeArray[4] = new GCStateOrFaultCode(GC_STATE_102_METHOD_READY_TO_RUN, "Ready to Run"); 00191 stateCodeArray[5] = new GCStateOrFaultCode(GC_STATE_102_METHOD_INIT_TIME, "Initial time"); 00192 00193 stateCodeArray[6] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_1, "Ramping segment 1"); 00194 stateCodeArray[7] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_2, "Ramping segment 2"); 00195 stateCodeArray[8] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_3, "Ramping segment 3"); 00196 stateCodeArray[9] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_4, "Ramping segment 4"); 00197 stateCodeArray[10] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_5, "Ramping segment 5"); 00198 stateCodeArray[11] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_6, "Ramping segment 6"); 00199 stateCodeArray[12] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_7, "Ramping segment 7"); 00200 stateCodeArray[13] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_8, "Ramping segment 8"); 00201 stateCodeArray[14] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_9, "Ramping segment 9"); 00202 stateCodeArray[15] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_10, "Ramping segment 10"); 00203 stateCodeArray[16] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_1, "Holding segment 1"); 00204 stateCodeArray[17] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_2, "Holding segment 2"); 00205 stateCodeArray[18] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_3, "Holding segment 3"); 00206 stateCodeArray[19] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_4, "Holding segment 4"); 00207 stateCodeArray[20] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_5, "Holding segment 5"); 00208 stateCodeArray[21] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_6, "Holding segment 6"); 00209 stateCodeArray[22] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_7, "Holding segment 7"); 00210 stateCodeArray[23] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_8, "Holding segment 8"); 00211 stateCodeArray[24] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_9, "Holding segment 9"); 00212 stateCodeArray[25] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_10, "Holding segment 10"); 00213 00214 stateCodeArray[26] = new GCStateOrFaultCode(GC_STATE_102_METHOD_COOLING, "Cooling"); 00215 stateCodeArray[27] = new GCStateOrFaultCode(GC_STATE_102_METHOD_FAULTED, "Faulted"); 00216 #else 00217 stateCodeArray[0] = new GCStateOrFaultCode(GC_STATE_IDLE, "Idle"); 00218 stateCodeArray[1] = new GCStateOrFaultCode(GC_STATE_NOT_READY, "Not Ready"); 00219 stateCodeArray[2] = new GCStateOrFaultCode(GC_STATE_EQUILIBRATING, "Equilibrating"); 00220 00221 stateCodeArray[3] = new GCStateOrFaultCode(GC_STATE_RUNNING_INITIAL_TIME, "Running initial time"); 00222 stateCodeArray[4] = new GCStateOrFaultCode(GC_STATE_RAMPING_SEGMENT_1, "Ramping segment 1"); 00223 stateCodeArray[5] = new GCStateOrFaultCode(GC_STATE_AT_UPPER_TEMP_SEGMENT_1, "At upper temp segment 1"); 00224 stateCodeArray[6] = new GCStateOrFaultCode(GC_STATE_RAMPING_SEGMENT_2, "Ramping segment 2"); 00225 stateCodeArray[7] = new GCStateOrFaultCode(GC_STATE_AT_UPPER_TEMP_SEGMENT_2, "At upper temp segment 2"); 00226 stateCodeArray[8] = new GCStateOrFaultCode(GC_STATE_RAMPING_SEGMENT_3, "Ramping segment 3"); 00227 stateCodeArray[9] = new GCStateOrFaultCode(GC_STATE_AT_UPPER_TEMP_SEGMENT_3, "At upper temp segment 3"); 00228 stateCodeArray[10] = new GCStateOrFaultCode(GC_STATE_RAMPING_SEGMENT_4, "Ramping segment 4"); 00229 stateCodeArray[11] = new GCStateOrFaultCode(GC_STATE_AT_UPPER_TEMP_SEGMENT_4, "At upper temp segment 4"); 00230 stateCodeArray[12] = new GCStateOrFaultCode(GC_STATE_RAMPING_SEGMENT_5, "Ramping segment 5"); 00231 stateCodeArray[13] = new GCStateOrFaultCode(GC_STATE_AT_UPPER_TEMP_SEGMENT_5, "At upper temp segment 5"); 00232 00233 stateCodeArray[14] = new GCStateOrFaultCode(GC_STATE_HOLDING, "Holding"); 00234 stateCodeArray[15] = new GCStateOrFaultCode(GC_STATE_ABORTING, "Aborting"); 00235 stateCodeArray[16] = new GCStateOrFaultCode(GC_STATE_COOLING, "Cooling"); 00236 00237 stateCodeArray[17] = new GCStateOrFaultCode(GC_STATE_READY_TO_PRE_RUN, "Ready to pre-run"); 00238 stateCodeArray[18] = new GCStateOrFaultCode(GC_STATE_PRE_RUNNING, "Pre-running"); 00239 stateCodeArray[19] = new GCStateOrFaultCode(GC_STATE_READY_TO_RUN, "Ready to run"); 00240 00241 stateCodeArray[20] = new GCStateOrFaultCode(GC_STATE_FAULTED, "Faulted"); 00242 #endif 00243 00244 // The simplified state codes 00245 simplifiedStateCodeArray[0] = new GCStateOrFaultCode(GC_IDLE, "Idle"); 00246 simplifiedStateCodeArray[1] = new GCStateOrFaultCode(GC_EQUILIBRATING, "Equilibrating"); 00247 simplifiedStateCodeArray[2] = new GCStateOrFaultCode(GC_STABILISING, "Stabilising"); 00248 simplifiedStateCodeArray[3] = new GCStateOrFaultCode(GC_WAIT_READY_IO, "Waiting for IO ready"); 00249 simplifiedStateCodeArray[4] = new GCStateOrFaultCode(GC_READY_TO_RUN, "Ready to run"); 00250 simplifiedStateCodeArray[5] = new GCStateOrFaultCode(GC_RUNNING, "Running"); 00251 simplifiedStateCodeArray[6] = new GCStateOrFaultCode(GC_COOLING, "Cooling"); 00252 simplifiedStateCodeArray[7] = new GCStateOrFaultCode(GC_FAULTED, "Faulted"); 00253 00254 // Now the fault codes - these only apply if the state is 99, "Faulted" 00255 00256 #ifdef USE_VERSION_102 00257 faultCodeArray[0] = new GCStateOrFaultCode(GC_FAULT_102_NO_ERROR, "No error"); 00258 faultCodeArray[1] = new GCStateOrFaultCode(GC_FAULT_102_EEPROM_FAILURE, "EEPROM failure"); 00259 faultCodeArray[2] = new GCStateOrFaultCode(GC_FAULT_102_DOOR_OPEN_ERROR, "Door open error"); 00260 00261 faultCodeArray[3] = new GCStateOrFaultCode(GC_FAULT_102_COL_PRT_OPEN_ERROR, "Column PRT open error"); 00262 faultCodeArray[4] = new GCStateOrFaultCode(GC_FAULT_102_COL_PRT_SHORT_ERROR, "Column PRT short error"); 00263 faultCodeArray[5] = new GCStateOrFaultCode(GC_FAULT_102_INJ_PRT_OPEN_ERROR, "Injector PRT open error"); 00264 faultCodeArray[6] = new GCStateOrFaultCode(GC_FAULT_102_INJ_PRT_SHORT_ERROR, "Injector PRT short error"); 00265 faultCodeArray[7] = new GCStateOrFaultCode(GC_FAULT_102_DET_PRT_OPEN_ERROR, "Detector PRT open error"); 00266 faultCodeArray[8] = new GCStateOrFaultCode(GC_FAULT_102_DET_PRT_SHORT_ERROR, "Detector PRT short error"); 00267 faultCodeArray[9] = new GCStateOrFaultCode(GC_FAULT_102_AUX_PRT_OPEN_ERROR, "Auxiliary PRT open error"); 00268 faultCodeArray[10] = new GCStateOrFaultCode(GC_FAULT_102_AUX_PRT_SHORT_ERROR, "Auxiliary PRT short error"); 00269 faultCodeArray[11] = new GCStateOrFaultCode(GC_FAULT_102_TEMP4_PRT_OPEN_ERROR, "Temp4 PRT open error"); 00270 faultCodeArray[12] = new GCStateOrFaultCode(GC_FAULT_102_TEMP4_PRT_SHORT_ERROR, "Temp4 PRT short error"); 00271 00272 faultCodeArray[13] = new GCStateOrFaultCode(GC_FAULT_102_VOLTAGE_REF_ERROR, "Voltage Ref error"); 00273 faultCodeArray[14] = new GCStateOrFaultCode(GC_FAULT_102_VSENSOR_ERROR, "Voltage sensor error"); 00274 00275 faultCodeArray[15] = new GCStateOrFaultCode(GC_FAULT_102_COL_OVER_TEMP_ERROR, "Column over temperature error"); 00276 faultCodeArray[16] = new GCStateOrFaultCode(GC_FAULT_102_INJ_OVER_TEMP_ERROR, "Injector over temperature error"); 00277 faultCodeArray[17] = new GCStateOrFaultCode(GC_FAULT_102_DET_OVER_TEMP_ERROR, "Detector over temperature error"); 00278 faultCodeArray[18] = new GCStateOrFaultCode(GC_FAULT_102_AUX_OVER_TEMP_ERROR, "Auxiliary over temperature error"); 00279 faultCodeArray[19] = new GCStateOrFaultCode(GC_FAULT_102_TEMP4_OVER_TEMP_ERROR, "Temp4 over temperature error"); 00280 00281 faultCodeArray[20] = new GCStateOrFaultCode(GC_FAULT_102_TC_K_SHORT_ERROR, "TC K short error"); 00282 00283 faultCodeArray[21] = new GCStateOrFaultCode(GC_FAULT_102_EPPC_NOTFITTED_ERROR, "EPPC not fitted error"); 00284 #else 00285 faultCodeArray[0] = new GCStateOrFaultCode(GC_FAULT_NO_ERROR, "No error"); 00286 faultCodeArray[1] = new GCStateOrFaultCode(GC_FAULT_EEPROM_FAILURE, "EEPROM failure"); 00287 faultCodeArray[2] = new GCStateOrFaultCode(GC_FAULT_DOOR_OPEN_ERROR, "Door open"); 00288 faultCodeArray[3] = new GCStateOrFaultCode(GC_FAULT_IRSENSOR_OPEN_ERROR, "IRsensor open"); 00289 faultCodeArray[4] = new GCStateOrFaultCode(GC_FAULT_IRSENSOR_SHORT_ERROR, "IRsensor short"); 00290 faultCodeArray[5] = new GCStateOrFaultCode(GC_FAULT_INJECTOR_PRT_OPEN_ERROR, "Injector PRT open"); 00291 faultCodeArray[6] = new GCStateOrFaultCode(GC_FAULT_INJECTOR_PRT_SHORT_ERROR, "Injector PRT short"); 00292 faultCodeArray[7] = new GCStateOrFaultCode(GC_FAULT_DETECTOR_PRT_OPEN_ERROR, "Detector PRT open"); 00293 faultCodeArray[8] = new GCStateOrFaultCode(GC_FAULT_DETECTOR_PRT_SHORT_ERROR, "Detector PRT short"); 00294 00295 faultCodeArray[9] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_INJECTOR_COUPLING_PRT_OPEN_ERROR, "(Not used): Injector coupling PRT open"); 00296 faultCodeArray[10] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_INJECTOR_COUPLING_PRT_SHORT_ERROR, "(Not used): Injector coupling PRT short"); 00297 faultCodeArray[11] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_DETECTOR_COUPLING_PRT_OPEN_ERROR, "(Not used): Detector coupling PRT open"); 00298 faultCodeArray[12] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_DETECTOR_COUPLING_PRT_SHORT_ERROR, "(Not used): Detector coupling PRT short"); 00299 00300 faultCodeArray[13] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_13, "(Fault code 13, not used)"); 00301 faultCodeArray[14] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_14, "(Fault code 14, not used)"); 00302 00303 faultCodeArray[15] = new GCStateOrFaultCode(GC_FAULT_VOLTAGE_REF_ERROR, "Voltage ref error"); 00304 faultCodeArray[16] = new GCStateOrFaultCode(GC_FAULT_VOLTAGE_SENSOR_ERROR, "Voltage sensor error"); 00305 00306 faultCodeArray[17] = new GCStateOrFaultCode(GC_FAULT_COLUMN_OVER_TEMP_ERROR, "Column over temp error"); 00307 faultCodeArray[18] = new GCStateOrFaultCode(GC_FAULT_INJECTOR_OVER_TEMP_ERROR, "Injector over temp error"); 00308 faultCodeArray[19] = new GCStateOrFaultCode(GC_FAULT_DETECTOR_OVER_TEMP_ERROR, "Detector over temp error"); 00309 00310 faultCodeArray[20] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_INJECTOR_COUPLING_OVER_TEMP_ERROR, "(Not used): Injector coupling over temp error"); 00311 faultCodeArray[21] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_DETECTOR_COUPLING_OVER_TEMP_ERROR, "(Not used): Detector coupling over temp error"); 00312 00313 faultCodeArray[22] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_22, "(Fault code 22, not used)"); 00314 00315 faultCodeArray[23] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_COLUMN_NOT_INIT, "(Not used): Column not init"); 00316 faultCodeArray[24] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_COLUMN_INSERT_FAILED, "(Not used): Column insert failed"); 00317 00318 faultCodeArray[25] = new GCStateOrFaultCode(GC_FAULT_I2C_NAK_ERROR, "I2C NAK error"); 00319 00320 faultCodeArray[26] = new GCStateOrFaultCode(GC_FAULT_TWI_TIMEOUT_ERROR, "TWI timeout error"); 00321 faultCodeArray[27] = new GCStateOrFaultCode(GC_FAULT_TWI_BUS_ERROR, "TWI bus error"); 00322 faultCodeArray[28] = new GCStateOrFaultCode(GC_FAULT_TWI_SLAW_NACK, "TWI SLAW NACK"); 00323 faultCodeArray[29] = new GCStateOrFaultCode(GC_FAULT_TWI_SLADATA_NACK, "TWI SLADATA NACK"); 00324 faultCodeArray[30] = new GCStateOrFaultCode(GC_FAULT_TWI_SLAR_NACK, "TWI SLAR NACK"); 00325 faultCodeArray[31] = new GCStateOrFaultCode(GC_FAULT_TWI_ARBITRATION_LOST, "TWI arbitration lost"); 00326 faultCodeArray[32] = new GCStateOrFaultCode(GC_FAULT_TWI_UNKNOWN_ERROR, "TWI unknown error"); 00327 00328 faultCodeArray[33] = new GCStateOrFaultCode(GC_FAULT_TWI2_TIMEOUT_ERROR, "TWI2 timeout error"); 00329 faultCodeArray[34] = new GCStateOrFaultCode(GC_FAULT_TWI2_BUS_ERROR, "TWI2 bus error"); 00330 faultCodeArray[35] = new GCStateOrFaultCode(GC_FAULT_TWI2_UNKNOWN_ERROR1, "TWI2 unknown error 1"); 00331 faultCodeArray[36] = new GCStateOrFaultCode(GC_FAULT_TWI2_UNKNOWN_ERROR2, "TWI2 unknown error 2"); 00332 #endif 00333 } 00334 00335 GCStateAndFaultCodes::~GCStateAndFaultCodes() 00336 { 00337 int i; 00338 00339 for (i = 0; i < STATE_CODE_COUNT; ++i) { 00340 delete stateCodeArray[i]; 00341 } 00342 00343 for (i = 0; i < FAULT_CODE_COUNT; ++i) { 00344 delete faultCodeArray[i]; 00345 } 00346 } 00347 00348 /* 00349 Given an integer state code, returns the associated descriptive string. 00350 00351 Args: state code 00352 pointer to the buffer to contain the associated string (if found) 00353 00354 Returns true if the state code is valid, false if not 00355 */ 00356 bool GCStateAndFaultCodes::GetStateCodeString(int stateCode, char *buff) 00357 { 00358 for (int i = 0; i < STATE_CODE_COUNT; ++i) { 00359 if(stateCodeArray[i]->GetCodeNumber() == stateCode) { 00360 stateCodeArray[i]->GetCodeString(buff); 00361 return true; 00362 } 00363 } 00364 00365 // 'else' - state code not found 00366 buff[0] = '\0'; 00367 return false; 00368 } 00369 00370 /* 00371 Given a simplified state value, returns the associated descriptive string. 00372 00373 Args: simplified state code 00374 pointer to the buffer to contain the associated string (if found) 00375 00376 Returns true if the state code is valid, false if not 00377 */ 00378 bool GCStateAndFaultCodes::GetSimplifiedStateCodeString(GCStateSimplified simplifiedStateCode, char *buff) 00379 { 00380 for (int i = 0; i < GC_STATE_SIMPLIFIED_COUNT; ++i) { 00381 if(simplifiedStateCodeArray[i]->GetCodeNumber() == simplifiedStateCode) { 00382 simplifiedStateCodeArray[i]->GetCodeString(buff); 00383 return true; 00384 } 00385 } 00386 00387 // 'else' - simplified state code not found 00388 buff[0] = '\0'; 00389 return false; 00390 } 00391 00392 00393 00394 /* 00395 Given an integer fault code, returns the associated descriptive string. 00396 00397 Args: state code 00398 pointer to the buffer to contain the associated string (if found) 00399 00400 Returns true if the fault code is valid, false if not 00401 */ 00402 bool GCStateAndFaultCodes::GetFaultCodeString(int faultCode, char *buff) 00403 { 00404 for (int i = 0; i < FAULT_CODE_COUNT; ++i) { 00405 if(faultCodeArray[i]->GetCodeNumber() == faultCode) { 00406 faultCodeArray[i]->GetCodeString(buff); 00407 return true; 00408 } 00409 } 00410 00411 // 'else' - fault code not found 00412 buff[0] = '\0'; 00413 return false; 00414 } 00415 00416 00417 00418
Generated on Tue Jul 19 2022 00:31:06 by
1.7.2