Skip to content

Commit

Permalink
Interval is propagated via source nodes instead of SensorManager.
Browse files Browse the repository at this point in the history
Nodebase has been refactored to handle interval request propagation and
queuing. MetaData information for interval now originates from as close
to hardware as possible. Concept of default interval has been added to
avoid using '0' as 'do-not-care' value.
  • Loading branch information
Timo Rongas committed Oct 19, 2010
1 parent 6da7b15 commit 830c4e2
Show file tree
Hide file tree
Showing 50 changed files with 788 additions and 441 deletions.
32 changes: 30 additions & 2 deletions adaptors/accelerometeradaptor/accelerometeradaptor.cpp
Expand Up @@ -47,12 +47,15 @@ AccelerometerAdaptor::AccelerometerAdaptor(const QString& id) :
sensordLogW() << "Input device not found.";
}

setDescription("Input device accelerometer adaptor (lis302d)");

accelerometerBuffer_ = new DeviceAdaptorRingBuffer<OrientationData>(128);
addAdaptedSensor("accelerometer", "Internal accelerometer coordinates", accelerometerBuffer_);

// Set Metadata
setDescription("Input device accelerometer adaptor (lis302d)");
introduceAvailableDataRange(DataRange(-2048, 2048, 1));
introduceAvailableInterval(DataRange(0, 0, 0));
introduceAvailableInterval(DataRange(1, 2000, 0));
setDefaultInterval(0);
}

AccelerometerAdaptor::~AccelerometerAdaptor()
Expand Down Expand Up @@ -100,3 +103,28 @@ void AccelerometerAdaptor::commitOutput()
accelerometerBuffer_->commit();
accelerometerBuffer_->wakeUpReaders();
}

unsigned int AccelerometerAdaptor::evaluateIntervalRequests(int& sessionId) const
{
unsigned int highestValue = 0;
int winningSessionId = -1;

if (m_intervalMap.size() == 0)
{
sessionId = winningSessionId;
return defaultInterval();
}

// Get the smallest positive request, 0 is reserved for HW wakeup
// TODO: Do this in a nicer way
highestValue = m_intervalMap.values().at(0);
winningSessionId = m_intervalMap.key(highestValue);
foreach (unsigned int value, m_intervalMap.values()) {
if ((value < highestValue) && value > 0) {
highestValue = value;
winningSessionId = m_intervalMap.key(value);
}
}
sessionId = winningSessionId;
return highestValue > 0 ? highestValue : defaultInterval();
}
5 changes: 5 additions & 0 deletions adaptors/accelerometeradaptor/accelerometeradaptor.h
Expand Up @@ -64,6 +64,11 @@ class AccelerometerAdaptor : public InputDevAdaptor
AccelerometerAdaptor(const QString& id);
~AccelerometerAdaptor();

/**
* Reimplement to allow for 0 interval to be the slowest entry.
*/
virtual unsigned int evaluateIntervalRequests(int& sessionId) const;

private:
DeviceAdaptorRingBuffer<OrientationData>* accelerometerBuffer_;
OrientationData orientationValue_;
Expand Down
2 changes: 2 additions & 0 deletions adaptors/alsadaptor-sysfs/alsadaptor-sysfs.cpp
Expand Up @@ -42,6 +42,8 @@ ALSAdaptorSysfs::ALSAdaptorSysfs(const QString& id) :
addAdaptedSensor("als", "Internal ambient light sensor lux values", alsBuffer_);

introduceAvailableDataRange(DataRange(0, 65535, 1));
introduceAvailableInterval(DataRange(0, 0, 0));
setDefaultInterval(0);
}

ALSAdaptorSysfs::~ALSAdaptorSysfs()
Expand Down
4 changes: 4 additions & 0 deletions adaptors/alsadaptor/alsadaptor.cpp
Expand Up @@ -95,7 +95,11 @@ ALSAdaptor::ALSAdaptor(const QString& id):

