@@ -56,10 +56,11 @@ uint8_t channels_resolution[LEDC_CHANNELS] = {0};
56
56
57
57
double ledcSetup (uint8_t chan , double freq , uint8_t bit_num )
58
58
{
59
- if (chan >= LEDC_CHANNELS ){
60
- log_e ("No more LEDC channels available! You can have maximum %u" , LEDC_CHANNELS );
59
+ if (chan >= LEDC_CHANNELS || bit_num > LEDC_MAX_BIT_WIDTH ){
60
+ log_e ("No more LEDC channels available! (maximum %u) or bit width too big ( maximum %u) " , LEDC_CHANNELS , LEDC_MAX_BIT_WIDTH );
61
61
return 0 ;
62
62
}
63
+
63
64
uint8_t group = (chan /8 ), timer = ((chan /2 )%4 );
64
65
65
66
ledc_timer_config_t ledc_timer = {
@@ -69,9 +70,12 @@ double ledcSetup(uint8_t chan, double freq, uint8_t bit_num)
69
70
.freq_hz = freq ,
70
71
.clk_cfg = LEDC_DEFAULT_CLK
71
72
};
72
- ledc_timer_config (& ledc_timer );
73
+ if (ledc_timer_config (& ledc_timer ) != ESP_OK )
74
+ {
75
+ log_e ("ledc setup failed!" );
76
+ return 0 ;
77
+ }
73
78
channels_resolution [chan ] = bit_num ;
74
-
75
79
return ledc_get_freq (group ,timer );
76
80
}
77
81
@@ -95,7 +99,7 @@ void ledcWrite(uint8_t chan, uint32_t duty)
95
99
96
100
uint32_t ledcRead (uint8_t chan )
97
101
{
98
- if (chan >= LEDC_CHANNELS ){
102
+ if (chan >= LEDC_CHANNELS ){
99
103
return 0 ;
100
104
}
101
105
uint8_t group = (chan /8 ), channel = (chan %8 );
@@ -130,7 +134,12 @@ double ledcWriteTone(uint8_t chan, double freq)
130
134
.freq_hz = freq ,
131
135
.clk_cfg = LEDC_DEFAULT_CLK
132
136
};
133
- ledc_timer_config (& ledc_timer );
137
+
138
+ if (ledc_timer_config (& ledc_timer ) != ESP_OK )
139
+ {
140
+ log_e ("ledcSetup failed!" );
141
+ return 0 ;
142
+ }
134
143
channels_resolution [chan ] = 10 ;
135
144
136
145
double res_freq = ledc_get_freq (group ,timer );
@@ -153,7 +162,7 @@ double ledcWriteNote(uint8_t chan, note_t note, uint8_t octave){
153
162
154
163
void ledcAttachPin (uint8_t pin , uint8_t chan )
155
164
{
156
- if (chan >= LEDC_CHANNELS ){
165
+ if (chan >= LEDC_CHANNELS ){
157
166
return ;
158
167
}
159
168
uint8_t group = (chan /8 ), channel = (chan %8 ), timer = ((chan /2 )%4 );
@@ -177,7 +186,8 @@ void ledcDetachPin(uint8_t pin)
177
186
178
187
double ledcChangeFrequency (uint8_t chan , double freq , uint8_t bit_num )
179
188
{
180
- if (chan >= LEDC_CHANNELS ){
189
+ if (chan >= LEDC_CHANNELS || bit_num > LEDC_MAX_BIT_WIDTH ){
190
+ log_e ("LEDC channel not available! (maximum %u) or bit width too big (maximum %u)" , LEDC_CHANNELS , LEDC_MAX_BIT_WIDTH );
181
191
return 0 ;
182
192
}
183
193
uint8_t group = (chan /8 ), timer = ((chan /2 )%4 );
@@ -189,9 +199,13 @@ double ledcChangeFrequency(uint8_t chan, double freq, uint8_t bit_num)
189
199
.freq_hz = freq ,
190
200
.clk_cfg = LEDC_DEFAULT_CLK
191
201
};
192
- ledc_timer_config (& ledc_timer );
193
- channels_resolution [chan ] = bit_num ;
194
202
203
+ if (ledc_timer_config (& ledc_timer ) != ESP_OK )
204
+ {
205
+ log_e ("ledcChangeFrequency failed!" );
206
+ return 0 ;
207
+ }
208
+ channels_resolution [chan ] = bit_num ;
195
209
return ledc_get_freq (group ,timer );
196
210
}
197
211
0 commit comments