summaryrefslogtreecommitdiff
path: root/shared-module/gamepad/__init__.c
diff options
context:
space:
mode:
Diffstat (limited to 'shared-module/gamepad/__init__.c')
-rw-r--r--shared-module/gamepad/__init__.c33
1 files changed, 12 insertions, 21 deletions
diff --git a/shared-module/gamepad/__init__.c b/shared-module/gamepad/__init__.c
index f92042d4b..8a4f4eae9 100644
--- a/shared-module/gamepad/__init__.c
+++ b/shared-module/gamepad/__init__.c
@@ -27,17 +27,17 @@
#include <stdbool.h>
#include "py/mpstate.h"
-#include "__init__.h"
-#include "GamePad.h"
-#include "GamePadShift.h"
+#include "shared-bindings/gamepad/__init__.h"
#include "shared-bindings/gamepad/GamePad.h"
-#include "shared-bindings/gamepad/GamePadShift.h"
+
+#if CIRCUITPY_GAMEPADSHIFT
+#include "shared-bindings/gamepadshift/GamePadShift.h"
+#endif
#include "shared-bindings/digitalio/DigitalInOut.h"
void gamepad_tick(void) {
- static uint8_t last = 0;
uint8_t current = 0;
uint8_t bit = 1;
@@ -59,24 +59,15 @@ void gamepad_tick(void) {
bit <<= 1;
}
current ^= self->pulls;
- self->pressed |= last & current;
- } else if (MP_OBJ_IS_TYPE(MP_OBJ_FROM_PTR(singleton), &gamepadshift_type)) {
+ self->pressed |= self->last & current;
+ self->last = current;
+ }
+ #if CIRCUITPY_GAMEPADSHIFT
+ else if (MP_OBJ_IS_TYPE(MP_OBJ_FROM_PTR(singleton), &gamepadshift_type)) {
// buttons connected to a shift register
- gamepadshift_obj_t *self = singleton;
-
- common_hal_digitalio_digitalinout_set_value(self->latch_pin, 1);
- for (int i = 0; i < 8; ++i) {
- common_hal_digitalio_digitalinout_set_value(self->clock_pin, 0);
- if (common_hal_digitalio_digitalinout_get_value(self->data_pin)) {
- current |= bit;
- }
- common_hal_digitalio_digitalinout_set_value(self->clock_pin, 1);
- bit <<= 1;
- }
- common_hal_digitalio_digitalinout_set_value(self->latch_pin, 0);
- self->pressed |= last & current;
+ gamepadshift_tick(singleton);
}
- last = current;
+ #endif
}
void gamepad_reset(void) {