Wakeup: Add shift register support.

patch/inky_build
ZodiusInfuser 2022-12-08 12:02:46 +00:00 zatwierdzone przez Phil Howard
rodzic 43ef76b945
commit 05d26aeecb
6 zmienionych plików z 71 dodań i 3 usunięć

Wyświetl plik

@ -73,7 +73,7 @@ jobs:
- name: picow_galactic_unicorn
board: PICO_W
- name: picow_inky_frame
board: PICO_W
board: PICO_W_INKY
env:
# MicroPython version will be contained in github.event.release.tag_name for releases

Wyświetl plik

@ -99,4 +99,9 @@
#define CYW43_WL_GPIO_LED_PIN 0
#endif
#ifdef WAKEUP_HAS_SHIFT_REGISTER
#undef WAKEUP_HAS_SHIFT_REGISTER
#endif
#define WAKEUP_HAS_SHIFT_REGISTER (1)
#endif

Wyświetl plik

@ -1,10 +1,16 @@
#include "wakeup.h"
STATIC MP_DEFINE_CONST_FUN_OBJ_0(Wakeup_get_gpio_state_obj, Wakeup_get_gpio_state);
#if WAKEUP_HAS_SHIFT_REGISTER==1
STATIC MP_DEFINE_CONST_FUN_OBJ_0(Wakeup_get_shift_state_obj, Wakeup_get_shift_state);
#endif
STATIC const mp_map_elem_t wakeup_globals_table[] = {
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_wakeup) },
{ MP_ROM_QSTR(MP_QSTR_get_gpio_state), MP_ROM_PTR(&Wakeup_get_gpio_state_obj) }
{ MP_ROM_QSTR(MP_QSTR_get_gpio_state), MP_ROM_PTR(&Wakeup_get_gpio_state_obj) },
#if WAKEUP_HAS_SHIFT_REGISTER==1
{ MP_ROM_QSTR(MP_QSTR_get_shift_state), MP_ROM_PTR(&Wakeup_get_shift_state_obj) }
#endif
};
STATIC MP_DEFINE_CONST_DICT(mp_module_wakeup_globals, wakeup_globals_table);

Wyświetl plik

@ -19,6 +19,10 @@
#define WAKEUP_HAS_RTC (1)
#endif
#ifndef WAKEUP_HAS_SHIFT_REGISTER
#define WAKEUP_HAS_SHIFT_REGISTER (0)
#endif
#ifndef WAKEUP_RTC_SDA
#define WAKEUP_RTC_SDA (4)
#endif
@ -33,4 +37,29 @@
#ifndef WAKEUP_RTC_I2C_INST
#define WAKEUP_RTC_I2C_INST i2c0
#endif
// Pins to toggle on wakeup
#ifndef WAKEUP_SHIFT_REG_PIN_MASK
#define WAKEUP_SHIFT_REG_PIN_MASK ((0b1 << 8) | (0b1 << 9) | (0b1 << 10))
#endif
// Direction
#ifndef WAKEUP_SHIFT_REG_PIN_DIR
#define WAKEUP_SHIFT_REG_PIN_DIR ((0b1 << 8) | (0b1 << 9))
#endif
// Value
#ifndef WAKEUP_SHIFT_REG_PIN_VALUE
#define WAKEUP_SHIFT_REG_PIN_VALUE ((0b1 << 9))
#endif
// Clock
#ifndef WAKEUP_SHIFT_REG_CLK
#define WAKEUP_SHIFT_REG_CLK (8)
#endif
// Data
#ifndef WAKEUP_SHIFT_REG_DATA
#define WAKEUP_SHIFT_REG_DATA (10)
#endif

Wyświetl plik

@ -6,6 +6,8 @@ extern uint32_t runtime_wakeup_gpio_state;
namespace {
struct Wakeup {
public:
uint8_t shift_register_state = 0b0;
Wakeup() {
// Assert wakeup pins (indicator LEDs, VSYS hold etc)
//gpio_init_mask(WAKEUP_PIN_MASK);
@ -30,6 +32,23 @@ namespace {
gpio_init(WAKEUP_RTC_SDA);
gpio_init(WAKEUP_RTC_SCL);
#endif
#if WAKEUP_HAS_SHIFT_REGISTER==1
// Assert shift register pins (indicator LEDs, VSYS hold etc)
gpio_init_mask(WAKEUP_SHIFT_REG_PIN_MASK);
gpio_set_dir_masked(WAKEUP_SHIFT_REG_PIN_MASK, WAKEUP_SHIFT_REG_PIN_DIR);
gpio_put_masked(WAKEUP_SHIFT_REG_PIN_MASK, WAKEUP_SHIFT_REG_PIN_VALUE);
uint8_t state = 0u;
for(auto i = 0u; i < 8; i++) {
if(gpio_get(WAKEUP_SHIFT_REG_DATA)) {
state |= (0b1 << i);
}
gpio_put(WAKEUP_SHIFT_REG_CLK, true);
gpio_put(WAKEUP_SHIFT_REG_CLK, false);
}
shift_register_state = state;
#endif
}
};
@ -43,4 +62,10 @@ mp_obj_t Wakeup_get_gpio_state() {
return mp_obj_new_int(runtime_wakeup_gpio_state);
}
#if WAKEUP_HAS_SHIFT_REGISTER==1
mp_obj_t Wakeup_get_shift_state() {
return mp_obj_new_int(wakeup.shift_register_state);
}
#endif
}

Wyświetl plik

@ -1,4 +1,7 @@
#include "py/runtime.h"
#include "py/objstr.h"
extern mp_obj_t Wakeup_get_gpio_state();
extern mp_obj_t Wakeup_get_gpio_state();
#if WAKEUP_HAS_SHIFT_REGISTER==1
extern mp_obj_t Wakeup_get_shift_state();
#endif