From b485e45f4f75235e32d63ad311f26d20eac43c1c Mon Sep 17 00:00:00 2001 From: Radomir Dopieralski Date: Thu, 11 Apr 2019 10:16:55 +0200 Subject: Go back to simple bit-banging in GamePadShift, fix problems --- shared-module/gamepad/GamePad.c | 4 ++-- shared-module/gamepad/__init__.c | 27 ++++++++------------------- 2 files changed, 10 insertions(+), 21 deletions(-) (limited to 'shared-module') diff --git a/shared-module/gamepad/GamePad.c b/shared-module/gamepad/GamePad.c index 4fea7fe4b..18a7c4d7b 100644 --- a/shared-module/gamepad/GamePad.c +++ b/shared-module/gamepad/GamePad.c @@ -70,8 +70,8 @@ void gamepad_init_shift(digitalio_digitalinout_obj_t *data_pin, common_hal_digitalio_digitalinout_switch_to_output(clock_pin, 0, DRIVE_MODE_PUSH_PULL); gamepad_singleton->pins[1] = clock_pin; - common_hal_digitalio_digitalinout_switch_to_output(clock_pin, 1, DRIVE_MODE_PUSH_PULL); + common_hal_digitalio_digitalinout_switch_to_output(latch_pin, 1, DRIVE_MODE_PUSH_PULL); gamepad_singleton->pins[2] = latch_pin; - gamepad_singleton->kind = GAMEPAD_KIND_PINS; + gamepad_singleton->kind = GAMEPAD_KIND_SHIFT; } diff --git a/shared-module/gamepad/__init__.c b/shared-module/gamepad/__init__.c index 6f9b80bec..705c1ef38 100644 --- a/shared-module/gamepad/__init__.c +++ b/shared-module/gamepad/__init__.c @@ -54,32 +54,21 @@ void pressed_pins(gamepad_obj_t *self) { void pressed_shift(gamepad_obj_t *self) { - static volatile uint8_t i = 8; - static volatile uint8_t clock = 0; + uint8_t bit = 1; digitalio_digitalinout_obj_t* data_pin = self->pins[0]; digitalio_digitalinout_obj_t* clock_pin = self->pins[1]; digitalio_digitalinout_obj_t* latch_pin = self->pins[2]; - if (clock == 0) { - common_hal_digitalio_digitalinout_set_value(clock_pin, 1); - clock = 1; - return; - } - - if (i == 8) { - common_hal_digitalio_digitalinout_set_value(latch_pin, 0); - i = 9; - } else if (i == 9) { - common_hal_digitalio_digitalinout_set_value(latch_pin, 1); - i = 0; - } else { + common_hal_digitalio_digitalinout_set_value(latch_pin, 1); + for (int i = 0; i < 8; ++i) { + common_hal_digitalio_digitalinout_set_value(clock_pin, 0); if (common_hal_digitalio_digitalinout_get_value(data_pin)) { - self->pressed |= (1 << i); + self->pressed |= bit; } - i += 1; + bit <<= 1; + common_hal_digitalio_digitalinout_set_value(clock_pin, 1); } - common_hal_digitalio_digitalinout_set_value(clock_pin, 0); - clock = 0; + common_hal_digitalio_digitalinout_set_value(latch_pin, 0); } -- cgit v1.2.3