Skip to content

Commit c06386e

Browse files
committed
Change #write to #set_duty and add more methods
1 parent ff99ee7 commit c06386e

File tree

1 file changed

+56
-5
lines changed

1 file changed

+56
-5
lines changed

src/ledc.c

Lines changed: 56 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ mrb_esp32_ledc_channel_config(mrb_state *mrb, mrb_value self) {
5555
}
5656

5757
static mrb_value
58-
mrb_esp32_ledc_write(mrb_state *mrb, mrb_value self) {
58+
mrb_esp32_ledc_set_duty(mrb_state *mrb, mrb_value self) {
5959
mrb_value group, ch, duty;
6060

6161
mrb_get_args(mrb, "ooo", &group, &ch, &duty);
@@ -64,15 +64,63 @@ mrb_esp32_ledc_write(mrb_state *mrb, mrb_value self) {
6464
return mrb_nil_value();
6565
}
6666

67-
// Write the duty cycle.
67+
// Write the duty cycle to the channel.
6868
ESP_ERROR_CHECK(ledc_set_duty(mrb_fixnum(group), mrb_fixnum(ch), mrb_fixnum(duty)));
6969
ESP_ERROR_CHECK(ledc_update_duty(mrb_fixnum(group), mrb_fixnum(ch)));
7070

7171
return self;
7272
}
7373

7474
static mrb_value
75-
mrb_esp32_ledc_detach(mrb_state *mrb, mrb_value self) {
75+
mrb_esp32_ledc_set_freq(mrb_state *mrb, mrb_value self) {
76+
mrb_value group, timer, freq;
77+
78+
mrb_get_args(mrb, "ooo", &group, &timer, &freq);
79+
80+
if (!mrb_fixnum_p(group) || !mrb_fixnum_p(timer) || !mrb_fixnum_p(freq)) {
81+
return mrb_nil_value();
82+
}
83+
84+
// Write the frequency to the timer.
85+
ESP_ERROR_CHECK(ledc_set_freq(mrb_fixnum(group), mrb_fixnum(timer), mrb_fixnum(freq)));
86+
87+
return self;
88+
}
89+
90+
static mrb_value
91+
mrb_esp32_ledc_stop(mrb_state *mrb, mrb_value self) {
92+
mrb_value group, ch, idle;
93+
94+
mrb_get_args(mrb, "ooo", &group, &ch, &idle);
95+
96+
if (!mrb_fixnum_p(group) || !mrb_fixnum_p(ch) || !mrb_fixnum_p(idle)) {
97+
return mrb_nil_value();
98+
}
99+
100+
// Write the frequency to the timer.
101+
ESP_ERROR_CHECK(ledc_stop(mrb_fixnum(group), mrb_fixnum(ch), mrb_fixnum(idle)));
102+
103+
return self;
104+
}
105+
106+
static mrb_value
107+
mrb_esp32_ledc_set_pin(mrb_state *mrb, mrb_value self) {
108+
mrb_value pin, group, ch;
109+
110+
mrb_get_args(mrb, "ooo", &pin, &group, &ch);
111+
112+
if (!mrb_fixnum_p(pin) || !mrb_fixnum_p(group) || !mrb_fixnum_p(ch)) {
113+
return mrb_nil_value();
114+
}
115+
116+
// Write the frequency to the timer.
117+
ESP_ERROR_CHECK(ledc_set_pin(mrb_fixnum(pin), mrb_fixnum(group), mrb_fixnum(ch)));
118+
119+
return self;
120+
}
121+
122+
static mrb_value
123+
mrb_esp32_ledc_unset_pin(mrb_state *mrb, mrb_value self) {
76124
mrb_value pin;
77125

78126
mrb_get_args(mrb, "o", &pin);
@@ -98,8 +146,11 @@ mrb_mruby_esp32_ledc_gem_init(mrb_state* mrb)
98146
ledc = mrb_define_module_under(mrb, esp32, "LEDC");
99147
mrb_define_module_function(mrb, ledc, "timer_config", mrb_esp32_ledc_timer_config, MRB_ARGS_REQ(4));
100148
mrb_define_module_function(mrb, ledc, "channel_config", mrb_esp32_ledc_channel_config, MRB_ARGS_REQ(4));
101-
mrb_define_module_function(mrb, ledc, "write", mrb_esp32_ledc_write, MRB_ARGS_REQ(3));
102-
mrb_define_module_function(mrb, ledc, "detach", mrb_esp32_ledc_detach, MRB_ARGS_REQ(1));
149+
mrb_define_module_function(mrb, ledc, "set_duty", mrb_esp32_ledc_set_duty, MRB_ARGS_REQ(3));
150+
mrb_define_module_function(mrb, ledc, "set_freq", mrb_esp32_ledc_set_freq, MRB_ARGS_REQ(3));
151+
mrb_define_module_function(mrb, ledc, "stop", mrb_esp32_ledc_stop, MRB_ARGS_REQ(3));
152+
mrb_define_module_function(mrb, ledc, "set_pin", mrb_esp32_ledc_set_pin, MRB_ARGS_REQ(3));
153+
mrb_define_module_function(mrb, ledc, "unset_pin", mrb_esp32_ledc_unset_pin, MRB_ARGS_REQ(1));
103154

104155
constants = mrb_define_module_under(mrb, esp32, "Constants");
105156

0 commit comments

Comments
 (0)