alsBuffer_ = new DeviceAdaptorRingBuffer<TimedUnsigned>(32);
addAdaptedSensor("als", "Internal ambient light sensor lux values", alsBuffer_);

setDescription("Ambient light");
introduceAvailableDataRange(DataRange(0, 65535, 1));
introduceAvailableInterval(DataRange(0, 0, 0));
setDefaultInterval(0);
}


Expand Down
18 changes: 11 additions & 7 deletions adaptors/kbslideradaptor/kbslideradaptor.cpp
Expand Up @@ -52,7 +52,10 @@ KeyboardSliderAdaptor::KeyboardSliderAdaptor(const QString& id) :
kbstateBuffer_ = new DeviceAdaptorRingBuffer<KeyboardSliderState>(3);
addAdaptedSensor("keyboardslider", "Device keyboard slider state", kbstateBuffer_);

setDescription("Keyboard slider events (via input device)");
introduceAvailableDataRange(DataRange(0, 2, 1));
introduceAvailableInterval(DataRange(0, 0, 0));
setDefaultInterval(0);
}

KeyboardSliderAdaptor::~KeyboardSliderAdaptor()
Expand Down Expand Up @@ -109,13 +112,14 @@ void KeyboardSliderAdaptor::commitOutput()
kbstateBuffer_->wakeUpReaders();
}

int KeyboardSliderAdaptor::getPollingInterval()
{
return 0;
unsigned int KeyboardSliderAdaptor::interval() const
{
return 0;
}

bool KeyboardSliderAdaptor::setPollingInterval(int f)
{
Q_UNUSED(f);
return false;
bool KeyboardSliderAdaptor::setInterval(const unsigned int value, const int sessionId)
{
Q_UNUSED(value);
Q_UNUSED(sessionId);
return true;
}
4 changes: 2 additions & 2 deletions adaptors/kbslideradaptor/kbslideradaptor.h
Expand Up @@ -67,8 +67,8 @@ class KeyboardSliderAdaptor : public InputDevAdaptor
KeyboardSliderAdaptor(const QString& id);
~KeyboardSliderAdaptor();

virtual int getPollingInterval();
virtual bool setPollingInterval(int f);
virtual unsigned int interval() const;
virtual bool setInterval(const unsigned int value, const int sessionId);

private:

Expand Down
4 changes: 4 additions & 0 deletions adaptors/magnetometeradaptor/magnetometeradaptor.cpp
Expand Up @@ -63,6 +63,10 @@ MagnetometerAdaptor::MagnetometerAdaptor(const QString& id) :
} else {
introduceAvailableDataRange(DataRange(-2048, 2048, 1));
}

setDescription("Input device Magnetometer adaptor (ak897x)");
introduceAvailableInterval(DataRange(1, 2000, 0));
setDefaultInterval(1000);
}

MagnetometerAdaptor::~MagnetometerAdaptor()
Expand Down
5 changes: 5 additions & 0 deletions adaptors/mrstaccelerometer/mrstaccelerometeradaptor.cpp
Expand Up @@ -23,6 +23,11 @@ MRSTAccelAdaptor::MRSTAccelAdaptor (const QString& id) :
addPath (devPath, devId);
buffer = new DeviceAdaptorRingBuffer<OrientationData>(128);
addAdaptedSensor("accelerometer", "MRST accelerometer", buffer);

setDescription("MRST accelerometer");
introduceAvailableDataRange(DataRange(0, 0, 1));
introduceAvailableInterval(DataRange(0, 0, 0));
setDefaultInterval(0);
}

MRSTAccelAdaptor::~MRSTAccelAdaptor () {
Expand Down
13 changes: 2 additions & 11 deletions adaptors/proximityadaptor-evdev/proximityadaptor-evdev.cpp
Expand Up @@ -55,6 +55,8 @@ ProximityAdaptorEvdev::ProximityAdaptorEvdev(const QString& id) :
addAdaptedSensor("proximity", "Proximity state", proximityBuffer_);

introduceAvailableDataRange(DataRange(-1, 1, 1));
introduceAvailableInterval(DataRange(0, 0, 0));
setDefaultInterval(0);
}

