diff options
| author | Scott Shawcroft <scott.shawcroft@gmail.com> | 2016-12-13 16:09:00 -0800 |
|---|---|---|
| committer | Scott Shawcroft <scott.shawcroft@gmail.com> | 2016-12-13 16:09:00 -0800 |
| commit | 781633c716a2d0dc32ebf352fb5dd5ffdecad1d3 (patch) | |
| tree | e8e932c038ab666220d826f21b8d5f6bd0007b6f /shared-bindings | |
| parent | 9ad0da61348ab034ac762b42e6e080daaefe96fd (diff) | |
Fix up Analog classes: unify them at 16 bits and adds reference_voltage member
to make for easy conversion. Fixes #14.
Diffstat (limited to 'shared-bindings')
| -rw-r--r-- | shared-bindings/nativeio/AnalogIn.c | 27 | ||||
| -rw-r--r-- | shared-bindings/nativeio/AnalogIn.h | 1 | ||||
| -rw-r--r-- | shared-bindings/nativeio/AnalogOut.c | 7 |
3 files changed, 32 insertions, 3 deletions
diff --git a/shared-bindings/nativeio/AnalogIn.c b/shared-bindings/nativeio/AnalogIn.c index 14e7efe1c..d41ba523f 100644 --- a/shared-bindings/nativeio/AnalogIn.c +++ b/shared-bindings/nativeio/AnalogIn.c @@ -50,7 +50,8 @@ //| .. class:: AnalogIn(pin) //| -//| Use the AnalogIn on the given pin. +//| Use the AnalogIn on the given pin. The reference voltage varies by +//| platform so use ``reference_voltage`` to read the configured setting. //| //| :param ~microcontroller.Pin pin: the pin to read from //| @@ -126,11 +127,33 @@ mp_obj_property_t nativeio_analogin_value_obj = { (mp_obj_t)&mp_const_none_obj}, }; +//| .. attribute:: reference_voltage +//| +//| The maximum voltage measurable. Also known as the reference voltage. +//| +//| :return: the reference voltage +//| :rtype: float +//| +STATIC mp_obj_t nativeio_analogin_obj_get_reference_voltage(mp_obj_t self_in) { + nativeio_analogin_obj_t *self = MP_OBJ_TO_PTR(self_in); + return mp_obj_new_float(common_hal_nativeio_analogin_get_reference_voltage(self)); +} +MP_DEFINE_CONST_FUN_OBJ_1(nativeio_analogin_get_reference_voltage_obj, + nativeio_analogin_obj_get_reference_voltage); + +mp_obj_property_t nativeio_analogin_reference_voltage_obj = { + .base.type = &mp_type_property, + .proxy = {(mp_obj_t)&nativeio_analogin_get_reference_voltage_obj, + (mp_obj_t)&mp_const_none_obj, + (mp_obj_t)&mp_const_none_obj}, +}; + STATIC const mp_rom_map_elem_t nativeio_analogin_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&nativeio_analogin_deinit_obj) }, { MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&nativeio_analogin___enter___obj) }, { MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&nativeio_analogin___exit___obj) }, - { MP_OBJ_NEW_QSTR(MP_QSTR_value), MP_ROM_PTR(&nativeio_analogin_value_obj)}, + { MP_OBJ_NEW_QSTR(MP_QSTR_value), MP_ROM_PTR(&nativeio_analogin_value_obj)}, + { MP_OBJ_NEW_QSTR(MP_QSTR_reference_voltage), MP_ROM_PTR(&nativeio_analogin_reference_voltage_obj)}, }; STATIC MP_DEFINE_CONST_DICT(nativeio_analogin_locals_dict, nativeio_analogin_locals_dict_table); diff --git a/shared-bindings/nativeio/AnalogIn.h b/shared-bindings/nativeio/AnalogIn.h index 781cd465c..ea5cfb84e 100644 --- a/shared-bindings/nativeio/AnalogIn.h +++ b/shared-bindings/nativeio/AnalogIn.h @@ -35,5 +35,6 @@ extern const mp_obj_type_t nativeio_analogin_type; void common_hal_nativeio_analogin_construct(nativeio_analogin_obj_t* self, const mcu_pin_obj_t *pin); void common_hal_nativeio_analogin_deinit(nativeio_analogin_obj_t* self); uint16_t common_hal_nativeio_analogin_get_value(nativeio_analogin_obj_t *self); +float common_hal_nativeio_analogin_get_reference_voltage(nativeio_analogin_obj_t *self); #endif // __MICROPY_INCLUDED_SHARED_BINDINGS_NATIVEIO_ANALOGIN_H__ diff --git a/shared-bindings/nativeio/AnalogOut.c b/shared-bindings/nativeio/AnalogOut.c index 3e80b943d..32bd93274 100644 --- a/shared-bindings/nativeio/AnalogOut.c +++ b/shared-bindings/nativeio/AnalogOut.c @@ -113,7 +113,12 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(nativeio_analogout___exit___obj, 4, 4 //| STATIC mp_obj_t nativeio_analogout_obj_set_value(mp_obj_t self_in, mp_obj_t value) { nativeio_analogout_obj_t *self = MP_OBJ_TO_PTR(self_in); - common_hal_nativeio_analogout_set_value(self, mp_obj_get_int(value)); + uint32_t v = mp_obj_get_int(value); + if (v >= (1 << 16)) { + nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, + "AnalogOut is only 16 bits. Value must be less than 65536.")); + } + common_hal_nativeio_analogout_set_value(self, v); return mp_const_none; } MP_DEFINE_CONST_FUN_OBJ_2(nativeio_analogout_set_value_obj, nativeio_analogout_obj_set_value); |
