|
31 | 31 |
|
32 | 32 | void gamepadshift_tick(void) { |
33 | 33 | void* singleton = MP_STATE_VM(gamepad_singleton); |
34 | | - if (!singleton) { |
| 34 | + if (singleton == NULL || !MP_OBJ_IS_TYPE(MP_OBJ_FROM_PTR(singleton), &gamepadshift_type)) { |
35 | 35 | return; |
36 | 36 | } |
37 | 37 |
|
38 | | - if (MP_OBJ_IS_TYPE(MP_OBJ_FROM_PTR(singleton), &gamepadshift_type)) { |
39 | | - // buttons connected to a shift register |
40 | | - gamepadshift_obj_t *self = MP_OBJ_TO_PTR(singleton); |
41 | | - uint8_t current = 0; |
42 | | - uint8_t bit = 1; |
43 | | - common_hal_digitalio_digitalinout_set_value(self->latch_pin, 1); |
44 | | - for (int i = 0; i < 8; ++i) { |
45 | | - common_hal_digitalio_digitalinout_set_value(self->clock_pin, 0); |
46 | | - if (common_hal_digitalio_digitalinout_get_value(self->data_pin)) { |
47 | | - current |= bit; |
48 | | - } |
49 | | - common_hal_digitalio_digitalinout_set_value(self->clock_pin, 1); |
50 | | - bit <<= 1; |
| 38 | + gamepadshift_obj_t *self = MP_OBJ_TO_PTR(singleton); |
| 39 | + uint8_t current = 0; |
| 40 | + uint8_t bit = 1; |
| 41 | + common_hal_digitalio_digitalinout_set_value(self->latch_pin, 1); |
| 42 | + for (int i = 0; i < 8; ++i) { |
| 43 | + common_hal_digitalio_digitalinout_set_value(self->clock_pin, 0); |
| 44 | + if (common_hal_digitalio_digitalinout_get_value(self->data_pin)) { |
| 45 | + current |= bit; |
51 | 46 | } |
52 | | - common_hal_digitalio_digitalinout_set_value(self->latch_pin, 0); |
53 | | - self->pressed |= self->last & current; |
54 | | - self->last = current; |
| 47 | + common_hal_digitalio_digitalinout_set_value(self->clock_pin, 1); |
| 48 | + bit <<= 1; |
55 | 49 | } |
| 50 | + common_hal_digitalio_digitalinout_set_value(self->latch_pin, 0); |
| 51 | + self->pressed |= self->last & current; |
| 52 | + self->last = current; |
56 | 53 | } |
57 | 54 |
|
58 | 55 | void gamepadshift_reset(void) { |
|
0 commit comments