Skip to content

Commit 0e03a32

Browse files
committed
Fully split gamepadshift from gamepad
1 parent c927e6b commit 0e03a32

File tree

14 files changed

+105
-62
lines changed

14 files changed

+105
-62
lines changed

ports/atmel-samd/supervisor/port.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@
7171
#if CIRCUITPY_GAMEPAD
7272
#include "shared-module/gamepad/__init__.h"
7373
#endif
74+
#if CIRCUITPY_GAMEPADSHIFT
75+
#include "shared-module/gamepadshift/__init__.h"
76+
#endif
7477
#include "shared-module/_pew/PewPew.h"
7578

7679
extern volatile bool mp_msc_enabled;
@@ -229,6 +232,9 @@ void reset_port(void) {
229232
#if CIRCUITPY_GAMEPAD
230233
gamepad_reset();
231234
#endif
235+
#if CIRCUITPY_GAMEPADSHIFT
236+
gamepadshift_reset();
237+
#endif
232238
#if CIRCUITPY_PEW
233239
pew_reset();
234240
#endif

py/circuitpy_defns.mk

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,10 +131,9 @@ SRC_PATTERNS += frequencyio/%
131131
endif
132132
ifeq ($(CIRCUITPY_GAMEPAD),1)
133133
SRC_PATTERNS += gamepad/%
134-
# gamepadshift depends on gamepad
135-
ifeq ($(CIRCUITPY_GAMEPADSHIFT),1)
136-
SRC_PATTERNS += gamepadshift/%
137-
endif
134+
endif
135+
ifeq ($(CIRCUITPY_GAMEPADSHIFT),1)
136+
SRC_PATTERNS += gamepadshift/%
138137
endif
139138
ifeq ($(CIRCUITPY_I2CSLAVE),1)
140139
SRC_PATTERNS += i2cslave/%

py/circuitpy_mpconfig.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -315,8 +315,6 @@ extern const struct _mp_obj_module_t frequencyio_module;
315315

316316
#if CIRCUITPY_GAMEPAD
317317
extern const struct _mp_obj_module_t gamepad_module;
318-
// Scan gamepad every 32ms
319-
#define CIRCUITPY_GAMEPAD_TICKS 0x1f
320318
#define GAMEPAD_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_gamepad),(mp_obj_t)&gamepad_module },
321319
#else
322320
#define GAMEPAD_MODULE
@@ -329,6 +327,14 @@ extern const struct _mp_obj_module_t gamepadshift_module;
329327
#define GAMEPADSHIFT_MODULE
330328
#endif
331329

330+
#if CIRCUITPY_GAMEPAD || CIRCUITPY_GAMEPADSHIFT
331+
// Scan gamepad every 32ms
332+
#define CIRCUITPY_GAMEPAD_TICKS 0x1f
333+
#define GAMEPAD_ROOT_POINTERS mp_obj_t gamepad_singleton;
334+
#else
335+
#define GAMEPAD_ROOT_POINTERS
336+
#endif
337+
332338
#if CIRCUITPY_I2CSLAVE
333339
extern const struct _mp_obj_module_t i2cslave_module;
334340
#define I2CSLAVE_MODULE { MP_OBJ_NEW_QSTR(MP_QSTR_i2cslave), (mp_obj_t)&i2cslave_module },
@@ -612,7 +618,7 @@ extern const struct _mp_obj_module_t ustack_module;
612618
const char *readline_hist[8]; \
613619
vstr_t *repl_line; \
614620
mp_obj_t rtc_time_source; \
615-
mp_obj_t gamepad_singleton; \
621+
GAMEPAD_ROOT_POINTERS \
616622
mp_obj_t pew_singleton; \
617623
mp_obj_t terminal_tilegrid_tiles; \
618624
BOARD_I2C_ROOT_POINTER \

shared-bindings/digitalio/DigitalInOut.c

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,3 +374,14 @@ const mp_obj_type_t digitalio_digitalinout_type = {
374374
.make_new = digitalio_digitalinout_make_new,
375375
.locals_dict = (mp_obj_t)&digitalio_digitalinout_locals_dict,
376376
};
377+
378+
// Helper for validating digitalio.DigitalInOut arguments
379+
digitalio_digitalinout_obj_t *assert_digitalinout(mp_obj_t obj) {
380+
if (!MP_OBJ_IS_TYPE(obj, &digitalio_digitalinout_type)) {
381+
mp_raise_TypeError(translate("argument num/types mismatch"));
382+
}
383+
digitalio_digitalinout_obj_t *pin = MP_OBJ_TO_PTR(obj);
384+
raise_error_if_deinited(
385+
common_hal_digitalio_digitalinout_deinited(pin));
386+
return pin;
387+
}

shared-bindings/digitalio/DigitalInOut.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,6 @@ digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(digitali
5353
void common_hal_digitalio_digitalinout_set_pull(digitalio_digitalinout_obj_t* self, digitalio_pull_t pull);
5454
digitalio_pull_t common_hal_digitalio_digitalinout_get_pull(digitalio_digitalinout_obj_t* self);
5555
void common_hal_digitalio_digitalinout_never_reset(digitalio_digitalinout_obj_t *self);
56+
digitalio_digitalinout_obj_t *assert_digitalinout(mp_obj_t obj);
5657

5758
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_DIGITALIO_DIGITALINOUT_H

shared-bindings/gamepad/__init__.c

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,6 @@
2929
#include "shared-bindings/gamepad/GamePad.h"
3030
#include "shared-bindings/util.h"
3131

32-
33-
// Helper for validating digitalio.DigitalInOut arguments
34-
digitalio_digitalinout_obj_t *assert_digitalinout(mp_obj_t obj) {
35-
if (!MP_OBJ_IS_TYPE(obj, &digitalio_digitalinout_type)) {
36-
mp_raise_TypeError(translate("argument num/types mismatch"));
37-
}
38-
digitalio_digitalinout_obj_t *pin = MP_OBJ_TO_PTR(obj);
39-
raise_error_if_deinited(
40-
common_hal_digitalio_digitalinout_deinited(pin));
41-
return pin;
42-
}
43-
44-
4532
//| :mod:`gamepad` --- Button handling
4633
//| ==================================
4734
//|

shared-bindings/gamepad/__init__.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,4 @@
2828
#ifndef MICROPY_INCLUDED_SHARED_BINDINGS_GAMEPAD___INIT___H
2929
#define MICROPY_INCLUDED_SHARED_BINDINGS_GAMEPAD___INIT___H
3030

31-
#include "shared-bindings/digitalio/DigitalInOut.h"
32-
33-
digitalio_digitalinout_obj_t *assert_digitalinout(mp_obj_t obj);
34-
3531
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_GAMEPAD___INIT___H

shared-bindings/gamepadshift/GamePadShift.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,11 @@
3939
//| :class:`GamePadShift` -- Scan buttons for presses through a shift register
4040
//| ===========================================================================
4141
//|
42-
//| .. class:: GamePadShift(data, clock, latch)
42+
//| .. class:: GamePadShift(clock, data, latch)
4343
//|
4444
//| Initializes button scanning routines.
4545
//|
46-
//| The ``data``, ``clock`` and ``latch`` parameters are ``DigitalInOut``
46+
//| The ``clock``, ``data`` and ``latch`` parameters are ``DigitalInOut``
4747
//| objects connected to the shift register controlling the buttons.
4848
//|
4949
//| They button presses are accumulated, until the ``get_pressed`` method
@@ -56,18 +56,18 @@
5656
STATIC mp_obj_t gamepadshift_make_new(const mp_obj_type_t *type, size_t n_args,
5757
const mp_obj_t *pos_args, mp_map_t *kw_args) {
5858

59-
enum { ARG_data, ARG_clock, ARG_latch };
59+
enum { ARG_clock, ARG_data, ARG_latch };
6060
static const mp_arg_t allowed_args[] = {
61-
{ MP_QSTR_data, MP_ARG_REQUIRED | MP_ARG_OBJ },
6261
{ MP_QSTR_clock, MP_ARG_REQUIRED | MP_ARG_OBJ},
62+
{ MP_QSTR_data, MP_ARG_REQUIRED | MP_ARG_OBJ },
6363
{ MP_QSTR_latch, MP_ARG_REQUIRED | MP_ARG_OBJ},
6464
};
6565
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
6666
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args),
6767
allowed_args, args);
6868

69-
digitalio_digitalinout_obj_t *data_pin = assert_digitalinout(args[ARG_data].u_obj);
7069
digitalio_digitalinout_obj_t *clock_pin = assert_digitalinout(args[ARG_clock].u_obj);
70+
digitalio_digitalinout_obj_t *data_pin = assert_digitalinout(args[ARG_data].u_obj);
7171
digitalio_digitalinout_obj_t *latch_pin = assert_digitalinout(args[ARG_latch].u_obj);
7272

7373
gamepadshift_obj_t* gamepad_singleton = MP_STATE_VM(gamepad_singleton);
@@ -79,7 +79,7 @@ STATIC mp_obj_t gamepadshift_make_new(const mp_obj_type_t *type, size_t n_args,
7979
gamepad_singleton = gc_make_long_lived(gamepad_singleton);
8080
MP_STATE_VM(gamepad_singleton) = gamepad_singleton;
8181
}
82-
common_hal_gamepadshift_gamepadshift_init(gamepad_singleton, data_pin, clock_pin, latch_pin);
82+
common_hal_gamepadshift_gamepadshift_init(gamepad_singleton, clock_pin, data_pin, latch_pin);
8383
return MP_OBJ_FROM_PTR(gamepad_singleton);
8484
}
8585

