summaryrefslogtreecommitdiff
path: root/shared-bindings/pulseio
diff options
context:
space:
mode:
authorScott Shawcroft <scott@tannewt.org>2019-01-25 18:31:27 -0800
committerScott Shawcroft <scott@tannewt.org>2019-01-31 11:42:14 -0800
commit69bc5e189baef183918dc21dadaacf55ce66bee3 (patch)
treed24fbf2f860a414926aaa3141bbcbd1929016784 /shared-bindings/pulseio
parent1a1dbef992442682413f6103e36440a26bc2dad7 (diff)
Rudamentary backlight support
Diffstat (limited to 'shared-bindings/pulseio')
-rw-r--r--shared-bindings/pulseio/PWMOut.c11
-rw-r--r--shared-bindings/pulseio/PWMOut.h14
2 files changed, 23 insertions, 2 deletions
diff --git a/shared-bindings/pulseio/PWMOut.c b/shared-bindings/pulseio/PWMOut.c
index ed3acd804..bba5fe883 100644
--- a/shared-bindings/pulseio/PWMOut.c
+++ b/shared-bindings/pulseio/PWMOut.c
@@ -108,7 +108,16 @@ STATIC mp_obj_t pulseio_pwmout_make_new(const mp_obj_type_t *type, size_t n_args
// create PWM object from the given pin
pulseio_pwmout_obj_t *self = m_new_obj(pulseio_pwmout_obj_t);
self->base.type = &pulseio_pwmout_type;
- common_hal_pulseio_pwmout_construct(self, pin, duty_cycle, frequency, variable_frequency);
+ pwmout_result_t result = common_hal_pulseio_pwmout_construct(self, pin, duty_cycle, frequency, variable_frequency);
+ if (result == PWMOUT_INVALID_PIN) {
+ mp_raise_ValueError(translate("Invalid pin"));
+ } else if (result == PWMOUT_INVALID_FREQUENCY) {
+ mp_raise_ValueError(translate("Invalid PWM frequency"));
+ } else if (result == PWMOUT_ALL_TIMERS_ON_PIN_IN_USE) {
+ mp_raise_ValueError(translate("All timers for this pin are in use"));
+ } else if (result == PWMOUT_ALL_TIMERS_IN_USE) {
+ mp_raise_RuntimeError(translate("All timers in use"));
+ }
return MP_OBJ_FROM_PTR(self);
}
diff --git a/shared-bindings/pulseio/PWMOut.h b/shared-bindings/pulseio/PWMOut.h
index 0b630816b..c01e0c926 100644
--- a/shared-bindings/pulseio/PWMOut.h
+++ b/shared-bindings/pulseio/PWMOut.h
@@ -32,7 +32,15 @@
extern const mp_obj_type_t pulseio_pwmout_type;
-extern void common_hal_pulseio_pwmout_construct(pulseio_pwmout_obj_t* self,
+typedef enum {
+ PWMOUT_OK,
+ PWMOUT_INVALID_PIN,
+ PWMOUT_INVALID_FREQUENCY,
+ PWMOUT_ALL_TIMERS_ON_PIN_IN_USE,
+ PWMOUT_ALL_TIMERS_IN_USE
+} pwmout_result_t;
+
+extern pwmout_result_t common_hal_pulseio_pwmout_construct(pulseio_pwmout_obj_t* self,
const mcu_pin_obj_t* pin, uint16_t duty, uint32_t frequency,
bool variable_frequency);
extern void common_hal_pulseio_pwmout_deinit(pulseio_pwmout_obj_t* self);
@@ -43,4 +51,8 @@ extern void common_hal_pulseio_pwmout_set_frequency(pulseio_pwmout_obj_t* self,
extern uint32_t common_hal_pulseio_pwmout_get_frequency(pulseio_pwmout_obj_t* self);
extern bool common_hal_pulseio_pwmout_get_variable_frequency(pulseio_pwmout_obj_t* self);
+// This is used by the supervisor to claim PWMOut devices indefinitely.
+extern void common_hal_pulseio_pwmout_never_reset(pulseio_pwmout_obj_t *self);
+extern void common_hal_pulseio_pwmout_reset_ok(pulseio_pwmout_obj_t *self);
+
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_PULSEIO_PWMOUT_H