@@ -55,7 +55,7 @@ mrb_esp32_ledc_channel_config(mrb_state *mrb, mrb_value self) {
55
55
}
56
56
57
57
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 ) {
59
59
mrb_value group , ch , duty ;
60
60
61
61
mrb_get_args (mrb , "ooo" , & group , & ch , & duty );
@@ -64,15 +64,63 @@ mrb_esp32_ledc_write(mrb_state *mrb, mrb_value self) {
64
64
return mrb_nil_value ();
65
65
}
66
66
67
- // Write the duty cycle.
67
+ // Write the duty cycle to the channel .
68
68
ESP_ERROR_CHECK (ledc_set_duty (mrb_fixnum (group ), mrb_fixnum (ch ), mrb_fixnum (duty )));
69
69
ESP_ERROR_CHECK (ledc_update_duty (mrb_fixnum (group ), mrb_fixnum (ch )));
70
70
71
71
return self ;
72
72
}
73
73
74
74
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 ) {
76
124
mrb_value pin ;
77
125
78
126
mrb_get_args (mrb , "o" , & pin );
@@ -98,8 +146,11 @@ mrb_mruby_esp32_ledc_gem_init(mrb_state* mrb)
98
146
ledc = mrb_define_module_under (mrb , esp32 , "LEDC" );
99
147
mrb_define_module_function (mrb , ledc , "timer_config" , mrb_esp32_ledc_timer_config , MRB_ARGS_REQ (4 ));
100
148
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 ));
103
154
104
155
constants = mrb_define_module_under (mrb , esp32 , "Constants" );
105
156
0 commit comments