#include "Accel.h"


void i2c_write_Accel(char address, char data)
{
    int ack;
    i2c_start();
    ack = i2c_send(WRITE_ACCEL);
    ack = i2c_send(address);
    ack = i2c_send(data);
    do{
        i2c_start();
        ack = i2c_send(WRITE_ACCEL);
    } while (ack);
    i2c_stop();
    IFS1bits.I2C2MIF = 0;
}

void accel_init(){
    i2c_write_Accel(POWER_CTL,0x00);
    i2c_write_Accel(DATA_FORMAT,0x01);
    i2c_write_Accel(POWER_CTL,0x08);
    //i2c_write_Accel(INTR_ENABLE,0x00); // disable interrupts while configuring
    i2c_write_Accel(ACT_INACT_CTL,0x07);
    i2c_write_Accel(THRES_INACT,0x20);
    i2c_write_Accel(TIME_INACT,0x04);
    i2c_write_Accel(INTR_MAP,0xF7);
    i2c_write_Accel(INTR_ENABLE,0x08);
}

char i2c_read_Accel(char address)
{
    char read_value;
    i2c_start();
    read_value = i2c_send(WRITE_ACCEL);
    //read_value = i2c_send(0x00); // high byte
    read_value = i2c_send(address);
    i2c_restart();
    read_value = i2c_send(READ_ACCEL);
    read_value = i2c_receive();
    I2C2CONbits.ACKDT = 1;
    I2C2CONbits.ACKEN = 1;
    while(!IFS1bits.I2C2MIF);
    IFS1bits.I2C2MIF = 0;
    I2C2CONbits.ACKDT = 0;
    i2c_stop();
    return read_value;
}

struct accel_data accel_measure(void)
{
    struct accel_data ad1;
    float inter = i2c_read_Accel(INT_SOURCE);
    int x;
    int y;
    int z;
    float xg,yg,zg;
    ad1.xl = i2c_read_Accel(DATAX0);
    ad1.xh = i2c_read_Accel(DATAX1);
    ad1.yl = i2c_read_Accel(DATAY0);
    ad1.yh = i2c_read_Accel(DATAY1);
    ad1.zl = i2c_read_Accel(DATAZ0);
    ad1.zh = i2c_read_Accel(DATAZ1);
    return ad1;
}

