Skip to content

Commit db4dbe0

Browse files
authored
Merge pull request #2889 from jepler/gamepad-tick
Gamepad, GamepadShift: Fix after lower-power by enabling supervisor tick
2 parents 82fdced + adef454 commit db4dbe0

File tree

6 files changed

+24
-4
lines changed

6 files changed

+24
-4
lines changed

ports/atmel-samd/audio_dma.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
#include "shared-bindings/audiocore/RawSample.h"
3333
#include "shared-bindings/audiocore/WaveFile.h"
34+
#include "supervisor/shared/tick.h"
3435

3536
#include "py/mpstate.h"
3637
#include "py/runtime.h"
@@ -60,6 +61,7 @@ void audio_dma_free_channel(uint8_t channel) {
6061
assert(audio_dma_allocated[channel]);
6162
audio_dma_disable_channel(channel);
6263
audio_dma_allocated[channel] = false;
64+
supervisor_disable_tick();
6365
}
6466

6567
void audio_dma_disable_channel(uint8_t channel) {
@@ -71,6 +73,7 @@ void audio_dma_disable_channel(uint8_t channel) {
7173
void audio_dma_enable_channel(uint8_t channel) {
7274
if (channel >= AUDIO_DMA_CHANNEL_COUNT)
7375
return;
76+
supervisor_enable_tick();
7477
dma_enable_channel(channel);
7578
}
7679

@@ -318,6 +321,9 @@ void audio_dma_reset(void) {
318321
for (uint8_t i = 0; i < AUDIO_DMA_CHANNEL_COUNT; i++) {
319322
audio_dma_state[i] = NULL;
320323
audio_dma_pending[i] = false;
324+
if (audio_dma_allocated[i]) {
325+
supervisor_disable_tick();
326+
}
321327
audio_dma_allocated[i] = false;
322328
audio_dma_disable_channel(i);
323329
dma_descriptor(i)->BTCTRL.bit.VALID = false;

shared-bindings/gamepad/GamePad.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
#include "shared-bindings/gamepad/__init__.h"
3434
#include "shared-bindings/digitalio/DigitalInOut.h"
3535
#include "supervisor/shared/translate.h"
36+
#include "supervisor/shared/tick.h"
3637

3738

3839
//| .. currentmodule:: gamepad
@@ -105,9 +106,11 @@ STATIC mp_obj_t gamepad_make_new(const mp_obj_type_t *type, size_t n_args,
105106
gamepad_obj_t* gamepad_singleton = MP_STATE_VM(gamepad_singleton);
106107
if (!gamepad_singleton ||
107108
!MP_OBJ_IS_TYPE(MP_OBJ_FROM_PTR(gamepad_singleton), &gamepad_type)) {
108-
gamepad_singleton = m_new_obj(gamepad_obj_t);
109+
gamepad_singleton = m_new_ll_obj(gamepad_obj_t);
109110
gamepad_singleton->base.type = &gamepad_type;
110-
gamepad_singleton = gc_make_long_lived(gamepad_singleton);
111+
if (!MP_STATE_VM(gamepad_singleton)) {
112+
supervisor_enable_tick();
113+
}
111114
MP_STATE_VM(gamepad_singleton) = gamepad_singleton;
112115
}
113116
common_hal_gamepad_gamepad_init(gamepad_singleton, args, n_args);

shared-bindings/gamepadshift/GamePadShift.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "shared-bindings/gamepadshift/GamePadShift.h"
3232
#include "shared-bindings/gamepadshift/__init__.h"
3333
#include "supervisor/shared/translate.h"
34+
#include "supervisor/shared/tick.h"
3435

3536
//| .. currentmodule:: gamepadshift
3637
//|
@@ -72,9 +73,11 @@ STATIC mp_obj_t gamepadshift_make_new(const mp_obj_type_t *type, size_t n_args,
7273
if (!gamepad_singleton ||
7374
!MP_OBJ_IS_TYPE(MP_OBJ_FROM_PTR(gamepad_singleton),
7475
&gamepadshift_type)) {
75-
gamepad_singleton = m_new_obj(gamepadshift_obj_t);
76+
gamepad_singleton = m_new_ll_obj(gamepadshift_obj_t);
7677
gamepad_singleton->base.type = &gamepadshift_type;
77-
gamepad_singleton = gc_make_long_lived(gamepad_singleton);
78+
if (!MP_STATE_VM(gamepad_singleton)) {
79+
supervisor_enable_tick();
80+
}
7881
MP_STATE_VM(gamepad_singleton) = gamepad_singleton;
7982
}
8083
common_hal_gamepadshift_gamepadshift_init(gamepad_singleton, clock_pin, data_pin, latch_pin);

shared-module/gamepad/GamePad.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "py/mpstate.h"
2828
#include "shared-bindings/digitalio/DigitalInOut.h"
2929
#include "shared-bindings/gamepad/GamePad.h"
30+
#include "supervisor/shared/tick.h"
3031

3132
void common_hal_gamepad_gamepad_init(gamepad_obj_t *gamepad,
3233
const mp_obj_t pins[], size_t n_pins) {
@@ -54,4 +55,5 @@ void common_hal_gamepad_gamepad_init(gamepad_obj_t *gamepad,
5455

5556
void common_hal_gamepad_gamepad_deinit(gamepad_obj_t *self) {
5657
MP_STATE_VM(gamepad_singleton) = NULL;
58+
supervisor_disable_tick();
5759
}

shared-module/gamepad/__init__.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "py/mpstate.h"
3030
#include "shared-bindings/gamepad/__init__.h"
3131
#include "shared-bindings/gamepad/GamePad.h"
32+
#include "supervisor/shared/tick.h"
3233

3334
#include "shared-bindings/digitalio/DigitalInOut.h"
3435

@@ -59,5 +60,8 @@ void gamepad_tick(void) {
5960
}
6061

6162
void gamepad_reset(void) {
63+
if (MP_STATE_VM(gamepad_singleton)) {
64+
supervisor_disable_tick();
65+
}
6266
MP_STATE_VM(gamepad_singleton) = NULL;
6367
}

shared-module/gamepadshift/GamePadShift.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
#include "py/mpstate.h"
2828
#include "shared-bindings/digitalio/DigitalInOut.h"
2929
#include "shared-module/gamepadshift/GamePadShift.h"
30+
#include "supervisor/shared/tick.h"
3031

3132
void common_hal_gamepadshift_gamepadshift_init(gamepadshift_obj_t *gamepadshift,
3233
digitalio_digitalinout_obj_t *clock_pin,
@@ -46,4 +47,5 @@ void common_hal_gamepadshift_gamepadshift_init(gamepadshift_obj_t *gamepadshift,
4647

4748
void common_hal_gamepadshift_gamepadshift_deinit(gamepadshift_obj_t *gamepadshift) {
4849
MP_STATE_VM(gamepad_singleton) = NULL;
50+
supervisor_disable_tick();
4951
}

0 commit comments

Comments
 (0)