Commit a6d0c54a authored by rijubrata.bhaumik's avatar rijubrata.bhaumik Committed by Commit bot

Windows: Ambient Light API

TEST= http://jsfiddle.net/73v8rmex/3/ (manual)

BUG=336424

Review URL: https://codereview.chromium.org/754963006

Cr-Commit-Position: refs/heads/master@{#319060}
parent ead8f96b
...@@ -61,6 +61,7 @@ class CONTENT_EXPORT DataFetcherSharedMemory ...@@ -61,6 +61,7 @@ class CONTENT_EXPORT DataFetcherSharedMemory
class SensorEventSink; class SensorEventSink;
class SensorEventSinkMotion; class SensorEventSinkMotion;
class SensorEventSinkOrientation; class SensorEventSinkOrientation;
class SensorEventSinkLight;
virtual FetcherType GetType() const override; virtual FetcherType GetType() const override;
...@@ -72,6 +73,7 @@ class CONTENT_EXPORT DataFetcherSharedMemory ...@@ -72,6 +73,7 @@ class CONTENT_EXPORT DataFetcherSharedMemory
base::win::ScopedComPtr<ISensor> sensor_inclinometer_; base::win::ScopedComPtr<ISensor> sensor_inclinometer_;
base::win::ScopedComPtr<ISensor> sensor_accelerometer_; base::win::ScopedComPtr<ISensor> sensor_accelerometer_;
base::win::ScopedComPtr<ISensor> sensor_gyrometer_; base::win::ScopedComPtr<ISensor> sensor_gyrometer_;
base::win::ScopedComPtr<ISensor> sensor_light_;
#endif #endif
DISALLOW_COPY_AND_ASSIGN(DataFetcherSharedMemory); DISALLOW_COPY_AND_ASSIGN(DataFetcherSharedMemory);
......
...@@ -18,6 +18,13 @@ namespace { ...@@ -18,6 +18,13 @@ namespace {
const double kMeanGravity = 9.80665; const double kMeanGravity = 9.80665;
void SetLightBuffer(content::DeviceLightHardwareBuffer* buffer, double lux) {
DCHECK(buffer);
buffer->seqlock.WriteBegin();
buffer->data.value = lux;
buffer->seqlock.WriteEnd();
}
} // namespace } // namespace
...@@ -222,8 +229,41 @@ class DataFetcherSharedMemory::SensorEventSinkMotion ...@@ -222,8 +229,41 @@ class DataFetcherSharedMemory::SensorEventSinkMotion
DISALLOW_COPY_AND_ASSIGN(SensorEventSinkMotion); DISALLOW_COPY_AND_ASSIGN(SensorEventSinkMotion);
}; };
class DataFetcherSharedMemory::SensorEventSinkLight
: public DataFetcherSharedMemory::SensorEventSink {
public:
explicit SensorEventSinkLight(DeviceLightHardwareBuffer* const buffer)
: buffer_(buffer) {}
virtual ~SensorEventSinkLight() {}
protected:
virtual bool UpdateSharedMemoryBuffer(ISensor* sensor,
ISensorDataReport* new_data) override {
double lux;
bool has_lux;
GetSensorValue(SENSOR_DATA_TYPE_LIGHT_LEVEL_LUX, new_data, &lux, &has_lux);
if(!has_lux) {
// Could not get lux value.
return false;
}
SetLightBuffer(buffer_, lux);
return true;
}
private:
DeviceLightHardwareBuffer* const buffer_;
DISALLOW_COPY_AND_ASSIGN(SensorEventSinkLight);
};
DataFetcherSharedMemory::DataFetcherSharedMemory() DataFetcherSharedMemory::DataFetcherSharedMemory()
: motion_buffer_(nullptr), orientation_buffer_(nullptr) { : motion_buffer_(nullptr),
orientation_buffer_(nullptr),
light_buffer_(nullptr) {
} }
DataFetcherSharedMemory::~DataFetcherSharedMemory() { DataFetcherSharedMemory::~DataFetcherSharedMemory() {
...@@ -277,6 +317,22 @@ bool DataFetcherSharedMemory::Start(ConsumerType consumer_type, void* buffer) { ...@@ -277,6 +317,22 @@ bool DataFetcherSharedMemory::Start(ConsumerType consumer_type, void* buffer) {
SetBufferAvailableState(consumer_type, true); SetBufferAvailableState(consumer_type, true);
} }
break; break;
case CONSUMER_TYPE_LIGHT:
{
light_buffer_ = static_cast<DeviceLightHardwareBuffer*>(buffer);
scoped_refptr<SensorEventSink> sink(
new SensorEventSinkLight(light_buffer_));
bool sensor_light_available = RegisterForSensor(
SENSOR_TYPE_AMBIENT_LIGHT, sensor_light_.Receive(), sink);
if (sensor_light_available) {
SetLightBuffer(light_buffer_, -1);
return true;
}
// if no sensors are available, fire an Infinity event.
SetLightBuffer(light_buffer_, std::numeric_limits<double>::infinity());
}
break;
default: default:
NOTREACHED(); NOTREACHED();
} }
...@@ -293,6 +349,10 @@ bool DataFetcherSharedMemory::Stop(ConsumerType consumer_type) { ...@@ -293,6 +349,10 @@ bool DataFetcherSharedMemory::Stop(ConsumerType consumer_type) {
case CONSUMER_TYPE_MOTION: case CONSUMER_TYPE_MOTION:
motion_buffer_ = nullptr; motion_buffer_ = nullptr;
return true; return true;
case CONSUMER_TYPE_LIGHT:
SetLightBuffer(light_buffer_, -1);
light_buffer_ = nullptr;
return true;
default: default:
NOTREACHED(); NOTREACHED();
} }
...@@ -368,6 +428,12 @@ void DataFetcherSharedMemory::DisableSensors(ConsumerType consumer_type) { ...@@ -368,6 +428,12 @@ void DataFetcherSharedMemory::DisableSensors(ConsumerType consumer_type) {
sensor_gyrometer_.Release(); sensor_gyrometer_.Release();
} }
break; break;
case CONSUMER_TYPE_LIGHT:
if (sensor_light_.get()) {
sensor_light_->SetEventSink(nullptr);
sensor_light_.Release();
}
break;
default: default:
NOTREACHED(); NOTREACHED();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment