Merge pull request #733 from pewpew-game/gamepad-pull

Respect pin's pull in gamepad
This commit is contained in:
Scott Shawcroft 2018-04-01 22:58:25 -07:00 committed by GitHub
commit fc9340ca17
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 3 deletions

View File

@ -31,6 +31,7 @@
#include "shared-bindings/digitalio/Pull.h"
#include "shared-bindings/digitalio/DigitalInOut.h"
#include "shared-bindings/util.h"
void 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) {
}
for (size_t i=0; i<n_pins; ++i) {
digitalio_digitalinout_obj_t *pin = MP_OBJ_TO_PTR(pins[i]);
raise_error_if_deinited(common_hal_digitalio_digitalinout_deinited(pin));
digitalio_direction_t direction = common_hal_digitalio_digitalinout_get_direction(pin);
digitalio_pull_t pull = common_hal_digitalio_digitalinout_get_pull(pin);
if (direction != DIRECTION_INPUT || pull == PULL_NONE) {
common_hal_digitalio_digitalinout_switch_to_input(pin, PULL_UP);
}
gamepad_singleton->pins[i] = pin;
common_hal_digitalio_digitalinout_switch_to_input(pin, PULL_UP);
}
gamepad_singleton->last = 0;
}

View File

@ -42,8 +42,10 @@ void gamepad_tick(void) {
if (!pin) {
break;
}
if (!common_hal_digitalio_digitalinout_get_value(pin)) {
gamepad_current |= 1<<i;
digitalio_pull_t pull = common_hal_digitalio_digitalinout_get_pull(pin);
bool value = common_hal_digitalio_digitalinout_get_value(pin);
if ((pull == PULL_UP && !value) || (pull == PULL_DOWN && value)) {
gamepad_current |= 1 << i;
}
}
gamepad_singleton->pressed |= gamepad_singleton->last & gamepad_current;