updated error handling stuff
This commit is contained in:
118
tinio/main.cpp
118
tinio/main.cpp
@@ -1,63 +1,59 @@
|
|||||||
// Tinio - A tool to connect to Tinio USB IO controllers.
|
// Tinio - A tool to connect to Tinio USB IO controllers.
|
||||||
#include "CyUSBCommon.h"
|
#include "CyUSBCommon.h"
|
||||||
|
#include <cctype>
|
||||||
|
#include <cstdlib>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <cstdlib>
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
namespace errorEngine {
|
namespace errorEngine {
|
||||||
|
|
||||||
enum errorLevel_t { debug = 0, warning, error, crash };
|
enum errorLevel_t { debug = 0, warning, error, crash };
|
||||||
|
|
||||||
errorLevel_t globalErrLvl = error;
|
errorLevel_t globalErrLvl = error;
|
||||||
|
|
||||||
struct errorEngineCreds {
|
struct errorEngineCreds {
|
||||||
string errorLocation;
|
string errorLocation;
|
||||||
string errorName;
|
string errorName;
|
||||||
int8_t errorValue;
|
int8_t errorValue;
|
||||||
errorLevel_t errorLevel;
|
errorLevel_t errorLevel;
|
||||||
};
|
};
|
||||||
|
|
||||||
void handleErrors(errorEngineCreds eecToEval) {
|
void controlledCrash() {
|
||||||
switch (eecToEval.errorLevel) {
|
cerr << "Triggering a controlled crash..." << endl;
|
||||||
case debug:
|
exit(-177);
|
||||||
if (globalErrLvl <= debug) {
|
}
|
||||||
cerr << "Debug: " << eecToEval.errorLocation << ": "
|
|
||||||
<< eecToEval.errorName << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
case warning:
|
|
||||||
if (globalErrLvl <= warning) {
|
void handleErrors(errorEngineCreds eecToEval) {
|
||||||
cerr << "Warning: " << eecToEval.errorLocation << ": "
|
switch (eecToEval.errorLevel) {
|
||||||
<< eecToEval.errorName << endl;
|
case debug:
|
||||||
}
|
if (globalErrLvl <= debug) {
|
||||||
case error:
|
cerr << "Debug: " << eecToEval.errorLocation << ": "
|
||||||
if (globalErrLvl <= error) {
|
<< eecToEval.errorName << endl;
|
||||||
cerr << "ERROR: " << eecToEval.errorLocation << ": "
|
}
|
||||||
<< eecToEval.errorName << endl;
|
|
||||||
}
|
case warning:
|
||||||
case crash:
|
if (globalErrLvl <= warning) {
|
||||||
if (globalErrLvl <= crash) {
|
cerr << "Warning: " << eecToEval.errorLocation << ": "
|
||||||
cerr << "FATAL ERROR: " << eecToEval.errorLocation << ": "
|
<< eecToEval.errorName << endl;
|
||||||
<< eecToEval.errorName << endl;
|
}
|
||||||
cerr << "REQUESTING CRASH!" << endl;
|
case error:
|
||||||
}
|
if (globalErrLvl <= error) {
|
||||||
|
cerr << "ERROR: " << eecToEval.errorLocation << ": "
|
||||||
|
<< eecToEval.errorName << endl;
|
||||||
|
}
|
||||||
|
case crash:
|
||||||
|
if (globalErrLvl <= crash) {
|
||||||
|
cerr << "FATAL ERROR: " << eecToEval.errorLocation << ": "
|
||||||
|
<< eecToEval.errorName << endl;
|
||||||
|
cerr << "REQUESTING CRASH!" << endl;
|
||||||
|
controlledCrash();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void controlledCrash() {
|
|
||||||
cerr << "Triggering a controlled crash..." << endl;
|
|
||||||
3 / 0; // triggers a floating point error
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
int callExternFun(CY_RETURN_STATUS function()) {
|
|
||||||
int retval=function();
|
|
||||||
if (retval != CY_SUCCESS) {
|
|
||||||
this.localErrorCreds.errorValue = retval;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct accessNums_t {
|
struct accessNums_t {
|
||||||
@@ -67,21 +63,31 @@ struct accessNums_t {
|
|||||||
|
|
||||||
class Device {
|
class Device {
|
||||||
private:
|
private:
|
||||||
errorEngine::errorEngineCreds localErrorCreds {
|
errorEngine::errorEngineCreds localErrorCreds{
|
||||||
"Device handler class", "", 0, errorEngine::errorLevel_t::debug
|
"Device handler class", "", 0, errorEngine::errorLevel_t::debug};
|
||||||
};
|
|
||||||
CY_HANDLE localDeviceHandle;
|
CY_HANDLE localDeviceHandle;
|
||||||
accessNums_t localAccessNums;
|
accessNums_t localAccessNums;
|
||||||
|
|
||||||
public:
|
int callExternFun(CY_RETURN_STATUS function()) {
|
||||||
Device(CY_HANDLE deviceHandle, accessNums_t accessNums) {
|
int retval = function();
|
||||||
localDeviceHandle = deviceHandle;
|
if (retval != CY_SUCCESS) {
|
||||||
localAccessNums = accessNums;
|
this->localErrorCreds.errorValue = retval;
|
||||||
|
localErrorCreds.errorName = "error number ";
|
||||||
|
localErrorCreds.errorName.append(itoa(localErrorCreds.errorValue));
|
||||||
|
errorEngine::handleErrors(localErrorCreds);
|
||||||
|
return -177;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Device(void);
|
|
||||||
void deviceSet(accessNums_t deviceAccessNums) {
|
|
||||||
CyOpen(deviceAccessNums.deviceNumber, deviceAccessNums.deviceInterfaceNumber, &localDeviceHandle);
|
|
||||||
|
|
||||||
}
|
public:
|
||||||
void deviceDestroy();
|
Device(CY_HANDLE deviceHandle, accessNums_t accessNums) {
|
||||||
|
localDeviceHandle = deviceHandle;
|
||||||
|
localAccessNums = accessNums;
|
||||||
|
}
|
||||||
|
Device(void);
|
||||||
|
void deviceSet(accessNums_t deviceAccessNums) {
|
||||||
|
CyOpen(deviceAccessNums.deviceNumber,
|
||||||
|
deviceAccessNums.deviceInterfaceNumber, &localDeviceHandle);
|
||||||
|
}
|
||||||
|
void deviceDestroy();
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user