#include "HumidityHH10D.h"
#include <Wire.h>

HumidityHH10D::HumidityHH10D(int i2addr, int freqIRQ)
{
  this->i2addr = i2addr;
  this->freqIRQ = freqIRQ;
}

void HumidityHH10D::getCoeff()
{
  byte offs_lsb = 0, offs_msb = 0, sens_lsb = 0, sens_msb = 0;
 
  Wire.beginTransmission(i2addr);
  Wire.write(0x0A);
  Wire.endTransmission();

  Wire.requestFrom(i2addr, 2);
  if (Wire.available())
    sens_msb = Wire.read();
  if (Wire.available())
    sens_lsb = Wire.read();

  Wire.beginTransmission(i2addr);
  Wire.write(0x0C);
  Wire.endTransmission();
  
  Wire.requestFrom(i2addr, 2);
  
  if (Wire.available())
    offs_msb = Wire.read();
  if (Wire.available())
    offs_lsb = Wire.read();
  
  sens = (sens_msb << 8) | sens_lsb;
  offs = (offs_msb << 8) | offs_lsb;
}

double HumidityHH10D::calcRH(double freq)
{
  double rh = ((double)offs - (double)freq) * (double)sens / 4096.0;
  return rh;
}

unsigned long HumidityHH10D::cnt = 0;
unsigned long HumidityHH10D::startTime = 0;
unsigned long HumidityHH10D::timeSpan = 0;
HumidityHH10D* HumidityHH10D::cur = NULL;

void HumidityHH10D::startFreq(long timeSpan)
{
  if (HumidityHH10D::cur == NULL)
  {
    freqReady = false;
    HumidityHH10D::cnt = 0;
    HumidityHH10D::startTime = millis();
    HumidityHH10D::timeSpan = timeSpan;
    HumidityHH10D::cur = this;
    attachInterrupt(freqIRQ, interrupt, CHANGE);
  }
}

