void CSensorBackendSym::GetDataRate()
    {
    TSensrvProperty datarate_prop;
    TInt err;
    TRAP(err, iBackendData.iSensorChannel->GetPropertyL(KSensrvPropIdDataRate, KSensrvItemIndexNone, datarate_prop));
    if(err == KErrNone)
        {    
        if(datarate_prop.GetArrayIndex() == ESensrvSingleProperty)
        {
            TReal min, max, value;
            if(datarate_prop.PropertyType() == ESensrvIntProperty)
                {
                TInt intMin, intMax, intValue;
                datarate_prop.GetMinValue(intMin);
                datarate_prop.GetMaxValue(intMax);                
                datarate_prop.GetValue(intValue);
                min = intMin;
                max = intMax;
                value = intValue;                
                }
            else if(datarate_prop.PropertyType() == ESensrvRealProperty)
                {
                datarate_prop.GetMinValue(min);
                datarate_prop.GetMaxValue(max);                
                datarate_prop.GetValue(value);
                }
            //Set datarate as range
            addDataRate(min, max);
        }
        //if list has more than one item, data rate will be having descrete values, agreed with DS team
        else if(datarate_prop.GetArrayIndex() == ESensrvArrayPropertyInfo)                             
            {
            TReal datarate;
            TInt min, max, index;
            datarate_prop.GetMinValue(min);
            datarate_prop.GetMaxValue(max);
            datarate_prop.GetValue(index);
            for(int i=min; i<=max; i++)
                {  
                TRAP(err, iBackendData.iSensorChannel->GetPropertyL(KSensrvPropIdDataRate, KSensrvItemIndexNone, i, datarate_prop));
                if(err == KErrNone)
                    {
                    if(datarate_prop.PropertyType() == ESensrvIntProperty)
                        {
                        TInt intDatarate;
                        datarate_prop.GetValue(intDatarate);
                        datarate = intDatarate;
                        }
                    else if(datarate_prop.PropertyType() == ESensrvRealProperty)
                        {
                        datarate_prop.GetValue(datarate);
                        }
                    addDataRate(datarate, datarate);
                    }
                }
            }
        }
    }
