kopia lustrzana https://github.com/pimoroni/pimoroni-pico
Wakeup: Add shift register support.
rodzic
43ef76b945
commit
05d26aeecb
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
||||
}
|
|
@ -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
|
Ładowanie…
Reference in New Issue