Linux Userspace GPIO Library ============================ * Export and Unexport GPIO pins * Interrupt support (*) * Hardware-neutral rewrite of NoccyLabs RaspIO * Compatible with psr/logs LoggerInterface for logging ## Interrupts *NOTE: Not implemented!* 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 the selected pins. This is because the `select()` function is used. $gpio = new Gpio(); // Set the handler on the Gpio object $gpio->setInterruptHandler($gpio[4], function() { ... }); // Or like this on the GpioPin. $gpio[4] ->setEdge("rising") ->setHandler(function() { ... }); while (..) { .. $gpio->refresh(); } 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" ## Devices $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()`)