Repository for import to local machine
Dependencies: DMBasicGUI DMSupport
Diff: GCStateAndFaultCodes.cpp
- Revision:
- 1:a5258871b33d
- Parent:
- 0:47c880c1463d
- Child:
- 2:6e94a7fd1e37
--- a/GCStateAndFaultCodes.cpp Wed Jan 13 13:17:05 2016 +0000 +++ b/GCStateAndFaultCodes.cpp Thu Jul 20 08:42:29 2017 +0000 @@ -23,91 +23,228 @@ strcpy(buff, codeString); } +// Static member function - provided so that we do not need to have +// '#ifdef USE_VERSION_102' code everywhere +GCStateSimplified GCStateOrFaultCode::GetSimplifiedGCState(int rawGCState) +{ +#ifdef USE_VERSION_102 // #defined (or not) in GCStateAndFaultCodes.h + if ((rawGCState >= GC_STATE_102_METHOD_RUNNING_MINIMUM) + && (rawGCState <= GC_STATE_102_METHOD_RUNNING_MAXIMUM)) { + return GC_RUNNING; + } + // 'else'... + switch(rawGCState) { + case GC_STATE_102_METHOD_IDLE: + return GC_IDLE; + + case GC_STATE_102_METHOD_EQUILIBRATING: + return GC_EQUILIBRATING; + + case GC_STATE_102_METHOD_STABILISING: + return GC_STABILISING; + + case GC_STATE_102_METHOD_WAIT_READY_IO: + return GC_WAIT_READY_IO; + + case GC_STATE_102_METHOD_READY_TO_RUN: + return GC_READY_TO_RUN; + + case GC_STATE_102_METHOD_COOLING: + return GC_COOLING; + + default: // Assume faulted + break; + } +#else + if ((rawGCState >= GC_STATE_RUNNING_MINIMUM) + && (rawGCState <= GC_STATE_RUNNING_MAXIMUM)) { + return GC_RUNNING; + } + + + // 'else'... + switch(rawGCState) { + case GC_STATE_IDLE: + return GC_IDLE; + + case GC_STATE_EQUILIBRATING: + return GC_EQUILIBRATING; + + case GC_STATE_READY_TO_RUN: + return GC_READY_TO_RUN; + + case GC_STATE_READY_TO_PRE_RUN: + case GC_STATE_PRE_RUNNING: + return GC_STABILISING; + + default: // Assume faulted + break; + } +#endif + return GC_FAULTED; +} + + + +/* + Set up the arrays of state and fault codes. + + The state and fault codes below are taken from the Nemesis 2 GC Control Protocol, + version 1.0, dated 01/10/15. Note that the fault codes include those marked 'not used'. +*/ GCStateAndFaultCodes::GCStateAndFaultCodes() { - // The state and fault codes below are taken from the Nemesis 2 GC Control Protocol, - // version 1.0, dated 01/10/15. Note that the fault codes include those marked 'not used'. - - // First - the state codes - - stateCodeArray[0] = new GCStateOrFaultCode(0, "Idle"); - stateCodeArray[1] = new GCStateOrFaultCode(1, "Not Ready"); - stateCodeArray[2] = new GCStateOrFaultCode(2, "Equilibrating"); - stateCodeArray[3] = new GCStateOrFaultCode(4, "Running initial time"); - stateCodeArray[4] = new GCStateOrFaultCode(5, "Ramping segment 1"); - stateCodeArray[5] = new GCStateOrFaultCode(6, "At upper temp segment 1"); - stateCodeArray[6] = new GCStateOrFaultCode(7, "Ramping segment 2"); - stateCodeArray[7] = new GCStateOrFaultCode(8, "At upper temp segment 2"); - stateCodeArray[8] = new GCStateOrFaultCode(9, "Ramping segment 3"); - stateCodeArray[9] = new GCStateOrFaultCode(10, "At upper temp segment 3"); - stateCodeArray[10] = new GCStateOrFaultCode(11, "Ramping segment 4"); - stateCodeArray[11] = new GCStateOrFaultCode(12, "At upper temp segment 4"); - stateCodeArray[12] = new GCStateOrFaultCode(13, "Ramping segment 5"); - stateCodeArray[13] = new GCStateOrFaultCode(14, "At upper temp segment 5"); +#ifdef USE_VERSION_102 + stateCodeArray[0] = new GCStateOrFaultCode(GC_STATE_102_METHOD_IDLE, "Idle"); + stateCodeArray[1] = new GCStateOrFaultCode(GC_STATE_102_METHOD_EQUILIBRATING, "Equilibrating"); + stateCodeArray[2] = new GCStateOrFaultCode(GC_STATE_102_METHOD_STABILISING, "Stabilising"); + stateCodeArray[3] = new GCStateOrFaultCode(GC_STATE_102_METHOD_WAIT_READY_IO, "Wait Ready IO"); + stateCodeArray[4] = new GCStateOrFaultCode(GC_STATE_102_METHOD_READY_TO_RUN, "Ready to Run"); + stateCodeArray[5] = new GCStateOrFaultCode(GC_STATE_102_METHOD_INIT_TIME, "Initial time"); + + stateCodeArray[6] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_1, "Ramping segment 1"); + stateCodeArray[7] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_2, "Ramping segment 2"); + stateCodeArray[8] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_3, "Ramping segment 3"); + stateCodeArray[9] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_4, "Ramping segment 4"); + stateCodeArray[10] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_5, "Ramping segment 5"); + stateCodeArray[11] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_6, "Ramping segment 6"); + stateCodeArray[12] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_7, "Ramping segment 7"); + stateCodeArray[13] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_8, "Ramping segment 8"); + stateCodeArray[14] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_9, "Ramping segment 9"); + stateCodeArray[15] = new GCStateOrFaultCode(GC_STATE_102_METHOD_RAMPING_10, "Ramping segment 10"); + stateCodeArray[16] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_1, "Holding segment 1"); + stateCodeArray[17] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_2, "Holding segment 2"); + stateCodeArray[18] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_3, "Holding segment 3"); + stateCodeArray[19] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_4, "Holding segment 4"); + stateCodeArray[20] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_5, "Holding segment 5"); + stateCodeArray[21] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_6, "Holding segment 6"); + stateCodeArray[22] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_7, "Holding segment 7"); + stateCodeArray[23] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_8, "Holding segment 8"); + stateCodeArray[24] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_9, "Holding segment 9"); + stateCodeArray[25] = new GCStateOrFaultCode(GC_STATE_102_METHOD_HOLDING_10, "Holding segment 10"); + + stateCodeArray[26] = new GCStateOrFaultCode(GC_STATE_102_METHOD_COOLING, "Cooling"); + stateCodeArray[27] = new GCStateOrFaultCode(GC_STATE_102_METHOD_FAULTED, "Faulted"); +#else + stateCodeArray[0] = new GCStateOrFaultCode(GC_STATE_IDLE, "Idle"); + stateCodeArray[1] = new GCStateOrFaultCode(GC_STATE_NOT_READY, "Not Ready"); + stateCodeArray[2] = new GCStateOrFaultCode(GC_STATE_EQUILIBRATING, "Equilibrating"); + + stateCodeArray[3] = new GCStateOrFaultCode(GC_STATE_RUNNING_INITIAL_TIME, "Running initial time"); + stateCodeArray[4] = new GCStateOrFaultCode(GC_STATE_RAMPING_SEGMENT_1, "Ramping segment 1"); + stateCodeArray[5] = new GCStateOrFaultCode(GC_STATE_AT_UPPER_TEMP_SEGMENT_1, "At upper temp segment 1"); + stateCodeArray[6] = new GCStateOrFaultCode(GC_STATE_RAMPING_SEGMENT_2, "Ramping segment 2"); + stateCodeArray[7] = new GCStateOrFaultCode(GC_STATE_AT_UPPER_TEMP_SEGMENT_2, "At upper temp segment 2"); + stateCodeArray[8] = new GCStateOrFaultCode(GC_STATE_RAMPING_SEGMENT_3, "Ramping segment 3"); + stateCodeArray[9] = new GCStateOrFaultCode(GC_STATE_AT_UPPER_TEMP_SEGMENT_3, "At upper temp segment 3"); + stateCodeArray[10] = new GCStateOrFaultCode(GC_STATE_RAMPING_SEGMENT_4, "Ramping segment 4"); + stateCodeArray[11] = new GCStateOrFaultCode(GC_STATE_AT_UPPER_TEMP_SEGMENT_4, "At upper temp segment 4"); + stateCodeArray[12] = new GCStateOrFaultCode(GC_STATE_RAMPING_SEGMENT_5, "Ramping segment 5"); + stateCodeArray[13] = new GCStateOrFaultCode(GC_STATE_AT_UPPER_TEMP_SEGMENT_5, "At upper temp segment 5"); - stateCodeArray[14] = new GCStateOrFaultCode(15, "Holding"); - stateCodeArray[15] = new GCStateOrFaultCode(16, "Aborting"); - stateCodeArray[16] = new GCStateOrFaultCode(17, "Cooling"); + stateCodeArray[14] = new GCStateOrFaultCode(GC_STATE_HOLDING, "Holding"); + stateCodeArray[15] = new GCStateOrFaultCode(GC_STATE_ABORTING, "Aborting"); + stateCodeArray[16] = new GCStateOrFaultCode(GC_STATE_COOLING, "Cooling"); + + stateCodeArray[17] = new GCStateOrFaultCode(GC_STATE_READY_TO_PRE_RUN, "Ready to pre-run"); + stateCodeArray[18] = new GCStateOrFaultCode(GC_STATE_PRE_RUNNING, "Pre-running"); + stateCodeArray[19] = new GCStateOrFaultCode(GC_STATE_READY_TO_RUN, "Ready to run"); - stateCodeArray[17] = new GCStateOrFaultCode(31, "Ready to pre-run"); - stateCodeArray[18] = new GCStateOrFaultCode(32, "Pre-running"); - stateCodeArray[19] = new GCStateOrFaultCode(33, "Ready to run"); + stateCodeArray[20] = new GCStateOrFaultCode(GC_STATE_FAULTED, "Faulted"); +#endif + + // The simplified state codes + simplifiedStateCodeArray[0] = new GCStateOrFaultCode(GC_IDLE, "Idle"); + simplifiedStateCodeArray[1] = new GCStateOrFaultCode(GC_EQUILIBRATING, "Equilibrating"); + simplifiedStateCodeArray[2] = new GCStateOrFaultCode(GC_STABILISING, "Stabilising"); + simplifiedStateCodeArray[3] = new GCStateOrFaultCode(GC_WAIT_READY_IO, "Waiting for IO ready"); + simplifiedStateCodeArray[4] = new GCStateOrFaultCode(GC_READY_TO_RUN, "Ready to run"); + simplifiedStateCodeArray[5] = new GCStateOrFaultCode(GC_RUNNING, "Running"); + simplifiedStateCodeArray[6] = new GCStateOrFaultCode(GC_COOLING, "Cooling"); + simplifiedStateCodeArray[7] = new GCStateOrFaultCode(GC_FAULTED, "Faulted"); - stateCodeArray[20] = new GCStateOrFaultCode(99, "Faulted"); - - // Now the fault codes - these only apply if the state is 99, "Faulted" - faultCodeArray[0] = new GCStateOrFaultCode(0, "No error"); - faultCodeArray[1] = new GCStateOrFaultCode(1, "EEPROM failure"); - faultCodeArray[2] = new GCStateOrFaultCode(2, "Door open"); - faultCodeArray[3] = new GCStateOrFaultCode(3, "IRsensor open"); - faultCodeArray[4] = new GCStateOrFaultCode(4, "IRsensor short"); - faultCodeArray[5] = new GCStateOrFaultCode(5, "Injector PRT open"); - faultCodeArray[6] = new GCStateOrFaultCode(6, "Injector PRT short"); - faultCodeArray[7] = new GCStateOrFaultCode(7, "Detector PRT open"); - faultCodeArray[8] = new GCStateOrFaultCode(8, "Detector PRT short"); - - faultCodeArray[9] = new GCStateOrFaultCode(9, "(Not used): Injector coupling PRT open"); - faultCodeArray[10] = new GCStateOrFaultCode(10, "(Not used): Injector coupling PRT short"); - faultCodeArray[11] = new GCStateOrFaultCode(11, "(Not used): Detector coupling PRT open"); - faultCodeArray[12] = new GCStateOrFaultCode(12, "(Not used): Detector coupling PRT short"); - - faultCodeArray[13] = new GCStateOrFaultCode(13, "(Fault code 13, not used)"); - faultCodeArray[14] = new GCStateOrFaultCode(14, "(Fault code 14, not used)"); - - faultCodeArray[15] = new GCStateOrFaultCode(15, "Voltage ref error"); - faultCodeArray[16] = new GCStateOrFaultCode(16, "Voltage sensor error"); +#ifdef USE_VERSION_102 + faultCodeArray[0] = new GCStateOrFaultCode(GC_FAULT_102_NO_ERROR, "No error"); + faultCodeArray[1] = new GCStateOrFaultCode(GC_FAULT_102_EEPROM_FAILURE, "EEPROM failure"); + faultCodeArray[2] = new GCStateOrFaultCode(GC_FAULT_102_DOOR_OPEN_ERROR, "Door open error"); + + faultCodeArray[3] = new GCStateOrFaultCode(GC_FAULT_102_COL_PRT_OPEN_ERROR, "Column PRT open error"); + faultCodeArray[4] = new GCStateOrFaultCode(GC_FAULT_102_COL_PRT_SHORT_ERROR, "Column PRT short error"); + faultCodeArray[5] = new GCStateOrFaultCode(GC_FAULT_102_INJ_PRT_OPEN_ERROR, "Injector PRT open error"); + faultCodeArray[6] = new GCStateOrFaultCode(GC_FAULT_102_INJ_PRT_SHORT_ERROR, "Injector PRT short error"); + faultCodeArray[7] = new GCStateOrFaultCode(GC_FAULT_102_DET_PRT_OPEN_ERROR, "Detector PRT open error"); + faultCodeArray[8] = new GCStateOrFaultCode(GC_FAULT_102_DET_PRT_SHORT_ERROR, "Detector PRT short error"); + faultCodeArray[9] = new GCStateOrFaultCode(GC_FAULT_102_AUX_PRT_OPEN_ERROR, "Auxiliary PRT open error"); + faultCodeArray[10] = new GCStateOrFaultCode(GC_FAULT_102_AUX_PRT_SHORT_ERROR, "Auxiliary PRT short error"); + faultCodeArray[11] = new GCStateOrFaultCode(GC_FAULT_102_TEMP4_PRT_OPEN_ERROR, "Temp4 PRT open error"); + faultCodeArray[12] = new GCStateOrFaultCode(GC_FAULT_102_TEMP4_PRT_SHORT_ERROR, "Temp4 PRT short error"); + + faultCodeArray[13] = new GCStateOrFaultCode(GC_FAULT_102_VOLTAGE_REF_ERROR, "Voltage Ref error"); + faultCodeArray[14] = new GCStateOrFaultCode(GC_FAULT_102_VSENSOR_ERROR, "Voltage sensor error"); + + faultCodeArray[15] = new GCStateOrFaultCode(GC_FAULT_102_COL_OVER_TEMP_ERROR, "Column over temperature error"); + faultCodeArray[16] = new GCStateOrFaultCode(GC_FAULT_102_INJ_OVER_TEMP_ERROR, "Injector over temperature error"); + faultCodeArray[17] = new GCStateOrFaultCode(GC_FAULT_102_DET_OVER_TEMP_ERROR, "Detector over temperature error"); + faultCodeArray[18] = new GCStateOrFaultCode(GC_FAULT_102_AUX_OVER_TEMP_ERROR, "Auxiliary over temperature error"); + faultCodeArray[19] = new GCStateOrFaultCode(GC_FAULT_102_TEMP4_OVER_TEMP_ERROR, "Temp4 over temperature error"); + + faultCodeArray[20] = new GCStateOrFaultCode(GC_FAULT_102_TC_K_SHORT_ERROR, "TC K short error"); + + faultCodeArray[21] = new GCStateOrFaultCode(GC_FAULT_102_EPPC_NOTFITTED_ERROR, "EPPC not fitted error"); +#else + faultCodeArray[0] = new GCStateOrFaultCode(GC_FAULT_NO_ERROR, "No error"); + faultCodeArray[1] = new GCStateOrFaultCode(GC_FAULT_EEPROM_FAILURE, "EEPROM failure"); + faultCodeArray[2] = new GCStateOrFaultCode(GC_FAULT_DOOR_OPEN_ERROR, "Door open"); + faultCodeArray[3] = new GCStateOrFaultCode(GC_FAULT_IRSENSOR_OPEN_ERROR, "IRsensor open"); + faultCodeArray[4] = new GCStateOrFaultCode(GC_FAULT_IRSENSOR_SHORT_ERROR, "IRsensor short"); + faultCodeArray[5] = new GCStateOrFaultCode(GC_FAULT_INJECTOR_PRT_OPEN_ERROR, "Injector PRT open"); + faultCodeArray[6] = new GCStateOrFaultCode(GC_FAULT_INJECTOR_PRT_SHORT_ERROR, "Injector PRT short"); + faultCodeArray[7] = new GCStateOrFaultCode(GC_FAULT_DETECTOR_PRT_OPEN_ERROR, "Detector PRT open"); + faultCodeArray[8] = new GCStateOrFaultCode(GC_FAULT_DETECTOR_PRT_SHORT_ERROR, "Detector PRT short"); - faultCodeArray[17] = new GCStateOrFaultCode(17, "Column over temp error"); - faultCodeArray[18] = new GCStateOrFaultCode(18, "Injector over temp error"); - faultCodeArray[19] = new GCStateOrFaultCode(19, "Detector over temp error"); + faultCodeArray[9] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_INJECTOR_COUPLING_PRT_OPEN_ERROR, "(Not used): Injector coupling PRT open"); + faultCodeArray[10] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_INJECTOR_COUPLING_PRT_SHORT_ERROR, "(Not used): Injector coupling PRT short"); + faultCodeArray[11] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_DETECTOR_COUPLING_PRT_OPEN_ERROR, "(Not used): Detector coupling PRT open"); + faultCodeArray[12] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_DETECTOR_COUPLING_PRT_SHORT_ERROR, "(Not used): Detector coupling PRT short"); + + faultCodeArray[13] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_13, "(Fault code 13, not used)"); + faultCodeArray[14] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_14, "(Fault code 14, not used)"); - faultCodeArray[20] = new GCStateOrFaultCode(20, "(Not used): Injector coupling over temp error"); - faultCodeArray[21] = new GCStateOrFaultCode(21, "(Not used): Detector coupling over temp error"); + faultCodeArray[15] = new GCStateOrFaultCode(GC_FAULT_VOLTAGE_REF_ERROR, "Voltage ref error"); + faultCodeArray[16] = new GCStateOrFaultCode(GC_FAULT_VOLTAGE_SENSOR_ERROR, "Voltage sensor error"); - faultCodeArray[22] = new GCStateOrFaultCode(22, "(Fault code 22, not used)"); - - faultCodeArray[23] = new GCStateOrFaultCode(23, "(Not used): Column not init"); - faultCodeArray[24] = new GCStateOrFaultCode(24, "(Not used): Column insert failed"); + faultCodeArray[17] = new GCStateOrFaultCode(GC_FAULT_COLUMN_OVER_TEMP_ERROR, "Column over temp error"); + faultCodeArray[18] = new GCStateOrFaultCode(GC_FAULT_INJECTOR_OVER_TEMP_ERROR, "Injector over temp error"); + faultCodeArray[19] = new GCStateOrFaultCode(GC_FAULT_DETECTOR_OVER_TEMP_ERROR, "Detector over temp error"); + + faultCodeArray[20] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_INJECTOR_COUPLING_OVER_TEMP_ERROR, "(Not used): Injector coupling over temp error"); + faultCodeArray[21] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_DETECTOR_COUPLING_OVER_TEMP_ERROR, "(Not used): Detector coupling over temp error"); - faultCodeArray[25] = new GCStateOrFaultCode(25, "I2C NAK error"); + faultCodeArray[22] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_22, "(Fault code 22, not used)"); + + faultCodeArray[23] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_COLUMN_NOT_INIT, "(Not used): Column not init"); + faultCodeArray[24] = new GCStateOrFaultCode(GC_FAULT_NOT_USED_COLUMN_INSERT_FAILED, "(Not used): Column insert failed"); + + faultCodeArray[25] = new GCStateOrFaultCode(GC_FAULT_I2C_NAK_ERROR, "I2C NAK error"); - faultCodeArray[26] = new GCStateOrFaultCode(26, "TWI timeout error"); - faultCodeArray[27] = new GCStateOrFaultCode(27, "TWI bus error"); - faultCodeArray[28] = new GCStateOrFaultCode(28, "TWI SLAW NACK"); - faultCodeArray[29] = new GCStateOrFaultCode(29, "TWI SLADATA NACK"); - faultCodeArray[30] = new GCStateOrFaultCode(30, "TWI SLAR NACK"); - faultCodeArray[31] = new GCStateOrFaultCode(31, "TWI arbitration lost"); - faultCodeArray[32] = new GCStateOrFaultCode(32, "TWI unknown error"); + faultCodeArray[26] = new GCStateOrFaultCode(GC_FAULT_TWI_TIMEOUT_ERROR, "TWI timeout error"); + faultCodeArray[27] = new GCStateOrFaultCode(GC_FAULT_TWI_BUS_ERROR, "TWI bus error"); + faultCodeArray[28] = new GCStateOrFaultCode(GC_FAULT_TWI_SLAW_NACK, "TWI SLAW NACK"); + faultCodeArray[29] = new GCStateOrFaultCode(GC_FAULT_TWI_SLADATA_NACK, "TWI SLADATA NACK"); + faultCodeArray[30] = new GCStateOrFaultCode(GC_FAULT_TWI_SLAR_NACK, "TWI SLAR NACK"); + faultCodeArray[31] = new GCStateOrFaultCode(GC_FAULT_TWI_ARBITRATION_LOST, "TWI arbitration lost"); + faultCodeArray[32] = new GCStateOrFaultCode(GC_FAULT_TWI_UNKNOWN_ERROR, "TWI unknown error"); - faultCodeArray[33] = new GCStateOrFaultCode(33, "TWI2 timeout error"); - faultCodeArray[34] = new GCStateOrFaultCode(34, "TWI2 bus error"); - faultCodeArray[35] = new GCStateOrFaultCode(35, "TWI2 unknown error 1"); - faultCodeArray[36] = new GCStateOrFaultCode(36, "TWI2 unknown error 2"); + faultCodeArray[33] = new GCStateOrFaultCode(GC_FAULT_TWI2_TIMEOUT_ERROR, "TWI2 timeout error"); + faultCodeArray[34] = new GCStateOrFaultCode(GC_FAULT_TWI2_BUS_ERROR, "TWI2 bus error"); + faultCodeArray[35] = new GCStateOrFaultCode(GC_FAULT_TWI2_UNKNOWN_ERROR1, "TWI2 unknown error 1"); + faultCodeArray[36] = new GCStateOrFaultCode(GC_FAULT_TWI2_UNKNOWN_ERROR2, "TWI2 unknown error 2"); +#endif } GCStateAndFaultCodes::~GCStateAndFaultCodes() @@ -123,6 +260,14 @@ } } +/* + Given an integer state code, returns the associated descriptive string. + + Args: state code + pointer to the buffer to contain the associated string (if found) + + Returns true if the state code is valid, false if not +*/ bool GCStateAndFaultCodes::GetStateCodeString(int stateCode, char *buff) { for (int i = 0; i < STATE_CODE_COUNT; ++i) { @@ -137,6 +282,38 @@ return false; } +/* + Given an integer code representing a simplified state, returns the associated descriptive string. + + Args: simplified state code (an int, not an enum, to keep things simple for the compiler) + pointer to the buffer to contain the associated string (if found) + + Returns true if the state code is valid, false if not +*/ +bool GCStateAndFaultCodes::GetSimplifiedStateCodeString(int simplifiedStateCode, char *buff) +{ + for (int i = 0; i < GC_STATE_SIMPLIFIED_COUNT; ++i) { + if(simplifiedStateCodeArray[i]->GetCodeNumber() == simplifiedStateCode) { + simplifiedStateCodeArray[i]->GetCodeString(buff); + return true; + } + } + + // 'else' - simplified state code not found + buff[0] = '\0'; + return false; +} + + + +/* + Given an integer fault code, returns the associated descriptive string. + + Args: state code + pointer to the buffer to contain the associated string (if found) + + Returns true if the fault code is valid, false if not +*/ bool GCStateAndFaultCodes::GetFaultCodeString(int faultCode, char *buff) { for (int i = 0; i < FAULT_CODE_COUNT; ++i) {