Skip to content

Instantly share code, notes, and snippets.

@dotxnc
Created February 12, 2017 03:54
Show Gist options
  • Save dotxnc/642382217f2d1a314ff469c24cc60930 to your computer and use it in GitHub Desktop.
Save dotxnc/642382217f2d1a314ff469c24cc60930 to your computer and use it in GitHub Desktop.
--[[
--
-- This is a lua jit wiringpi interface through luajit.
-- it's slow. it's bad. but it works.
--
-- (c) 2016-2017 Lumaio
--
--]]
local ffi = require ("ffi")
ffi.cdef[[
enum output {
LOW,
HIGH
};
enum mode {
INPUT,
OUTPUT
};
/// wiringPi.h
int wiringPiSetup();
void pinModeAlt(int pin, int mode);
void pinMode(int pin, int mode);
int digitalRead(int pin);
void digitalWrite(int pin, int value);
int analogRead(int pin);
void analogWrite(int pin, int value);
void delay(unsigned int howLong);
void delayMicroseconds(unsigned int howLong);
unsigned int millis();
unsigned int micros();
// wiringPiI2C.h
int wiringPiI2CRead (int fd);
int wiringPiI2CReadReg8 (int fd, int reg);
int wiringPiI2CReadReg16 (int fd, int reg);
int wiringPiI2CWrite (int fd, int data);
int wiringPiI2CWriteReg8 (int fd, int reg, int data);
int wiringPiI2CWriteReg16 (int fd, int reg, int data);
int wiringPiI2CSetupInterface(const char* device, int devId);
int wiringPiI2CSetup(const int devId);
]]
-- load symnols from wiringPi.so
local wiringlua = {_internal={}, timer={}, i2c={}}
wiringlua._internal.lib = ffi.load("wiringPi")
-- functions for wiring pi
function wiringlua.setup()
wiringlua.low = wiringlua._internal.lib.LOW
wiringlua.high = wiringlua._internal.lib.HIGH
wiringlua.input = wiringlua._internal.lib.INPUT
wiringlua.output = wiringlua._internal.lib.OUTPUT
return wiringlua._internal.lib.wiringPiSetup()
end
function wiringlua.setMode(pin, mode)
wiringlua._internal.lib.pinMode(pin, mode)
end
function wiringlua.write(pin, mode)
wiringlua._internal.lib.digitalWrite(pin, mode)
end
function wiringlua.read(pin)
return wiringlua._internal.lib.digitalRead(pin)
end
function wiringlua.analogWrite(pin, data)
wiringlua._internal.lib.analogWrite(pin, data)
end
function wiringlua.analogRead(pin)
return wiringlua._internal.lib.analogRead(pin)
end
-- timing functions
function wiringlua.timer.delay(time)
wiringlua._internal.lib.delay(time)
end
function wiringlua.timer.delayMicro(time)
wiringlua._internal.lib.delayMicroseconds(time)
end
function wiringlua.timer.getMillis()
return wiringlua._internal.lib.millis()
end
function wiringlua.timer.getMicros()
return wiringlua._internal.lib.micros()
end
-- i2c functions
function wiringlua.i2c.read(fd)
return wiringlua._internal.lib.wiringPiI2CRead(fd)
end
function wiringlua.i2c.read8(fd, reg)
return wiringlua._internal.lib.wiringPiI2CReadReg8(fd, reg)
end
function wiringlua.i2c.read16(fd, reg)
return wiringlua._internal.lib.wiringPiI2CReadReg16(fd, reg)
end
function wiringlua.i2c.write(fd, data)
return wiringlua._internal.lib.wiringPiI2CWrite(fd, data)
end
function wiringlua.i2c.write8(fd, reg, data)
return wiringlua._internal.lib.wiringPiI2CWriteReg8(fd, reg, data)
end
function wiringlua.i2c.write16(fd, reg, data)
return wiringlua._internal.lib.wiringPiI2CWriteReg16(fd, reg, data)
end
function wiringlua.i2c.interface(device, id)
return wiringlua._internal.lib.wiringPiI2CSetupInterface(device, id)
end
function wiringlua.i2c.setup(id)
return wiringlua._internal.lib.wiringPiI2CSetup(id)
end
return wiringlua
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment