Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
sysfs GPIO port driver and erlang module
C Erlang
tag: 1.0

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
c_src
ebin
priv
src
tetrapak
.gitignore
LICENSE
NEWAPI.txt
README.md
rebar.config
rebar.config.script

README.md

gpio

gpio is a device driver application for GPIO (General Purpose IO) written in erlang and C.

IO-pins are accessed either in a generic, Linux-based, way using control files or by direct memory acces.
Direct memory acces is currently implemented for the following processors:

  • bcm 2835 (Raspberry Pi)

Dependencies

To build gpio you will need a working installation of Erlang R15B (or later).
Information on building and installing Erlang/OTP can be found here (more info).

gpio is built using rebar that can be found here, with building instructions here.

Download

Clone the repository in a suitable location:

$ git clone git://github.com/Feuerlabs/gpio.git

Build

Rebar will compile all needed dependencies.
Compile:

$ cd gpio
$ rebar compile
...
==> gpio (compile)

Run

gpio is started in a standard erlang fashion:

$ erl
(node@host) 1> application:start(gpio).

API

The interface has the following functions for accessing a single pin:

  • init
  • init_direct
  • release
  • set
  • get
  • clr
  • input
  • output
  • set_direction
  • get_direction
  • set_interrupt
  • get_interrupt

The interface has the following functions for accessing several pins using a mask:

  • set_mask
  • get_mask
  • clr_mask

Example

An example on how to setup a gpio interrupt.

gpio:set_interrupt(25, falling),
receive 
    {gpio_interrupt, 0, 25, Value} ->
      io:format("pin 25, high to low\n")
end.

Given that the gpio application is started with the following config in environment (raspberry pi mode):

{gpio, [{options, [{chipset,bcm2835}]}]}

Then we can do some fast gpio access

gpio:init_direct(24),
gpio:set_direction(24, low),
gpio:set(24),
timer:sleep(1010),
gpio:clr(24),  
timer:sleep(2210),
ok.

This code will init pin 24 in direct access mode, using io registers instead of the normal linux /sys/class/gpio file interface. Then set pin 24 in output mode that default to a low output value. After that the pin is set to high for 1010 ms and then set to low again. (This is the power-on sequence for a SIM900 GPRS module).

For details see the generated documentation.

Documentation

gpio is documented using edoc. To generate the documentation do:

$ cd gpio
$ rebar doc

The result is a collection of html-documents under gpio/doc.

Something went wrong with that request. Please try again.