Skip to content

Commit

Permalink
Implemented NCDK support for proximityadaptor.
Browse files Browse the repository at this point in the history
  • Loading branch information
Antti Virtanen committed Feb 9, 2011
1 parent 7ef0e67 commit afd2850
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 18 deletions.
3 changes: 3 additions & 0 deletions adaptors/alsadaptor/alsadaptor.cpp
Expand Up @@ -143,7 +143,10 @@ void ALSAdaptor::processSample(int pathId, int fd)
sensordLogT() << "Ambient light value: " << lux->value_;
}
else
{
sensordLogW() << "Not known device type: " << deviceType_;
return;
}
alsBuffer_->commit();
alsBuffer_->wakeUpReaders();
}
8 changes: 4 additions & 4 deletions adaptors/alsadaptor/alsadaptor.h
Expand Up @@ -66,6 +66,10 @@ class ALSAdaptor : public SysfsAdaptor
return new ALSAdaptor(id);
}

virtual bool startSensor();

virtual void stopSensor();

protected:
/**
* Constructor.
Expand All @@ -85,10 +89,6 @@ class ALSAdaptor : public SysfsAdaptor
*/
virtual bool setStandbyOverride(const bool override) { Q_UNUSED(override); return false; }

virtual bool startSensor();

virtual void stopSensor();

private:

/**
Expand Down
60 changes: 50 additions & 10 deletions adaptors/proximityadaptor/proximityadaptor.cpp
Expand Up @@ -60,6 +60,7 @@ ProximityAdaptor::ProximityAdaptor(const QString& id) :

deviceType_ = (DeviceType)Config::configuration()->value("proximity/driver_type", "0").toInt();
threshold_ = Config::configuration()->value("proximity/threshold", "35").toInt();
powerStatePath_ = Config::configuration()->value("proximity/powerstate_path").toByteArray();
if (deviceType_ == RM696)
{
#ifdef SENSORFW_MCE_WATCHER
Expand All @@ -83,17 +84,36 @@ ProximityAdaptor::~ProximityAdaptor()
delete proximityBuffer_;
}

bool ProximityAdaptor::startSensor()
{
if(deviceType_ == NCDK && !powerStatePath_.isEmpty())
{
writeToFile(powerStatePath_, "1");
}
return SysfsAdaptor::startSensor();
}

void ProximityAdaptor::stopSensor()
{
if(deviceType_ == NCDK && !powerStatePath_.isEmpty())
{
writeToFile(powerStatePath_, "0");
}
SysfsAdaptor::stopSensor();
}

void ProximityAdaptor::processSample(int pathId, int fd)
{
Q_UNUSED(pathId);

static char buffer[100];
int ret = 0;
char buffer[100];
memset(buffer, 0, sizeof(buffer));
int value = 0;

if (deviceType_ == RM680)
{
bh1770glc_ps ps_data;
int bytesRead = read(fd, buffer, sizeof(buffer)-1);
int bytesRead = read(fd, buffer, sizeof(buffer) - 1);

if (bytesRead > 0) {
memcpy(&ps_data, buffer, sizeof(ps_data));
Expand All @@ -104,11 +124,13 @@ void ProximityAdaptor::processSample(int pathId, int fd)
}

if ( ps_data.led1 > threshold_ ) {
ret = 1;
value = 1;
}
} else if(deviceType_ == RM696) {
}
else if(deviceType_ == RM696)
{
apds990x_data ps_data;
int bytesRead = read(fd, buffer, sizeof(buffer)-1);
int bytesRead = read(fd, buffer, sizeof(buffer) - 1);

if (bytesRead > 0) {
memcpy(&ps_data, buffer, sizeof(ps_data));
Expand All @@ -119,17 +141,35 @@ void ProximityAdaptor::processSample(int pathId, int fd)
}

if ( ps_data.ps > threshold_ ) {
ret = 1;
value = 1;
}
}
else if(deviceType_ == NCDK)
{
int bytesRead = read(fd, &buffer, sizeof(buffer));
if (bytesRead <= 0) {
sensordLogW() << "read(): " << strerror(errno);
return;
}
QVariant variant(buffer);
bool ok;
value = variant.toInt(&ok);
if(!ok) {
sensordLogW() << "read(): failed to parse int from: " << buffer;
return;
}
} else {
sensordLogW() << "Other HW except RM680 and RM696";
sensordLogT() << "Proximity value: " << value;
}
else
{
sensordLogW() << "Not known device type: " << deviceType_;
return;
}

TimedUnsigned* proximityData = proximityBuffer_->nextSlot();

proximityData->timestamp_ = Utils::getTimeStamp();
proximityData->value_ = ret;
proximityData->value_ = value;

proximityBuffer_->commit();
proximityBuffer_->wakeUpReaders();
Expand Down
8 changes: 7 additions & 1 deletion adaptors/proximityadaptor/proximityadaptor.h
Expand Up @@ -55,7 +55,8 @@ class ProximityAdaptor : public SysfsAdaptor
{
DeviceUnknown = 0,
RM680,
RM696
RM696,
NCDK
};

/**
Expand All @@ -67,6 +68,10 @@ class ProximityAdaptor : public SysfsAdaptor
return new ProximityAdaptor(id);
}

virtual bool startSensor();

virtual void stopSensor();

protected:
/**
* Constructor.
Expand All @@ -89,6 +94,7 @@ class ProximityAdaptor : public SysfsAdaptor

int threshold_;
ProximityAdaptor::DeviceType deviceType_;
QByteArray powerStatePath_;

#ifdef SENSORFW_MCE_WATCHER
QDBusInterface *dbusIfc_;
Expand Down
8 changes: 5 additions & 3 deletions config/sensord-ncdk.conf
Expand Up @@ -14,16 +14,18 @@ seek = 1
path = /sys/devices/pci0000:00/0000:00:00.3/i2c-0/0-0039/lux0_input
powerstate_path = /sys/devices/pci0000:00/0000:00:00.3/i2c-0/0-0039/power_state
dataranges = "0=>65535"
intervals = "0"
default_interval = 0

[keyboardslider]
input_match = gpio-keys
dataranges = "0=>2"
intervals = 0

[proximity]
path = /sys/bus/i2c/devices/5-0055/apds9802ps/proximity_output
driver_type = 3
mode = 1
seek = 1
path = /sys/devices/pci0000:00/0000:00:00.3/i2c-0/0-0039/prox0_raw
powerstate_path = /sys/devices/pci0000:00/0000:00:00.3/i2c-0/0-0039/prox0_raw_en
dataranges = "0=>4096"

[magnetometer]
Expand Down

0 comments on commit afd2850

Please sign in to comment.