summaryrefslogtreecommitdiff
path: root/shared-module
diff options
context:
space:
mode:
authorRadomir Dopieralski <openstack@sheep.art.pl>2019-04-11 10:16:55 +0200
committerRadomir Dopieralski <openstack@sheep.art.pl>2019-04-12 20:43:29 +0200
commitb485e45f4f75235e32d63ad311f26d20eac43c1c (patch)
tree6a2f15c8f588047cdef521773991f167ff0aaa54 /shared-module
parenta7925930fa95143c5336fe6d661691605eae41dd (diff)
Go back to simple bit-banging in GamePadShift, fix problems
Diffstat (limited to 'shared-module')
-rw-r--r--shared-module/gamepad/GamePad.c4
-rw-r--r--shared-module/gamepad/__init__.c27
2 files changed, 10 insertions, 21 deletions
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);
}