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; }
void testsensorimpl::start() { QVariant _exclusive = sensor()->property("exclusive"); bool exclusive = _exclusive.isValid()?_exclusive.toBool():false; if (exclusive) { if (!exclusiveHandle) { exclusiveHandle = this; } else { // Hook up the busyChanged signal connect(exclusiveHandle, SIGNAL(emitBusyChanged()), sensor(), SIGNAL(busyChanged())); sensorBusy(); // report the busy condition return; } } QString doThis = sensor()->property("doThis").toString(); if (doThis == "stop") sensorStopped(); else if (doThis == "error") sensorError(1); else if (doThis == "setOne") { m_reading.setTimestamp(1); m_reading.setTest(1); newReadingAvailable(); } else { m_reading.setTimestamp(2); m_reading.setTest(2); newReadingAvailable(); } }
void CSensorBackendSym::SetProperties() { if(sensor()->outputRange() != -1) { //Set measurement range TInt err = SetMeasurementRange(); if(err != KErrNone) { sensorError(err); } } if(sensor()->dataRate() != 0) { //Set data rate TInt err = SetDataRate(); if(err != KErrNone) { sensorError(err); } } }
void SensorfwSensorBase::start() { if (m_sensorInterface) { // dataRate QByteArray type = sensor()->type(); if (type != QTapSensor::type && type != QProximitySensor::type) { int dataRate = sensor()->dataRate(); int interval = dataRate > 0 ? 1000 / dataRate : 0; // for testing maximum speed //interval = 1; //dataRate = 1000; m_sensorInterface->setInterval(interval); } // outputRange int currentRange = sensor()->outputRange(); int l = sensor()->outputRanges().size(); if (l > 1) { if (currentRange != m_prevOutputRange) { //#ifdef Q_WS_MAEMO_6 bool isOk = m_sensorInterface->setDataRangeIndex(currentRange); //NOTE THAT THE CHANGE MIGHT NOT SUCCEED, FIRST COME FIRST SERVED if (!isOk) sensorError(KErrInUse); else m_prevOutputRange = currentRange; //#else // // TODO: remove when sensord integrated, in sensorfw env there is a delay // qoutputrange range = sensor()->outputRanges().at(currentRange); // qreal correction = 1/correctionFactor(); // DataRange range1(range.minimum*correction, range.maximum*correction, range.accuracy*correction); // m_sensorInterface->requestDataRange(range1); // m_prevOutputRange = currentRange; //#endif } } // always on bool alwaysOn = sensor()->isAlwaysOn(); m_sensorInterface->setStandbyOverride(alwaysOn); // connects after buffering checks doConnectAfterCheck(); int returnCode = m_sensorInterface->start().error().type(); if (returnCode == 0) { running = true; return; } qWarning() << "m_sensorInterface did not start, error code:" << returnCode; } sensorStopped(); }
void LogFile::answerReceived(int id, const QList<QByteArray>& answer) { /* We received something, so the sensor is probably ok. */ sensorError(id, false); switch (id) { case 19: { QString s; for (int i = 0; i < answer.count(); i++) { s = QString::fromUtf8(answer[i]); if (monitor->count() == MAXLINES) monitor->takeItem(0); monitor->addItem(s); for (QStringList::Iterator it = filterRules.begin(); it != filterRules.end(); ++it) { QRegExp *expr = new QRegExp((*it).toLatin1()); if (expr->indexIn(s) != -1) { KNotification::event("pattern_match", QString("rule '%1' matched").arg(*it),QPixmap(),this); } delete expr; } } monitor->setCurrentRow( monitor->count() - 1 ); break; } case 42: { if(answer.isEmpty()) logFileID= 0; else logFileID = answer[0].toULong(); break; } } }
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; }
void ListView::answerReceived(int id, const QList<QByteArray>& answer) { /* We received something, so the sensor is probably ok. */ sensorError(id, false); switch (id) { case 100: { /* We have received the answer to a '?' command that contains * the information about the table headers. */ if (answer.count() != 2) { kWarning(1215) << "wrong number of lines"; return; } KSGRD::SensorTokenizer headers(answer[0], '\t'); KSGRD::SensorTokenizer colTypes(answer[1], '\t'); /* add the new columns */ mModel.clear(); QStringList translatedHeaders; for (uint i = 0; i < headers.count(); i++) { translatedHeaders.append( i18nc("heading from daemon", headers[i]) ); } for(uint i =0 ; i < colTypes.count(); i++) { ColumnType type = convertColumnType(colTypes[i]); mColumnTypes.append(type); if (type == Text || type == DiskStat) mModel.addColumnAlignment(Qt::AlignLeft); else mModel.addColumnAlignment(Qt::AlignRight); } mModel.setHorizontalHeaderLabels(translatedHeaders); //If we have some header settings to restore, we can do so now if(!mHeaderSettings.isEmpty()) { mView->header()->restoreState(mHeaderSettings); mModel.sort( mView->header()->sortIndicatorSection(), mView->header()->sortIndicatorOrder() ); } break; } case 19: { for (int i = 0; i < answer.count(); i++) { KSGRD::SensorTokenizer records(answer[i], '\t'); for (uint j = 0; j < records.count() && j < mColumnTypes.count(); j++) { QStandardItem *item = new QStandardItem(); item->setEditable(false); switch( mColumnTypes[j] ) { case Int: item->setData(records[j].toLongLong(), Qt::UserRole); item->setText(records[j]); break; case Percentage: item->setData(records[j].toInt(), Qt::UserRole); item->setText(records[j] + "%"); break; case Float: item->setData(records[j].toFloat(), Qt::DisplayRole); item->setData(records[j].toFloat(), Qt::UserRole); break; case Time: item->setData(QTime::fromString(records[j]), Qt::DisplayRole); item->setData(QTime::fromString(records[j]), Qt::UserRole); break; case KByte: { item->setData(records[j].toInt(), Qt::UserRole); item->setText(formatByteSize(records[j].toLongLong(), mUnits)); break; } case DiskStat: case Text: default: item->setText(records[j]); item->setData(records[j], Qt::UserRole); } mModel.setItem(i, j, item); } } mModel.setRowCount(answer.count()); mModel.sort( mView->header()->sortIndicatorSection(), mView->header()->sortIndicatorOrder() ); break; } } }