blob: bbbf1e725835aab7950503fa2ef53bdb25ddad53 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* resarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#ifndef __TCS34725_H__
#define __TCS34725_H__
#define TCS34725_INTEGRATIONTIME_2_4MS 0xFF /* 2.4ms - 1 cycle - Max Count: 1024 */
#define TCS34725_INTEGRATIONTIME_24MS 0xF6 /* 24ms - 10 cycles - Max Count: 10240 */
#define TCS34725_INTEGRATIONTIME_50MS 0xEB /* 50ms - 20 cycles - Max Count: 20480 */
#define TCS34725_INTEGRATIONTIME_101MS 0xD5 /* 101ms - 42 cycles - Max Count: 43008 */
#define TCS34725_INTEGRATIONTIME_154MS 0xC0 /* 154ms - 64 cycles - Max Count: 65535 */
#define TCS34725_INTEGRATIONTIME_700MS 0x00 /* 700ms - 256 cycles - Max Count: 65535 */
#define TCS34725_GAIN_1X 0x00 /* No gain */
#define TCS34725_GAIN_4X 0x01 /* 4x gain */
#define TCS34725_GAIN_16X 0x02 /* 16x gain */
#define TCS34725_GAIN_60X 0x03 /* 60x gain */
#include "os/mynewt.h"
#include "sensor/sensor.h"
#ifdef __cplusplus
extern "C" {
#endif
struct tcs34725_cfg {
uint8_t gain;
uint8_t integration_time;
uint8_t int_enable;
sensor_type_t mask;
};
struct tcs34725 {
struct os_dev dev;
struct sensor sensor;
struct tcs34725_cfg cfg;
os_time_t last_read_time;
};
/**
* Expects to be called back through os_dev_create().
*
* @param The device object associated with this color sensor
* @param Argument passed to OS device init, unused
*
* @return 0 on success, non-zero error on failure.
*/
int
tcs34725_init(struct os_dev *dev, void *arg);
/**
* Configure the sensor
*
* @param ptr to the sensor
* @param ptr to sensor config
* @return 0 on success, non-zero on failure
*/
int
tcs34725_config(struct tcs34725 *tcs34725, struct tcs34725_cfg *cfg);
#if MYNEWT_VAL(TCS34725_CLI)
int tcs34725_shell_init(void);
#endif
/**
* Get chip ID from the sensor
*
* @param The sensor interface
* @param Pointer to the variable to fill up chip ID in
* @return 0 on success, non-zero on failure
*/
int
tcs34725_get_chip_id(struct sensor_itf *itf, uint8_t *id);
/**
* Get gain of the sensor
*
* @param The sensor interface
* @param ptr to gain
* @return 0 on success, non-zero on failure
*/
int
tcs34725_get_gain(struct sensor_itf *itf, uint8_t *gain);
/**
* Set gain of the sensor
*
* @param The sensor interface
* @param gain
* @return 0 on success, non-zero on failure
*/
int
tcs34725_set_gain(struct sensor_itf *itf, uint8_t gain);
/**
* enables/disables interrupts
*
* @param enable/disable
* @return 0 on success, non-zero on failure
*/
int
tcs34725_enable_interrupt(struct sensor_itf *itf, uint8_t enable);
/**
* Clears the interrupts
*
* @param The sensor interface
* @param The sensor interface
* @return 0 on success, non-zero on failure
*/
int
tcs34725_clear_interrupt(struct sensor_itf *itf);
/**
* Sets threshold limits for interrupts, if the low threshold is set above
* the high threshold, the high threshold is ignored and only the low
* threshold is evaluated
*
* @param The sensor interface
* @param lower threshold
* @param higher threshold
*
* @return 0 on success, non-zero on failure
*/
int
tcs34725_set_int_limits(struct sensor_itf *itf, uint16_t low, uint16_t high);
/**
* Sets integration time
*
* @param The sensor interface
* @param integration time to be set
* @return 0 on success, non-zero on failure
*/
int
tcs34725_set_integration_time(struct sensor_itf *itf, uint8_t int_time);
/**
* Gets integration time set earlier
*
* @param The sensor interface
* @param ptr to integration time
* @return 0 on success, non-zero on failure
*/
int
tcs34725_get_integration_time(struct sensor_itf *itf, uint8_t *int_time);
/**
*
* Enables the device
*
* @param The sensor interface
* @param enable/disable
* @return 0 on success, non-zero on error
*/
int
tcs34725_enable(struct sensor_itf *itf, uint8_t enable);
/**
* Indicates whether the sensor is enabled or not
*
* @param The sensor interface
* @param ptr to is_enabled variable
* @return 0 on success, non-zero on failure
*/
int
tcs34725_get_enable(struct sensor_itf *itf, uint8_t *is_enabled);
/**
* Reads the raw red, green, blue and clear channel values
*
*
* @param The sensor interface
* @param red value to return
* @param green value to return
* @param blue value to return
* @param clear channel value
* @param driver sturcture containing config
*/
int
tcs34725_get_rawdata(struct sensor_itf *itf, uint16_t *r, uint16_t *g,
uint16_t *b, uint16_t *c, struct tcs34725 *tcs34725);
/**
*
* Gets threshold limits for interrupts, if the low threshold is set above
* the high threshold, the high threshold is ignored and only the low
* threshold is evaluated
*
* @param The sensor interface
* @param ptr to lower threshold
* @param ptr to higher threshold
*
* @return 0 on success, non-zero on failure
*/
int
tcs34725_get_int_limits(struct sensor_itf *itf, uint16_t *low, uint16_t *high);
#ifdef __cplusplus
}
#endif
#endif