/* * Author: Yevgeniy Kiveisha <yevgeniy.kiveisha@intel.com> * Copyright (c) 2014 Intel Corporation. * * Credits to Seeed Studeo. * Based on Seeed Studeo code example, * http://www.seeedstudio.com/wiki/index.php?title=Twig_-_I2C_Color_Sensor_v0.9b. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include <string> #include <mraa/i2c.hpp> #define ADDR 0x39 // device address #define REG_CTL 0x80 #define REG_TIMING 0x81 #define REG_INT 0x82 #define REG_INT_SOURCE 0x83 #define REG_ID 0x84 #define REG_GAIN 0x87 #define REG_LOW_THRESH_LOW_BYTE 0x88 #define REG_LOW_THRESH_HIGH_BYTE 0x89 #define REG_HIGH_THRESH_LOW_BYTE 0x8A #define REG_HIGH_THRESH_HIGH_BYTE 0x8B #define REG_BLOCK_READ 0xCF #define REG_GREEN_LOW 0xD0 #define REG_GREEN_HIGH 0xD1 #define REG_RED_LOW 0xD2 #define REG_RED_HIGH 0xD3 #define REG_BLUE_LOW 0xD4 #define REG_BLUE_HIGH 0xD5 #define REG_CLEAR_LOW 0xD6 #define REG_CLEAR_HIGH 0xD7 #define CTL_DAT_INIITIATE 0x03 #define CLR_INT 0xE0 /* Timing Register */ #define SYNC_EDGE 0x40 #define INTEG_MODE_FREE 0x00 #define INTEG_MODE_MANUAL 0x10 #define INTEG_MODE_SYN_SINGLE 0x20 #define INTEG_MODE_SYN_MULTI 0x30 #define INTEG_PARAM_PULSE_COUNT1 0x00 #define INTEG_PARAM_PULSE_COUNT2 0x01 #define INTEG_PARAM_PULSE_COUNT4 0x02 #define INTEG_PARAM_PULSE_COUNT8 0x03 /* Interrupt Control Register */ #define INTR_STOP 40 #define INTR_DISABLE 0x00 #define INTR_LEVEL 0x10 #define INTR_PERSIST_EVERY 0x00 #define INTR_PERSIST_SINGLE 0x01 /* Interrupt Souce Register */ #define INT_SOURCE_GREEN 0x00 #define INT_SOURCE_RED 0x01 #define INT_SOURCE_BLUE 0x10 #define INT_SOURCE_CLEAR 0x03 /* Gain Register */ #define GAIN_1 0x00 #define GAIN_4 0x10 #define GAIN_16 0x20 #define GANI_64 0x30 #define PRESCALER_1 0x00 #define PRESCALER_2 0x01 #define PRESCALER_4 0x02 #define PRESCALER_8 0x03 #define PRESCALER_16 0x04 #define PRESCALER_32 0x05 #define PRESCALER_64 0x06 #define HIGH 1 #define LOW 0 namespace upm { typedef struct { uint16_t r; uint16_t g; uint16_t b; uint16_t clr; } tcs3414sc_rgb_t; /** * @brief TCS3414CS Color Sensor library * @defgroup tcs3414cs libupm-tcs3414cs * @ingroup seeed i2c color */ /** * @library tcs3414cs * @sensor tcs3414cs * @comname TCS3414CS Color Sensor * @altname Grove Color Sensor * @type color * @man seeed * @web http://www.seeedstudio.com/wiki/Grove_-_I2C_Color_Sensor * @con i2c * * @brief API for the TCS3414CS Color Sensor * * This module defines the TCS3414CS interface for the color sensor * * @image html tcs3414cs.jpg * @snippet tcs3414cs.cxx Interesting */ class TCS3414CS { public: /** * Instantiates a TCS3414CS object * * @param bus Number of the used bus */ TCS3414CS (); /** * Gets the RGB value from the sensor. * * @param rgb Color values */ void readRGB (tcs3414sc_rgb_t * rgb); /** * Clears interrupts. */ void clearInterrupt (); /** * Returns the name of the component */ std::string name() { return m_name; } private: std::string m_name; mraa::I2c m_i2Ctx; uint16_t i2cReadReg_N (int reg, unsigned int len, uint8_t * buffer); mraa::Result i2cWriteReg_N (uint8_t reg, unsigned int len, uint8_t * buffer); mraa::Result i2cWriteReg (uint8_t reg, uint8_t data); }; }