Skip to content

Commit b485e45

Browse files
committed
Go back to simple bit-banging in GamePadShift, fix problems
1 parent a792593 commit b485e45

2 files changed

Lines changed: 10 additions & 21 deletions

File tree

shared-module/gamepad/GamePad.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ void gamepad_init_shift(digitalio_digitalinout_obj_t *data_pin,
7070
common_hal_digitalio_digitalinout_switch_to_output(clock_pin, 0, DRIVE_MODE_PUSH_PULL);
7171
gamepad_singleton->pins[1] = clock_pin;
7272

73-
common_hal_digitalio_digitalinout_switch_to_output(clock_pin, 1, DRIVE_MODE_PUSH_PULL);
73+
common_hal_digitalio_digitalinout_switch_to_output(latch_pin, 1, DRIVE_MODE_PUSH_PULL);
7474
gamepad_singleton->pins[2] = latch_pin;
7575

76-
gamepad_singleton->kind = GAMEPAD_KIND_PINS;
76+
gamepad_singleton->kind = GAMEPAD_KIND_SHIFT;
7777
}

shared-module/gamepad/__init__.c

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -54,32 +54,21 @@ void pressed_pins(gamepad_obj_t *self) {
5454

5555

5656
void pressed_shift(gamepad_obj_t *self) {
57-
static volatile uint8_t i = 8;
58-
static volatile uint8_t clock = 0;
57+
uint8_t bit = 1;
5958
digitalio_digitalinout_obj_t* data_pin = self->pins[0];
6059
digitalio_digitalinout_obj_t* clock_pin = self->pins[1];
6160
digitalio_digitalinout_obj_t* latch_pin = self->pins[2];
6261

63-
if (clock == 0) {
64-
common_hal_digitalio_digitalinout_set_value(clock_pin, 1);
65-
clock = 1;
66-
return;
67-
}
68-
69-
if (i == 8) {
70-
common_hal_digitalio_digitalinout_set_value(latch_pin, 0);
71-
i = 9;
72-
} else if (i == 9) {
73-
common_hal_digitalio_digitalinout_set_value(latch_pin, 1);
74-
i = 0;
75-
} else {
62+
common_hal_digitalio_digitalinout_set_value(latch_pin, 1);
63+
for (int i = 0; i < 8; ++i) {
64+
common_hal_digitalio_digitalinout_set_value(clock_pin, 0);
7665
if (common_hal_digitalio_digitalinout_get_value(data_pin)) {
77-
self->pressed |= (1 << i);
66+
self->pressed |= bit;
7867
}
79-
i += 1;
68+
bit <<= 1;
69+
common_hal_digitalio_digitalinout_set_value(clock_pin, 1);
8070
}
81-
common_hal_digitalio_digitalinout_set_value(clock_pin, 0);
82-
clock = 0;
71+
common_hal_digitalio_digitalinout_set_value(latch_pin, 0);
8372
}
8473

8574

0 commit comments

Comments
 (0)