ProximityAdaptorEvdev::~ProximityAdaptorEvdev()
Expand Down Expand Up @@ -115,14 +117,3 @@ void ProximityAdaptorEvdev::commitOutput()
proximityBuffer_->wakeUpReaders();
}
}

int ProximityAdaptorEvdev::getPollingInterval()
{
return 0;
}

bool ProximityAdaptorEvdev::setPollingInterval(int f)
{
Q_UNUSED(f);
return false;
}
3 changes: 0 additions & 3 deletions adaptors/proximityadaptor-evdev/proximityadaptor-evdev.h
Expand Up @@ -70,9 +70,6 @@ class ProximityAdaptorEvdev : public InputDevAdaptor
ProximityAdaptorEvdev(const QString& id);
~ProximityAdaptorEvdev();

virtual int getPollingInterval();
virtual bool setPollingInterval(int f);

private:

DeviceAdaptorRingBuffer<TimedUnsigned>* proximityBuffer_;
Expand Down
3 changes: 3 additions & 0 deletions adaptors/proximityadaptor/proximityadaptor.cpp
Expand Up @@ -98,7 +98,10 @@ ProximityAdaptor::ProximityAdaptor(const QString& id) :
m_threshold = 35;
}

setDescription("Proximity sensor readings (Dipro sensor)");
introduceAvailableDataRange(DataRange(0, 1, 1));
introduceAvailableInterval(DataRange(0, 0, 0));
setDefaultInterval(0);
}


Expand Down
3 changes: 3 additions & 0 deletions adaptors/tapadaptor/tapadaptor.cpp
Expand Up @@ -52,7 +52,10 @@ TapAdaptor::TapAdaptor(const QString& id) :
tapBuffer_ = new DeviceAdaptorRingBuffer<TapData>(128);
addAdaptedSensor("tap", "Internal accelerometer tap events", tapBuffer_);

setDescription("Device tap events (lis302d)");
introduceAvailableDataRange(DataRange(0, 2, 1));
introduceAvailableInterval(DataRange(0, 0, 0));
setDefaultInterval(0);
}

TapAdaptor::~TapAdaptor()
Expand Down
9 changes: 7 additions & 2 deletions adaptors/touchadaptor/touchadaptor.cpp
Expand Up @@ -50,6 +50,11 @@ TouchAdaptor::TouchAdaptor(const QString& id) : InputDevAdaptor(id, HARD_MAX_TOU
}
outputBuffer_ = new DeviceAdaptorRingBuffer<TouchData>(128);
addAdaptedSensor("touch", "Touch screen input", outputBuffer_);

setDescription("Touch screen events");
introduceAvailableDataRange(DataRange(0, 0, 1));
introduceAvailableInterval(DataRange(0, 0, 0));
setDefaultInterval(0);
}

TouchAdaptor::~TouchAdaptor()
Expand Down Expand Up @@ -85,12 +90,12 @@ bool TouchAdaptor::checkInputDevice(QString path, QString matchString)
}

if (ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(evtype_bitmask)), evtype_bitmask) < 0) {
qWarning() << __PRETTY_FUNCTION__ << deviceName << "EVIOGBIT EV_ABS error.";
sensordLogW() << __PRETTY_FUNCTION__ << deviceName << "EVIOGBIT EV_ABS error.";
return false;
}

if (!test_bit(ABS_X, evtype_bitmask) || !test_bit(ABS_Y, evtype_bitmask)) {
qDebug() << __PRETTY_FUNCTION__ << deviceName << "Testbit ABS_X or ABS_Y failed.";
sensordLogW() << __PRETTY_FUNCTION__ << deviceName << "Testbit ABS_X or ABS_Y failed.";
return false;
}

Expand Down
21 changes: 13 additions & 8 deletions chains/accelerometerchain/accelerometerchain.cpp
Expand Up @@ -86,23 +86,28 @@ AccelerometerChain::AccelerometerChain(const QString& id) :
filterBin_->join("acccoordinatealigner", "source", "buffer", "sink");

