Refactored logging.

- Logging levels are now named preprocessor defines
 - Logging level is now a parameter for WriteLine/FormatLine
This commit is contained in:
Jason Watkins
2015-05-11 14:51:08 -07:00
parent 044a7498f7
commit a2c1f83629
8 changed files with 239 additions and 379 deletions

View File

@@ -29,8 +29,9 @@ namespace XPC
{
using namespace std;
const size_t PLANE_COUNT = 20;
static map<DREF, XPLMDataRef> drefs;
static map<DREF, XPLMDataRef> mdrefs[20];
static map<DREF, XPLMDataRef> mdrefs[PLANE_COUNT];
static map<string, XPLMDataRef> sdrefs;
DREF XPData[134][8] = { DREF_None };
@@ -143,7 +144,7 @@ namespace XPC
drefs.insert(make_pair(DREF_MP7Alt, XPLMFindDataRef("sim/multiplayer/position/plane7_el")));
char multi[256];
for (int i = 1; i < 20; i++)
for (int i = 1; i < PLANE_COUNT; i++)
{
sprintf(multi, "sim/multiplayer/position/plane%i_x", i);
mdrefs[i][DREF_LocalX] = XPLMFindDataRef(multi);
@@ -302,6 +303,7 @@ namespace XPC
int DataManager::Get(const string& dref, float values[], int size)
{
Log::WriteLine(LOG_TRACE, "DMAN", "Entered Get(string, float*, int)");
XPLMDataRef& xdref = sdrefs[dref];
if (xdref == NULL)
{
@@ -309,24 +311,18 @@ namespace XPC
}
if (!xdref) // DREF does not exist
{
#if LOG_VERBOSITY > 0
Log::FormatLine("[DMAN] ERROR: invalid DREF %s", dref.c_str());
#endif
Log::FormatLine(LOG_ERROR, "DMAN", "ERROR: invalid DREF %s", dref);
return 0;
}
XPLMDataTypeID dataType = XPLMGetDataRefTypes(xdref);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] Get DREF %s (x:%X) Type: %i", dref.c_str(), xdref, dataType);
#endif
Log::FormatLine(LOG_INFO, "DMAN", "Get DREF %s (x:%X) Type: %i", dref, xdref, dataType);
// XPLMDataTypeID is a bit flag, so it may contain more than one of the
// following types. We prefer types as close to float as possible.
if ((dataType & 2) == 2) // Float
{
values[0] = XPLMGetDataf(xdref);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] -- value was %f", values[0]);
#endif
Log::FormatLine(LOG_INFO, "DMAN", " -- value was %f", values[0]);
return 1;
}
if ((dataType & 8) == 8) // Float array
@@ -334,99 +330,80 @@ namespace XPC
int drefSize = XPLMGetDatavf(xdref, NULL, 0, 0);
if (drefSize > size)
{
#if LOG_VERBOSITY > 1
Log::WriteLine("[DMAN] WARN: dref size is larger than available space");
Log::FormatLine(" Actual dref size: %i, Available size: %i", drefSize, size);
#endif
Log::WriteLine(LOG_WARN, "DMAN", "Warning: dref size is larger than available space");
Log::FormatLine(LOG_DEBUG, "DMAN", "Actual dref size : %i, Available size : %i", drefSize, size);
drefSize = size;
}
XPLMGetDatavf(xdref, values, 0, drefSize);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] -- value count was %i", drefSize);
#endif
Log::FormatLine(LOG_INFO, "DMAN", " -- value count was %i", drefSize);
return drefSize;
}
if ((dataType & 4) == 4) // Double
{
values[0] = (float)XPLMGetDatad(xdref);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] -- value was %f", values[0]);
#endif
Log::FormatLine(LOG_INFO, "DMAN", " -- value was %f", values[0]);
return 1;
}
if ((dataType & 1) == 1) // Integer
{
values[0] = (float)XPLMGetDatai(xdref);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] -- value was %i", (int)values[0]);
#endif
int iValue = XPLMGetDatai(xdref);
values[0] = (float)iValue;
Log::FormatLine(LOG_INFO, "DMAN", " -- Real value was %i, cast to %f", iValue, values[0]);
return 1;
}
if ((dataType & 16) == 16) // Integer array
{
int iValues[200];
const std::size_t TMP_SIZE = 200;
int iValues[TMP_SIZE];
int drefSize = XPLMGetDatavi(xdref, NULL, 0, 0);
if (drefSize > size)
{
#if LOG_VERBOSITY > 1
Log::WriteLine("[DMAN] WARN: dref size is larger than available space");
Log::FormatLine(" Actual dref size: %i, Available size: %i", drefSize, size);
#endif
Log::WriteLine(LOG_WARN, "DMAN", "Warning: dref size is larger than available space");
Log::FormatLine(LOG_DEBUG, "DMAN", "Actual dref size : %i, Available size : %i", drefSize, size);
drefSize = size;
}
if (drefSize > 200)
if (drefSize > TMP_SIZE)
{
#if LOG_VERBOSITY > 1
Log::WriteLine("[DMAN] WARN: dref size is larger than temp buffer");
Log::FormatLine(" Actual dref size: %i, Temp buffer size: 200", drefSize);
#endif
drefSize = 200;
Log::WriteLine(LOG_WARN, "DMAN", "Warning: dref size is larger than temp buffer");
Log::FormatLine(LOG_DEBUG, "DMAN", "Actual dref size : %i, Temp buffer size: %u", drefSize, TMP_SIZE);
drefSize = TMP_SIZE;
}
XPLMGetDatavi(xdref, iValues, 0, drefSize);
for (int i = 0; i < drefSize; ++i)
{
values[i] = (float)iValues[i];
}
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] -- value count was %i", drefSize);
#endif
Log::FormatLine(LOG_INFO, "DMAN", " -- value count was %i", drefSize);
return drefSize;
}
if ((dataType & 32) == 32) // Byte array
{
char bValues[1024];
const std::size_t TMP_SIZE = 1024;
char bValues[TMP_SIZE];
int drefSize = XPLMGetDatab(xdref, NULL, 0, 0);
if (drefSize > size)
{
#if LOG_VERBOSITY > 1
Log::WriteLine("[DMAN] WARN: dref size is larger than available space");
Log::FormatLine(" Actual dref size: %i, Available size: %i", drefSize, size);
#endif
Log::WriteLine(LOG_WARN, "DMAN", "Warning: dref size is larger than available space");
Log::FormatLine(LOG_DEBUG, "DMAN", "Actual dref size : %i, Available size : %i", drefSize, size);
drefSize = size;
}
if (drefSize > 1024)
if (drefSize > TMP_SIZE)
{
#if LOG_VERBOSITY > 1
Log::WriteLine("[DMAN] WARN: dref size is larger than temp buffer");
Log::FormatLine(" Actual dref size: %i, Temp buffer size: 1024", drefSize);
#endif
drefSize = 1024;
Log::WriteLine(LOG_WARN, "DMAN", "Warning: dref size is larger than temp buffer");
Log::FormatLine(LOG_DEBUG, "DMAN", "Actual dref size : %i, Temp buffer size: %u", drefSize, TMP_SIZE);
drefSize = TMP_SIZE;
}
XPLMGetDatab(xdref, bValues, 0, drefSize);
for (int i = 0; i < drefSize; ++i)
{
values[i] = (float)bValues[i];
}
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] -- value count was %i", drefSize);
#endif
Log::FormatLine(LOG_INFO, "DMAN", " -- value count was %i", drefSize);
return drefSize;
}
// No match
#if LOG_VERBOSITY > 0
Log::WriteLine("[DMAN] ERROR: Unrecognized data type.");
#endif
Log::WriteLine(LOG_ERROR, "DMAN", "ERROR: Unrecognized data type.");
return 0;
}
@@ -434,9 +411,8 @@ namespace XPC
{
const XPLMDataRef& xdref = aircraft == 0 ? drefs[dref] : mdrefs[aircraft][dref];
double value = XPLMGetDatad(xdref);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] Get DREF %i (x:%X) result %f for a/c %i", dref, xdref, value, aircraft);
#endif
Log::FormatLine(LOG_INFO, "DMAN", "Get DREF %i (x:%X) result %f for a/c %i",
dref, xdref, value, aircraft);
return value;
}
@@ -444,9 +420,8 @@ namespace XPC
{
const XPLMDataRef& xdref = aircraft == 0 ? drefs[dref] : mdrefs[aircraft][dref];
float value = XPLMGetDataf(xdref);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] Get DREF %i (x:%X) result %f for a/c %i", dref, xdref, value, aircraft);
#endif
Log::FormatLine(LOG_INFO, "DMAN", "Get DREF %i (x:%X) result %f for a/c %i",
dref, xdref, value, aircraft);
return value;
}
@@ -454,9 +429,8 @@ namespace XPC
{
const XPLMDataRef& xdref = aircraft == 0 ? drefs[dref] : mdrefs[aircraft][dref];
int value = XPLMGetDatai(xdref);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] Get DREF %i (x:%X) result %i for a/c %i", dref, xdref, value, aircraft);
#endif
Log::FormatLine(LOG_INFO, "DMAN", "Get DREF %i (x:%X) result %i for a/c %i",
dref, xdref, value, aircraft);
return value;
}
@@ -464,9 +438,8 @@ namespace XPC
{
const XPLMDataRef& xdref = aircraft == 0 ? drefs[dref] : mdrefs[aircraft][dref];
int resultSize = XPLMGetDatavf(xdref, values, 0, size);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] Get DREF %i (x:%X) result size %i for a/c %i", dref, xdref, resultSize, aircraft);
#endif
Log::FormatLine(LOG_INFO, "DMAN", "Get DREF %i (x:%X) result size %i for a/c %i",
dref, xdref, resultSize, aircraft);
return resultSize;
}
@@ -474,46 +447,46 @@ namespace XPC
{
const XPLMDataRef& xdref = aircraft == 0 ? drefs[dref] : mdrefs[aircraft][dref];
int resultSize = XPLMGetDatavi(xdref, values, 0, size);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] Get DREF %i (x:%X) result size %i for a/c %i", dref, xdref, resultSize, aircraft);
#endif
Log::FormatLine(LOG_INFO, "DMAN", "Get DREF %i (x:%X) result size %i for a/c %i",
dref, xdref, resultSize, aircraft);
return resultSize;
}
void DataManager::Set(DREF dref, double value, char aircraft)
{
const XPLMDataRef& xdref = aircraft == 0 ? drefs[dref] : mdrefs[aircraft][dref];
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] Setting DREF %i (x:%X) to %f for a/c %i", dref, xdref, value, aircraft);
#endif
Log::FormatLine(LOG_INFO, "DMAN", "Setting DREF %i (x:%X) to %f for a/c %i",
dref, xdref, value, aircraft);
XPLMSetDatad(xdref, value);
}
void DataManager::Set(DREF dref, float value, char aircraft)
{
const XPLMDataRef& xdref = aircraft == 0 ? drefs[dref] : mdrefs[aircraft][dref];
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] Set DREF %i (x:%X) to %f for a/c %i", dref, xdref, value, aircraft);
#endif
Log::FormatLine(LOG_INFO, "DMAN", "Setting DREF %i (x:%X) to %f for a/c %i",
dref, xdref, value, aircraft);
XPLMSetDataf(xdref, value);
}
void DataManager::Set(DREF dref, int value, char aircraft)
{
const XPLMDataRef& xdref = aircraft == 0 ? drefs[dref] : mdrefs[aircraft][dref];
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] Set DREF %i (x:%X) to %i for a/c %i", dref, xdref, value, aircraft);
#endif
Log::FormatLine(LOG_INFO, "DMAN", "Setting DREF %i (x:%X) to %i for a/c %i",
dref, xdref, value, aircraft);
XPLMSetDatai(xdref, value);
}
void DataManager::Set(DREF dref, float values[], int size, char aircraft)
{
const XPLMDataRef& xdref = aircraft == 0 ? drefs[dref] : mdrefs[aircraft][dref];
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] Set DREF %i (x:%X) (%i values) for a/c %i", dref, xdref, size, aircraft);
#endif
Log::FormatLine(LOG_INFO, "DMAN", "Setting DREF %i (x:%X) (%i values) for a/c %i",
dref, xdref, size, aircraft);
int drefSize = XPLMGetDatavf(xdref, NULL, 0, 0);
if (drefSize < size)
{
Log::FormatLine(LOG_WARN, "DMAN", "Warning: Too many values when setting DREF %i. Expected %i, got %i",
dref, drefSize, size);
}
drefSize = min(drefSize, size);
XPLMSetDatavf(xdref, values, 0, drefSize);
}
@@ -521,10 +494,14 @@ namespace XPC
void DataManager::Set(DREF dref, int values[], int size, char aircraft)
{
const XPLMDataRef& xdref = aircraft == 0 ? drefs[dref] : mdrefs[aircraft][dref];
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] Setting DREF %i (x:%X) (%i values) for a/c %i", dref, xdref, size, aircraft);
#endif
Log::FormatLine(LOG_INFO, "DMAN", "Setting DREF %i (x:%X) (%i values) for a/c %i",
dref, xdref, size, aircraft);
int drefSize = XPLMGetDatavi(xdref, NULL, 0, 0);
if (drefSize < size)
{
Log::FormatLine(LOG_WARN, "DMAN", "Warning: Too many values when setting DREF %i. Expected %i, got %i",
dref, drefSize, size);
}
drefSize = min(drefSize, size);
XPLMSetDatavi(xdref, values, 0, drefSize);
}
@@ -539,139 +516,113 @@ namespace XPC
if (!xdref)
{
// DREF does not exist
#if LOG_VERBOSITY > 0
Log::FormatLine("[DMAN] ERROR: invalid DREF %s", dref.c_str());
#endif
Log::FormatLine(LOG_ERROR, "DMAN", "ERROR: invalid DREF %s", dref);
return;
}
if (isnan(values[0]))
{
#if LOG_VERBOSITY > 0
Log::WriteLine("[DMAN] ERROR: Value must be a number (NaN received)");
#endif
Log::WriteLine(LOG_ERROR, "DMAN", "ERROR: Value must be a number (NaN received)");
return;
}
XPLMDataTypeID dataType = XPLMGetDataRefTypes(xdref);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] Setting DREF %s (x:%X) Type: %i", dref.c_str(), xdref, dataType);
#endif
Log::FormatLine(LOG_INFO, "DMAN", "Setting DREF %s (x:%X) Type: %i", xdref, dataType);
if ((dataType & 2) == 2) // Float
{
XPLMSetDataf(xdref, values[0]);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] -- value was %f", values[0]);
#endif
Log::FormatLine(LOG_INFO, "DMAN", " -- value was %f", values[0]);
}
else if ((dataType & 8) == 8) // Float Array
{
int drefSize = XPLMGetDatavf(xdref, NULL, 0, 0);
#if LOG_VERBOSITY > 1
if (size > drefSize)
{
Log::WriteLine("[DMAN] WARN: Provided size is larger than actual dref size");
Log::FormatLine(" Actual dref size: %i, Provided buffer size: %i", drefSize, size);
Log::WriteLine(LOG_WARN, "DMAN", "Warning: dref size is larger than actual dref size");
Log::FormatLine(LOG_DEBUG, "DMAN", "Actual dref size : %i, Provided buffer size : %i",
drefSize, size);
}
#endif
drefSize = min(drefSize, size);
XPLMSetDatavf(xdref, values, 0, drefSize);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] -- value count was %i", drefSize);
#endif
Log::FormatLine(LOG_INFO, "DMAN", " -- value count was %i", drefSize);
}
else if ((dataType & 4) == 4) // Double
{
XPLMSetDatad(xdref, values[0]);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] -- value was %f", values[0]);
#endif
Log::FormatLine(LOG_INFO, "DMAN", " -- value was %f", values[0]);
}
else if ((dataType & 1) == 1) // Integer
{
XPLMSetDatai(xdref, (int)values[0]);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] -- value was %i", (int)values[0]);
#endif
Log::FormatLine(LOG_INFO, "DMAN", " -- value was %i", (int)values[0]);
}
else if ((dataType & 16) == 16) // Integer Array
{
int iValues[200];
const std::size_t TMP_SIZE = 200;
int iValues[TMP_SIZE];
int drefSize = XPLMGetDatavi(xdref, NULL, 0, 0);
#if LOG_VERBOSITY > 1
if (size > drefSize)
{
Log::WriteLine("[DMAN] WARN: Provided size is larger than actual dref size");
Log::FormatLine(" Actual dref size: %i, Provided buffer size: %i", drefSize, size);
Log::WriteLine(LOG_WARN, "DMAN", "Warning: dref size is larger than actual dref size");
Log::FormatLine(LOG_DEBUG, "DMAN", "Actual dref size : %i, Provided buffer size : %i",
drefSize, size);
}
#endif
drefSize = min(drefSize, size);
if (drefSize > 200)
if (drefSize > TMP_SIZE)
{
#if LOG_VERBOSITY > 1
Log::WriteLine("[DMAN] WARN: drefSize larger than temp buffer size.");
Log::FormatLine(" Actual dref size: %i, Temp buffer size: 200", drefSize);
#endif
drefSize = 200;
Log::WriteLine(LOG_WARN, "DMAN", "Warning: dref size is larger temp buffer size");
Log::FormatLine(LOG_DEBUG, "DMAN", "Actual dref size : %i, Temp buffer size: %i",
drefSize, TMP_SIZE);
drefSize = TMP_SIZE;
}
for (int i = 0; i < drefSize; ++i)
{
iValues[i] = (int)values[i];
}
XPLMSetDatavi(xdref, iValues, 0, drefSize);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] -- value count was %i", drefSize);
#endif
Log::FormatLine(LOG_INFO, "DMAN", " -- value count was %i", drefSize);
}
else if ((dataType & 32) == 32) // Byte Array
{
char bValues[1024];
const std::size_t TMP_SIZE = 1024;
char bValues[TMP_SIZE];
int drefSize = XPLMGetDatab(xdref, NULL, 0, 0);
#if LOG_VERBOSITY > 1
if (size > drefSize)
{
Log::WriteLine("[DMAN] WARN: Provided size is larger than actual dref size");
Log::FormatLine(" Actual dref size: %i, Provided buffer size: %i", drefSize, size);
Log::WriteLine(LOG_WARN, "DMAN", "Warning: dref size is larger than actual dref size");
Log::FormatLine(LOG_DEBUG, "DMAN", "Actual dref size : %i, Provided buffer size : %i",
drefSize, size);
}
#endif
drefSize = min(drefSize, size);
if (drefSize > 1024)
if (drefSize > TMP_SIZE)
{
#if LOG_VERBOSITY > 1
Log::WriteLine("[DMAN] WARN: drefSize larger than temp buffer size.");
Log::FormatLine(" Actual dref size: %i, Temp buffer size: 1024", drefSize);
#endif
drefSize = 1024;
Log::WriteLine(LOG_WARN, "DMAN", "Warning: dref size is larger temp buffer size");
Log::FormatLine(LOG_DEBUG, "DMAN", "Actual dref size : %i, Temp buffer size: %i",
drefSize, TMP_SIZE);
drefSize = TMP_SIZE;
}
for (int i = 0; i < drefSize; ++i)
{
bValues[i] = (char)values[i];
}
XPLMSetDatab(xdref, bValues, 0, drefSize);
#if LOG_VERBOSITY > 4
Log::FormatLine("[DMAN] -- value count was %i", drefSize);
#endif
Log::FormatLine(LOG_INFO, "DMAN", " -- value count was %i", drefSize);
}
else
{
#if LOG_VERBOSITY > 0
Log::WriteLine("[DMAN] ERROR: Unknown type.");
#endif
Log::WriteLine(LOG_ERROR, "DMAN", "ERROR: Unknown type.");
}
#if LOG_VERBOSITY > 1
if (!XPLMCanWriteDataRef(xdref))
{
Log::WriteLine("[DMAN] WARN: dref is not writable. The write operation probably failed.");
Log::WriteLine(LOG_WARN, "DMAN", "WARN: dref is not writable. The write operation probably failed.");
}
#endif
}
void DataManager::SetGear(float gear, bool immediate, char aircraft)
{
#if LOG_VERBOSITY > 3
Log::FormatLine("[DMAN] Setting gear (value:%f, immediate:%i) for aircraft %i", gear, immediate, aircraft);
#endif
Log::FormatLine(LOG_INFO, "DMAN", "Setting gear (value:%f, immediate:%i) for aircraft %i",
gear, immediate, aircraft);
if ((gear < -8.5 && gear > -9.5) || (gear < -997.9 && gear > -999.1))
{
@@ -679,9 +630,7 @@ namespace XPC
}
if (isnan(gear) || gear < 0 || gear > 1)
{
#if LOG_VERBOSITY > 1
Log::WriteLine("[GEAR] ERROR: Value must be 0 or 1");
#endif
Log::WriteLine(LOG_ERROR, "DMAN", "ERROR: Gear value must be 0 or 1");
return;
}
@@ -707,14 +656,11 @@ namespace XPC
void DataManager::SetPosition(float pos[3], char aircraft)
{
#if LOG_VERBOSITY > 3
Log::FormatLine("[DMAN] Setting position (%f, %f, %f) for aircraft %i", pos[0], pos[1], pos[2], aircraft);
#endif
Log::FormatLine(LOG_INFO, "DMAN", "Setting position (%f, %f, %f) for aircraft %i",
pos[0], pos[1], pos[2], aircraft);
if (isnan(pos[0] + pos[1] + pos[2]))
{
#if LOG_VERBOSITY > 0
Log::WriteLine("[DMAN] ERROR: Position must be a number (NaN received)");
#endif
Log::WriteLine(LOG_ERROR, "DMAN", "ERROR: Position must be a number (NaN received)");
return;
}
@@ -746,15 +692,11 @@ namespace XPC
void DataManager::SetOrientation(float orient[3], char aircraft)
{
#if LOG_VERBOSITY > 3
Log::FormatLine("[DMAN] Setting orientation (%f, %f, %f) for aircraft %i",
Log::FormatLine(LOG_INFO, "DMAN", "Setting orientation (%f, %f, %f) for aircraft %i",
orient[0], orient[1], orient[2], aircraft);
#endif
if (isnan(orient[0] + orient[1] + orient[2]))
{
#if LOG_VERBOSITY > 0
Log::WriteLine("[DMAN] ERROR: Orientation must be a number (NaN received)");
#endif
Log::WriteLine(LOG_ERROR, "DMAN", "ERROR: Orientation must be a number (NaN received)");
return;
}
@@ -801,11 +743,11 @@ namespace XPC
void DataManager::SetFlaps(float value)
{
Log::FormatLine(LOG_INFO, "DMAN", "Setting flaps (value:%f)", value);
if (isnan(value))
{
#if LOG_VERBOSITY > 0
Log::WriteLine("[DMAN] ERROR: Flap value must be a number (NaN received)");
#endif
Log::WriteLine(LOG_ERROR, "DMAN", "ERROR: Flap value must be a number (NaN received)");
return;
}
if (value < -997.9 && value > -999.1)