John Mitchell / lpc4088_displaymodule_GC500_2_5inch

Dependencies:   DMBasicGUI DMSupport

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers GCStateAndFaultCodes.cpp Source File

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