// Join datasources to the chain
RingBufferBase* rb;
rb = accelerometerAdaptor_->findBuffer("accelerometer");
Q_ASSERT(rb);
rb->join(accelerometerReader_);
//~ RingBufferBase* rb;
//~ rb = accelerometerAdaptor_->findBuffer("accelerometer");
//~ Q_ASSERT(rb);
//~ rb->join(accelerometerReader_);
connectToSource(accelerometerAdaptor_, "accelerometer", accelerometerReader_);


setDescription("Coordinate transformations");
setRangeSource(accelerometerAdaptor_);
addStandbyOverrideSource(accelerometerAdaptor_);
setIntervalSource(accelerometerAdaptor_);
}

AccelerometerChain::~AccelerometerChain()
{
SensorManager& sm = SensorManager::instance();

RingBufferBase* rb;
rb = accelerometerAdaptor_->findBuffer("accelerometer");
Q_ASSERT(rb);
rb->unjoin(accelerometerReader_);
//~ RingBufferBase* rb;
//~ rb = accelerometerAdaptor_->findBuffer("accelerometer");
//~ Q_ASSERT(rb);
//~ rb->unjoin(accelerometerReader_);
disconnectFromSource(accelerometerAdaptor_, "accelerometer", accelerometerReader_);

sm.releaseDeviceAdaptor("accelerometeradaptor");

Expand Down
21 changes: 12 additions & 9 deletions chains/orientationchain/orientationchain.cpp
Expand Up @@ -72,22 +72,25 @@ OrientationChain::OrientationChain(const QString& id) :
filterBin_->join("orientationinterpreter", "orientation", "orientationbuffer", "sink");

// Join datasources to the chain
RingBufferBase* rb;
rb = accelerometerChain_->findBuffer("accelerometer");
Q_ASSERT(rb);
rb->join(accelerometerReader_);
//~ RingBufferBase* rb;
//~ rb = accelerometerChain_->findBuffer("accelerometer");
//~ Q_ASSERT(rb);
//~ rb->join(accelerometerReader_);
connectToSource(accelerometerChain_, "accelerometer", accelerometerReader_);

setDescription("Device orientation interpretations (in different flavors)");
introduceAvailableDataRange(DataRange(0, 6, 1));

addStandbyOverrideSource(accelerometerChain_);
setIntervalSource(accelerometerChain_);
}

OrientationChain::~OrientationChain()
{
RingBufferBase* rb;
rb = accelerometerChain_->findBuffer("accelerometer");
Q_ASSERT(rb);
rb->unjoin(accelerometerReader_);
//~ RingBufferBase* rb;
//~ rb = accelerometerChain_->findBuffer("accelerometer");
//~ Q_ASSERT(rb);
//~ rb->unjoin(accelerometerReader_);
disconnectFromSource(accelerometerChain_, "accelerometer", accelerometerReader_);

delete accelerometerReader_;
delete topEdgeOutput_;
Expand Down
14 changes: 14 additions & 0 deletions datatypes/datarange.h
Expand Up @@ -102,4 +102,18 @@ class DataRangeRequest {
}
};

/**
* Request class for Intervals. Contains id of the requester and value.
*/
class IntervalRequest {
public:
int id_;
unsigned value_;

bool operator==(const IntervalRequest& right) const
{
return (id_ == right.id_ && value_ == right.value_);
}
};

#endif // DATARANGE_H
7 changes: 7 additions & 0 deletions debian/changelog
@@ -1,3 +1,10 @@
sensord (0.6.28) unstable; urgency=low

[Timo Rongas]
* Fixes: NB#190879 - Sample interval metadata is not fetched from hardware

-- Timo Rongas <ext-timo.2.rongas@nokia.com> Mon, 18 Oct 2010 12:24:37 +0300

sensord (0.6.27) unstable; urgency=low

[Antti Virtanen]
Expand Down

0 comments on commit 830c4e2

Please sign in to comment.