HAHA

Dependencies:   WebSocketClient mbed

routeur.cpp

Committer:
RufflesAllD
Date:
2014-04-07
Revision:
6:f1e9dc6b24c7
Parent:
5:daf08fff7abb

File content as of revision 6:f1e9dc6b24c7:

#include "routeur.hpp"

#define CTRL_REG1 0x2A
#define DATA_REG_W 0x3A
#define DATA_REG_R 0x3B

#define OUT_X_MSB 0x01

const char COORD_ADRESS[8] = {0x00};    // Adresse 64bits du coordinateur (si tous des 0, le routeur envoie à son coordinateur par défaut)

Routeur::Routeur(PinName _tx, PinName _rx) :
    trame(_tx, _rx),
    accel(p9, p10), // Pin I2C (pour l'accéléromètre)
    piton(p30)      // Pin DigitalIn (pour le contact sec)
{
    // reset le xbee
    DigitalOut reset(p8);
    
    reset = 0;
    wait(0.4);
    reset = 1;
}

void Routeur::setPanID(string _pan)
{
    pan = _pan;
    trame.sendATCommand("ID", pan.c_str(), pan.length());// Set le PANID selon le fichier de config
    trame.sendATCommand("WR", 0, 0);    // Écrit la valeur du PANID en mémoire
    trame.sendATCommand("AC", 0, 0);    // Applique les changements effectués
}

void Routeur::setType(int t)
{
    type = static_cast<Type>(t);    // 0: accéléromètre   1: switch
    if (type == Accelerometer)
        initAccel();
}

void Routeur::setPeriod(int t)
{
    period = t;
}

void Routeur::getValues()
{
    if (type == Accelerometer)
        sendAccelValues();
    else
        sendSwitchValue();
    
    wait(period);
}

void Routeur::initAccel()
{
    // Mise de l'accéléromètre en standby
    writeRegister(CTRL_REG1, 0x10);
    
    // Set offset de l'accéléromètre
    writeRegister(0x31, 0xEE);
    
    // activate de l'accéléromètre
    char c;
    readRegister(CTRL_REG1, &c);
    writeRegister(CTRL_REG1, c | 0x01);
}

void Routeur::sendSwitchValue()
{
    switchValue[0] = piton;
    
    trame.sendTransmitRequest(COORD_ADRESS, switchValue, 1);
}

void Routeur::sendAccelValues()
{
    int ack = readRegisters(OUT_X_MSB, 6, accelValues);
    
    trame.sendTransmitRequest(COORD_ADRESS, accelValues, 6);
}

int Routeur::readRegister(char reg, char* data)
{
    int ack = 0;
    accel.start();
    ack = accel.write(DATA_REG_W);
    ack = accel.write(reg);
    accel.start();
    ack = accel.write(DATA_REG_R);
    data[0] = accel.read(0);
    accel.stop();
    
    return ack;
}

int Routeur::readRegisters(char reg, int range, char* data)
{
    int ack = 0;
    accel.start();
    ack = accel.write(DATA_REG_W);
    ack = accel.write(reg);
    accel.start();
    ack = accel.write(DATA_REG_R);
    for (int i = 0; i < range - 1; i++)
        data[i] = accel.read(1);
    data[range - 1] = accel.read(0);
    accel.stop();
    
    return ack;
}

int Routeur::writeRegister(char reg, char data)
{
    int ack = 0;
    accel.start();
    ack = accel.write(DATA_REG_W);
    ack = accel.write(reg);
    ack = accel.write(data);
    accel.stop();
    
    return ack;
}