Skip to content

Commit e009ab0

Browse files
robert-hhdpgeorge
authored andcommitted
esp8266/machine_pin: Implement Pin.toggle() method.
Tested with a generic ESP8266 device. The actual output value is taken from the output register, not by reading the pad level. Signed-off-by: robert-hh <robert@hammelrath.com>
1 parent 61cb293 commit e009ab0

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

ports/esp8266/esp_mphal.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,13 @@ void mp_hal_pin_open_drain(mp_hal_pin_obj_t pin);
100100
else { gpio_output_set(1 << (p), 0, 1 << (p), 0); } \
101101
} while (0)
102102
#define mp_hal_pin_read(p) pin_get(p)
103+
static inline int mp_hal_pin_read_output(mp_hal_pin_obj_t pin) {
104+
if (pin >= 16) {
105+
return READ_PERI_REG(RTC_GPIO_OUT) & 1;
106+
} else {
107+
return (GPIO_REG_READ(GPIO_OUT_ADDRESS) >> pin) & 1;
108+
}
109+
}
103110
#define mp_hal_pin_write(p, v) pin_set((p), (v))
104111

105112
void *ets_get_esf_buf_ctlblk(void);

ports/esp8266/machine_pin.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,14 @@ static mp_obj_t pyb_pin_on(mp_obj_t self_in) {
373373
}
374374
static MP_DEFINE_CONST_FUN_OBJ_1(pyb_pin_on_obj, pyb_pin_on);
375375

376+
// pin.toggle()
377+
static mp_obj_t machine_pin_toggle(mp_obj_t self_in) {
378+
pyb_pin_obj_t *self = self_in;
379+
pin_set(self->phys_port, 1 - mp_hal_pin_read_output(self->phys_port));
380+
return mp_const_none;
381+
}
382+
static MP_DEFINE_CONST_FUN_OBJ_1(machine_pin_toggle_obj, machine_pin_toggle);
383+
376384
// pin.irq(handler=None, trigger=IRQ_FALLING|IRQ_RISING, hard=False)
377385
static mp_obj_t pyb_pin_irq(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
378386
enum { ARG_handler, ARG_trigger, ARG_hard };
@@ -435,6 +443,7 @@ static const mp_rom_map_elem_t pyb_pin_locals_dict_table[] = {
435443
{ MP_ROM_QSTR(MP_QSTR_value), MP_ROM_PTR(&pyb_pin_value_obj) },
436444
{ MP_ROM_QSTR(MP_QSTR_off), MP_ROM_PTR(&pyb_pin_off_obj) },
437445
{ MP_ROM_QSTR(MP_QSTR_on), MP_ROM_PTR(&pyb_pin_on_obj) },
446+
{ MP_ROM_QSTR(MP_QSTR_toggle), MP_ROM_PTR(&machine_pin_toggle_obj) },
438447
{ MP_ROM_QSTR(MP_QSTR_irq), MP_ROM_PTR(&pyb_pin_irq_obj) },
439448

440449
// class constants

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy