#include "Srf10.h"

// Constructor

Srf10::Srf10(int handle, int addr, char rt )
{
  readReg = 2;
  pingBuf[0] = 0;
  i2cHandle = handle;
  i2cAddr = addr;

  setResultType(rt);

} // Srf10

void Srf10::ping()
{
  ioctl(i2cHandle, I2C_SLAVE, i2cAddr);

  write(i2cHandle, pingBuf, 2);

} // ping

int Srf10::readS()
{
  ioctl(i2cHandle, I2C_SLAVE, i2cAddr);

  write(i2cHandle, &readReg, 1);
  read(i2cHandle, readBuf, 2);

  return readBuf[0]*256 + readBuf[1];

} // read

void Srf10::setResultType(char rt)
{
  switch(rt)
  {
    case 'i':
    case 'I':
      pingBuf[1] = 80;
      break;
    case 'c':
    case 'C':
      pingBuf[1] = 81;
      break;
    case 's':
    case 'S':
      pingBuf[1] = 82;
      break;
    default:
      pingBuf[1] = 81;
      break;
  }

} // setResultType
void Srf10::changeAddress(int newAddress)
{
//newAddress is the exact Hex address in the srf10 manual

  int bufVal1 = 0xA0;
  int bufVal2 = 0xAA;
  int bufVal3 = 0xA5;

  ioctl(i2cHandle, I2C_SLAVE, i2cAddr);

  pingBuf[1] = 0xA0;
  write(i2cHandle, &pingBuf, 2);
  pingBuf[1] = 0xAA;
  write(i2cHandle, &pingBuf, 2);
  pingBuf[1] = 0xA5;
  write(i2cHandle, &pingBuf, 2);
  pingBuf[1] = (newAddress*2) + 0xE0;
  write(i2cHandle, &pingBuf, 2);
} // changeAddress

