1cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca/*
2cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Copyright (C) 2015 Intel Corporation
3cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca *
4cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Licensed under the Apache License, Version 2.0 (the "License");
5cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * you may not use this file except in compliance with the License.
6cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * You may obtain a copy of the License at
7cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca *
8cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca *      http://www.apache.org/licenses/LICENSE-2.0
9cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca *
10cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * Unless required by applicable law or agreed to in writing, software
11cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * distributed under the License is distributed on an "AS IS" BASIS,
12cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * See the License for the specific language governing permissions and
14cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca * limitations under the License.
15cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca */
16cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca
17cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca#include <cutils/log.h>
18cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca#include "GroveLight.hpp"
192260148caf820ec683166792851b504e036c1f39Constantin Musca#include "SensorsHAL.hpp"
20cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca
212260148caf820ec683166792851b504e036c1f39Constantin Muscastruct sensor_t GroveLight::sensorDescription = {
226134630c71b16746935fe284c64dc29014a89577Bruce Beare  .name = "Grove Light Sensor",
231a7a7ca125ef0eb3e576e94412eba05ed916acaaConstantin Musca  .vendor = "Senba Optical & Electronic",
246134630c71b16746935fe284c64dc29014a89577Bruce Beare  .version = 1,
256134630c71b16746935fe284c64dc29014a89577Bruce Beare  .handle = -1,
266134630c71b16746935fe284c64dc29014a89577Bruce Beare  .type = SENSOR_TYPE_LIGHT,
271a7a7ca125ef0eb3e576e94412eba05ed916acaaConstantin Musca  .maxRange = 60.0f,
286134630c71b16746935fe284c64dc29014a89577Bruce Beare  .resolution = 1.0f,
296134630c71b16746935fe284c64dc29014a89577Bruce Beare  .power = 0.001f,
301a7a7ca125ef0eb3e576e94412eba05ed916acaaConstantin Musca  .minDelay = 10,
316134630c71b16746935fe284c64dc29014a89577Bruce Beare  .fifoReservedEventCount = 0,
326134630c71b16746935fe284c64dc29014a89577Bruce Beare  .fifoMaxEventCount = 0,
336134630c71b16746935fe284c64dc29014a89577Bruce Beare  .stringType = SENSOR_STRING_TYPE_LIGHT,
346134630c71b16746935fe284c64dc29014a89577Bruce Beare  .requiredPermission = "",
351a7a7ca125ef0eb3e576e94412eba05ed916acaaConstantin Musca  .maxDelay = 1000,
366134630c71b16746935fe284c64dc29014a89577Bruce Beare  .flags = SENSOR_FLAG_ON_CHANGE_MODE,
376134630c71b16746935fe284c64dc29014a89577Bruce Beare  .reserved = {},
38cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca};
39cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca
402260148caf820ec683166792851b504e036c1f39Constantin MuscaSensor * GroveLight::createSensor(int pollFd) {
412260148caf820ec683166792851b504e036c1f39Constantin Musca  return new GroveLight(pollFd, 0);
422260148caf820ec683166792851b504e036c1f39Constantin Musca}
432260148caf820ec683166792851b504e036c1f39Constantin Musca
442260148caf820ec683166792851b504e036c1f39Constantin Muscavoid GroveLight::initModule() {
452260148caf820ec683166792851b504e036c1f39Constantin Musca  SensorContext::addSensorModule(&sensorDescription, createSensor);
462260148caf820ec683166792851b504e036c1f39Constantin Musca}
472260148caf820ec683166792851b504e036c1f39Constantin Musca
482260148caf820ec683166792851b504e036c1f39Constantin MuscaGroveLight::GroveLight(int pollFd, int pin) : upm::GroveLight(pin), pollFd(pollFd) {
492260148caf820ec683166792851b504e036c1f39Constantin Musca  handle = sensorDescription.handle;
50cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca  type = SENSOR_TYPE_LIGHT;
51cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca}
52cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca
53cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin MuscaGroveLight::~GroveLight() {}
54cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca
55cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Muscaint GroveLight::pollEvents(sensors_event_t* data, int count) {
56cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca  data->light = value();
57cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca  return 1;
58cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca}
59cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca
60cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Muscaint GroveLight::activate(int handle, int enabled) {
61cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca  /* start or stop the acquisition thread */
622260148caf820ec683166792851b504e036c1f39Constantin Musca  return activateAcquisitionThread(pollFd, handle, enabled);
63cf6591ae5272db9f2718d75d0e32d0298b0dc7fdConstantin Musca}
64