Merge branch 'master' of gitlab:wintermute/hackover2013-badge-firmware
[hackover2013-badge-firmware.git] / drivers / sensors / tsl2561 / tsl2561.h
1 /**************************************************************************/
2 /*!
3 @file tsl2561.h
4 @author K. Townsend (microBuilder.eu)
5
6 @section LICENSE
7
8 Software License Agreement (BSD License)
9
10 Copyright (c) 2010, microBuilder SARL
11 All rights reserved.
12
13 Redistribution and use in source and binary forms, with or without
14 modification, are permitted provided that the following conditions are met:
15 1. Redistributions of source code must retain the above copyright
16 notice, this list of conditions and the following disclaimer.
17 2. Redistributions in binary form must reproduce the above copyright
18 notice, this list of conditions and the following disclaimer in the
19 documentation and/or other materials provided with the distribution.
20 3. Neither the name of the copyright holders nor the
21 names of its contributors may be used to endorse or promote products
22 derived from this software without specific prior written permission.
23
24 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
25 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
28 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
31 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 */
35 /**************************************************************************/
36
37 #ifndef _TSL2561_H_
38 #define _TSL2561_H_
39
40 #include "projectconfig.h"
41 #include "core/i2c/i2c.h"
42
43 #define TSL2561_PACKAGE_CS // Lux calculations differ slightly for CS package
44 // #define TSL2561_PACKAGE_T_FN_CL
45
46 #define TSL2561_ADDRESS (0x72) // 0111001 shifted left 1 bit = 0x72 (ADDR = GND or floating)
47 #define TSL2561_READBIT (0x01)
48
49 #define TSL2561_COMMAND_BIT (0x80) // Must be 1
50 #define TSL2561_CLEAR_BIT (0x40) // Clears any pending interrupt (write 1 to clear)
51 #define TSL2561_WORD_BIT (0x20) // 1 = read/write word (rather than byte)
52 #define TSL2561_BLOCK_BIT (0x10) // 1 = using block read/write
53
54 #define TSL2561_CONTROL_POWERON (0x03)
55 #define TSL2561_CONTROL_POWEROFF (0x00)
56
57 #define TSL2561_LUX_LUXSCALE (14) // Scale by 2^14
58 #define TSL2561_LUX_RATIOSCALE (9) // Scale ratio by 2^9
59 #define TSL2561_LUX_CHSCALE (10) // Scale channel values by 2^10
60 #define TSL2561_LUX_CHSCALE_TINT0 (0x7517) // 322/11 * 2^TSL2561_LUX_CHSCALE
61 #define TSL2561_LUX_CHSCALE_TINT1 (0x0FE7) // 322/81 * 2^TSL2561_LUX_CHSCALE
62
63 // T, FN and CL package values
64 #define TSL2561_LUX_K1T (0x0040) // 0.125 * 2^RATIO_SCALE
65 #define TSL2561_LUX_B1T (0x01f2) // 0.0304 * 2^LUX_SCALE
66 #define TSL2561_LUX_M1T (0x01be) // 0.0272 * 2^LUX_SCALE
67 #define TSL2561_LUX_K2T (0x0080) // 0.250 * 2^RATIO_SCALE
68 #define TSL2561_LUX_B2T (0x0214) // 0.0325 * 2^LUX_SCALE
69 #define TSL2561_LUX_M2T (0x02d1) // 0.0440 * 2^LUX_SCALE
70 #define TSL2561_LUX_K3T (0x00c0) // 0.375 * 2^RATIO_SCALE
71 #define TSL2561_LUX_B3T (0x023f) // 0.0351 * 2^LUX_SCALE
72 #define TSL2561_LUX_M3T (0x037b) // 0.0544 * 2^LUX_SCALE
73 #define TSL2561_LUX_K4T (0x0100) // 0.50 * 2^RATIO_SCALE
74 #define TSL2561_LUX_B4T (0x0270) // 0.0381 * 2^LUX_SCALE
75 #define TSL2561_LUX_M4T (0x03fe) // 0.0624 * 2^LUX_SCALE
76 #define TSL2561_LUX_K5T (0x0138) // 0.61 * 2^RATIO_SCALE
77 #define TSL2561_LUX_B5T (0x016f) // 0.0224 * 2^LUX_SCALE
78 #define TSL2561_LUX_M5T (0x01fc) // 0.0310 * 2^LUX_SCALE
79 #define TSL2561_LUX_K6T (0x019a) // 0.80 * 2^RATIO_SCALE
80 #define TSL2561_LUX_B6T (0x00d2) // 0.0128 * 2^LUX_SCALE
81 #define TSL2561_LUX_M6T (0x00fb) // 0.0153 * 2^LUX_SCALE
82 #define TSL2561_LUX_K7T (0x029a) // 1.3 * 2^RATIO_SCALE
83 #define TSL2561_LUX_B7T (0x0018) // 0.00146 * 2^LUX_SCALE
84 #define TSL2561_LUX_M7T (0x0012) // 0.00112 * 2^LUX_SCALE
85 #define TSL2561_LUX_K8T (0x029a) // 1.3 * 2^RATIO_SCALE
86 #define TSL2561_LUX_B8T (0x0000) // 0.000 * 2^LUX_SCALE
87 #define TSL2561_LUX_M8T (0x0000) // 0.000 * 2^LUX_SCALE
88
89 // CS package values
90 #define TSL2561_LUX_K1C (0x0043) // 0.130 * 2^RATIO_SCALE
91 #define TSL2561_LUX_B1C (0x0204) // 0.0315 * 2^LUX_SCALE
92 #define TSL2561_LUX_M1C (0x01ad) // 0.0262 * 2^LUX_SCALE
93 #define TSL2561_LUX_K2C (0x0085) // 0.260 * 2^RATIO_SCALE
94 #define TSL2561_LUX_B2C (0x0228) // 0.0337 * 2^LUX_SCALE
95 #define TSL2561_LUX_M2C (0x02c1) // 0.0430 * 2^LUX_SCALE
96 #define TSL2561_LUX_K3C (0x00c8) // 0.390 * 2^RATIO_SCALE
97 #define TSL2561_LUX_B3C (0x0253) // 0.0363 * 2^LUX_SCALE
98 #define TSL2561_LUX_M3C (0x0363) // 0.0529 * 2^LUX_SCALE
99 #define TSL2561_LUX_K4C (0x010a) // 0.520 * 2^RATIO_SCALE
100 #define TSL2561_LUX_B4C (0x0282) // 0.0392 * 2^LUX_SCALE
101 #define TSL2561_LUX_M4C (0x03df) // 0.0605 * 2^LUX_SCALE
102 #define TSL2561_LUX_K5C (0x014d) // 0.65 * 2^RATIO_SCALE
103 #define TSL2561_LUX_B5C (0x0177) // 0.0229 * 2^LUX_SCALE
104 #define TSL2561_LUX_M5C (0x01dd) // 0.0291 * 2^LUX_SCALE
105 #define TSL2561_LUX_K6C (0x019a) // 0.80 * 2^RATIO_SCALE
106 #define TSL2561_LUX_B6C (0x0101) // 0.0157 * 2^LUX_SCALE
107 #define TSL2561_LUX_M6C (0x0127) // 0.0180 * 2^LUX_SCALE
108 #define TSL2561_LUX_K7C (0x029a) // 1.3 * 2^RATIO_SCALE
109 #define TSL2561_LUX_B7C (0x0037) // 0.00338 * 2^LUX_SCALE
110 #define TSL2561_LUX_M7C (0x002b) // 0.00260 * 2^LUX_SCALE
111 #define TSL2561_LUX_K8C (0x029a) // 1.3 * 2^RATIO_SCALE
112 #define TSL2561_LUX_B8C (0x0000) // 0.000 * 2^LUX_SCALE
113 #define TSL2561_LUX_M8C (0x0000) // 0.000 * 2^LUX_SCALE
114
115 enum
116 {
117 TSL2561_REGISTER_CONTROL = 0x00,
118 TSL2561_REGISTER_TIMING = 0x01,
119 TSL2561_REGISTER_THRESHHOLDL_LOW = 0x02,
120 TSL2561_REGISTER_THRESHHOLDL_HIGH = 0x03,
121 TSL2561_REGISTER_THRESHHOLDH_LOW = 0x04,
122 TSL2561_REGISTER_THRESHHOLDH_HIGH = 0x05,
123 TSL2561_REGISTER_INTERRUPT = 0x06,
124 TSL2561_REGISTER_CRC = 0x08,
125 TSL2561_REGISTER_ID = 0x0A,
126 TSL2561_REGISTER_CHAN0_LOW = 0x0C,
127 TSL2561_REGISTER_CHAN0_HIGH = 0x0D,
128 TSL2561_REGISTER_CHAN1_LOW = 0x0E,
129 TSL2561_REGISTER_CHAN1_HIGH = 0x0F
130 };
131
132 typedef enum
133 {
134 TSL2561_INTEGRATIONTIME_13MS = 0x00, // 13.7ms
135 TSL2561_INTEGRATIONTIME_101MS = 0x01, // 101ms
136 TSL2561_INTEGRATIONTIME_402MS = 0x02 // 402ms
137 }
138 tsl2561IntegrationTime_t;
139
140 typedef enum
141 {
142 TSL2561_GAIN_0X = 0x00, // No gain
143 TSL2561_GAIN_16X = 0x10, // 16x gain
144 }
145 tsl2561Gain_t;
146
147 typedef enum
148 {
149 TSL2561_ERROR_OK = 0, // Everything executed normally
150 TSL2561_ERROR_I2CINIT, // Unable to initialise I2C
151 TSL2561_ERROR_I2CBUSY, // I2C already in use
152 TSL2561_ERROR_LAST
153 }
154 tsl2561Error_t;
155
156 tsl2561Error_t tsl2561Init(void);
157 tsl2561Error_t tsl2561SetTiming(tsl2561IntegrationTime_t integration, tsl2561Gain_t gain);
158 tsl2561Error_t tsl2561GetLuminosity (uint16_t *broadband, uint16_t *ir);
159 uint32_t tsl2561CalculateLux(uint16_t ch0, uint16_t ch1);
160
161 #endif
162
163
This page took 0.047027 seconds and 5 git commands to generate.