
#include <stdio.h>
#include <string.h>
#include <stdint.h>


unsigned char g_sensortype [][2] = {
    {0xc7, 58},
{0x01, 113},
{0xc7, 56},
{0x01, 114},
{0xc6, 54},
{0x07, 40},
{0xC1, 121},
{0xC2, 137},
{0x07, 36},
{0x07, 43},
{0xC1, 122},
{0xC1, 119},
{0x01, 12},
{0x01, 111},
{0x01, 116},
{0xC1, 127},
{0xC2, 134},
{0xC2, 130},
{0xc, 33},
{0xC1, 125},
{0x01, 115},
{0x22, 4},
{0xC2, 138},
{0x01, 108},
{0x01, 102},
{0xc, 46},
{0x7, 11},
{0xC1, 120},
{0x07, 39},
{0x07, 42},
{0x5, 21},
{0xC2, 131},
{0xc1, 48},
{0x12, 53},
{0xC1, 124},
{0x01, 117},
{0xC1, 126},
{0xf, 5},
{0x23, 0},
{0xC2, 139},
{0x07, 34},
{0x09, 146},
{0x02, 178},
{0xC2, 140},
{0xC1, 118},
{0xC2, 133},
{0x07, 38},
{0xC2, 143},
{0x01, 101},
{0xc3, 9},
{0x7, 10},
{0xc2, 51},
{0x01, 109},
{0xc, 32},
{0x7, 8},
{0xC1, 129},
{0x01, 112},
{0x01, 107},
{0x07, 37},
{0x07, 44},
{0x1f, 50},
{0xC2, 144},
{0xc7, 52},
{0xC2, 141},
{0x01, 106},
{0x01, 110},
{0x01, 103},
{0x9, 28},
{0x07, 35},
{0xc7, 55},
{0x03, 179},
{0x07, 41},
{0xc, 30},
{0x01, 100},
{0xC1, 128},
{0xC2, 135},
{0x01, 105},
{0x7, 47},
{0xC2, 145},
{0xc7, 57},
{0x01, 104},
{0x07, 45},
{0xC2, 132},
{0xc4, 49},
{0xC1, 123},
{0xC2, 142},
{0x01, 13},
{0xC2, 136},
{0xc, 31},
{0xff,0xff}
};

unsigned char findSensor(char sensor_number) {

    int i=0;

    // TODO : This function should actually call
    // a dbus object and have it return the data
    // it is not ready yet so use a Palmetto 
    // based lookup table for now.  The g_sensortype
    // can be removed once the dbus method exists
    while (g_sensortype[i][0] != 0xff) {
        if (g_sensortype[i][1] == sensor_number) {
            break;
        } else {
            i++;
        }

    }

    return g_sensortype[i][0];

}


int set_sensor_dbus_state(uint8_t number, const char *method, const char *value) {

	printf("Attempting to log Sensor 0x%02x via %s with a value of %s\n", 
		number, method, value);

	return 0;
}


extern int updateSensorRecordFromSSRAESC(const void *record);





uint8_t testrec_boot1[] = {0x05, 0xa9, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00};
uint8_t testrec_boot2[] = {0x05, 0xa9, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00};
uint8_t testrec_boot3[] = {0x05, 0xa9, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00};
uint8_t testrec_boot4[] = {0x05, 0xa9, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x13, 0x00};                       



// DIMM Present
uint8_t testrec_sensor1[] {0x1F, 0xa9, 0x00, 0x40, 0x00, 0x10, 0x00, 0x00};

// DIMM Not present
uint8_t testrec_sensor2[] {0x1F, 0xa9, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00};


uint8_t testrec_bootprogress[]  = {05, 0xa9, 0x00, 0x04, 0x00, 0x00, 0x14, 0x00 };

int main() {

	updateSensorRecordFromSSRAESC(testrec_bootprogress);
	updateSensorRecordFromSSRAESC(testrec_sensor1);
	updateSensorRecordFromSSRAESC(testrec_sensor2);


	return 0;
}