2727#include <stdint.h>
2828#include <string.h>
2929
30+ #include "lib/utils/context_manager_helpers.h"
31+
3032#include "py/nlr.h"
3133#include "py/objtype.h"
3234#include "py/objproperty.h"
@@ -84,10 +86,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(nativeio_digitalinout_deinit_obj, nativeio_digitalinou
8486//|
8587//| No-op used by Context Managers.
8688//|
87- STATIC mp_obj_t nativeio_digitalinout_obj___enter__ (mp_obj_t self_in ) {
88- return self_in ;
89- }
90- MP_DEFINE_CONST_FUN_OBJ_1 (nativeio_digitalinout___enter___obj , nativeio_digitalinout_obj___enter__ );
89+ // Provided by context manager helper.
9190
9291//| .. method:: __exit__()
9392//|
@@ -101,12 +100,12 @@ STATIC mp_obj_t nativeio_digitalinout_obj___exit__(size_t n_args, const mp_obj_t
101100STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (nativeio_digitalinout_obj___exit___obj , 4 , 4 , nativeio_digitalinout_obj___exit__ );
102101
103102//|
104- //| .. method:: switch_to_output(value=False, drive_mode=DriveMode.push_pull )
103+ //| .. method:: switch_to_output(value=False, drive_mode=DriveMode.PUSH_PULL )
105104//|
106105//| Switch to writing out digital values.
107106//|
108107//| :param bool value: default value to set upon switching
109- //| :param DriveMode push_pull : drive mode for the output
108+ //| :param DriveMode drive_mode : drive mode for the output
110109//|
111110typedef struct {
112111 mp_obj_base_t base ;
@@ -146,9 +145,9 @@ MP_DEFINE_CONST_FUN_OBJ_KW(nativeio_digitalinout_switch_to_output_obj, 1, native
146145//| import board
147146//|
148147//| with nativeio.DigitalInOut(board.SLIDE_SWITCH) as switch:
149- //| switch.switch_to_input(pull=nativeio.DigitalInOut.Pull.up )
148+ //| switch.switch_to_input(pull=nativeio.DigitalInOut.Pull.UP )
150149//| # Or, after switch_to_input
151- //| switch.pull = nativeio.DigitalInOut.Pull.up
150+ //| switch.pull = nativeio.DigitalInOut.Pull.UP
152151//| print(switch.value)
153152//|
154153typedef struct {
@@ -332,11 +331,11 @@ mp_obj_property_t nativeio_digitalinout_pull_obj = {
332331//| Enum-like class to define which direction the digital values are
333332//| going.
334333//|
335- //| .. data:: in
334+ //| .. data:: IN
336335//|
337336//| Read digital data in
338337//|
339- //| .. data:: out
338+ //| .. data:: OUT
340339//|
341340//| Write digital data out
342341//|
@@ -351,14 +350,23 @@ const nativeio_digitalinout_direction_obj_t nativeio_digitalinout_direction_out_
351350};
352351
353352STATIC const mp_rom_map_elem_t nativeio_digitalinout_direction_locals_dict_table [] = {
354- { MP_ROM_QSTR (MP_QSTR_in ), MP_ROM_PTR (& nativeio_digitalinout_direction_in_obj ) },
355- { MP_ROM_QSTR (MP_QSTR_out ), MP_ROM_PTR (& nativeio_digitalinout_direction_out_obj ) },
353+ { MP_ROM_QSTR (MP_QSTR_IN ), MP_ROM_PTR (& nativeio_digitalinout_direction_in_obj ) },
354+ { MP_ROM_QSTR (MP_QSTR_OUT ), MP_ROM_PTR (& nativeio_digitalinout_direction_out_obj ) },
356355};
357356STATIC MP_DEFINE_CONST_DICT (nativeio_digitalinout_direction_locals_dict , nativeio_digitalinout_direction_locals_dict_table );
358357
358+ STATIC void nativeio_digitalinout_direction_print (const mp_print_t * print , mp_obj_t self_in , mp_print_kind_t kind ) {
359+ qstr direction = MP_QSTR_IN ;
360+ if (MP_OBJ_TO_PTR (self_in ) == MP_ROM_PTR (& nativeio_digitalinout_direction_out_obj )) {
361+ direction = MP_QSTR_OUT ;
362+ }
363+ mp_printf (print , "%q.%q.%q.%q" , MP_QSTR_nativeio , MP_QSTR_DigitalInOut , MP_QSTR_Direction , direction );
364+ }
365+
359366const mp_obj_type_t nativeio_digitalinout_direction_type = {
360367 { & mp_type_type },
361368 .name = MP_QSTR_Direction ,
369+ .print = nativeio_digitalinout_direction_print ,
362370 .locals_dict = (mp_obj_t )& nativeio_digitalinout_direction_locals_dict ,
363371};
364372
@@ -367,11 +375,11 @@ const mp_obj_type_t nativeio_digitalinout_direction_type = {
367375//| Enum-like class to define the drive mode used when outputting
368376//| digital values.
369377//|
370- //| .. data:: push_pull
378+ //| .. data:: PUSH_PULL
371379//|
372380//| Output both high and low digital values
373381//|
374- //| .. data:: open_drain
382+ //| .. data:: OPEN_DRAIN
375383//|
376384//| Output low digital values but go into high z for digital high. This is
377385//| useful for i2c and other protocols that share a digital line.
@@ -387,14 +395,23 @@ const nativeio_digitalinout_drive_mode_obj_t nativeio_digitalinout_drive_mode_op
387395};
388396
389397STATIC const mp_rom_map_elem_t nativeio_digitalinout_drive_mode_locals_dict_table [] = {
390- { MP_ROM_QSTR (MP_QSTR_push_pull ), MP_ROM_PTR (& nativeio_digitalinout_drive_mode_push_pull_obj ) },
391- { MP_ROM_QSTR (MP_QSTR_open_drain ), MP_ROM_PTR (& nativeio_digitalinout_drive_mode_open_drain_obj ) },
398+ { MP_ROM_QSTR (MP_QSTR_PUSH_PULL ), MP_ROM_PTR (& nativeio_digitalinout_drive_mode_push_pull_obj ) },
399+ { MP_ROM_QSTR (MP_QSTR_OPEN_DRAIN ), MP_ROM_PTR (& nativeio_digitalinout_drive_mode_open_drain_obj ) },
392400};
393401STATIC MP_DEFINE_CONST_DICT (nativeio_digitalinout_drive_mode_locals_dict , nativeio_digitalinout_drive_mode_locals_dict_table );
394402
403+ STATIC void nativeio_digitalinout_drive_mode_print (const mp_print_t * print , mp_obj_t self_in , mp_print_kind_t kind ) {
404+ qstr drive_mode = MP_QSTR_PUSH_PULL ;
405+ if (MP_OBJ_TO_PTR (self_in ) == MP_ROM_PTR (& nativeio_digitalinout_drive_mode_open_drain_obj )) {
406+ drive_mode = MP_QSTR_OPEN_DRAIN ;
407+ }
408+ mp_printf (print , "%q.%q.%q.%q" , MP_QSTR_nativeio , MP_QSTR_DigitalInOut , MP_QSTR_DriveMode , drive_mode );
409+ }
410+
395411const mp_obj_type_t nativeio_digitalinout_drive_mode_type = {
396412 { & mp_type_type },
397413 .name = MP_QSTR_DriveMode ,
414+ .print = nativeio_digitalinout_drive_mode_print ,
398415 .locals_dict = (mp_obj_t )& nativeio_digitalinout_drive_mode_locals_dict ,
399416};
400417
@@ -403,12 +420,12 @@ const mp_obj_type_t nativeio_digitalinout_drive_mode_type = {
403420//| Enum-like class to define the pull value, if any, used while reading
404421//| digital values in.
405422//|
406- //| .. data:: up
423+ //| .. data:: UP
407424//|
408425//| When the input line isn't being driven the pull up can pull the state
409426//| of the line high so it reads as true.
410427//|
411- //| .. data:: down
428+ //| .. data:: DOWN
412429//|
413430//| When the input line isn't being driven the pull down can pull the
414431//| state of the line low so it reads as false.
@@ -424,21 +441,30 @@ const nativeio_digitalinout_pull_obj_t nativeio_digitalinout_pull_down_obj = {
424441};
425442
426443STATIC const mp_rom_map_elem_t nativeio_digitalinout_pull_locals_dict_table [] = {
427- { MP_ROM_QSTR (MP_QSTR_up ), MP_ROM_PTR (& nativeio_digitalinout_pull_up_obj ) },
428- { MP_ROM_QSTR (MP_QSTR_down ), MP_ROM_PTR (& nativeio_digitalinout_pull_down_obj ) },
444+ { MP_ROM_QSTR (MP_QSTR_UP ), MP_ROM_PTR (& nativeio_digitalinout_pull_up_obj ) },
445+ { MP_ROM_QSTR (MP_QSTR_DOWN ), MP_ROM_PTR (& nativeio_digitalinout_pull_down_obj ) },
429446};
430447STATIC MP_DEFINE_CONST_DICT (nativeio_digitalinout_pull_locals_dict , nativeio_digitalinout_pull_locals_dict_table );
431448
449+ STATIC void nativeio_digitalinout_pull_print (const mp_print_t * print , mp_obj_t self_in , mp_print_kind_t kind ) {
450+ qstr pull = MP_QSTR_UP ;
451+ if (MP_OBJ_TO_PTR (self_in ) == MP_ROM_PTR (& nativeio_digitalinout_pull_down_obj )) {
452+ pull = MP_QSTR_DOWN ;
453+ }
454+ mp_printf (print , "%q.%q.%q.%q" , MP_QSTR_nativeio , MP_QSTR_DigitalInOut , MP_QSTR_Pull , pull );
455+ }
456+
432457const mp_obj_type_t nativeio_digitalinout_pull_type = {
433458 { & mp_type_type },
434459 .name = MP_QSTR_Pull ,
460+ .print = nativeio_digitalinout_pull_print ,
435461 .locals_dict = (mp_obj_t )& nativeio_digitalinout_pull_locals_dict ,
436462};
437463
438464STATIC const mp_rom_map_elem_t nativeio_digitalinout_locals_dict_table [] = {
439465 // instance methods
440466 { MP_ROM_QSTR (MP_QSTR_deinit ), MP_ROM_PTR (& nativeio_digitalinout_deinit_obj ) },
441- { MP_ROM_QSTR (MP_QSTR___enter__ ), MP_ROM_PTR (& nativeio_digitalinout___enter___obj ) },
467+ { MP_ROM_QSTR (MP_QSTR___enter__ ), MP_ROM_PTR (& default___enter___obj ) },
442468 { MP_ROM_QSTR (MP_QSTR___exit__ ), MP_ROM_PTR (& nativeio_digitalinout_obj___exit___obj ) },
443469 { MP_ROM_QSTR (MP_QSTR_switch_to_output ), MP_ROM_PTR (& nativeio_digitalinout_switch_to_output_obj ) },
444470 { MP_ROM_QSTR (MP_QSTR_switch_to_input ), MP_ROM_PTR (& nativeio_digitalinout_switch_to_input_obj ) },
0 commit comments