Orefatoi / Mbed 2 deprecated afero_node_suntory_171018

Dependencies:   mbed MMA8451Q USBDevice WakeUp vt100

Fork of afero_node_suntory_2017_06_15 by Orefatoi

sensors/Accelerometer/Accelerometer.cpp

Committer:
wataloh
Date:
2017-01-24
Revision:
2:dfe671e31221
Parent:
1:b2a9a6f2c30e
Child:
5:9d5c7ee80f3b

File content as of revision 2:dfe671e31221:

#include "Accelerometer.hpp"

namespace MaruSolSensorManager
{
    Accelerometer::Accelerometer()
    {
        read_count = 1;
        //if(PREFERENCES::SENSING_INTERVAL[SENSORS::ACCELEROMETER]<=0)
        {
            PREFERENCES::SENSING_INTERVAL[SENSORS::ACCELEROMETER] = 15;
        }
        acc = new MMA8451Q(
            (PinName)PINS::ACCELEROMETER::SDA,
            (PinName)PINS::ACCELEROMETER::SCL,
            SENSORS::MMA8451Q::ADDRESS);
        
        pAsymFIFO = new AsymFIFO();
        
        read();
    }
    
    Accelerometer::~Accelerometer()
    {
        delete acc;
        acc = NULL;
        SERIAL_PRINT_DBG("Accelerometer inited\n");
    }

    void
    Accelerometer::toJSON(char *buf)
    {
        float x = packet.accelerometer.x;
        float y = packet.accelerometer.y;
        float z = packet.accelerometer.z;
        x /= 4096;
        y /= 4096;
        z /= 4096;
        char* &fmt  = SENSORS::MMA8451Q::JSON_FMT;
        char* &type = SENSORS::MMA8451Q::TYPE;
        char* &pn   = SENSORS::MMA8451Q::PN;
        time_t &timeStamp = packet.accelerometer.timeStamp;
        char* &unit = SENSORS::MMA8451Q::UNIT;
        sprintf( buf, fmt, type, pn, timeStamp, x, y, z, unit);
    }
    
    void
    Accelerometer::getBytes(uint8_t *buf)
    {
        memcpy(buf,(uint8_t*)&packet.accelerometer,sizeof(packet.accelerometer));
    }
    
    void
    Accelerometer::toBASE64(char *buf, PREFERENCES::_crc32 *crc32)
    {
        pAsymFIFO->pop((uint8_t*)buf, crc32);
    }
/*
    void
    Accelerometer::go()
    {
        timeout.attach(&onRead, PREFERENCES::SENSING_INTERVAL[SENSORS::ACCELEROMETER]);
        packet.accelerometer.x = acc->getAccX()*4096;
        packet.accelerometer.y = acc->getAccY()*4096;
        packet.accelerometer.z = acc->getAccZ()*4096;
        RTC_GET_UTC(packet.accelerometer.timeStamp);
        if(PREFERENCES::FLOW_CONTROL==true)
        {
            pAsymFIFO->push(
                packet.accelerometer.timeStamp,
                packet.accelerometer.x,
                packet.accelerometer.y,
                packet.accelerometer.z);
            if(pAsymFIFO->buffed()>1)
            {
                ToDoQ::queuePut(this);
            }
        }
        else
        {
            ToDoQ::queuePut(this);
        }
        backToNOP();
    }
*/
    void
    Accelerometer::go()
    {
        timeout.attach(&onRead, 1);
        if(read_count>=(PREFERENCES::SENSING_INTERVAL[SENSORS::ACCELEROMETER]))
        {
            read_count = 1;
            packet.accelerometer.x = acc->getAccX()*4096;
            packet.accelerometer.y = acc->getAccY()*4096;
            packet.accelerometer.z = acc->getAccZ()*4096;
            RTC_GET_UTC(packet.accelerometer.timeStamp);
            if(PREFERENCES::FLOW_CONTROL==true)
            {
                pAsymFIFO->push(
                    packet.accelerometer.timeStamp,
                    packet.accelerometer.x,
                    packet.accelerometer.y,
                    packet.accelerometer.z);
            }
            else
            {
                ToDoQ::queuePut(this);
            }
        }
        else
        {
            ++read_count;
        }
        
        if(pAsymFIFO->buffed()>1)
        {
            ToDoQ::queuePut(this);
        }
        backToNOP();
    }
};