upm  1.7.1
Sensor/Actuator repository for libmraa (v2.0.0)
tcs3414cs.hpp
1 /*
2  * Author: Yevgeniy Kiveisha <yevgeniy.kiveisha@intel.com>
3  * Copyright (c) 2014 Intel Corporation.
4  *
5  * Credits to Seeed Studeo.
6  * Based on Seeed Studeo code example,
7  * http://www.seeedstudio.com/wiki/index.php?title=Twig_-_I2C_Color_Sensor_v0.9b.
8  *
9  * Permission is hereby granted, free of charge, to any person obtaining
10  * a copy of this software and associated documentation files (the
11  * "Software"), to deal in the Software without restriction, including
12  * without limitation the rights to use, copy, modify, merge, publish,
13  * distribute, sublicense, and/or sell copies of the Software, and to
14  * permit persons to whom the Software is furnished to do so, subject to
15  * the following conditions:
16  *
17  * The above copyright notice and this permission notice shall be
18  * included in all copies or substantial portions of the Software.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27  */
28 #pragma once
29 
30 #include <string>
31 #include <mraa/i2c.hpp>
32 
33 #define DEFAULT_ADDR 0x39 // device address
34 
35 #define REG_CTL 0x80
36 #define REG_TIMING 0x81
37 #define REG_INT 0x82
38 #define REG_INT_SOURCE 0x83
39 #define REG_ID 0x84
40 #define REG_GAIN 0x87
41 #define REG_LOW_THRESH_LOW_BYTE 0x88
42 #define REG_LOW_THRESH_HIGH_BYTE 0x89
43 #define REG_HIGH_THRESH_LOW_BYTE 0x8A
44 #define REG_HIGH_THRESH_HIGH_BYTE 0x8B
45 #define REG_BLOCK_READ 0xCF
46 #define REG_GREEN_LOW 0xD0
47 #define REG_GREEN_HIGH 0xD1
48 #define REG_RED_LOW 0xD2
49 #define REG_RED_HIGH 0xD3
50 #define REG_BLUE_LOW 0xD4
51 #define REG_BLUE_HIGH 0xD5
52 #define REG_CLEAR_LOW 0xD6
53 #define REG_CLEAR_HIGH 0xD7
54 #define CTL_DAT_INIITIATE 0x03
55 #define CLR_INT 0xE0
56 
57 /* Timing Register */
58 #define SYNC_EDGE 0x40
59 #define INTEG_MODE_FREE 0x00
60 #define INTEG_MODE_MANUAL 0x10
61 #define INTEG_MODE_SYN_SINGLE 0x20
62 #define INTEG_MODE_SYN_MULTI 0x30
63 
64 #define INTEG_PARAM_PULSE_COUNT1 0x00
65 #define INTEG_PARAM_PULSE_COUNT2 0x01
66 #define INTEG_PARAM_PULSE_COUNT4 0x02
67 #define INTEG_PARAM_PULSE_COUNT8 0x03
68 
69 /* Interrupt Control Register */
70 #define INTR_STOP 40
71 #define INTR_DISABLE 0x00
72 #define INTR_LEVEL 0x10
73 #define INTR_PERSIST_EVERY 0x00
74 #define INTR_PERSIST_SINGLE 0x01
75 
76 /* Interrupt Souce Register */
77 #define INT_SOURCE_GREEN 0x00
78 #define INT_SOURCE_RED 0x01
79 #define INT_SOURCE_BLUE 0x10
80 #define INT_SOURCE_CLEAR 0x03
81 
82 /* Gain Register */
83 #define GAIN_1 0x00
84 #define GAIN_4 0x10
85 #define GAIN_16 0x20
86 #define GANI_64 0x30
87 #define PRESCALER_1 0x00
88 #define PRESCALER_2 0x01
89 #define PRESCALER_4 0x02
90 #define PRESCALER_8 0x03
91 #define PRESCALER_16 0x04
92 #define PRESCALER_32 0x05
93 #define PRESCALER_64 0x06
94 
95 #define HIGH 1
96 #define LOW 0
97 
98 namespace upm {
99 
100 typedef struct {
101  uint16_t r;
102  uint16_t g;
103  uint16_t b;
104  uint16_t clr;
106 
129 class TCS3414CS {
130  public:
137  TCS3414CS (int bus = 0, int addr = DEFAULT_ADDR);
138 
144  void readRGB (tcs3414sc_rgb_t * rgb);
145 
149  void clearInterrupt ();
150 
154  std::string name()
155  {
156  return m_name;
157  }
158  private:
159  std::string m_name;
160  mraa::I2c m_i2Ctx;
161 
162  uint16_t i2cReadReg_N (int reg, unsigned int len, uint8_t * buffer);
163  mraa::Result i2cWriteReg_N (uint8_t reg, unsigned int len, uint8_t * buffer);
164  mraa::Result i2cWriteReg (uint8_t reg, uint8_t data);
165 };
166 
167 }
Definition: tcs3414cs.hpp:100
void clearInterrupt()
Definition: tcs3414cs.cxx:82
void readRGB(tcs3414sc_rgb_t *rgb)
Definition: tcs3414cs.cxx:69
C++ API wrapper for the bh1749 driver.
Definition: a110x.hpp:29
API for the TCS3414CS Color Sensor.
Definition: tcs3414cs.hpp:129
std::string name()
Definition: tcs3414cs.hpp:154
TCS3414CS(int bus=0, int addr=DEFAULT_ADDR)
Definition: tcs3414cs.cxx:38