File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 3131
3232#include "shared-bindings/digitalio/Pull.h"
3333#include "shared-bindings/digitalio/DigitalInOut.h"
34+ #include "shared-bindings/util.h"
3435
3536
3637void gamepad_init (size_t n_pins , const mp_obj_t * pins ) {
@@ -39,8 +40,13 @@ void gamepad_init(size_t n_pins, const mp_obj_t* pins) {
3940 }
4041 for (size_t i = 0 ; i < n_pins ; ++ i ) {
4142 digitalio_digitalinout_obj_t * pin = MP_OBJ_TO_PTR (pins [i ]);
43+ raise_error_if_deinited (common_hal_digitalio_digitalinout_deinited (pin ));
44+ digitalio_direction_t direction = common_hal_digitalio_digitalinout_get_direction (pin );
45+ digitalio_pull_t pull = common_hal_digitalio_digitalinout_get_pull (pin );
46+ if (direction != DIRECTION_INPUT || pull == PULL_NONE ) {
47+ common_hal_digitalio_digitalinout_switch_to_input (pin , PULL_UP );
48+ }
4249 gamepad_singleton -> pins [i ] = pin ;
43- common_hal_digitalio_digitalinout_switch_to_input (pin , PULL_UP );
4450 }
4551 gamepad_singleton -> last = 0 ;
4652}
Original file line number Diff line number Diff line change @@ -42,8 +42,10 @@ void gamepad_tick(void) {
4242 if (!pin ) {
4343 break ;
4444 }
45- if (!common_hal_digitalio_digitalinout_get_value (pin )) {
46- gamepad_current |= 1 <<i ;
45+ digitalio_pull_t pull = common_hal_digitalio_digitalinout_get_pull (pin );
46+ bool value = common_hal_digitalio_digitalinout_get_value (pin );
47+ if ((pull == PULL_UP && !value ) || (pull == PULL_DOWN && value )) {
48+ gamepad_current |= 1 << i ;
4749 }
4850 }
4951 gamepad_singleton -> pressed |= gamepad_singleton -> last & gamepad_current ;
You can’t perform that action at this time.
0 commit comments