a653d05c2e460babb536e544a2065e672fcfaecd
[contrib/mraa.git] / src / pwm / pwm.cxx
1 /*
2  * Author: Thomas Ingleby <thomas.c.ingleby@intel.com>
3  *
4  * Copyright © 2014 Intel Corporation
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining
7  * a copy of this software and associated documentation files (the
8  * "Software"), to deal in the Software without restriction, including
9  * without limitation the rights to use, copy, modify, merge, publish,
10  * distribute, sublicense, and/or sell copies of the Software, and to
11  * permit persons to whom the Software is furnished to do so, subject to
12  * the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be
15  * included in all copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24  */
25
26 #include "pwm.h"
27
28 using namespace maa;
29
30 PWM::PWM(int chipin, int pinin)
31 {
32     chipid = chipin;
33     pin = pinin;
34
35     FILE *export_f;
36     char buffer[64];
37     snprintf(buffer, 64, "/sys/class/pwm/pwmchip%d/export", chipid);
38
39     if((export_f = fopen(buffer, "w")) == NULL) {
40         fprintf(stderr, "Failed to open export for writing!\n");
41     } else {
42         fprintf(export_f, "%d", pin);
43         fclose(export_f);
44     }
45 }
46
47 void
48 PWM::write(float percentage)
49 {
50     //DO some writting
51 }
52
53 float
54 PWM::read()
55 {
56     //Do Something
57 }
58
59 void
60 PWM::period(float seconds)
61 {
62     //Do Something
63 }
64
65 void
66 PWM::period_ms(int ms)
67 {
68     //Do Something
69 }
70
71 void
72 PWM::perod_us(int us)
73 {
74     //Do Something
75 }
76
77 void
78 PWM::pulsewidth(float seconds)
79 {
80     //Do Something
81 }
82
83 void
84 PWM::pulsewidth_ms(int ms)
85 {
86     //Do Something
87 }
88
89 void
90 PWM::pulsewidth_us(int us)
91 {
92     //Do Something
93 }
94
95 void
96 PWM::enable(int enable)
97 {
98     //Do Something
99 }
100
101 void
102 PWM::close()
103 {
104     //Do Something
105 }
106
107 void
108 PWM::write_period(int period)
109 {
110     //Impossible
111 }
112
113 void
114 PWM::write_duty(int duty)
115 {
116     if(duty_fp == NULL) {
117         setup_duty_fp();
118     }
119     fseek(duty_fp, SEEK_SET, 0);
120     fprintf(duty_fp, "%d", duty);
121     fseek(duty_fp, SEEK_SET, 0);
122 }
123
124 int
125 PWM::setup_duty_fp()
126 {
127     char bu[64];
128     sprintf(bu, "/sys/class/pwm/pwmchip%d/pwm%d/duty_cycle", chipid, pin);
129
130     if((duty_fp = fopen(bu, "r+b")) == NULL) {
131         return 1;
132     } else {
133         return 0;
134     }
135     return 1;
136 }