Created
February 12, 2017 03:54
-
-
Save dotxnc/642382217f2d1a314ff469c24cc60930 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--[[ | |
-- | |
-- 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