#ifndef  TILT_SENSOR
#define  TILT_SENSOR
#include <iostream>
#include <string>
#include "connection.h"
#include "I2C.h"

//registers
#define TILT_ADDRESS 0x02
#define X_UPPER 0x42
#define Y_UPPER 0x43
#define Z_UPPER 0x44
#define X_LOWER 0x45
#define Y_LOWER 0x46
#define Z_LOWER 0x47

using namespace std;

/**
* Class to retrieve XYZ coordinates from the HiTechnic Tilt/Accekeration sensor
* @see Tilt#read
*/
class Xyz_position : public Result{
  public:
    Xyz_position(){}
    /**
    * Holds the x-coordinate
    */
    int x;

    /**
    * Holds the y-coordinate
    */
    int y;

    /**
    * Holds the z-coordinate
    */
    int z;

    /**
    * @return XYZ_RESULT
    */
    Result_type get_type(){return XYZ_RESULT;}
};

/**
* Class for HiTechnic tilt/accekeration sensor
*/
class Tilt: public I2c{
  public:
    /**
     * Constructor for the Tilt sensor
     * @param port [which sensor port to use]
     * @param *connection [attach a connection]
     * @param i2c_address [set the I2C address of the sensor (just use the default address unless you have done a hack)]
    */
    Tilt(Sensor_port port, Connection *connection, unsigned char i2c_address = TILT_ADDRESS);
    ~Tilt();

    /**
     * Initiate the sensor
    * @param reply [true = require reply from NXT; false = no reply from NXT]
    */
    void init(bool reply=false);

    /**
    * Get the X-Y-Z coordinates
    * (init method will be called if the sensor has not been initialized)
    * @param &result [must be of type Xyz_position - coordinates are "stored" in result]
    * @see Xyz_position
    */
    int read(Result &result);

    /**
     * Get the sensor type
     * @return TILT
    */
    Sensor_type get_type();

    /**
     * Get the sensor reading as a string
     * (init method will be called if the sensor has not been initialized)
     * @return sensor reading as a string - "x='some value' y='some value' z='some value'"
    */
    string print();
};
#endif