27
27
#include <stdint.h>
28
28
#include <string.h>
29
29
30
+ #include "lib/utils/context_manager_helpers.h"
31
+
30
32
#include "py/nlr.h"
31
33
#include "py/objtype.h"
32
34
#include "py/objproperty.h"
@@ -84,10 +86,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(nativeio_digitalinout_deinit_obj, nativeio_digitalinou
84
86
//|
85
87
//| No-op used by Context Managers.
86
88
//|
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.
91
90
92
91
//| .. method:: __exit__()
93
92
//|
@@ -101,12 +100,12 @@ STATIC mp_obj_t nativeio_digitalinout_obj___exit__(size_t n_args, const mp_obj_t
101
100
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN (nativeio_digitalinout_obj___exit___obj , 4 , 4 , nativeio_digitalinout_obj___exit__ );
102
101
103
102
//|
104
- //| .. method:: switch_to_output(value=False, drive_mode=DriveMode.push_pull )
103
+ //| .. method:: switch_to_output(value=False, drive_mode=DriveMode.PUSH_PULL )
105
104
//|
106
105
//| Switch to writing out digital values.
107
106
//|
108
107
//| :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
110
109
//|
111
110
typedef struct {
112
111
mp_obj_base_t base ;
@@ -146,9 +145,9 @@ MP_DEFINE_CONST_FUN_OBJ_KW(nativeio_digitalinout_switch_to_output_obj, 1, native
146
145
//| import board
147
146
//|
148
147
//| 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 )
150
149
//| # Or, after switch_to_input
151
- //| switch.pull = nativeio.DigitalInOut.Pull.up
150
+ //| switch.pull = nativeio.DigitalInOut.Pull.UP
152
151
//| print(switch.value)
153
152
//|
154
153
typedef struct {
@@ -332,11 +331,11 @@ mp_obj_property_t nativeio_digitalinout_pull_obj = {
332
331
//| Enum-like class to define which direction the digital values are
333
332
//| going.
334
333
//|
335
- //| .. data:: in
334
+ //| .. data:: IN
336
335
//|
337
336
//| Read digital data in
338
337
//|
339
- //| .. data:: out
338
+ //| .. data:: OUT
340
339
//|
341
340
//| Write digital data out
342
341
//|
@@ -351,14 +350,23 @@ const nativeio_digitalinout_direction_obj_t nativeio_digitalinout_direction_out_
351
350
};
352
351
353
352
STATIC 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 ) },
356
355
};
357
356
STATIC MP_DEFINE_CONST_DICT (nativeio_digitalinout_direction_locals_dict , nativeio_digitalinout_direction_locals_dict_table );
358
357
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
+
359
366
const mp_obj_type_t nativeio_digitalinout_direction_type = {
360
367
{ & mp_type_type },
361
368
.name = MP_QSTR_Direction ,
369
+ .print = nativeio_digitalinout_direction_print ,
362
370
.locals_dict = (mp_obj_t )& nativeio_digitalinout_direction_locals_dict ,
363
371
};
364
372
@@ -367,11 +375,11 @@ const mp_obj_type_t nativeio_digitalinout_direction_type = {
367
375
//| Enum-like class to define the drive mode used when outputting
368
376
//| digital values.
369
377
//|
370
- //| .. data:: push_pull
378
+ //| .. data:: PUSH_PULL
371
379
//|
372
380
//| Output both high and low digital values
373
381
//|
374
- //| .. data:: open_drain
382
+ //| .. data:: OPEN_DRAIN
375
383
//|
376
384
//| Output low digital values but go into high z for digital high. This is
377
385
//| 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
387
395
};
388
396
389
397
STATIC 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 ) },
392
400
};
393
401
STATIC MP_DEFINE_CONST_DICT (nativeio_digitalinout_drive_mode_locals_dict , nativeio_digitalinout_drive_mode_locals_dict_table );
394
402
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
+
395
411
const mp_obj_type_t nativeio_digitalinout_drive_mode_type = {
396
412
{ & mp_type_type },
397
413
.name = MP_QSTR_DriveMode ,
414
+ .print = nativeio_digitalinout_drive_mode_print ,
398
415
.locals_dict = (mp_obj_t )& nativeio_digitalinout_drive_mode_locals_dict ,
399
416
};
400
417
@@ -403,12 +420,12 @@ const mp_obj_type_t nativeio_digitalinout_drive_mode_type = {
403
420
//| Enum-like class to define the pull value, if any, used while reading
404
421
//| digital values in.
405
422
//|
406
- //| .. data:: up
423
+ //| .. data:: UP
407
424
//|
408
425
//| When the input line isn't being driven the pull up can pull the state
409
426
//| of the line high so it reads as true.
410
427
//|
411
- //| .. data:: down
428
+ //| .. data:: DOWN
412
429
//|
413
430
//| When the input line isn't being driven the pull down can pull the
414
431
//| 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 = {
424
441
};
425
442
426
443
STATIC 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 ) },
429
446
};
430
447
STATIC MP_DEFINE_CONST_DICT (nativeio_digitalinout_pull_locals_dict , nativeio_digitalinout_pull_locals_dict_table );
431
448
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
+
432
457
const mp_obj_type_t nativeio_digitalinout_pull_type = {
433
458
{ & mp_type_type },
434
459
.name = MP_QSTR_Pull ,
460
+ .print = nativeio_digitalinout_pull_print ,
435
461
.locals_dict = (mp_obj_t )& nativeio_digitalinout_pull_locals_dict ,
436
462
};
437
463
438
464
STATIC const mp_rom_map_elem_t nativeio_digitalinout_locals_dict_table [] = {
439
465
// instance methods
440
466
{ 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 ) },
442
468
{ MP_ROM_QSTR (MP_QSTR___exit__ ), MP_ROM_PTR (& nativeio_digitalinout_obj___exit___obj ) },
443
469
{ MP_ROM_QSTR (MP_QSTR_switch_to_output ), MP_ROM_PTR (& nativeio_digitalinout_switch_to_output_obj ) },
444
470
{ MP_ROM_QSTR (MP_QSTR_switch_to_input ), MP_ROM_PTR (& nativeio_digitalinout_switch_to_input_obj ) },
0 commit comments