예제 #2
0
meegogyroscope::meegogyroscope(QSensor *sensor)
    : meegosensorbase(sensor)
{
    initSensor<GyroscopeSensorChannelInterface>(m_initDone);
    setDescription(QLatin1String("angular velocities around x, y, and z axis in degrees per second"));
    setRanges(MILLI);
    setReading<QGyroscopeReading>(&m_reading);
    addDataRate(10, 10);
    addDataRate(50, 50);
}
AndroidAccelerometerSensorBackend::AndroidAccelerometerSensorBackend(QSensor *sensor,int uniqueId
                                                                     ,QtSensorJNI::AndroidSensorType sensorType)
                                                                         : AndroidSensorBackend(sensor,uniqueId,sensorType)
{
    setReading<QAccelerometerReading>(&m_reading);
    addDataRate(0,3);
}
QS60SensorApiAccelerometer::QS60SensorApiAccelerometer(QSensor *sensor)
    : QSensorBackend(sensor)
    , m_nativeSensor(NULL)
    , m_sampleFactor(0.0f)
{
    TRAPD(err, findAndCreateNativeSensorL());
    if(err != KErrNone) {
        sensorStopped();
        sensorError(err);
    }
    
    setReading<QAccelerometerReading>(&m_reading);
    
    // http://www.st.com/stonline/products/literature/ds/12726/lis302dl.pdf
    // That 3D accelerometer inside N95 , N93i or N82 is from STMicroelectronics (type LIS302DL).
    // http://wiki.forum.nokia.com/index.php/Nokia_Sensor_APIs.
    // Sensor is set to 100Hz 2G mode and no public interface to switch it to 8G
    
    // 2G - mode
    addDataRate(100, 100);
    addOutputRange(-22.418, 22.418, 0.17651);
    setDescription(QLatin1String("lis302dl"));
    
    //Synbian interface gives values between -680 - 680
    m_sampleFactor =  this->sensor()->outputRanges()[0].maximum / 680.0f;
}
예제 #5
0
mocktapsensor::mocktapsensor(QSensor *sensor)
    : mockcommon(sensor)
{
    setReading<QTapReading>(&m_reading);
    addDataRate(50, 50); // 50Hz
    connect(mockcommonPrv(),SIGNAL(tapData(QString)),this,SLOT(parseTapData(QString)));
}
예제 #6
0
mockproximitysensor::mockproximitysensor(QSensor *sensor)
    : mockcommon(sensor)
{
    setReading<QProximityReading>(&m_reading);
    addDataRate(50, 50); // 50Hz
    connect(mockcommonPrv(),SIGNAL(proxyData(QString)),this,SLOT(parseProxyData(QString)));
}
예제 #7
0
AndroidCompassSensorBackend::AndroidCompassSensorBackend(QSensor *sensor,int uniqueId
                                                         ,QtSensorJNI::AndroidSensorType sensorType)
                                                             : AndroidSensorBackend(sensor,uniqueId,sensorType)
{
    setReading<QCompassReading>(&m_reading);
    addDataRate(0,3);
}
예제 #8
0
mockorientationsensor::mockorientationsensor(QSensor *sensor)
    : mockcommon(sensor)
{
    setReading<QOrientationReading>(&m_reading);
    addDataRate(50, 50); // 50Hz
    connect(mockcommonPrv(),SIGNAL(orientData(QString)),this,SLOT(parseOrientData(QString)));
}
예제 #9
0
AndroidProximitySensorBackend::AndroidProximitySensorBackend(QSensor *sensor,int uniqueId
                                                             ,QtSensorJNI::AndroidSensorType sensorType)
                                                                 : AndroidSensorBackend(sensor,uniqueId,sensorType)
{
    setReading<QProximityReading>(&m_reading);
    addDataRate(0,3);
}
예제 #10
0
mockaccelerometer::mockaccelerometer(QSensor *sensor)
    : mockcommon(sensor)
{
    setReading<QAccelerometerReading>(&m_reading);
    addDataRate(50, 50); // 50

    connect(mockcommonPrv(),SIGNAL(accelData(QString)),this,SLOT(parseAccelData(QString)));
}
예제 #11
0
meegoals::meegoals(QSensor *sensor)
    : meegosensorbase(sensor)
{
    initSensor<ALSSensorChannelInterface>(m_initDone);
    setReading<QAmbientLightReading>(&m_reading);
    // metadata
    setDescription(QLatin1String("ambient light intensity given as 5 pre-defined levels"));
    addOutputRange(0, 5, 1);
    addDataRate(10,10);
}
예제 #12
0
meegoirproximitysensor::meegoirproximitysensor(QSensor *sensor)
    : meegosensorbase(sensor)
{
    initSensor<ProximitySensorChannelInterface>(m_initDone);
    setReading<QIRProximityReading>(&m_reading);
    setDescription(QLatin1String("reflectance as percentage (%) of maximum"));
    addOutputRange(0, 100, 1);
    addDataRate(10,10);
    rangeMax = QFile::exists(RM680_PS)?255:1023;
}
SensorfwProximitySensor::SensorfwProximitySensor(QSensor *sensor)
    : SensorfwSensorBase(sensor),
      m_exClose(false)
    , m_initDone(0)
{
    init();
    setReading<QProximityReading>(&m_reading);
    addDataRate(10,10); //TODO: fix this when we know better
    sensor->setDataRate(10);//set a default rate
}
예제 #14
0
SensorfwTapSensor::SensorfwTapSensor(QSensor *sensor)
    : SensorfwSensorBase(sensor),
      m_initDone(false),
      m_isOnceStarted(false)
{
    init();
    setReading<QTapReading>(&m_reading);
    addOutputRange(QTapReading::Undefined, QTapReading::Z_Both, 1);
    addDataRate(10,10); //TODO: fix this when we know better
    sensor->setDataRate(10);//set a default rate
}
예제 #15
0
n900lightsensor::n900lightsensor(QSensor *sensor)
    : n900filebasedsensor(sensor)
{
    setReading<QLightReading>(&m_reading);
    // Sensor takes 12-400ms to complete one reading and is triggered by
    // a read of the /sys file (no interrupt/timing loop/etc. is used).
    addDataRate(1, 2);
    setDescription(QLatin1String("tsl2563"));

    sensor->setProperty("fieldOfView", 1); // very narrow field of view.
}
예제 #16
0
n900accelerometer::n900accelerometer(QSensor *sensor)
    : n900filebasedsensor(sensor)
{
    setReading<QAccelerometerReading>(&m_reading);
    // According to the kernel driver, this runs at 100 or 400Hz
    // but we can't change the rate because we don't run as root.
    // The hardware seems to run at 100Hz by default so report that.
    // Report 1-100Hz so the app can poll less frequently if it wants to.
    addDataRate(1, 100);
    // According to the kernel driver this reports +- 2G or +- 8G (with lower accuracy)
    // but we can't change the range because we don't run as root.
    // The hardware seems to run at +- 2G by default so report that.
    addOutputRange(-22.418, 22.418, 0.17651); // 2G
    setDescription(QLatin1String("lis302dl"));
}
예제 #17
0
testsensorimpl::testsensorimpl(QSensor *sensor)
    : QSensorBackend(sensor)
{
    setReading<TestSensorReading>(&m_reading);
    setDescription("sensor description");
    addOutputRange(0, 1, 0.5);
    addOutputRange(0, 2, 1);
    QString doThis = sensor->property("doThis").toString();
    if (doThis == "rates(0)") {
        setDataRates(0);
    } else if (doThis == "rates(nodef)") {
        TestSensor *acc = new TestSensor(this);
        setDataRates(acc);
        delete acc;
    } else if (doThis == "rates") {
        TestSensor *acc = new TestSensor(this);
        acc->connectToBackend();
        setDataRates(acc);
        delete acc;
    } else {
        addDataRate(100, 100);
    }
    reading();
}
dummylightsensor::dummylightsensor(QSensor *sensor)
    : dummycommon(sensor)
{
    setReading<QAmbientLightReading>(&m_reading);
    addDataRate(100,100);
}
예제 #19
0
bool SensorfwSensorBase::initSensorInterface(QString const &name)
{
    if (!m_sensorInterface) {
        sensorError(KErrNotFound);
        return false;
    }

    //metadata
    const QList<DataRange> intervals = m_sensorInterface->getAvailableIntervals();

    for (int i = 0, l = intervals.size(); i < l; i++) {
        qreal intervalMax = intervals.at(i).max;
        qreal intervalMin = intervals.at(i).min;

        if (intervalMin == 0 && intervalMax == 0) {
            // 0 interval has different meanings in e.g. magge/acce
            // magge -> best-effort
            // acce -> lowest possible
            // in Qt API setting 0 means default
            continue;
        }

        qreal rateMin = intervalMax < 1 ? 1 : 1 / intervalMax * 1000;
        rateMin = rateMin < 1 ? 1 : rateMin;

        intervalMin = intervalMin < 1 ? 10: intervalMin;     // do not divide with 0
        qreal rateMax = 1 / intervalMin * 1000;
        addDataRate(rateMin, rateMax);
    }

    //bufferSizes
    if (m_bufferingSensors.contains(sensor()->identifier())) {

        IntegerRangeList sizes = m_sensorInterface->getAvailableBufferSizes();
        for (int i = 0; i < sizes.size(); i++) {
            int second = sizes.at(i).second;
            m_maxBufferSize = second > m_bufferSize ? second : m_maxBufferSize;
        }
        m_maxBufferSize = m_maxBufferSize < 0 ? 1 : m_maxBufferSize;
        //SensorFW guarantees to provide the most efficient size first
        //TODO: remove from comments
        //m_efficientBufferSize  = m_sensorInterface->hwBuffering()? (l>0?sizes.at(0).first:1) : 1;
    } else {
        m_maxBufferSize = 1;
    }

    sensor()->setMaxBufferSize(m_maxBufferSize);
    sensor()->setEfficientBufferSize(m_efficientBufferSize);

    // TODO deztructor: Leaking abstraction detected. Just copied code
    // from initSensor<>() here, need to
    QByteArray type = sensor()->type();
    if ((type == QAmbientLightSensor::type) // SensorFW returns lux values, plugin enumerated values
            || (type == QIRProximitySensor::type) // SensorFW returns raw reflectance values, plugin % of max reflectance
            || (name == "accelerometersensor") // SensorFW returns milliGs, plugin m/s^2
            || (name == "magnetometersensor") // SensorFW returns nanoTeslas, plugin Teslas
            || (name == "gyroscopesensor")) // SensorFW returns DSPs, plugin milliDSPs
        return true;

    setDescription(m_sensorInterface->description());

    if (name == "tapsensor") return true;
    setRanges();
    return true;
}
예제 #20
0
dummyaccelerometer::dummyaccelerometer(QSensor *sensor)
    : dummycommon(sensor)
{
    setReading<QAccelerometerReading>(&m_reading);
    addDataRate(100, 100); // 100Hz
}
AndroidAmbientLightSensorBackend::AndroidAmbientLightSensorBackend(QSensor *sensor,int uniqueId,QtSensorJNI::AndroidSensorType sensorType)
    : AndroidSensorBackend(sensor,uniqueId,sensorType)
{
    setReading<QAmbientLightReading>(&m_reading);
    addDataRate(0,3);
}