shared-bindings/gamepadshift/GamePadShift.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
extern const mp_obj_type_t gamepadshift_type;
3434

3535
void common_hal_gamepadshift_gamepadshift_init(gamepadshift_obj_t *gamepadshift,
36-
digitalio_digitalinout_obj_t *data_pin,
3736
digitalio_digitalinout_obj_t *clock_pin,
37+
digitalio_digitalinout_obj_t *data_pin,
3838
digitalio_digitalinout_obj_t *latch_pin);
3939

4040
void common_hal_gamepadshift_gamepadshift_deinit(gamepadshift_obj_t *gamepadshift);

shared-module/gamepad/__init__.c

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@
3030
#include "shared-bindings/gamepad/__init__.h"
3131
#include "shared-bindings/gamepad/GamePad.h"
3232

33-
#if CIRCUITPY_GAMEPADSHIFT
34-
#include "shared-bindings/gamepadshift/GamePadShift.h"
35-
#endif
36-
3733
#include "shared-bindings/digitalio/DigitalInOut.h"
3834

3935

@@ -62,12 +58,6 @@ void gamepad_tick(void) {
6258
self->pressed |= self->last & current;
6359
self->last = current;
6460
}
65-
#if CIRCUITPY_GAMEPADSHIFT
66-
else if (MP_OBJ_IS_TYPE(MP_OBJ_FROM_PTR(singleton), &gamepadshift_type)) {
67-
// buttons connected to a shift register
68-
gamepadshift_tick(singleton);
69-
}
70-
#endif
7161
}
7262

7363
void gamepad_reset(void) {

0 commit comments

Comments
 (0)