15a5e019f709ebfeeab0d793736e14c60b0473de
[contrib/upm.git] / src / buzzer / buzzer.h
1 /*
2  * Author: Yevgeniy Kiveisha <yevgeniy.kiveisha@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 <maa/pwm.h>
28
29 #define  DO     3300    // 261 Hz 3830
30 #define  RE     2930    // 294 Hz
31 #define  MI     2600    // 329 Hz
32 #define  FA     2460    // 349 Hz
33 #define  SOL    2190    // 392 Hz
34 #define  LA     1960    // 440 Hz
35 #define  SI     1750    // 493 Hz
36
37 namespace upm {
38
39 /**
40  * @brief C++ API for Buzzer component
41  *
42  * This file defines the Buzzer C++ interface for libbuzzer
43  *
44  * @snippet buzzer-sound.cxx Interesting
45  *
46  */
47 class Buzzer {
48     public:
49         /**
50          * Instanciates a Buzzer object
51          *
52          * @param pin Buzzer pin number
53          */
54         Buzzer (int pinNumber);
55
56         /**
57          * Buzzer object destructor.
58          */
59         ~Buzzer ();
60
61         /**
62          * Play chords.
63          *
64          * @param note chords (DO, RE, ME, etc...)
65          * @param delay time in microsec for playing the sound
66          */
67         int playSound (int note, int delay);
68
69         /**
70          * Return name of the component
71          */
72         std::string name()
73         {
74             return m_name;
75         }
76     protected:
77         std::string m_name;
78     private:
79         maa_pwm_context m_pwm_context;
80 };
81 }