//------------------------------------------------------------------
// qfixServoBoard4.h
//
// This file contains the class ServoBoard4 which represents
// four servos attached to the ServoBoard4.
//
// Copyright 2006 by KTB mechatronics GmbH
// Author: Stefan Enderle
//------------------------------------------------------------------

#ifndef qfixServoBoard4_h
#define qfixServoBoard4_h


#include "qfixI2C.h"
#include "qfixI2CDefs.h"
#include "string.h"

static const uint8_t I2C_ADDR_SERVO = 3;

static const uint8_t SERVO_CMD_CHANGEID = 0;
static const uint8_t SERVO_CMD_SET      = 1;


class ServoBoard4
{
private:
  I2C i2c;
  uint8_t id;

public:
  /** Constructor with default ID 0
  */
  ServoBoard4();

  /** Constructor with given ID
  */
  ServoBoard4(uint8_t ID);

  /** Change logical device ID
  */
  void changeID(uint8_t newID);

  /** 
  */
  void set(uint8_t index, uint8_t pwm);
};



ServoBoard4::ServoBoard4() : i2c(), id(0)
{
}


ServoBoard4::ServoBoard4(uint8_t ID) : i2c(), id(ID)
{
}


void ServoBoard4::set(uint8_t index, uint8_t pwm)
{
  uint8_t buf[5];

  buf[0] = id;
  buf[1] = SERVO_CMD_SET;
  buf[2] = index;
  buf[3] = pwm;
  i2c.send(I2C_ADDR_SERVO, buf, 4);
}


void ServoBoard4::changeID(uint8_t newID)
{
  uint8_t buf[3];

  buf[0] = id;
  buf[1] = SERVO_CMD_CHANGEID;
  buf[2] = newID;
  i2c.send(I2C_ADDR_SERVO, buf, 3);

  id = newID;
}


#endif



