require "sys" module(..., package.seeall) local interruptCallbacks = {} local dirs = {} function setup(pin, val, pull) pio.pin.close(pin) if type(val) == "function" then pio.pin.setdir(pio.INT, pin) if pull then pio.pin.setpull(pull or pio.PULLUP, pin) end interruptCallbacks[pin] = val dirs[pin] = false return function() return pio.pin.getval(pin) end end if val ~= nil then dirs[pin] = true pio.pin.setdir(val == 1 and pio.OUTPUT1 or pio.OUTPUT, pin) else dirs[pin] = false pio.pin.setdir(pio.INPUT, pin) if pull then pio.pin.setpull(pull or pio.PULLUP, pin) end end return function(val) val = tonumber(val) if (not val and dirs[pin]) or (val and not dirs[pin]) then pio.pin.close(pin) pio.pin.setdir(val and (val == 1 and pio.OUTPUT1 or pio.OUTPUT) or pio.INPUT, pin) if not val and pull then pio.pin.setpull(pull or pio.PULLUP, pin) end dirs[pin] = val and true or false return val or pio.pin.getval(pin) end if val then pio.pin.setval(val, pin) return val else return pio.pin.getval(pin) end end end function close(pin) pio.pin.close(pin) end rtos.on(rtos.MSG_INT, function(msg) if interruptCallbacks[msg.int_resnum] == nil then log.warn('pins.rtos.on', 'warning:rtos.MSG_INT callback nil', msg.int_resnum) return end interruptCallbacks[msg.int_resnum](msg.int_id) end) IOMUX_GPIO0 = 0 IOMUX_GPIO1 = 1 IOMUX_GPIO2 = 2 IOMUX_GPIO3 = 3 IOMUX_GPIO4 = 4 IOMUX_GPIO5 = 5 IOMUX_GPIO8 = 8 IOMUX_GPIO9 = 9 IOMUX_GPIO10 = 10 IOMUX_GPIO11 = 11 IOMUX_GPIO12 = 12 IOMUX_GPIO13 = 13 IOMUX_GPIO14 = 14 IOMUX_GPIO15 = 15 IOMUX_GPIO18 = 18 IOMUX_GPIO19 = 19 IOMUX_GPIO20 = 20 IOMUX_GPIO21 = 21 IOMUX_GPIO22 = 22 IOMUX_GPIO23 = 23 IOMUX_GPIO29 = 29 IOMUX_GPIO30 = 30 IOMUX_GPIO31 = 31 IOMUX_USART_1 = 57 IOMUX_USART_2 = 58 IOMUX_USART_3 = 59 IOMUX_I2C_2 = 67 IOMUX_I2C_3 = 68