@@ -102,7 +102,8 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(digitalio_digitalinout_obj___exit___o
102
102
//|
103
103
//| .. method:: switch_to_output(value=False, drive_mode=DriveMode.PUSH_PULL)
104
104
//|
105
- //| Switch to writing out digital values.
105
+ //| Set the drive mode and value and then switch to writing out digital
106
+ //| values.
106
107
//|
107
108
//| :param bool value: default value to set upon switching
108
109
//| :param DriveMode drive_mode: drive mode for the output
@@ -135,7 +136,7 @@ MP_DEFINE_CONST_FUN_OBJ_KW(digitalio_digitalinout_switch_to_output_obj, 1, digit
135
136
136
137
//| .. method:: switch_to_input(pull=None)
137
138
//|
138
- //| Switch to read in digital values.
139
+ //| Set the pull and then switch to read in digital values.
139
140
//|
140
141
//| :param Pull pull: pull configuration for the input
141
142
//|
@@ -179,9 +180,12 @@ MP_DEFINE_CONST_FUN_OBJ_KW(digitalio_digitalinout_switch_to_input_obj, 1, digita
179
180
180
181
//| .. attribute:: direction
181
182
//|
182
- //| Get the direction of the pin.
183
+ //| The direction of the pin.
183
184
//|
184
- //| :raises AttributeError: when set. Use :py:meth:`switch_to_input` and :py:meth:`switch_to_output` to change the direction.
185
+ //| Setting this will use the defaults from the corresponding
186
+ //| :py:meth:`switch_to_input` or :py:meth:`switch_to_output` method. If
187
+ //| you want to set pull, value or drive mode prior to switching, then use
188
+ //| those methods instead.
185
189
//|
186
190
typedef struct {
187
191
mp_obj_base_t base ;
<
E462
/td>@@ -199,10 +203,23 @@ STATIC mp_obj_t digitalio_digitalinout_obj_get_direction(mp_obj_t self_in) {
199
203
}
200
204
MP_DEFINE_CONST_FUN_OBJ_1 (digitalio_digitalinout_get_direction_obj , digitalio_digitalinout_obj_get_direction );
201
205
206
+ STATIC mp_obj_t digitalio_digitalinout_obj_set_direction (mp_obj_t self_in , mp_obj_t value ) {
207
+ digitalio_digitalinout_obj_t * self = MP_OBJ_TO_PTR (self_in );
208
+ if (value == & digitalio_digitalinout_direction_in_obj ) {
209
+ common_hal_digitalio_digitalinout_switch_to_input (self , PULL_NONE );
210
+ } else if (value == & digitalio_digitalinout_direction_out_obj ) {
211
+ common_hal_digitalio_digitalinout_switch_to_output (self , false, DRIVE_MODE_PUSH_PULL );
212
+ } else {
213
+ mp_raise_ValueError ("Invalid direction." );
214
+ }
215
+ return mp_const_none ;
216
+ }
217
+ MP_DEFINE_CONST_FUN_OBJ_2 (digitalio_digitalinout_set_direction_obj , digitalio_digitalinout_obj_set_direction );
218
+
202
219
const mp_obj_property_t digitalio_digitalinout_direction_obj = {
203
220
.base .type = & mp_type_property ,
204
221
.proxy = {(mp_obj_t )& digitalio_digitalinout_get_direction_obj ,
205
- (mp_obj_t )& mp_const_none_obj ,
222
+ (mp_obj_t )& digitalio_digitalinout_set_direction_obj ,
206
223
(mp_obj_t )& mp_const_none_obj },
207
224
};
208
225
0 commit comments