#include <string.h>
#include "cache.h"
#include "card.h"
#include "hash.h"
#include "dig_io.h"

CardInfo cardInfo;
#define NUM_VARS 18

unsigned char cardVarHash[NUM_VARS] = { 0 };

void cardInit()
{
    unsigned int i;
    const char* cardVarNames[NUM_VARS] =
    {
        "HUM01",
        "HUM02",
        "HUM03",
        "HUM04",
        "FIBO",
        "TEMP01",
        "TEMP02",
        "TEMP03",
        "TEMP04",
        "TEMP05",
        "TEMP06",
        "TEMP07",
        "TEMP08",
        "H20_1",
        "H20_2",
        "H20_3",
        "H20_4",
    };
    
    cardInfo.typeId = 0x0005;
    strcpy(cardInfo.name, "ENVR");
    cardInfo.varCount = NUM_VARS;
    
    cardInfoAddVar("INTEST", CACHE_IO_IN, &cardInfo);
    cacheSetEntry(hashCode("INTEST", 6), 0, CACHE_IO_IN);    

    for (i = 0; i < NUM_VARS - 1; i++)
    {
        cardInfoAddVar(cardVarNames[i], CACHE_IO_OUT, &cardInfo);
        cardVarHash[i] = hashCode(cardVarNames[i], strlen(cardVarNames[i]));
        cacheSetEntry(cardVarHash[i], i, CACHE_IO_OUT);
    }
}

unsigned int fibo1 = 0;
unsigned int fibo2 = 1;

void cardPoll()
{   
    unsigned int fibo = fibo1 + fibo2;
    fibo1 = fibo2;
    fibo2 = fibo;
    
    cacheSetEntry(hashCode("FIBO", 4), fibo, CACHE_IO_OUT);
    
    cacheSetEntry(hashCode("H20_1", 5), digGetInBit(4), CACHE_IO_OUT);
    cacheSetEntry(hashCode("H20_2", 5), digGetInBit(5), CACHE_IO_OUT);
    cacheSetEntry(hashCode("H20_3", 5), digGetInBit(6), CACHE_IO_OUT);
    cacheSetEntry(hashCode("H20_4", 5), digGetInBit(7), CACHE_IO_OUT);
}