grove: add documentation for grove module
[contrib/upm.git] / src / grove / grove.h
1 /*
2  * Author: Brendan Le Foll <brendan.le.foll@intel.com>
3  * Copyright (c) 2014 Intel Corporation.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining
6  * a copy of this software and associated documentation files (the
7  * "Software"), to deal in the Software without restriction, including
8  * without limitation the rights to use, copy, modify, merge, publish,
9  * distribute, sublicense, and/or sell copies of the Software, and to
10  * permit persons to whom the Software is furnished to do so, subject to
11  * the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 #pragma once
25
26 #include <string>
27 #include <mraa/aio.h>
28 #include <mraa/gpio.h>
29
30 namespace upm {
31
32 class Grove {
33     public:
34         virtual ~Grove() {}
35         std::string name()
36         {
37             return m_name;
38         }
39     protected:
40         std::string m_name;
41 };
42
43 /**
44  * @brief C++ API for Grove LED
45  *
46  * Very basic UPM module for grove LED, or any LED for that matter
47  *
48  * @snippet groveled.cxx Interesting
49  */
50 class GroveLed: public Grove {
51     public:
52         GroveLed(int pin);
53         ~GroveLed();
54         mraa_result_t write(int value);
55         mraa_result_t off();
56         mraa_result_t on();
57     private:
58         mraa_gpio_context m_gpio;
59 };
60
61 /**
62  * @brief C++ API for Grove Temperature sensor
63  *
64  * Very basic UPM module for grove temperature sensor on analog
65  *
66  * @snippet grovetemp.cxx Interesting
67  */
68 class GroveTemp: public Grove {
69     public:
70         GroveTemp(unsigned int pin);
71         ~GroveTemp();
72         /**
73          * Get raw value from AIO pin
74          *
75          * @return the raw value from the ADC
76          */
77         float raw_value();
78         /**
79          * Get the temperature from the sensor
80          *
81          * @return the normalised temperature
82          */
83         int value();
84     private:
85         mraa_aio_context m_aio;
86 };
87
88 /**
89  * @brief C++ API for Grove light sensor
90  *
91  * Very basic UPM module for grove Light sensor on analog
92  *
93  * @snippet grovelight.cxx Interesting
94  */
95 class GroveLight: public Grove {
96     public:
97         GroveLight(unsigned int pin);
98         ~GroveLight();
99         /**
100          * Get raw value from AIO pin
101          *
102          * @return the raw value from the ADC
103          */
104         float raw_value();
105         /**
106          * Get the light value from the sensor
107          *
108          * @return the normalised light reading
109          */
110         int value();
111     private:
112         mraa_aio_context m_aio;
113 };
114
115 }