maa: general licensing + styling cleanup
[contrib/mraa.git] / api / pwm.h
1 /*
2  * Originally from mbed Microcontroller Library
3  * Copyright (c) 2006-2013 ARM Limited
4  * Copyright (c) 2014 Intel Corporation
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 #pragma once
20
21 #include <stdio.h>
22 #include <fcntl.h>
23
24 namespace maa {
25
26 /** A PWM object, used for interacting with PWM output.
27  *
28  * Example:
29  * @code
30  * // Set up PWM object then cycle percentage 0-100.
31  *
32  * #include "maa.h"
33  *
34  * PWM pwm(3);
35  *
36  * int main() {
37  *     pwm.period_us(7968750i); //Max Galileo Rev D
38  *     pwm.enable(1);
39  *
40  *     float value = 0;
41  *     while(1) {
42  *         pwm.write(value);
43  *         sleep(0.5);
44  *         if(value == 1.0) {
45  *             value = 0;
46  *         } else {
47  *             value = value +0.1;
48  *         }
49  *     }
50  * }
51  * @endcode
52  */
53 class PWM {
54
55 private:
56     int chipid, pin;
57     FILE *duty_fp;
58
59     void write_period(int period);
60     void write_duty(int duty);
61     int setup_duty_fp();
62     int get_period();
63     int get_duty();
64
65 public:
66
67     /** Create an PWM object
68      *
69      *  @param chipid The chip in which the following pin is on.
70      *  @param pin The PWM channel to operate on
71      */
72     PWM(int chipid, int pin);
73
74     /** Set the ouput duty-cycle percentage, as a float
75      *
76      *  @param percentage A floating-point value representing percentage of output.
77      *    The value should lie between 0.0f (representing on 0%) and 1.0f
78      *    Values above or below this range will be set at either 0.0f or 1.0f.
79      */
80     void write(float percentage);
81
82     /** Read the ouput duty-cycle percentage, as a float
83      *
84      *  @return percentage A floating-point value representing percentage of output.
85      *    The value should lie between 0.0f (representing on 0%) and 1.0f
86      *    Values above or below this range will be set at either 0.0f or 1.0f.
87      */
88     float read();
89
90     /** Set the PWM period as seconds represented in a float
91      *
92      *  @param seconds Peroid represented as a float in seconds.
93      */
94     void period(float seconds);
95
96     /** Set period. milli-oseconds.
97      *  @param ms milli-seconds for period.
98      */
99     void period_ms(int ms);
100
101     /** Set period. microseconds
102      *  @param ns microseconds as period.
103      */
104     void period_us(int us);
105
106     /** Set pulsewidth, As represnted by seconds in a (float).
107      *  @param seconds The duration of a pulse
108      */
109     void pulsewidth(float seconds);
110
111      /** Set pulsewidth. Milliseconds
112      *  @param ms milliseconds for pulsewidth.
113      */
114     void pulsewidth_ms(int ms);
115
116       /** Set pulsewidth, microseconds.
117      *  @param us microseconds for pulsewidth.
118      */
119     void pulsewidth_us(int us);
120
121     /** Set the enable status of the PWM pin. None zero will assume on with output being driven.
122      *   and 0 will disable the output.
123      *  @param enable enable status of pin
124      */
125     void enable(int enable);
126
127      /** Close and unexport the PWM pin.
128      */
129     void close();
130
131 };
132 }