aboutsummaryrefslogtreecommitdiffstats
path: root/cphidgettemperaturesensor.c
diff options
context:
space:
mode:
Diffstat (limited to 'cphidgettemperaturesensor.c')
-rw-r--r--cphidgettemperaturesensor.c1319
1 files changed, 1319 insertions, 0 deletions
diff --git a/cphidgettemperaturesensor.c b/cphidgettemperaturesensor.c
new file mode 100644
index 0000000..2d92953
--- /dev/null
+++ b/cphidgettemperaturesensor.c
@@ -0,0 +1,1319 @@
+#include "stdafx.h"
+#include "cphidgettemperaturesensor.h"
+#include <math.h>
+#include "cusb.h"
+#include "csocket.h"
+#include "cthread.h"
+
+// === Internal Functions === //
+
+double lookup_voltage(double Tjunction, CPhidgetTemperatureSensor_ThermocoupleType type);
+double lookup_temperature(double Vthermocouple, CPhidgetTemperatureSensor_ThermocoupleType type);
+
+//Range on either side of 0 for the thermocouple tables
+// - this is difference is degrees Celcius between junction and tip temperature.
+// ie. if the board is at 100C, the lowest you could measure is -170C.
+const int thermocouple_table_range[5][2] =
+{
+ {0,0},//null
+ {-270, 1372}, //Type K
+ {-210, 1200}, //Type J
+ {-270, 1000}, //Type E
+ {-270, 400} //Type T
+};
+//Useful measurement range for each type of thermocouple
+// - this is the actual absolute temperature at the thermocouple tip, in degrees Celcius.
+//These ranges are "Maximum Useful Temperature Range" specified here: http://www.omega.com/techref/colorcodes.html
+const int thermocouple_useful_range[5][2] =
+{
+ {0,0},//null
+ {-200, 1250}, //Type K
+ {0, 750}, //Type J
+ {-200, 900}, //Type E
+ {-200, 350} //Type T
+};
+
+//clearVars - sets all device variables to unknown state
+CPHIDGETCLEARVARS(TemperatureSensor)
+ int i = 0;
+
+ phid->ambientTemperatureMax = PUNI_DBL;
+ phid->ambientTemperatureMin = PUNI_DBL;
+ phid->potentialMax = PUNI_DBL;
+ phid->potentialMin = PUNI_DBL;
+ phid->AmbientTemperature = PUNI_DBL;
+
+ for (i = 0; i<TEMPSENSOR_MAXSENSORS; i++)
+ {
+ phid->ThermocoupleType[i] = -1;
+ phid->temperatureMax[i] = PUNI_DBL;
+ phid->temperatureMin[i] = PUNI_DBL;
+ phid->Potential[i] = PUNI_DBL;
+ phid->Temperature[i] = PUNI_DBL;
+ phid->lastTrigger[i] = PUNK_DBL;
+ phid->TempChangeTrigger[i] = PUNI_DBL;
+ }
+
+ return EPHIDGET_OK;
+}
+
+//initAfterOpen - sets up the initial state of an object, reading in packets from the device if needed
+// used during attach initialization - on every attach
+CPHIDGETINIT(TemperatureSensor)
+ int i;
+
+ TESTPTR(phid);
+
+ //Setup max/min values
+ switch(phid->phid.deviceIDSpec)
+ {
+ case PHIDID_TEMPERATURESENSOR:
+ if(phid->phid.deviceVersion < 200)
+ {
+ for (i = 0; i<phid->phid.attr.temperaturesensor.numTempInputs; i++)
+ {
+ phid->ThermocoupleType[i] = PHIDGET_TEMPERATURE_SENSOR_K_TYPE;
+ phid->temperatureMax[i] = thermocouple_useful_range[PHIDGET_TEMPERATURE_SENSOR_K_TYPE][1];
+ phid->temperatureMin[i] = thermocouple_useful_range[PHIDGET_TEMPERATURE_SENSOR_K_TYPE][0];
+ }
+ phid->ambientTemperatureMax = 125;
+ phid->ambientTemperatureMin = -40;
+ }
+ else if(phid->phid.deviceVersion >= 200 && phid->phid.deviceVersion < 300)
+ {
+ for (i = 0; i<phid->phid.attr.temperaturesensor.numTempInputs; i++)
+ {
+ phid->ThermocoupleType[i] = PHIDGET_TEMPERATURE_SENSOR_K_TYPE;
+ phid->temperatureMax[i] = thermocouple_useful_range[PHIDGET_TEMPERATURE_SENSOR_K_TYPE][1];
+ phid->temperatureMin[i] = thermocouple_useful_range[PHIDGET_TEMPERATURE_SENSOR_K_TYPE][0];
+ }
+ phid->ambientTemperatureMax = 125;
+ phid->ambientTemperatureMin = -40;
+ phid->potentialMax = round_double((((5 / GAIN) * 1000.0) + OFFSET_200), 5);
+ phid->potentialMin = round_double(((((5 - (65535.0 / 13104.0)) / GAIN) * 1000.0) + OFFSET_200), 5);
+ }
+ else if(phid->phid.deviceVersion >= 300 && phid->phid.deviceVersion < 400)
+ {
+ for (i = 0; i<phid->phid.attr.temperaturesensor.numTempInputs; i++)
+ {
+ phid->ThermocoupleType[i] = PHIDGET_TEMPERATURE_SENSOR_K_TYPE;
+ phid->temperatureMax[i] = thermocouple_useful_range[PHIDGET_TEMPERATURE_SENSOR_K_TYPE][1];
+ phid->temperatureMin[i] = thermocouple_useful_range[PHIDGET_TEMPERATURE_SENSOR_K_TYPE][0];
+ }
+ phid->ambientTemperatureMax = 150;
+ phid->ambientTemperatureMin = -50;
+ phid->potentialMax = round_double((-((-OFFSET_300) / GAIN) * 1000.0), 5);
+ phid->potentialMin = round_double((-(((65535.0 / 13104.0) - OFFSET_300) / GAIN) * 1000.0), 5);
+ }
+ else if(phid->phid.deviceVersion >= 400 && phid->phid.deviceVersion < 500)
+ {
+ for (i = 0; i<phid->phid.attr.temperaturesensor.numTempInputs; i++)
+ {
+ phid->ThermocoupleType[i] = PHIDGET_TEMPERATURE_SENSOR_K_TYPE;
+ phid->temperatureMax[i] = thermocouple_useful_range[PHIDGET_TEMPERATURE_SENSOR_K_TYPE][1];
+ phid->temperatureMin[i] = thermocouple_useful_range[PHIDGET_TEMPERATURE_SENSOR_K_TYPE][0];
+ }
+ phid->ambientTemperatureMax = 150;
+ phid->ambientTemperatureMin = -55;
+ phid->potentialMin = round_double((((0.23 - PHIDID_TEMPERATURESENSOR_4_OFFSET) / PHIDID_TEMPERATURESENSOR_4_GAIN) * 1000.0), 5);
+ phid->potentialMax = round_double((((3.846 - PHIDID_TEMPERATURESENSOR_4_OFFSET) / PHIDID_TEMPERATURESENSOR_4_GAIN) * 1000.0), 5);
+ }
+ else
+ return EPHIDGET_BADVERSION;
+ break;
+ case PHIDID_TEMPERATURESENSOR_4:
+ if(phid->phid.deviceVersion >= 100 && phid->phid.deviceVersion < 200)
+ {
+ for (i = 0; i<phid->phid.attr.temperaturesensor.numTempInputs; i++)
+ {
+ phid->ThermocoupleType[i] = PHIDGET_TEMPERATURE_SENSOR_K_TYPE;
+ phid->temperatureMax[i] = thermocouple_useful_range[PHIDGET_TEMPERATURE_SENSOR_K_TYPE][1];
+ phid->temperatureMin[i] = thermocouple_useful_range[PHIDGET_TEMPERATURE_SENSOR_K_TYPE][0];
+ }
+ phid->ambientTemperatureMax = 150;
+ phid->ambientTemperatureMin = -55;
+ phid->potentialMin = round_double((((0.23 - PHIDID_TEMPERATURESENSOR_4_OFFSET) / PHIDID_TEMPERATURESENSOR_4_GAIN) * 1000.0), 5);
+ phid->potentialMax = round_double((((3.846 - PHIDID_TEMPERATURESENSOR_4_OFFSET) / PHIDID_TEMPERATURESENSOR_4_GAIN) * 1000.0), 5);
+ }
+ else
+ return EPHIDGET_BADVERSION;
+ break;
+ case PHIDID_TEMPERATURESENSOR_IR:
+ if(phid->phid.deviceVersion >= 100 && phid->phid.deviceVersion < 200)
+ {
+ for (i = 0; i<phid->phid.attr.temperaturesensor.numTempInputs; i++)
+ {
+ phid->temperatureMax[i] = 380;
+ phid->temperatureMin[i] = -70;
+ }
+ phid->ambientTemperatureMax = 125;
+ phid->ambientTemperatureMin = -40;
+ }
+ else
+ return EPHIDGET_BADVERSION;
+ break;
+ default:
+ return EPHIDGET_UNEXPECTED;
+ }
+
+ //initialize triggers, set data arrays to unknown
+ for (i = 0; i<phid->phid.attr.temperaturesensor.numTempInputs; i++)
+ {
+ phid->PotentialError[i] = PFALSE;
+ phid->TemperatureError[i] = PFALSE;
+ phid->Potential[i] = PUNK_DBL;
+ phid->Temperature[i] = PUNK_DBL;
+ phid->lastTrigger[i] = PUNK_DBL;
+ switch(phid->phid.deviceIDSpec)
+ {
+ case PHIDID_TEMPERATURESENSOR:
+ phid->TempChangeTrigger[i] = 0.5;
+ break;
+ case PHIDID_TEMPERATURESENSOR_4:
+ case PHIDID_TEMPERATURESENSOR_IR:
+ phid->TempChangeTrigger[i] = 0.1;
+ break;
+ default:
+ break;
+ }
+ }
+ phid->AmbientTemperature = PUNK_DBL;
+ phid->AmbientTemperatureError = PFALSE;
+
+ //issue one read
+ CPhidget_read((CPhidgetHandle)phid);
+
+ return EPHIDGET_OK;
+}
+
+//dataInput - parses device packets
+CPHIDGETDATA(TemperatureSensor)
+ int i = 0;
+ double Vad = 0, Vthermocouple = 0, VtempIC = 0, Temp;
+ double Temperature[TEMPSENSOR_MAXSENSORS] = {0}, Potential[TEMPSENSOR_MAXSENSORS] = {0}, AmbientTemperature = 0;
+ char error_buffer[200];
+
+ if (length<0) return EPHIDGET_INVALIDARG;
+ TESTPTR(phid);
+ TESTPTR(buffer);
+
+ ZEROMEM(Temperature, sizeof(Temperature));
+ ZEROMEM(Potential, sizeof(Potential));
+
+ switch(phid->phid.deviceIDSpec)
+ {
+ case PHIDID_TEMPERATURESENSOR:
+ /* OLD version */
+ if(phid->phid.deviceVersion < 200)
+ {
+ AmbientTemperature = (double)((short)buffer[2]);
+ Temperature[0] = (double)((signed short)((unsigned short)buffer[0]+((unsigned short)buffer[1]<<8)));
+ }
+ /* newer versions... calculate the temp here from Vad */
+ else if(phid->phid.deviceVersion >= 200 && phid->phid.deviceVersion < 300) {
+ //The ambient sensor reading from firmware isn't being sign-extended properly!
+ if(buffer[3] & 0x40)
+ buffer[3] |= 0x80;
+ if(buffer[3] & 0x30)
+ buffer[3] |= 0xf0;
+ AmbientTemperature = (double)((signed short)((unsigned short)buffer[2]+((unsigned short)buffer[3]<<8))) / 64.0;
+ printf("Ambient: 0x%02x%02x\n",buffer[3],buffer[2]);
+ Vad = ((double)((unsigned short)buffer[0]+((unsigned short)buffer[1]<<8))) / 13104.0;
+
+ Potential[0] = round_double(((((5 - Vad) / GAIN) * 1000.0) + OFFSET_200), 5);
+
+ //This is the potential at the thermocouple tip - with the junction potential eliminated
+ Vthermocouple = Potential[0] + lookup_voltage(AmbientTemperature, phid->ThermocoupleType[0]);
+ Temp = lookup_temperature(Vthermocouple, phid->ThermocoupleType[0]);
+ if(Temp != PUNK_DBL)
+ Temperature[0] = round_double(Temp, 3);
+ else
+ Temperature[0] = PUNK_DBL;
+
+ }
+ //upgrade to MCP3202 and AD22100
+ else if(phid->phid.deviceVersion >= 300 && phid->phid.deviceVersion < 400)
+ {
+ //Temp IC - absolute possible range: -61.1 - 161.16
+ VtempIC = ((double)((unsigned short)buffer[2]+((unsigned short)buffer[3]<<8))) / 13104.0;
+ AmbientTemperature = round_double(((VtempIC - 1.375)/0.0225), 3);
+
+ //Thermocouple
+ Vad = ((double)((unsigned short)buffer[0]+((unsigned short)buffer[1]<<8))) / 13104.0;
+ Potential[0] = round_double((-((Vad - OFFSET_300) / GAIN) * 1000.0), 5);
+
+ //This is the potential at the thermocouple tip - with the junction potential eliminated
+ Vthermocouple = Potential[0] + lookup_voltage(AmbientTemperature, phid->ThermocoupleType[0]);
+ Temp = lookup_temperature(Vthermocouple, phid->ThermocoupleType[0]);
+ if(Temp != PUNK_DBL)
+ Temperature[0] = round_double(Temp, 4);
+ else
+ Temperature[0] = PUNK_DBL;
+ }
+ else if(phid->phid.deviceVersion >= 400 && phid->phid.deviceVersion < 500)
+ {
+ //Temp IC - absolute possible range: -61.1 - 161.16
+ AmbientTemperature = round_double(((short)(((short)buffer[2] << 8) + (buffer[3])) / 128.0), 4);
+
+ //Thermocouple
+ Vad = ((double)((unsigned short)buffer[1]+((unsigned short)buffer[0]<<8))) / 16000.0;
+ Potential[0] = round_double((((Vad - PHIDID_TEMPERATURESENSOR_4_OFFSET) / PHIDID_TEMPERATURESENSOR_4_GAIN) * 1000.0), 5);
+
+ //This is the potential at the thermocouple tip - with the junction potential eliminated
+ Vthermocouple = Potential[0] + lookup_voltage(AmbientTemperature, phid->ThermocoupleType[0]);
+ Temp = lookup_temperature(Vthermocouple, phid->ThermocoupleType[0]);
+ if(Temp != PUNK_DBL)
+ Temperature[0] = round_double(Temp, 4);
+ else
+ Temperature[0] = PUNK_DBL;
+ }
+ else
+ return EPHIDGET_UNEXPECTED;
+ break;
+ case PHIDID_TEMPERATURESENSOR_4:
+ if(phid->phid.deviceVersion >= 100 && phid->phid.deviceVersion < 200)
+ {
+ //Temp IC - absolute possible range: -61.1 - 161.16
+ AmbientTemperature = round_double(((short)(((short)buffer[8] << 8) + (buffer[9])) / 128.0), 4);
+ for (i = 0; i<phid->phid.attr.temperaturesensor.numTempInputs; i++)
+ {
+ //Thermocouple
+ Vad = ((double)((unsigned short)buffer[1+2*i]+((unsigned short)buffer[0+2*i]<<8))) / 16000.0;
+ Potential[i] = round_double((((Vad - PHIDID_TEMPERATURESENSOR_4_OFFSET) / PHIDID_TEMPERATURESENSOR_4_GAIN) * 1000.0), 5);
+
+ //This is the potential at the thermocouple tip - with the junction potential eliminated
+ Vthermocouple = Potential[i] + lookup_voltage(AmbientTemperature, phid->ThermocoupleType[i]);
+ Temp = lookup_temperature(Vthermocouple, phid->ThermocoupleType[i]);
+ if(Temp != PUNK_DBL)
+ Temperature[i] = round_double(Temp, 4);
+ else
+ Temperature[i] = PUNK_DBL;
+ //LOG(PHIDGET_LOG_DEBUG, "Index: %d Val: %08x Potential: %0.6lf", i, ((unsigned short)buffer[1+2*i]+((unsigned short)buffer[0+2*i]<<8)), Potential[i]);
+ }
+ }
+ else
+ return EPHIDGET_UNEXPECTED;
+ break;
+ case PHIDID_TEMPERATURESENSOR_IR:
+ if(phid->phid.deviceVersion >= 100 && phid->phid.deviceVersion < 200)
+ {
+ //Temp IC - absolute possible range: -61.1 - 161.16
+ AmbientTemperature = round_double(((((short)buffer[3] << 8) + buffer[2]) * 0.02) - 273.15, 2);
+ Temperature[0] = round_double(((((short)buffer[1] << 8) + buffer[0]) * 0.02) - 273.15, 2);
+ }
+ else
+ return EPHIDGET_UNEXPECTED;
+ break;
+ default:
+ return EPHIDGET_UNEXPECTED;
+ }
+
+ //Make sure values are within defined range, and store to structure
+ if(AmbientTemperature > phid->ambientTemperatureMax)
+ {
+ phid->AmbientTemperature = PUNK_DBL;
+ if (phid->AmbientTemperatureError == PFALSE)
+ {
+ phid->AmbientTemperatureError = PTRUE;
+ FIRE_ERROR(EEPHIDGET_OUTOFRANGE, "Ambient sensor reported a temperature of %.4fC which is over the maximum of %.4fC.",
+ AmbientTemperature, phid->ambientTemperatureMax);
+ }
+ }
+ else if(AmbientTemperature < phid->ambientTemperatureMin)
+ {
+ phid->AmbientTemperature = PUNK_DBL;
+ if (phid->AmbientTemperatureError == PFALSE)
+ {
+ phid->AmbientTemperatureError = PTRUE;
+ FIRE_ERROR(EEPHIDGET_OUTOFRANGE, "Ambient sensor reported a temperature of %.4fC which is below the minimum of %.4fC.",
+ AmbientTemperature, phid->ambientTemperatureMin);
+ }
+ }
+ else
+ {
+ phid->AmbientTemperature = AmbientTemperature;
+ phid->AmbientTemperatureError = PFALSE;
+
+ switch(phid->phid.deviceIDSpec)
+ {
+ case PHIDID_TEMPERATURESENSOR:
+ if(phid->phid.deviceVersion < 200)
+ break; //OLD version just reports a temperature
+ case PHIDID_TEMPERATURESENSOR_4:
+ //Recalibrate min/max temperatures depending on ambient temperature
+ for (i = 0; i<phid->phid.attr.temperaturesensor.numTempInputs; i++)
+ {
+ if(lookup_voltage(thermocouple_useful_range[phid->ThermocoupleType[i]][1] - phid->AmbientTemperature, phid->ThermocoupleType[i]) > phid->potentialMax)
+ phid->temperatureMax[i] = (int)((lookup_temperature(phid->potentialMax, phid->ThermocoupleType[i]) + phid->AmbientTemperature) / 10) * 10;
+ if(lookup_voltage(thermocouple_useful_range[phid->ThermocoupleType[i]][0] - phid->AmbientTemperature, phid->ThermocoupleType[i]) < phid->potentialMin)
+ phid->temperatureMin[i] = (int)((lookup_temperature(phid->potentialMin, phid->ThermocoupleType[i]) + phid->AmbientTemperature) / 10) * 10;
+ }
+ break;
+ case PHIDID_TEMPERATURESENSOR_IR:
+ default:
+ break;
+ }
+ }
+
+ for (i = 0; i<phid->phid.attr.temperaturesensor.numTempInputs; i++)
+ {
+ //If ambient temperature was outside of allowed range, then calculated temperature will be wrong
+ if(phid->AmbientTemperature == PUNK_DBL)
+ {
+ phid->Temperature[i] = PUNK_DBL;
+ if (phid->TemperatureError[i] == PFALSE)
+ {
+ phid->TemperatureError[i] = PTRUE;
+ FIRE_ERROR(EEPHIDGET_OUTOFRANGE,
+ "Temperature %d cannot be calculated because the ambient temperature is unknown.",
+ i);
+ }
+ }
+ else if(Temperature[i] == PUNK_DBL)
+ {
+ phid->Temperature[i] = PUNK_DBL;
+ if (phid->TemperatureError[i] == PFALSE)
+ {
+ phid->TemperatureError[i] = PTRUE;
+ FIRE_ERROR(EEPHIDGET_OUTOFRANGE,
+ "Input %d reported an undefined temperature. Probably there is no thermocouple plugged in.",
+ i);
+ }
+ }
+ else if(Temperature[i] > phid->temperatureMax[i])
+ {
+ phid->Temperature[i] = PUNK_DBL;
+ if (phid->TemperatureError[i] == PFALSE)
+ {
+ phid->TemperatureError[i] = PTRUE;
+ FIRE_ERROR(EEPHIDGET_OUTOFRANGE,
+ "Input %d reported a temperature of %.4fC which is above the maximum of %.4fC.",
+ i, Temperature[i], phid->temperatureMax[i]);
+ }
+ }
+ else if(Temperature[i] < phid->temperatureMin[i])
+ {
+ phid->Temperature[i] = PUNK_DBL;
+ if (phid->TemperatureError[i] == PFALSE)
+ {
+ phid->TemperatureError[i] = PTRUE;
+ FIRE_ERROR(EEPHIDGET_OUTOFRANGE,
+ "Input %d reported a temperature of %.4fC which is below the minimum of %.4fC.",
+ i, Temperature[i], phid->temperatureMin[i]);
+ }
+ }
+ else
+ {
+ phid->Temperature[i] = Temperature[i];
+ phid->TemperatureError[i] = PFALSE;
+ }
+
+ //Potential only on the thermocouple versions
+ switch(phid->phid.deviceIDSpec)
+ {
+ case PHIDID_TEMPERATURESENSOR:
+ case PHIDID_TEMPERATURESENSOR_4:
+ if(Potential[i] > phid->potentialMax)
+ {
+ phid->Potential[i] = PUNK_DBL;
+ if (phid->PotentialError[i] == PFALSE)
+ {
+ phid->PotentialError[i] = PTRUE;
+ FIRE_ERROR(EEPHIDGET_OUTOFRANGE,
+ "Thermocouple %d reported a potential of %.4fmV which is above the maximum of %.4fmV.",
+ i, Potential[i], phid->potentialMax);
+ }
+ }
+ else if(Potential[i] < phid->potentialMin)
+ {
+ phid->Potential[i] = PUNK_DBL;
+ if (phid->PotentialError[i] == PFALSE)
+ {
+ phid->PotentialError[i] = PTRUE;
+ FIRE_ERROR(EEPHIDGET_OUTOFRANGE,
+ "Thermocouple %d reported a potential of %.4fmV which is below the minimum of %.4fmV.",
+ i, Potential[i], phid->potentialMin);
+ }
+ }
+ else
+ {
+ phid->Potential[i] = Potential[i];
+ phid->PotentialError[i] = PFALSE;
+ }
+ break;
+ case PHIDID_TEMPERATURESENSOR_IR:
+ default:
+ break;
+ }
+ }
+
+ //send out any events that exceed or match the trigger
+ for (i = 0; i<phid->phid.attr.temperaturesensor.numTempInputs; i++)
+ {
+ if ((fabs(phid->Temperature[i] - phid->lastTrigger[i]) >= phid->TempChangeTrigger[i] || phid->lastTrigger[i] == PUNK_DBL)
+ && phid->Temperature[i] != PUNK_DBL)
+ {
+ FIRE(TemperatureChange, i, phid->Temperature[i]);
+ phid->lastTrigger[i] = phid->Temperature[i];
+ }
+ }
+
+ return EPHIDGET_OK;
+}
+
+//eventsAfterOpen - sends out an event for all valid data, used during attach initialization
+CPHIDGETINITEVENTS(TemperatureSensor)
+
+ for (i = 0; i<phid->phid.attr.temperaturesensor.numTempInputs; i++)
+ {
+ if(phid->Temperature[i] != PUNK_DBL)
+ FIRE(TemperatureChange, i, phid->Temperature[i]);
+ }
+ return EPHIDGET_OK;
+}
+
+//getPacket - not used for TemperatureSensor
+CGETPACKET(TemperatureSensor)
+ return EPHIDGET_UNEXPECTED;
+}
+
+#define THERMOCOUPLE_TABLE_E_SIZE 1271
+//-270 to 1000 in degrees celcius increments
+const double thermocouple_table_e_type[THERMOCOUPLE_TABLE_E_SIZE] = {
+-9.835, -9.833, -9.831, -9.828, -9.825, -9.821, -9.817, -9.813, -9.808, -9.802,
+-9.797, -9.790, -9.784, -9.777, -9.770, -9.762, -9.754, -9.746, -9.737, -9.728,
+-9.718, -9.709, -9.698, -9.688, -9.677, -9.666, -9.654, -9.642, -9.630, -9.617,
+-9.604, -9.591, -9.577, -9.563, -9.548, -9.534, -9.519, -9.503, -9.487, -9.471,
+-9.455, -9.438, -9.421, -9.404, -9.386, -9.368, -9.350, -9.331, -9.313, -9.293,
+-9.274, -9.254, -9.234, -9.214, -9.193, -9.172, -9.151, -9.129, -9.107, -9.085,
+-9.063, -9.040, -9.017, -8.994, -8.971, -8.947, -8.923, -8.899, -8.874, -8.850,
+-8.825, -8.799, -8.774, -8.748, -8.722, -8.696, -8.669, -8.643, -8.616, -8.588,
+-8.561, -8.533, -8.505, -8.477, -8.449, -8.420, -8.391, -8.362, -8.333, -8.303,
+-8.273, -8.243, -8.213, -8.183, -8.152, -8.121, -8.090, -8.059, -8.027, -7.995,
+-7.963, -7.931, -7.899, -7.866, -7.833, -7.800, -7.767, -7.733, -7.700, -7.666,
+-7.632, -7.597, -7.563, -7.528, -7.493, -7.458, -7.423, -7.387, -7.351, -7.315,
+-7.279, -7.243, -7.206, -7.170, -7.133, -7.096, -7.058, -7.021, -6.983, -6.945,
+-6.907, -6.869, -6.831, -6.792, -6.753, -6.714, -6.675, -6.636, -6.596, -6.556,
+-6.516, -6.476, -6.436, -6.396, -6.355, -6.314, -6.273, -6.232, -6.191, -6.149,
+-6.107, -6.065, -6.023, -5.981, -5.939, -5.896, -5.853, -5.810, -5.767, -5.724,
+-5.681, -5.637, -5.593, -5.549, -5.505, -5.461, -5.417, -5.372, -5.327, -5.282,
+-5.237, -5.192, -5.147, -5.101, -5.055, -5.009, -4.963, -4.917, -4.871, -4.824,
+-4.777, -4.731, -4.684, -4.636, -4.589, -4.542, -4.494, -4.446, -4.398, -4.350,
+-4.302, -4.254, -4.205, -4.156, -4.107, -4.058, -4.009, -3.960, -3.911, -3.861,
+-3.811, -3.761, -3.711, -3.661, -3.611, -3.561, -3.510, -3.459, -3.408, -3.357,
+-3.306, -3.255, -3.204, -3.152, -3.100, -3.048, -2.996, -2.944, -2.892, -2.840,
+-2.787, -2.735, -2.682, -2.629, -2.576, -2.523, -2.469, -2.416, -2.362, -2.309,
+-2.255, -2.201, -2.147, -2.093, -2.038, -1.984, -1.929, -1.874, -1.820, -1.765,
+-1.709, -1.654, -1.599, -1.543, -1.488, -1.432, -1.376, -1.320, -1.264, -1.208,
+-1.152, -1.095, -1.039, -0.982, -0.925, -0.868, -0.811, -0.754, -0.697, -0.639,
+-0.582, -0.524, -0.466, -0.408, -0.350, -0.292, -0.234, -0.176, -0.117, -0.059,
+0.000, 0.059, 0.118, 0.176, 0.235, 0.294, 0.354, 0.413, 0.472, 0.532,
+0.591, 0.651, 0.711, 0.770, 0.830, 0.890, 0.950, 1.010, 1.071, 1.131,
+1.192, 1.252, 1.313, 1.373, 1.434, 1.495, 1.556, 1.617, 1.678, 1.740,
+1.801, 1.862, 1.924, 1.986, 2.047, 2.109, 2.171, 2.233, 2.295, 2.357,
+2.420, 2.482, 2.545, 2.607, 2.670, 2.733, 2.795, 2.858, 2.921, 2.984,
+3.048, 3.111, 3.174, 3.238, 3.301, 3.365, 3.429, 3.492, 3.556, 3.620,
+3.685, 3.749, 3.813, 3.877, 3.942, 4.006, 4.071, 4.136, 4.200, 4.265,
+4.330, 4.395, 4.460, 4.526, 4.591, 4.656, 4.722, 4.788, 4.853, 4.919,
+4.985, 5.051, 5.117, 5.183, 5.249, 5.315, 5.382, 5.448, 5.514, 5.581,
+5.648, 5.714, 5.781, 5.848, 5.915, 5.982, 6.049, 6.117, 6.184, 6.251,
+6.319, 6.386, 6.454, 6.522, 6.590, 6.658, 6.725, 6.794, 6.862, 6.930,
+6.998, 7.066, 7.135, 7.203, 7.272, 7.341, 7.409, 7.478, 7.547, 7.616,
+7.685, 7.754, 7.823, 7.892, 7.962, 8.031, 8.101, 8.170, 8.240, 8.309,
+8.379, 8.449, 8.519, 8.589, 8.659, 8.729, 8.799, 8.869, 8.940, 9.010,
+9.081, 9.151, 9.222, 9.292, 9.363, 9.434, 9.505, 9.576, 9.647, 9.718,
+9.789, 9.860, 9.931, 10.003, 10.074, 10.145, 10.217, 10.288, 10.360, 10.432,
+10.503, 10.575, 10.647, 10.719, 10.791, 10.863, 10.935, 11.007, 11.080, 11.152,
+11.224, 11.297, 11.369, 11.442, 11.514, 11.587, 11.660, 11.733, 11.805, 11.878,
+11.951, 12.024, 12.097, 12.170, 12.243, 12.317, 12.390, 12.463, 12.537, 12.610,
+12.684, 12.757, 12.831, 12.904, 12.978, 13.052, 13.126, 13.199, 13.273, 13.347,
+13.421, 13.495, 13.569, 13.644, 13.718, 13.792, 13.866, 13.941, 14.015, 14.090,
+14.164, 14.239, 14.313, 14.388, 14.463, 14.537, 14.612, 14.687, 14.762, 14.837,
+14.912, 14.987, 15.062, 15.137, 15.212, 15.287, 15.362, 15.438, 15.513, 15.588,
+15.664, 15.739, 15.815, 15.890, 15.966, 16.041, 16.117, 16.193, 16.269, 16.344,
+16.420, 16.496, 16.572, 16.648, 16.724, 16.800, 16.876, 16.952, 17.028, 17.104,
+17.181, 17.257, 17.333, 17.409, 17.486, 17.562, 17.639, 17.715, 17.792, 17.868,
+17.945, 18.021, 18.098, 18.175, 18.252, 18.328, 18.405, 18.482, 18.559, 18.636,
+18.713, 18.790, 18.867, 18.944, 19.021, 19.098, 19.175, 19.252, 19.330, 19.407,
+19.484, 19.561, 19.639, 19.716, 19.794, 19.871, 19.948, 20.026, 20.103, 20.181,
+20.259, 20.336, 20.414, 20.492, 20.569, 20.647, 20.725, 20.803, 20.880, 20.958,
+21.036, 21.114, 21.192, 21.270, 21.348, 21.426, 21.504, 21.582, 21.660, 21.739,
+21.817, 21.895, 21.973, 22.051, 22.130, 22.208, 22.286, 22.365, 22.443, 22.522,
+22.600, 22.678, 22.757, 22.835, 22.914, 22.993, 23.071, 23.150, 23.228, 23.307,
+23.386, 23.464, 23.543, 23.622, 23.701, 23.780, 23.858, 23.937, 24.016, 24.095,
+24.174, 24.253, 24.332, 24.411, 24.490, 24.569, 24.648, 24.727, 24.806, 24.885,
+24.964, 25.044, 25.123, 25.202, 25.281, 25.360, 25.440, 25.519, 25.598, 25.678,
+25.757, 25.836, 25.916, 25.995, 26.075, 26.154, 26.233, 26.313, 26.392, 26.472,
+26.552, 26.631, 26.711, 26.790, 26.870, 26.950, 27.029, 27.109, 27.189, 27.268,
+27.348, 27.428, 27.507, 27.587, 27.667, 27.747, 27.827, 27.907, 27.986, 28.066,
+28.146, 28.226, 28.306, 28.386, 28.466, 28.546, 28.626, 28.706, 28.786, 28.866,
+28.946, 29.026, 29.106, 29.186, 29.266, 29.346, 29.427, 29.507, 29.587, 29.667,
+29.747, 29.827, 29.908, 29.988, 30.068, 30.148, 30.229, 30.309, 30.389, 30.470,
+30.550, 30.630, 30.711, 30.791, 30.871, 30.952, 31.032, 31.112, 31.193, 31.273,
+31.354, 31.434, 31.515, 31.595, 31.676, 31.756, 31.837, 31.917, 31.998, 32.078,
+32.159, 32.239, 32.320, 32.400, 32.481, 32.562, 32.642, 32.723, 32.803, 32.884,
+32.965, 33.045, 33.126, 33.207, 33.287, 33.368, 33.449, 33.529, 33.610, 33.691,
+33.772, 33.852, 33.933, 34.014, 34.095, 34.175, 34.256, 34.337, 34.418, 34.498,
+34.579, 34.660, 34.741, 34.822, 34.902, 34.983, 35.064, 35.145, 35.226, 35.307,
+35.387, 35.468, 35.549, 35.630, 35.711, 35.792, 35.873, 35.954, 36.034, 36.115,
+36.196, 36.277, 36.358, 36.439, 36.520, 36.601, 36.682, 36.763, 36.843, 36.924,
+37.005, 37.086, 37.167, 37.248, 37.329, 37.410, 37.491, 37.572, 37.653, 37.734,
+37.815, 37.896, 37.977, 38.058, 38.139, 38.220, 38.300, 38.381, 38.462, 38.543,
+38.624, 38.705, 38.786, 38.867, 38.948, 39.029, 39.110, 39.191, 39.272, 39.353,
+39.434, 39.515, 39.596, 39.677, 39.758, 39.839, 39.920, 40.001, 40.082, 40.163,
+40.243, 40.324, 40.405, 40.486, 40.567, 40.648, 40.729, 40.810, 40.891, 40.972,
+41.053, 41.134, 41.215, 41.296, 41.377, 41.457, 41.538, 41.619, 41.700, 41.781,
+41.862, 41.943, 42.024, 42.105, 42.185, 42.266, 42.347, 42.428, 42.509, 42.590,
+42.671, 42.751, 42.832, 42.913, 42.994, 43.075, 43.156, 43.236, 43.317, 43.398,
+43.479, 43.560, 43.640, 43.721, 43.802, 43.883, 43.963, 44.044, 44.125, 44.206,
+44.286, 44.367, 44.448, 44.529, 44.609, 44.690, 44.771, 44.851, 44.932, 45.013,
+45.093, 45.174, 45.255, 45.335, 45.416, 45.497, 45.577, 45.658, 45.738, 45.819,
+45.900, 45.980, 46.061, 46.141, 46.222, 46.302, 46.383, 46.463, 46.544, 46.624,
+46.705, 46.785, 46.866, 46.946, 47.027, 47.107, 47.188, 47.268, 47.349, 47.429,
+47.509, 47.590, 47.670, 47.751, 47.831, 47.911, 47.992, 48.072, 48.152, 48.233,
+48.313, 48.393, 48.474, 48.554, 48.634, 48.715, 48.795, 48.875, 48.955, 49.035,
+49.116, 49.196, 49.276, 49.356, 49.436, 49.517, 49.597, 49.677, 49.757, 49.837,
+49.917, 49.997, 50.077, 50.157, 50.238, 50.318, 50.398, 50.478, 50.558, 50.638,
+50.718, 50.798, 50.878, 50.958, 51.038, 51.118, 51.197, 51.277, 51.357, 51.437,
+51.517, 51.597, 51.677, 51.757, 51.837, 51.916, 51.996, 52.076, 52.156, 52.236,
+52.315, 52.395, 52.475, 52.555, 52.634, 52.714, 52.794, 52.873, 52.953, 53.033,
+53.112, 53.192, 53.272, 53.351, 53.431, 53.510, 53.590, 53.670, 53.749, 53.829,
+53.908, 53.988, 54.067, 54.147, 54.226, 54.306, 54.385, 54.465, 54.544, 54.624,
+54.703, 54.782, 54.862, 54.941, 55.021, 55.100, 55.179, 55.259, 55.338, 55.417,
+55.497, 55.576, 55.655, 55.734, 55.814, 55.893, 55.972, 56.051, 56.131, 56.210,
+56.289, 56.368, 56.447, 56.526, 56.606, 56.685, 56.764, 56.843, 56.922, 57.001,
+57.080, 57.159, 57.238, 57.317, 57.396, 57.475, 57.554, 57.633, 57.712, 57.791,
+57.870, 57.949, 58.028, 58.107, 58.186, 58.265, 58.343, 58.422, 58.501, 58.580,
+58.659, 58.738, 58.816, 58.895, 58.974, 59.053, 59.131, 59.210, 59.289, 59.367,
+59.446, 59.525, 59.604, 59.682, 59.761, 59.839, 59.918, 59.997, 60.075, 60.154,
+60.232, 60.311, 60.390, 60.468, 60.547, 60.625, 60.704, 60.782, 60.860, 60.939,
+61.017, 61.096, 61.174, 61.253, 61.331, 61.409, 61.488, 61.566, 61.644, 61.723,
+61.801, 61.879, 61.958, 62.036, 62.114, 62.192, 62.271, 62.349, 62.427, 62.505,
+62.583, 62.662, 62.740, 62.818, 62.896, 62.974, 63.052, 63.130, 63.208, 63.286,
+63.364, 63.442, 63.520, 63.598, 63.676, 63.754, 63.832, 63.910, 63.988, 64.066,
+64.144, 64.222, 64.300, 64.377, 64.455, 64.533, 64.611, 64.689, 64.766, 64.844,
+64.922, 65.000, 65.077, 65.155, 65.233, 65.310, 65.388, 65.465, 65.543, 65.621,
+65.698, 65.776, 65.853, 65.931, 66.008, 66.086, 66.163, 66.241, 66.318, 66.396,
+66.473, 66.550, 66.628, 66.705, 66.782, 66.860, 66.937, 67.014, 67.092, 67.169,
+67.246, 67.323, 67.400, 67.478, 67.555, 67.632, 67.709, 67.786, 67.863, 67.940,
+68.017, 68.094, 68.171, 68.248, 68.325, 68.402, 68.479, 68.556, 68.633, 68.710,
+68.787, 68.863, 68.940, 69.017, 69.094, 69.171, 69.247, 69.324, 69.401, 69.477,
+69.554, 69.631, 69.707, 69.784, 69.860, 69.937, 70.013, 70.090, 70.166, 70.243,
+70.319, 70.396, 70.472, 70.548, 70.625, 70.701, 70.777, 70.854, 70.930, 71.006,
+71.082, 71.159, 71.235, 71.311, 71.387, 71.463, 71.539, 71.615, 71.692, 71.768,
+71.844, 71.920, 71.996, 72.072, 72.147, 72.223, 72.299, 72.375, 72.451, 72.527,
+72.603, 72.678, 72.754, 72.830, 72.906, 72.981, 73.057, 73.133, 73.208, 73.284,
+73.360, 73.435, 73.511, 73.586, 73.662, 73.738, 73.813, 73.889, 73.964, 74.040,
+74.115, 74.190, 74.266, 74.341, 74.417, 74.492, 74.567, 74.643, 74.718, 74.793,
+74.869, 74.944, 75.019, 75.095, 75.170, 75.245, 75.320, 75.395, 75.471, 75.546,
+75.621, 75.696, 75.771, 75.847, 75.922, 75.997, 76.072, 76.147, 76.223, 76.298,
+76.373};
+
+
+#define THERMOCOUPLE_TABLE_T_SIZE 671
+//-270 to 400 in degrees celcius increments
+const double thermocouple_table_t_type[THERMOCOUPLE_TABLE_T_SIZE] = {
+-6.258, -6.256, -6.255, -6.253, -6.251, -6.248, -6.245, -6.242, -6.239, -6.236,
+-6.232, -6.228, -6.223, -6.219, -6.214, -6.209, -6.204, -6.198, -6.193, -6.187,
+-6.180, -6.174, -6.167, -6.160, -6.153, -6.146, -6.138, -6.130, -6.122, -6.114,
+-6.105, -6.096, -6.087, -6.078, -6.068, -6.059, -6.049, -6.038, -6.028, -6.017,
+-6.007, -5.996, -5.985, -5.973, -5.962, -5.950, -5.938, -5.926, -5.914, -5.901,
+-5.888, -5.876, -5.863, -5.850, -5.836, -5.823, -5.809, -5.795, -5.782, -5.767,
+-5.753, -5.739, -5.724, -5.710, -5.695, -5.680, -5.665, -5.650, -5.634, -5.619,
+-5.603, -5.587, -5.571, -5.555, -5.539, -5.523, -5.506, -5.489, -5.473, -5.456,
+-5.439, -5.421, -5.404, -5.387, -5.369, -5.351, -5.334, -5.316, -5.297, -5.279,
+-5.261, -5.242, -5.224, -5.205, -5.186, -5.167, -5.148, -5.128, -5.109, -5.089,
+-5.070, -5.050, -5.030, -5.010, -4.989, -4.969, -4.949, -4.928, -4.907, -4.886,
+-4.865, -4.844, -4.823, -4.802, -4.780, -4.759, -4.737, -4.715, -4.693, -4.671,
+-4.648, -4.626, -4.604, -4.581, -4.558, -4.535, -4.512, -4.489, -4.466, -4.443,
+-4.419, -4.395, -4.372, -4.348, -4.324, -4.300, -4.275, -4.251, -4.226, -4.202,
+-4.177, -4.152, -4.127, -4.102, -4.077, -4.052, -4.026, -4.000, -3.975, -3.949,
+-3.923, -3.897, -3.871, -3.844, -3.818, -3.791, -3.765, -3.738, -3.711, -3.684,
+-3.657, -3.629, -3.602, -3.574, -3.547, -3.519, -3.491, -3.463, -3.435, -3.407,
+-3.379, -3.350, -3.322, -3.293, -3.264, -3.235, -3.206, -3.177, -3.148, -3.118,
+-3.089, -3.059, -3.030, -3.000, -2.970, -2.940, -2.910, -2.879, -2.849, -2.818,
+-2.788, -2.757, -2.726, -2.695, -2.664, -2.633, -2.602, -2.571, -2.539, -2.507,
+-2.476, -2.444, -2.412, -2.380, -2.348, -2.316, -2.283, -2.251, -2.218, -2.186,
+-2.153, -2.120, -2.087, -2.054, -2.021, -1.987, -1.954, -1.920, -1.887, -1.853,
+-1.819, -1.785, -1.751, -1.717, -1.683, -1.648, -1.614, -1.579, -1.545, -1.510,
+-1.475, -1.440, -1.405, -1.370, -1.335, -1.299, -1.264, -1.228, -1.192, -1.157,
+-1.121, -1.085, -1.049, -1.013, -0.976, -0.940, -0.904, -0.867, -0.830, -0.794,
+-0.757, -0.720, -0.683, -0.646, -0.608, -0.571, -0.534, -0.496, -0.459, -0.421,
+-0.383, -0.345, -0.307, -0.269, -0.231, -0.193, -0.154, -0.116, -0.077, -0.039,
+0.000, 0.039, 0.078, 0.117, 0.156, 0.195, 0.234, 0.273, 0.312, 0.352,
+0.391, 0.431, 0.470, 0.510, 0.549, 0.589, 0.629, 0.669, 0.709, 0.749,
+0.790, 0.830, 0.870, 0.911, 0.951, 0.992, 1.033, 1.074, 1.114, 1.155,
+1.196, 1.238, 1.279, 1.320, 1.362, 1.403, 1.445, 1.486, 1.528, 1.570,
+1.612, 1.654, 1.696, 1.738, 1.780, 1.823, 1.865, 1.908, 1.950, 1.993,
+2.036, 2.079, 2.122, 2.165, 2.208, 2.251, 2.294, 2.338, 2.381, 2.425,
+2.468, 2.512, 2.556, 2.600, 2.643, 2.687, 2.732, 2.776, 2.820, 2.864,
+2.909, 2.953, 2.998, 3.043, 3.087, 3.132, 3.177, 3.222, 3.267, 3.312,
+3.358, 3.403, 3.448, 3.494, 3.539, 3.585, 3.631, 3.677, 3.722, 3.768,
+3.814, 3.860, 3.907, 3.953, 3.999, 4.046, 4.092, 4.138, 4.185, 4.232,
+4.279, 4.325, 4.372, 4.419, 4.466, 4.513, 4.561, 4.608, 4.655, 4.702,
+4.750, 4.798, 4.845, 4.893, 4.941, 4.988, 5.036, 5.084, 5.132, 5.180,
+5.228, 5.277, 5.325, 5.373, 5.422, 5.470, 5.519, 5.567, 5.616, 5.665,
+5.714, 5.763, 5.812, 5.861, 5.910, 5.959, 6.008, 6.057, 6.107, 6.156,
+6.206, 6.255, 6.305, 6.355, 6.404, 6.454, 6.504, 6.554, 6.604, 6.654,
+6.704, 6.754, 6.805, 6.855, 6.905, 6.956, 7.006, 7.057, 7.107, 7.158,
+7.209, 7.260, 7.310, 7.361, 7.412, 7.463, 7.515, 7.566, 7.617, 7.668,
+7.720, 7.771, 7.823, 7.874, 7.926, 7.977, 8.029, 8.081, 8.133, 8.185,
+8.237, 8.289, 8.341, 8.393, 8.445, 8.497, 8.550, 8.602, 8.654, 8.707,
+8.759, 8.812, 8.865, 8.917, 8.970, 9.023, 9.076, 9.129, 9.182, 9.235,
+9.288, 9.341, 9.395, 9.448, 9.501, 9.555, 9.608, 9.662, 9.715, 9.769,
+9.822, 9.876, 9.930, 9.984, 10.038, 10.092, 10.146, 10.200, 10.254, 10.308,
+10.362, 10.417, 10.471, 10.525, 10.580, 10.634, 10.689, 10.743, 10.798, 10.853,
+10.907, 10.962, 11.017, 11.072, 11.127, 11.182, 11.237, 11.292, 11.347, 11.403,
+11.458, 11.513, 11.569, 11.624, 11.680, 11.735, 11.791, 11.846, 11.902, 11.958,
+12.013, 12.069, 12.125, 12.181, 12.237, 12.293, 12.349, 12.405, 12.461, 12.518,
+12.574, 12.630, 12.687, 12.743, 12.799, 12.856, 12.912, 12.969, 13.026, 13.082,
+13.139, 13.196, 13.253, 13.310, 13.366, 13.423, 13.480, 13.537, 13.595, 13.652,
+13.709, 13.766, 13.823, 13.881, 13.938, 13.995, 14.053, 14.110, 14.168, 14.226,
+14.283, 14.341, 14.399, 14.456, 14.514, 14.572, 14.630, 14.688, 14.746, 14.804,
+14.862, 14.920, 14.978, 15.036, 15.095, 15.153, 15.211, 15.270, 15.328, 15.386,
+15.445, 15.503, 15.562, 15.621, 15.679, 15.738, 15.797, 15.856, 15.914, 15.973,
+16.032, 16.091, 16.150, 16.209, 16.268, 16.327, 16.387, 16.446, 16.505, 16.564,
+16.624, 16.683, 16.742, 16.802, 16.861, 16.921, 16.980, 17.040, 17.100, 17.159,
+17.219, 17.279, 17.339, 17.399, 17.458, 17.518, 17.578, 17.638, 17.698, 17.759,
+17.819, 17.879, 17.939, 17.999, 18.060, 18.120, 18.180, 18.241, 18.301, 18.362,
+18.422, 18.483, 18.543, 18.604, 18.665, 18.725, 18.786, 18.847, 18.908, 18.969,
+19.030, 19.091, 19.152, 19.213, 19.274, 19.335, 19.396, 19.457, 19.518, 19.579,
+19.641, 19.702, 19.763, 19.825, 19.886, 19.947, 20.009, 20.070, 20.132, 20.193,
+20.255, 20.317, 20.378, 20.440, 20.502, 20.563, 20.625, 20.687, 20.748, 20.810,
+20.872};
+
+
+#define THERMOCOUPLE_TABLE_J_SIZE 1411
+//-210 to 1200 in degrees celcius increments
+const double thermocouple_table_j_type[THERMOCOUPLE_TABLE_J_SIZE] = {
+-8.095, -8.076, -8.057, -8.037, -8.017, -7.996, -7.976, -7.955, -7.934, -7.912,
+-7.890, -7.868, -7.846, -7.824, -7.801, -7.778, -7.755, -7.731, -7.707, -7.683,
+-7.659, -7.634, -7.610, -7.585, -7.559, -7.534, -7.508, -7.482, -7.456, -7.429,
+-7.403, -7.376, -7.348, -7.321, -7.293, -7.265, -7.237, -7.209, -7.181, -7.152,
+-7.123, -7.094, -7.064, -7.035, -7.005, -6.975, -6.944, -6.914, -6.883, -6.853,
+-6.821, -6.790, -6.759, -6.727, -6.695, -6.663, -6.631, -6.598, -6.566, -6.533,
+-6.500, -6.467, -6.433, -6.400, -6.366, -6.332, -6.298, -6.263, -6.229, -6.194,
+-6.159, -6.124, -6.089, -6.054, -6.018, -5.982, -5.946, -5.910, -5.874, -5.838,
+-5.801, -5.764, -5.727, -5.690, -5.653, -5.616, -5.578, -5.541, -5.503, -5.465,
+-5.426, -5.388, -5.350, -5.311, -5.272, -5.233, -5.194, -5.155, -5.116, -5.076,
+-5.037, -4.997, -4.957, -4.917, -4.877, -4.836, -4.796, -4.755, -4.714, -4.674,
+-4.633, -4.591, -4.550, -4.509, -4.467, -4.425, -4.384, -4.342, -4.300, -4.257,
+-4.215, -4.173, -4.130, -4.088, -4.045, -4.002, -3.959, -3.916, -3.872, -3.829,
+-3.786, -3.742, -3.698, -3.654, -3.610, -3.566, -3.522, -3.478, -3.434, -3.389,
+-3.344, -3.300, -3.255, -3.210, -3.165, -3.120, -3.075, -3.029, -2.984, -2.938,
+-2.893, -2.847, -2.801, -2.755, -2.709, -2.663, -2.617, -2.571, -2.524, -2.478,
+-2.431, -2.385, -2.338, -2.291, -2.244, -2.197, -2.150, -2.103, -2.055, -2.008,
+-1.961, -1.913, -1.865, -1.818, -1.770, -1.722, -1.674, -1.626, -1.578, -1.530,
+-1.482, -1.433, -1.385, -1.336, -1.288, -1.239, -1.190, -1.142, -1.093, -1.044,
+-0.995, -0.946, -0.896, -0.847, -0.798, -0.749, -0.699, -0.650, -0.600, -0.550,
+-0.501, -0.451, -0.401, -0.351, -0.301, -0.251, -0.201, -0.151, -0.101, -0.050,
+0.000, 0.050, 0.101, 0.151, 0.202, 0.253, 0.303, 0.354, 0.405, 0.456,
+0.507, 0.558, 0.609, 0.660, 0.711, 0.762, 0.814, 0.865, 0.916, 0.968,
+1.019, 1.071, 1.122, 1.174, 1.226, 1.277, 1.329, 1.381, 1.433, 1.485,
+1.537, 1.589, 1.641, 1.693, 1.745, 1.797, 1.849, 1.902, 1.954, 2.006,
+2.059, 2.111, 2.164, 2.216, 2.269, 2.322, 2.374, 2.427, 2.480, 2.532,
+2.585, 2.638, 2.691, 2.744, 2.797, 2.850, 2.903, 2.956, 3.009, 3.062,
+3.116, 3.169, 3.222, 3.275, 3.329, 3.382, 3.436, 3.489, 3.543, 3.596,
+3.650, 3.703, 3.757, 3.810, 3.864, 3.918, 3.971, 4.025, 4.079, 4.133,
+4.187, 4.240, 4.294, 4.348, 4.402, 4.456, 4.510, 4.564, 4.618, 4.672,
+4.726, 4.781, 4.835, 4.889, 4.943, 4.997, 5.052, 5.106, 5.160, 5.215,
+5.269, 5.323, 5.378, 5.432, 5.487, 5.541, 5.595, 5.650, 5.705, 5.759,
+5.814, 5.868, 5.923, 5.977, 6.032, 6.087, 6.141, 6.196, 6.251, 6.306,
+6.360, 6.415, 6.470, 6.525, 6.579, 6.634, 6.689, 6.744, 6.799, 6.854,
+6.909, 6.964, 7.019, 7.074, 7.129, 7.184, 7.239, 7.294, 7.349, 7.404,
+7.459, 7.514, 7.569, 7.624, 7.679, 7.734, 7.789, 7.844, 7.900, 7.955,
+8.010, 8.065, 8.120, 8.175, 8.231, 8.286, 8.341, 8.396, 8.452, 8.507,
+8.562, 8.618, 8.673, 8.728, 8.783, 8.839, 8.894, 8.949, 9.005, 9.060,
+9.115, 9.171, 9.226, 9.282, 9.337, 9.392, 9.448, 9.503, 9.559, 9.614,
+9.669, 9.725, 9.780, 9.836, 9.891, 9.947, 10.002, 10.057, 10.113, 10.168,
+10.224, 10.279, 10.335, 10.390, 10.446, 10.501, 10.557, 10.612, 10.668, 10.723,
+10.779, 10.834, 10.890, 10.945, 11.001, 11.056, 11.112, 11.167, 11.223, 11.278,
+11.334, 11.389, 11.445, 11.501, 11.556, 11.612, 11.667, 11.723, 11.778, 11.834,
+11.889, 11.945, 12.000, 12.056, 12.111, 12.167, 12.222, 12.278, 12.334, 12.389,
+12.445, 12.500, 12.556, 12.611, 12.667, 12.722, 12.778, 12.833, 12.889, 12.944,
+13.000, 13.056, 13.111, 13.167, 13.222, 13.278, 13.333, 13.389, 13.444, 13.500,
+13.555, 13.611, 13.666, 13.722, 13.777, 13.833, 13.888, 13.944, 13.999, 14.055,
+14.110, 14.166, 14.221, 14.277, 14.332, 14.388, 14.443, 14.499, 14.554, 14.609,
+14.665, 14.720, 14.776, 14.831, 14.887, 14.942, 14.998, 15.053, 15.109, 15.164,
+15.219, 15.275, 15.330, 15.386, 15.441, 15.496, 15.552, 15.607, 15.663, 15.718,
+15.773, 15.829, 15.884, 15.940, 15.995, 16.050, 16.106, 16.161, 16.216, 16.272,
+16.327, 16.383, 16.438, 16.493, 16.549, 16.604, 16.659, 16.715, 16.770, 16.825,
+16.881, 16.936, 16.991, 17.046, 17.102, 17.157, 17.212, 17.268, 17.323, 17.378,
+17.434, 17.489, 17.544, 17.599, 17.655, 17.710, 17.765, 17.820, 17.876, 17.931,
+17.986, 18.041, 18.097, 18.152, 18.207, 18.262, 18.318, 18.373, 18.428, 18.483,
+18.538, 18.594, 18.649, 18.704, 18.759, 18.814, 18.870, 18.925, 18.980, 19.035,
+19.090, 19.146, 19.201, 19.256, 19.311, 19.366, 19.422, 19.477, 19.532, 19.587,
+19.642, 19.697, 19.753, 19.808, 19.863, 19.918, 19.973, 20.028, 20.083, 20.139,
+20.194, 20.249, 20.304, 20.359, 20.414, 20.469, 20.525, 20.580, 20.635, 20.690,
+20.745, 20.800, 20.855, 20.911, 20.966, 21.021, 21.076, 21.131, 21.186, 21.241,
+21.297, 21.352, 21.407, 21.462, 21.517, 21.572, 21.627, 21.683, 21.738, 21.793,
+21.848, 21.903, 21.958, 22.014, 22.069, 22.124, 22.179, 22.234, 22.289, 22.345,
+22.400, 22.455, 22.510, 22.565, 22.620, 22.676, 22.731, 22.786, 22.841, 22.896,
+22.952, 23.007, 23.062, 23.117, 23.172, 23.228, 23.283, 23.338, 23.393, 23.449,
+23.504, 23.559, 23.614, 23.670, 23.725, 23.780, 23.835, 23.891, 23.946, 24.001,
+24.057, 24.112, 24.167, 24.223, 24.278, 24.333, 24.389, 24.444, 24.499, 24.555,
+24.610, 24.665, 24.721, 24.776, 24.832, 24.887, 24.943, 24.998, 25.053, 25.109,
+25.164, 25.220, 25.275, 25.331, 25.386, 25.442, 25.497, 25.553, 25.608, 25.664,
+25.720, 25.775, 25.831, 25.886, 25.942, 25.998, 26.053, 26.109, 26.165, 26.220,
+26.276, 26.332, 26.387, 26.443, 26.499, 26.555, 26.610, 26.666, 26.722, 26.778,
+26.834, 26.889, 26.945, 27.001, 27.057, 27.113, 27.169, 27.225, 27.281, 27.337,
+27.393, 27.449, 27.505, 27.561, 27.617, 27.673, 27.729, 27.785, 27.841, 27.897,
+27.953, 28.010, 28.066, 28.122, 28.178, 28.234, 28.291, 28.347, 28.403, 28.460,
+28.516, 28.572, 28.629, 28.685, 28.741, 28.798, 28.854, 28.911, 28.967, 29.024,
+29.080, 29.137, 29.194, 29.250, 29.307, 29.363, 29.420, 29.477, 29.534, 29.590,
+29.647, 29.704, 29.761, 29.818, 29.874, 29.931, 29.988, 30.045, 30.102, 30.159,
+30.216, 30.273, 30.330, 30.387, 30.444, 30.502, 30.559, 30.616, 30.673, 30.730,
+30.788, 30.845, 30.902, 30.960, 31.017, 31.074, 31.132, 31.189, 31.247, 31.304,
+31.362, 31.419, 31.477, 31.535, 31.592, 31.650, 31.708, 31.766, 31.823, 31.881,
+31.939, 31.997, 32.055, 32.113, 32.171, 32.229, 32.287, 32.345, 32.403, 32.461,
+32.519, 32.577, 32.636, 32.694, 32.752, 32.810, 32.869, 32.927, 32.985, 33.044,
+33.102, 33.161, 33.219, 33.278, 33.337, 33.395, 33.454, 33.513, 33.571, 33.630,
+33.689, 33.748, 33.807, 33.866, 33.925, 33.984, 34.043, 34.102, 34.161, 34.220,
+34.279, 34.338, 34.397, 34.457, 34.516, 34.575, 34.635, 34.694, 34.754, 34.813,
+34.873, 34.932, 34.992, 35.051, 35.111, 35.171, 35.230, 35.290, 35.350, 35.410,
+35.470, 35.530, 35.590, 35.650, 35.710, 35.770, 35.830, 35.890, 35.950, 36.010,
+36.071, 36.131, 36.191, 36.252, 36.312, 36.373, 36.433, 36.494, 36.554, 36.615,
+36.675, 36.736, 36.797, 36.858, 36.918, 36.979, 37.040, 37.101, 37.162, 37.223,
+37.284, 37.345, 37.406, 37.467, 37.528, 37.590, 37.651, 37.712, 37.773, 37.835,
+37.896, 37.958, 38.019, 38.081, 38.142, 38.204, 38.265, 38.327, 38.389, 38.450,
+38.512, 38.574, 38.636, 38.698, 38.760, 38.822, 38.884, 38.946, 39.008, 39.070,
+39.132, 39.194, 39.256, 39.318, 39.381, 39.443, 39.505, 39.568, 39.630, 39.693,
+39.755, 39.818, 39.880, 39.943, 40.005, 40.068, 40.131, 40.193, 40.256, 40.319,
+40.382, 40.445, 40.508, 40.570, 40.633, 40.696, 40.759, 40.822, 40.886, 40.949,
+41.012, 41.075, 41.138, 41.201, 41.265, 41.328, 41.391, 41.455, 41.518, 41.581,
+41.645, 41.708, 41.772, 41.835, 41.899, 41.962, 42.026, 42.090, 42.153, 42.217,
+42.281, 42.344, 42.408, 42.472, 42.536, 42.599, 42.663, 42.727, 42.791, 42.855,
+42.919, 42.983, 43.047, 43.111, 43.175, 43.239, 43.303, 43.367, 43.431, 43.495,
+43.559, 43.624, 43.688, 43.752, 43.817, 43.881, 43.945, 44.010, 44.074, 44.139,
+44.203, 44.267, 44.332, 44.396, 44.461, 44.525, 44.590, 44.655, 44.719, 44.784,
+44.848, 44.913, 44.977, 45.042, 45.107, 45.171, 45.236, 45.301, 45.365, 45.430,
+45.494, 45.559, 45.624, 45.688, 45.753, 45.818, 45.882, 45.947, 46.011, 46.076,
+46.141, 46.205, 46.270, 46.334, 46.399, 46.464, 46.528, 46.593, 46.657, 46.722,
+46.786, 46.851, 46.915, 46.980, 47.044, 47.109, 47.173, 47.238, 47.302, 47.367,
+47.431, 47.495, 47.560, 47.624, 47.688, 47.753, 47.817, 47.881, 47.946, 48.010,
+48.074, 48.138, 48.202, 48.267, 48.331, 48.395, 48.459, 48.523, 48.587, 48.651,
+48.715, 48.779, 48.843, 48.907, 48.971, 49.034, 49.098, 49.162, 49.226, 49.290,
+49.353, 49.417, 49.481, 49.544, 49.608, 49.672, 49.735, 49.799, 49.862, 49.926,
+49.989, 50.052, 50.116, 50.179, 50.243, 50.306, 50.369, 50.432, 50.495, 50.559,
+50.622, 50.685, 50.748, 50.811, 50.874, 50.937, 51.000, 51.063, 51.126, 51.188,
+51.251, 51.314, 51.377, 51.439, 51.502, 51.565, 51.627, 51.690, 51.752, 51.815,
+51.877, 51.940, 52.002, 52.064, 52.127, 52.189, 52.251, 52.314, 52.376, 52.438,
+52.500, 52.562, 52.624, 52.686, 52.748, 52.810, 52.872, 52.934, 52.996, 53.057,
+53.119, 53.181, 53.243, 53.304, 53.366, 53.427, 53.489, 53.550, 53.612, 53.673,
+53.735, 53.796, 53.857, 53.919, 53.980, 54.041, 54.102, 54.164, 54.225, 54.286,
+54.347, 54.408, 54.469, 54.530, 54.591, 54.652, 54.713, 54.773, 54.834, 54.895,
+54.956, 55.016, 55.077, 55.138, 55.198, 55.259, 55.319, 55.380, 55.440, 55.501,
+55.561, 55.622, 55.682, 55.742, 55.803, 55.863, 55.923, 55.983, 56.043, 56.104,
+56.164, 56.224, 56.284, 56.344, 56.404, 56.464, 56.524, 56.584, 56.643, 56.703,
+56.763, 56.823, 56.883, 56.942, 57.002, 57.062, 57.121, 57.181, 57.240, 57.300,
+57.360, 57.419, 57.479, 57.538, 57.597, 57.657, 57.716, 57.776, 57.835, 57.894,
+57.953, 58.013, 58.072, 58.131, 58.190, 58.249, 58.309, 58.368, 58.427, 58.486,
+58.545, 58.604, 58.663, 58.722, 58.781, 58.840, 58.899, 58.957, 59.016, 59.075,
+59.134, 59.193, 59.252, 59.310, 59.369, 59.428, 59.487, 59.545, 59.604, 59.663,
+59.721, 59.780, 59.838, 59.897, 59.956, 60.014, 60.073, 60.131, 60.190, 60.248,
+60.307, 60.365, 60.423, 60.482, 60.540, 60.599, 60.657, 60.715, 60.774, 60.832,
+60.890, 60.949, 61.007, 61.065, 61.123, 61.182, 61.240, 61.298, 61.356, 61.415,
+61.473, 61.531, 61.589, 61.647, 61.705, 61.763, 61.822, 61.880, 61.938, 61.996,
+62.054, 62.112, 62.170, 62.228, 62.286, 62.344, 62.402, 62.460, 62.518, 62.576,
+62.634, 62.692, 62.750, 62.808, 62.866, 62.924, 62.982, 63.040, 63.098, 63.156,
+63.214, 63.271, 63.329, 63.387, 63.445, 63.503, 63.561, 63.619, 63.677, 63.734,
+63.792, 63.850, 63.908, 63.966, 64.024, 64.081, 64.139, 64.197, 64.255, 64.313,
+64.370, 64.428, 64.486, 64.544, 64.602, 64.659, 64.717, 64.775, 64.833, 64.890,
+64.948, 65.006, 65.064, 65.121, 65.179, 65.237, 65.295, 65.352, 65.410, 65.468,
+65.525, 65.583, 65.641, 65.699, 65.756, 65.814, 65.872, 65.929, 65.987, 66.045,
+66.102, 66.160, 66.218, 66.275, 66.333, 66.391, 66.448, 66.506, 66.564, 66.621,
+66.679, 66.737, 66.794, 66.852, 66.910, 66.967, 67.025, 67.082, 67.140, 67.198,
+67.255, 67.313, 67.370, 67.428, 67.486, 67.543, 67.601, 67.658, 67.716, 67.773,
+67.831, 67.888, 67.946, 68.003, 68.061, 68.119, 68.176, 68.234, 68.291, 68.348,
+68.406, 68.463, 68.521, 68.578, 68.636, 68.693, 68.751, 68.808, 68.865, 68.923,
+68.980, 69.037, 69.095, 69.152, 69.209, 69.267, 69.324, 69.381, 69.439, 69.496,
+69.553};
+
+#define THERMOCOUPLE_TABLE_K_SIZE 1643
+//-270 to 1372 in degrees celcius increments
+const double thermocouple_table_k_type[THERMOCOUPLE_TABLE_K_SIZE] = {
+-6.458, -6.457, -6.456, -6.455, -6.453, -6.452, -6.450, -6.448, -6.446, -6.444,
+-6.441, -6.438, -6.435, -6.432, -6.429, -6.425, -6.421, -6.417, -6.413, -6.408,
+-6.404, -6.399, -6.393, -6.388, -6.382, -6.377, -6.370, -6.364, -6.358, -6.351,
+-6.344, -6.337, -6.329, -6.322, -6.314, -6.306, -6.297, -6.289, -6.280, -6.271,
+-6.262, -6.252, -6.243, -6.233, -6.223, -6.213, -6.202, -6.192, -6.181, -6.170,
+-6.158, -6.147, -6.135, -6.123, -6.111, -6.099, -6.087, -6.074, -6.061, -6.048,
+-6.035, -6.021, -6.007, -5.994, -5.980, -5.965, -5.951, -5.936, -5.922, -5.907,
+-5.891, -5.876, -5.861, -5.845, -5.829, -5.813, -5.797, -5.780, -5.763, -5.747,
+-5.730, -5.713, -5.695, -5.678, -5.660, -5.642, -5.624, -5.606, -5.588, -5.569,
+-5.550, -5.531, -5.512, -5.493, -5.474, -5.454, -5.435, -5.415, -5.395, -5.374,
+-5.354, -5.333, -5.313, -5.292, -5.271, -5.250, -5.228, -5.207, -5.185, -5.163,
+-5.141, -5.119, -5.097, -5.074, -5.052, -5.029, -5.006, -4.983, -4.960, -4.936,
+-4.913, -4.889, -4.865, -4.841, -4.817, -4.793, -4.768, -4.744, -4.719, -4.694,
+-4.669, -4.644, -4.618, -4.593, -4.567, -4.542, -4.516, -4.490, -4.463, -4.437,
+-4.411, -4.384, -4.357, -4.330, -4.303, -4.276, -4.249, -4.221, -4.194, -4.166,
+-4.138, -4.110, -4.082, -4.054, -4.025, -3.997, -3.968, -3.939, -3.911, -3.882,
+-3.852, -3.823, -3.794, -3.764, -3.734, -3.705, -3.675, -3.645, -3.614, -3.584,
+-3.554, -3.523, -3.492, -3.462, -3.431, -3.400, -3.368, -3.337, -3.306, -3.274,
+-3.243, -3.211, -3.179, -3.147, -3.115, -3.083, -3.050, -3.018, -2.986, -2.953,
+-2.920, -2.887, -2.854, -2.821, -2.788, -2.755, -2.721, -2.688, -2.654, -2.620,
+-2.587, -2.553, -2.519, -2.485, -2.450, -2.416, -2.382, -2.347, -2.312, -2.278,
+-2.243, -2.208, -2.173, -2.138, -2.103, -2.067, -2.032, -1.996, -1.961, -1.925,
+-1.889, -1.854, -1.818, -1.782, -1.745, -1.709, -1.673, -1.637, -1.600, -1.564,
+-1.527, -1.490, -1.453, -1.417, -1.380, -1.343, -1.305, -1.268, -1.231, -1.194,
+-1.156, -1.119, -1.081, -1.043, -1.006, -0.968, -0.930, -0.892, -0.854, -0.816,
+-0.778, -0.739, -0.701, -0.663, -0.624, -0.586, -0.547, -0.508, -0.470, -0.431,
+-0.392, -0.353, -0.314, -0.275, -0.236, -0.197, -0.157, -0.118, -0.079, -0.039,
+0.000, 0.039, 0.079, 0.119, 0.158, 0.198, 0.238, 0.277, 0.317, 0.357,
+0.397, 0.437, 0.477, 0.517, 0.557, 0.597, 0.637, 0.677, 0.718, 0.758,
+0.798, 0.838, 0.879, 0.919, 0.960, 1.000, 1.041, 1.081, 1.122, 1.163,
+1.203, 1.244, 1.285, 1.326, 1.366, 1.407, 1.448, 1.489, 1.530, 1.571,
+1.612, 1.653, 1.694, 1.735, 1.776, 1.817, 1.858, 1.899, 1.941, 1.982,
+2.023, 2.064, 2.106, 2.147, 2.188, 2.230, 2.271, 2.312, 2.354, 2.395,
+2.436, 2.478, 2.519, 2.561, 2.602, 2.644, 2.685, 2.727, 2.768, 2.810,
+2.851, 2.893, 2.934, 2.976, 3.017, 3.059, 3.100, 3.142, 3.184, 3.225,
+3.267, 3.308, 3.350, 3.391, 3.433, 3.474, 3.516, 3.557, 3.599, 3.640,
+3.682, 3.723, 3.765, 3.806, 3.848, 3.889, 3.931, 3.972, 4.013, 4.055,
+4.096, 4.138, 4.179, 4.220, 4.262, 4.303, 4.344, 4.385, 4.427, 4.468,
+4.509, 4.550, 4.591, 4.633, 4.674, 4.715, 4.756, 4.797, 4.838, 4.879,
+4.920, 4.961, 5.002, 5.043, 5.084, 5.124, 5.165, 5.206, 5.247, 5.288,
+5.328, 5.369, 5.410, 5.450, 5.491, 5.532, 5.572, 5.613, 5.653, 5.694,
+5.735, 5.775, 5.815, 5.856, 5.896, 5.937, 5.977, 6.017, 6.058, 6.098,
+6.138, 6.179, 6.219, 6.259, 6.299, 6.339, 6.380, 6.420, 6.460, 6.500,
+6.540, 6.580, 6.620, 6.660, 6.701, 6.741, 6.781, 6.821, 6.861, 6.901,
+6.941, 6.981, 7.021, 7.060, 7.100, 7.140, 7.180, 7.220, 7.260, 7.300,
+7.340, 7.380, 7.420, 7.460, 7.500, 7.540, 7.579, 7.619, 7.659, 7.699,
+7.739, 7.779, 7.819, 7.859, 7.899, 7.939, 7.979, 8.019, 8.059, 8.099,
+8.138, 8.178, 8.218, 8.258, 8.298, 8.338, 8.378, 8.418, 8.458, 8.499,
+8.539, 8.579, 8.619, 8.659, 8.699, 8.739, 8.779, 8.819, 8.860, 8.900,
+8.940, 8.980, 9.020, 9.061, 9.101, 9.141, 9.181, 9.222, 9.262, 9.302,
+9.343, 9.383, 9.423, 9.464, 9.504, 9.545, 9.585, 9.626, 9.666, 9.707,
+9.747, 9.788, 9.828, 9.869, 9.909, 9.950, 9.991, 10.031, 10.072, 10.113,
+10.153, 10.194, 10.235, 10.276, 10.316, 10.357, 10.398, 10.439, 10.480, 10.520,
+10.561, 10.602, 10.643, 10.684, 10.725, 10.766, 10.807, 10.848, 10.889, 10.930,
+10.971, 11.012, 11.053, 11.094, 11.135, 11.176, 11.217, 11.259, 11.300, 11.341,
+11.382, 11.423, 11.465, 11.506, 11.547, 11.588, 11.630, 11.671, 11.712, 11.753,
+11.795, 11.836, 11.877, 11.919, 11.960, 12.001, 12.043, 12.084, 12.126, 12.167,
+12.209, 12.250, 12.291, 12.333, 12.374, 12.416, 12.457, 12.499, 12.540, 12.582,
+12.624, 12.665, 12.707, 12.748, 12.790, 12.831, 12.873, 12.915, 12.956, 12.998,
+13.040, 13.081, 13.123, 13.165, 13.206, 13.248, 13.290, 13.331, 13.373, 13.415,
+13.457, 13.498, 13.540, 13.582, 13.624, 13.665, 13.707, 13.749, 13.791, 13.833,
+13.874, 13.916, 13.958, 14.000, 14.042, 14.084, 14.126, 14.167, 14.209, 14.251,
+14.293, 14.335, 14.377, 14.419, 14.461, 14.503, 14.545, 14.587, 14.629, 14.671,
+14.713, 14.755, 14.797, 14.839, 14.881, 14.923, 14.965, 15.007, 15.049, 15.091,
+15.133, 15.175, 15.217, 15.259, 15.301, 15.343, 15.385, 15.427, 15.469, 15.511,
+15.554, 15.596, 15.638, 15.680, 15.722, 15.764, 15.806, 15.849, 15.891, 15.933,
+15.975, 16.017, 16.059, 16.102, 16.144, 16.186, 16.228, 16.270, 16.313, 16.355,
+16.397, 16.439, 16.482, 16.524, 16.566, 16.608, 16.651, 16.693, 16.735, 16.778,
+16.820, 16.862, 16.904, 16.947, 16.989, 17.031, 17.074, 17.116, 17.158, 17.201,
+17.243, 17.285, 17.328, 17.370, 17.413, 17.455, 17.497, 17.540, 17.582, 17.624,
+17.667, 17.709, 17.752, 17.794, 17.837, 17.879, 17.921, 17.964, 18.006, 18.049,
+18.091, 18.134, 18.176, 18.218, 18.261, 18.303, 18.346, 18.388, 18.431, 18.473,
+18.516, 18.558, 18.601, 18.643, 18.686, 18.728, 18.771, 18.813, 18.856, 18.898,
+18.941, 18.983, 19.026, 19.068, 19.111, 19.154, 19.196, 19.239, 19.281, 19.324,
+19.366, 19.409, 19.451, 19.494, 19.537, 19.579, 19.622, 19.664, 19.707, 19.750,
+19.792, 19.835, 19.877, 19.920, 19.962, 20.005, 20.048, 20.090, 20.133, 20.175,
+20.218, 20.261, 20.303, 20.346, 20.389, 20.431, 20.474, 20.516, 20.559, 20.602,
+20.644, 20.687, 20.730, 20.772, 20.815, 20.857, 20.900, 20.943, 20.985, 21.028,
+21.071, 21.113, 21.156, 21.199, 21.241, 21.284, 21.326, 21.369, 21.412, 21.454,
+21.497, 21.540, 21.582, 21.625, 21.668, 21.710, 21.753, 21.796, 21.838, 21.881,
+21.924, 21.966, 22.009, 22.052, 22.094, 22.137, 22.179, 22.222, 22.265, 22.307,
+22.350, 22.393, 22.435, 22.478, 22.521, 22.563, 22.606, 22.649, 22.691, 22.734,
+22.776, 22.819, 22.862, 22.904, 22.947, 22.990, 23.032, 23.075, 23.117, 23.160,
+23.203, 23.245, 23.288, 23.331, 23.373, 23.416, 23.458, 23.501, 23.544, 23.586,
+23.629, 23.671, 23.714, 23.757, 23.799, 23.842, 23.884, 23.927, 23.970, 24.012,
+24.055, 24.097, 24.140, 24.182, 24.225, 24.267, 24.310, 24.353, 24.395, 24.438,
+24.480, 24.523, 24.565, 24.608, 24.650, 24.693, 24.735, 24.778, 24.820, 24.863,
+24.905, 24.948, 24.990, 25.033, 25.075, 25.118, 25.160, 25.203, 25.245, 25.288,
+25.330, 25.373, 25.415, 25.458, 25.500, 25.543, 25.585, 25.627, 25.670, 25.712,
+25.755, 25.797, 25.840, 25.882, 25.924, 25.967, 26.009, 26.052, 26.094, 26.136,
+26.179, 26.221, 26.263, 26.306, 26.348, 26.390, 26.433, 26.475, 26.517, 26.560,
+26.602, 26.644, 26.687, 26.729, 26.771, 26.814, 26.856, 26.898, 26.940, 26.983,
+27.025, 27.067, 27.109, 27.152, 27.194, 27.236, 27.278, 27.320, 27.363, 27.405,
+27.447, 27.489, 27.531, 27.574, 27.616, 27.658, 27.700, 27.742, 27.784, 27.826,
+27.869, 27.911, 27.953, 27.995, 28.037, 28.079, 28.121, 28.163, 28.205, 28.247,
+28.289, 28.332, 28.374, 28.416, 28.458, 28.500, 28.542, 28.584, 28.626, 28.668,
+28.710, 28.752, 28.794, 28.835, 28.877, 28.919, 28.961, 29.003, 29.045, 29.087,
+29.129, 29.171, 29.213, 29.255, 29.297, 29.338, 29.380, 29.422, 29.464, 29.506,
+29.548, 29.589, 29.631, 29.673, 29.715, 29.757, 29.798, 29.840, 29.882, 29.924,
+29.965, 30.007, 30.049, 30.090, 30.132, 30.174, 30.216, 30.257, 30.299, 30.341,
+30.382, 30.424, 30.466, 30.507, 30.549, 30.590, 30.632, 30.674, 30.715, 30.757,
+30.798, 30.840, 30.881, 30.923, 30.964, 31.006, 31.047, 31.089, 31.130, 31.172,
+31.213, 31.255, 31.296, 31.338, 31.379, 31.421, 31.462, 31.504, 31.545, 31.586,
+31.628, 31.669, 31.710, 31.752, 31.793, 31.834, 31.876, 31.917, 31.958, 32.000,
+32.041, 32.082, 32.124, 32.165, 32.206, 32.247, 32.289, 32.330, 32.371, 32.412,
+32.453, 32.495, 32.536, 32.577, 32.618, 32.659, 32.700, 32.742, 32.783, 32.824,
+32.865, 32.906, 32.947, 32.988, 33.029, 33.070, 33.111, 33.152, 33.193, 33.234,
+33.275, 33.316, 33.357, 33.398, 33.439, 33.480, 33.521, 33.562, 33.603, 33.644,
+33.685, 33.726, 33.767, 33.808, 33.848, 33.889, 33.930, 33.971, 34.012, 34.053,
+34.093, 34.134, 34.175, 34.216, 34.257, 34.297, 34.338, 34.379, 34.420, 34.460,
+34.501, 34.542, 34.582, 34.623, 34.664, 34.704, 34.745, 34.786, 34.826, 34.867,
+34.908, 34.948, 34.989, 35.029, 35.070, 35.110, 35.151, 35.192, 35.232, 35.273,
+35.313, 35.354, 35.394, 35.435, 35.475, 35.516, 35.556, 35.596, 35.637, 35.677,
+35.718, 35.758, 35.798, 35.839, 35.879, 35.920, 35.960, 36.000, 36.041, 36.081,
+36.121, 36.162, 36.202, 36.242, 36.282, 36.323, 36.363, 36.403, 36.443, 36.484,
+36.524, 36.564, 36.604, 36.644, 36.685, 36.725, 36.765, 36.805, 36.845, 36.885,
+36.925, 36.965, 37.006, 37.046, 37.086, 37.126, 37.166, 37.206, 37.246, 37.286,
+37.326, 37.366, 37.406, 37.446, 37.486, 37.526, 37.566, 37.606, 37.646, 37.686,
+37.725, 37.765, 37.805, 37.845, 37.885, 37.925, 37.965, 38.005, 38.044, 38.084,
+38.124, 38.164, 38.204, 38.243, 38.283, 38.323, 38.363, 38.402, 38.442, 38.482,
+38.522, 38.561, 38.601, 38.641, 38.680, 38.720, 38.760, 38.799, 38.839, 38.878,
+38.918, 38.958, 38.997, 39.037, 39.076, 39.116, 39.155, 39.195, 39.235, 39.274,
+39.314, 39.353, 39.393, 39.432, 39.471, 39.511, 39.550, 39.590, 39.629, 39.669,
+39.708, 39.747, 39.787, 39.826, 39.866, 39.905, 39.944, 39.984, 40.023, 40.062,
+40.101, 40.141, 40.180, 40.219, 40.259, 40.298, 40.337, 40.376, 40.415, 40.455,
+40.494, 40.533, 40.572, 40.611, 40.651, 40.690, 40.729, 40.768, 40.807, 40.846,
+40.885, 40.924, 40.963, 41.002, 41.042, 41.081, 41.120, 41.159, 41.198, 41.237,
+41.276, 41.315, 41.354, 41.393, 41.431, 41.470, 41.509, 41.548, 41.587, 41.626,
+41.665, 41.704, 41.743, 41.781, 41.820, 41.859, 41.898, 41.937, 41.976, 42.014,
+42.053, 42.092, 42.131, 42.169, 42.208, 42.247, 42.286, 42.324, 42.363, 42.402,
+42.440, 42.479, 42.518, 42.556, 42.595, 42.633, 42.672, 42.711, 42.749, 42.788,
+42.826, 42.865, 42.903, 42.942, 42.980, 43.019, 43.057, 43.096, 43.134, 43.173,
+43.211, 43.250, 43.288, 43.327, 43.365, 43.403, 43.442, 43.480, 43.518, 43.557,
+43.595, 43.633, 43.672, 43.710, 43.748, 43.787, 43.825, 43.863, 43.901, 43.940,
+43.978, 44.016, 44.054, 44.092, 44.130, 44.169, 44.207, 44.245, 44.283, 44.321,
+44.359, 44.397, 44.435, 44.473, 44.512, 44.550, 44.588, 44.626, 44.664, 44.702,
+44.740, 44.778, 44.816, 44.853, 44.891, 44.929, 44.967, 45.005, 45.043, 45.081,
+45.119, 45.157, 45.194, 45.232, 45.270, 45.308, 45.346, 45.383, 45.421, 45.459,
+45.497, 45.534, 45.572, 45.610, 45.647, 45.685, 45.723, 45.760, 45.798, 45.836,
+45.873, 45.911, 45.948, 45.986, 46.024, 46.061, 46.099, 46.136, 46.174, 46.211,
+46.249, 46.286, 46.324, 46.361, 46.398, 46.436, 46.473, 46.511, 46.548, 46.585,
+46.623, 46.660, 46.697, 46.735, 46.772, 46.809, 46.847, 46.884, 46.921, 46.958,
+46.995, 47.033, 47.070, 47.107, 47.144, 47.181, 47.218, 47.256, 47.293, 47.330,
+47.367, 47.404, 47.441, 47.478, 47.515, 47.552, 47.589, 47.626, 47.663, 47.700,
+47.737, 47.774, 47.811, 47.848, 47.884, 47.921, 47.958, 47.995, 48.032, 48.069,
+48.105, 48.142, 48.179, 48.216, 48.252, 48.289, 48.326, 48.363, 48.399, 48.436,
+48.473, 48.509, 48.546, 48.582, 48.619, 48.656, 48.692, 48.729, 48.765, 48.802,
+48.838, 48.875, 48.911, 48.948, 48.984, 49.021, 49.057, 49.093, 49.130, 49.166,
+49.202, 49.239, 49.275, 49.311, 49.348, 49.384, 49.420, 49.456, 49.493, 49.529,
+49.565, 49.601, 49.637, 49.674, 49.710, 49.746, 49.782, 49.818, 49.854, 49.890,
+49.926, 49.962, 49.998, 50.034, 50.070, 50.106, 50.142, 50.178, 50.214, 50.250,
+50.286, 50.322, 50.358, 50.393, 50.429, 50.465, 50.501, 50.537, 50.572, 50.608,
+50.644, 50.680, 50.715, 50.751, 50.787, 50.822, 50.858, 50.894, 50.929, 50.965,
+51.000, 51.036, 51.071, 51.107, 51.142, 51.178, 51.213, 51.249, 51.284, 51.320,
+51.355, 51.391, 51.426, 51.461, 51.497, 51.532, 51.567, 51.603, 51.638, 51.673,
+51.708, 51.744, 51.779, 51.814, 51.849, 51.885, 51.920, 51.955, 51.990, 52.025,
+52.060, 52.095, 52.130, 52.165, 52.200, 52.235, 52.270, 52.305, 52.340, 52.375,
+52.410, 52.445, 52.480, 52.515, 52.550, 52.585, 52.620, 52.654, 52.689, 52.724,
+52.759, 52.794, 52.828, 52.863, 52.898, 52.932, 52.967, 53.002, 53.037, 53.071,
+53.106, 53.140, 53.175, 53.210, 53.244, 53.279, 53.313, 53.348, 53.382, 53.417,
+53.451, 53.486, 53.520, 53.555, 53.589, 53.623, 53.658, 53.692, 53.727, 53.761,
+53.795, 53.830, 53.864, 53.898, 53.932, 53.967, 54.001, 54.035, 54.069, 54.104,
+54.138, 54.172, 54.206, 54.240, 54.274, 54.308, 54.343, 54.377, 54.411, 54.445,
+54.479, 54.513, 54.547, 54.581, 54.615, 54.649, 54.683, 54.717, 54.751, 54.785,
+54.819, 54.852, 54.886};
+
+double lookup_temperature(double Vthermocouple, CPhidgetTemperatureSensor_ThermocoupleType type)
+{
+ int i, size;
+ double temperature = PUNK_DBL;
+ const double *thermocouple_table;
+ int startingTemp = 0;
+
+ switch(type)
+ {
+ case PHIDGET_TEMPERATURE_SENSOR_K_TYPE:
+ size = THERMOCOUPLE_TABLE_K_SIZE;
+ thermocouple_table = thermocouple_table_k_type;
+ break;
+ case PHIDGET_TEMPERATURE_SENSOR_J_TYPE:
+ size = THERMOCOUPLE_TABLE_J_SIZE;
+ thermocouple_table = thermocouple_table_j_type;
+ break;
+ case PHIDGET_TEMPERATURE_SENSOR_E_TYPE:
+ size = THERMOCOUPLE_TABLE_E_SIZE;
+ thermocouple_table = thermocouple_table_e_type;
+ break;
+ case PHIDGET_TEMPERATURE_SENSOR_T_TYPE:
+ size = THERMOCOUPLE_TABLE_T_SIZE;
+ thermocouple_table = thermocouple_table_t_type;
+ break;
+ default:
+ return PUNK_DBL;
+ }
+ startingTemp = thermocouple_table_range[type][0];
+
+ //the voltage is too low
+ if(Vthermocouple < thermocouple_table[0])
+ return PUNK_DBL;
+
+ for(i=1;i<size;i++) {
+ if(thermocouple_table[i] > Vthermocouple) {
+ temperature = (double)(i+(startingTemp-1)) + ((Vthermocouple - thermocouple_table[i-1]) / (thermocouple_table[i] - thermocouple_table[i-1]));
+ break;
+ }
+ }
+
+ //if(Vthermocouple > thermocouple_table[size-1]) then temperature will still equal PUNK_DBL;
+ return temperature;
+}
+
+double lookup_voltage(double Tjunction, CPhidgetTemperatureSensor_ThermocoupleType type)
+{
+ double voltage;
+ const double *thermocouple_table;
+ int startingTemp = 0, size = 0;
+
+ switch(type)
+ {
+ case PHIDGET_TEMPERATURE_SENSOR_K_TYPE:
+ size = THERMOCOUPLE_TABLE_K_SIZE;
+ thermocouple_table = thermocouple_table_k_type;
+ break;
+ case PHIDGET_TEMPERATURE_SENSOR_J_TYPE:
+ size = THERMOCOUPLE_TABLE_J_SIZE;
+ thermocouple_table = thermocouple_table_j_type;
+ break;
+ case PHIDGET_TEMPERATURE_SENSOR_E_TYPE:
+ size = THERMOCOUPLE_TABLE_E_SIZE;
+ thermocouple_table = thermocouple_table_e_type;
+ break;
+ case PHIDGET_TEMPERATURE_SENSOR_T_TYPE:
+ size = THERMOCOUPLE_TABLE_T_SIZE;
+ thermocouple_table = thermocouple_table_t_type;
+ break;
+ default:
+ return 0;
+ }
+ startingTemp = thermocouple_table_range[type][0];
+
+ //Make sure we're not going to try looking outside of the arrays
+ if(((int)Tjunction-startingTemp) < 0)
+ return PUNK_DBL;
+ if(((int)Tjunction-(startingTemp-1)) >= size)
+ return PUNK_DBL;
+
+ voltage = thermocouple_table[(int)Tjunction-startingTemp] +
+ ((thermocouple_table[(int)Tjunction-(startingTemp-1)] - thermocouple_table[(int)Tjunction-startingTemp])
+ * (double)(Tjunction - (int)Tjunction));
+
+ return voltage;
+}
+
+// === Exported Functions === //
+
+//create and initialize a device structure
+CCREATE(TemperatureSensor, PHIDCLASS_TEMPERATURESENSOR)
+
+//event setup functions
+CFHANDLE(TemperatureSensor, TemperatureChange, int, double)
+
+CGET(TemperatureSensor,TemperatureInputCount,int)
+ TESTPTRS(phid,pVal)
+ TESTDEVICETYPE(PHIDCLASS_TEMPERATURESENSOR)
+ TESTATTACHED
+
+ MASGN(phid.attr.temperaturesensor.numTempInputs)
+}
+
+CGETINDEX(TemperatureSensor,Temperature,double)
+ TESTPTRS(phid,pVal)
+ TESTDEVICETYPE(PHIDCLASS_TEMPERATURESENSOR)
+ TESTATTACHED
+ TESTINDEX(phid.attr.temperaturesensor.numTempInputs)
+ TESTMASGN(Temperature[Index], PUNK_DBL)
+
+ MASGN(Temperature[Index])
+}
+
+CGETINDEX(TemperatureSensor,TemperatureMax,double)
+ TESTPTRS(phid,pVal)
+ TESTDEVICETYPE(PHIDCLASS_TEMPERATURESENSOR)
+ TESTATTACHED
+ TESTINDEX(phid.attr.temperaturesensor.numTempInputs)
+ TESTMASGN(temperatureMax[Index], PUNK_DBL)
+
+ MASGN(temperatureMax[Index])
+}
+
+CGETINDEX(TemperatureSensor,TemperatureMin,double)
+ TESTPTRS(phid,pVal)
+ TESTDEVICETYPE(PHIDCLASS_TEMPERATURESENSOR)
+ TESTATTACHED
+ TESTINDEX(phid.attr.temperaturesensor.numTempInputs)
+ TESTMASGN(temperatureMin[Index], PUNK_DBL)
+
+ MASGN(temperatureMin[Index])
+}
+
+CGETINDEX(TemperatureSensor,TemperatureChangeTrigger,double)
+ TESTPTRS(phid,pVal)
+ TESTDEVICETYPE(PHIDCLASS_TEMPERATURESENSOR)
+ TESTATTACHED
+ TESTINDEX(phid.attr.temperaturesensor.numTempInputs)
+ TESTMASGN(TempChangeTrigger[Index], PUNK_DBL)
+
+ MASGN(TempChangeTrigger[Index])
+}
+CSETINDEX(TemperatureSensor,TemperatureChangeTrigger,double)
+ TESTPTR(phid)
+ TESTDEVICETYPE(PHIDCLASS_TEMPERATURESENSOR)
+ TESTATTACHED
+ TESTINDEX(phid.attr.temperaturesensor.numTempInputs)
+ TESTRANGE(0, phid->temperatureMax[Index] - phid->temperatureMin[Index])
+
+ if(CPhidget_statusFlagIsSet(phid->phid.status, PHIDGET_REMOTE_FLAG))
+ ADDNETWORKKEYINDEXED(Trigger, "%lE", TempChangeTrigger);
+ else
+ phid->TempChangeTrigger[Index] = newVal;
+
+ return EPHIDGET_OK;
+}
+
+CGETINDEX(TemperatureSensor,Potential,double)
+ TESTPTRS(phid,pVal)
+ TESTDEVICETYPE(PHIDCLASS_TEMPERATURESENSOR)
+ TESTATTACHED
+
+ switch(phid->phid.deviceIDSpec)
+ {
+ case PHIDID_TEMPERATURESENSOR:
+ if(phid->phid.deviceVersion < 200)
+ return EPHIDGET_UNSUPPORTED;
+ break;
+ case PHIDID_TEMPERATURESENSOR_IR:
+ return EPHIDGET_UNSUPPORTED;
+ default:
+ break;
+ }
+
+ TESTINDEX(phid.attr.temperaturesensor.numTempInputs)
+
+ TESTMASGN(Potential[Index], PUNK_DBL)
+
+ MASGN(Potential[Index])
+}
+
+CGETINDEX(TemperatureSensor,PotentialMax,double)
+ TESTPTRS(phid,pVal)
+ TESTDEVICETYPE(PHIDCLASS_TEMPERATURESENSOR)
+ TESTATTACHED
+
+ switch(phid->phid.deviceIDSpec)
+ {
+ case PHIDID_TEMPERATURESENSOR:
+ if(phid->phid.deviceVersion < 200)
+ return EPHIDGET_UNSUPPORTED;
+ break;
+ case PHIDID_TEMPERATURESENSOR_IR:
+ return EPHIDGET_UNSUPPORTED;
+ default:
+ break;
+ }
+
+ TESTINDEX(phid.attr.temperaturesensor.numTempInputs)
+
+ TESTMASGN(potentialMax, PUNK_DBL)
+
+ MASGN(potentialMax)
+}
+
+CGETINDEX(TemperatureSensor,PotentialMin,double)
+ TESTPTRS(phid,pVal)
+ TESTDEVICETYPE(PHIDCLASS_TEMPERATURESENSOR)
+ TESTATTACHED
+
+ switch(phid->phid.deviceIDSpec)
+ {
+ case PHIDID_TEMPERATURESENSOR:
+ if(phid->phid.deviceVersion < 200)
+ return EPHIDGET_UNSUPPORTED;
+ break;
+ case PHIDID_TEMPERATURESENSOR_IR:
+ return EPHIDGET_UNSUPPORTED;
+ default:
+ break;
+ }
+
+ TESTINDEX(phid.attr.temperaturesensor.numTempInputs)
+
+ TESTMASGN(potentialMin, PUNK_DBL)
+
+ MASGN(potentialMin)
+}
+
+CGET(TemperatureSensor,AmbientTemperature,double)
+ TESTPTRS(phid,pVal)
+ TESTDEVICETYPE(PHIDCLASS_TEMPERATURESENSOR)
+ TESTATTACHED
+ TESTMASGN(AmbientTemperature, PUNK_DBL)
+
+ MASGN(AmbientTemperature)
+}
+
+CGET(TemperatureSensor,AmbientTemperatureMax,double)
+ TESTPTRS(phid,pVal)
+ TESTDEVICETYPE(PHIDCLASS_TEMPERATURESENSOR)
+ TESTATTACHED
+ TESTMASGN(ambientTemperatureMax, PUNK_DBL)
+
+ MASGN(ambientTemperatureMax)
+}
+
+CGET(TemperatureSensor,AmbientTemperatureMin,double)
+ TESTPTRS(phid,pVal)
+ TESTDEVICETYPE(PHIDCLASS_TEMPERATURESENSOR)
+ TESTATTACHED
+ TESTMASGN(ambientTemperatureMin, PUNK_DBL)
+
+ MASGN(ambientTemperatureMin)
+}
+
+CGETINDEX(TemperatureSensor,ThermocoupleType, CPhidgetTemperatureSensor_ThermocoupleType)
+ TESTPTRS(phid,pVal)
+ TESTDEVICETYPE(PHIDCLASS_TEMPERATURESENSOR)
+ TESTATTACHED
+
+ switch(phid->phid.deviceIDSpec)
+ {
+ case PHIDID_TEMPERATURESENSOR_IR:
+ return EPHIDGET_UNSUPPORTED;
+ default:
+ break;
+ }
+
+ TESTINDEX(phid.attr.temperaturesensor.numTempInputs)
+
+ MASGN(ThermocoupleType[Index])
+}
+CSETINDEX(TemperatureSensor,ThermocoupleType, CPhidgetTemperatureSensor_ThermocoupleType)
+ TESTPTR(phid)
+ TESTDEVICETYPE(PHIDCLASS_TEMPERATURESENSOR)
+ TESTATTACHED
+
+ switch(phid->phid.deviceIDSpec)
+ {
+ case PHIDID_TEMPERATURESENSOR:
+ if(phid->phid.deviceVersion < 200)
+ return EPHIDGET_UNSUPPORTED;
+ break;
+ case PHIDID_TEMPERATURESENSOR_IR:
+ return EPHIDGET_UNSUPPORTED;
+ default:
+ break;
+ }
+
+ TESTINDEX(phid.attr.temperaturesensor.numTempInputs)
+ TESTRANGE(PHIDGET_TEMPERATURE_SENSOR_K_TYPE, PHIDGET_TEMPERATURE_SENSOR_T_TYPE)
+
+ if(CPhidget_statusFlagIsSet(phid->phid.status, PHIDGET_REMOTE_FLAG))
+ ADDNETWORKKEYINDEXED(ThermocoupleType, "%d", ThermocoupleType);
+ else
+ phid->ThermocoupleType[Index] = newVal;
+
+ phid->temperatureMax[Index] = thermocouple_useful_range[newVal][1];
+ phid->temperatureMin[Index] = thermocouple_useful_range[newVal][0];
+
+ //Make sure our max and min range is actually measurable at the current ambient temperature. This is updated as the ambient temperature
+ // change in the data polling function
+ if(phid->AmbientTemperature != PUNK_DBL)
+ {
+ if(lookup_voltage(phid->temperatureMax[Index] - phid->AmbientTemperature, newVal) > phid->potentialMax)
+ phid->temperatureMax[Index] = (int)((lookup_temperature(phid->potentialMax, newVal) + phid->AmbientTemperature) / 10) * 10;
+ if(lookup_voltage(phid->temperatureMin[Index] - phid->AmbientTemperature, newVal) < phid->potentialMin)
+ phid->temperatureMin[Index] = (int)((lookup_temperature(phid->potentialMin, newVal) + phid->AmbientTemperature) / 10) * 10;
+ }
+
+ return EPHIDGET_OK;
+}
+
+// === Deprecated Functions === //
+
+CGET(TemperatureSensor,NumTemperatureInputs,int)
+ return CPhidgetTemperatureSensor_getTemperatureInputCount(phid, pVal);
+}