php-linux-gpio/README.md

78 lines
2.1 KiB
Markdown
Raw Normal View History

2014-06-06 14:00:34 +00:00
Linux Userspace GPIO Library
============================
* Export and Unexport GPIO pins
* Interrupt support (*)
2014-06-12 12:22:37 +00:00
* Hardware-neutral rewrite of NoccyLabs RaspIO
* Compatible with psr/logs LoggerInterface for logging
2014-06-06 14:00:34 +00:00
## Interrupts
2014-06-12 12:22:37 +00:00
*NOTE: Not implemented!*
2014-06-06 14:00:34 +00:00
For interrupts to work, you need to first bind the interrupt handler, and then
make sure to call on `Gpio#refresh()` every cycle to poll the interrupt flag on
2014-06-12 12:22:37 +00:00
the selected pins. This is because the `select()` function is used.
2014-06-06 14:00:34 +00:00
$gpio = new Gpio();
2014-06-12 12:22:37 +00:00
// Set the handler on the Gpio object
$gpio->setInterruptHandler($gpio[4], function() { ... });
// Or like this on the GpioPin.
$gpio[4]
->setEdge("rising")
->setHandler(function() { ... });
2014-06-06 14:00:34 +00:00
while (..) {
..
$gpio->refresh();
}
2014-06-12 12:22:37 +00:00
You can also be risky and use php ticks and timerfuncs (although that might not
be portable/supported/efficient/a good idea):
declare(ticks=5);
$gpio = new Gpio();
$gpiotick = new GpioTickHandler();
$gpiotick->registerGpio($gpio);
// The interrupts will now be polled approx every 5th php vm "tick"
2014-06-12 16:14:51 +00:00
## Devices
2014-06-12 12:22:37 +00:00
2014-06-12 16:14:51 +00:00
$lcd = new NoccyLabs\Gpio\Device\Display\Pcd8544Device;
// Set I/O pins
$lcd->res = $gpio[4];
$lcd->dc = $gpio[8];
...
// Activate the device
$lcd->activate();
// Clear and draw text
$lcd->clear();
$lcd->writeAt(0,0,"Hello World");
echo $lcd->getRows(); // 5
echo $lcd->getCols(); // 19
### LCD Bridge
The LCD bridge will be able to bridge any device class implementing `LcdDeviceInterface`
to stdin or a named pipe. This basically creates a user-space daemon to interface with
the display without having to fiddle with bits.
$ lcdbridge -t pcd8544 --stdin
CLR
LOC 0 0
FONT 0
OUT Hello World
^C
$
Commands should include:
* `CLR` clears the display (`LcdDeviceInterface#clear()`)
* `LOC n m` moves the cursor to line n column m (0-indexed) (`LcdDeviceInterface#setCursorPos(n,m)`)
* `FONT n` loads the default font (0) or a custom font file (`LcdDeviceInterface#setFont()`)
* `OUT` Write text to the display (`LcdDeviceInterface#write()`)