Here is my sample code for it. Hope it does the trick for you. Any
questions, feel free to ask. Developed for Angstrom C. It's messy but
it works.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define UNEXPORT fopen( "/sys/class/gpio/unexport",
"w" )
#define EXPORT fopen( "/sys/class/gpio/export", "w" )
#define GSTRING( s, i, g ) sprintf( s, "/sys/class/gpio/gpio%d
%s", i, g );
#define GDIRECTION "/direction"
#define GVALUE "/value"
#define GOPEN( s ) fopen( (s), "w" )
int gpio_init ( int pin )
{
FILE *p = NULL;
char gpio[50];
if( ( p = EXPORT ) == NULL )
{
printf( "Problem opening gpio%d\n", pin );
return -1;
}
fprintf( p, "%d", pin );
fclose( p );
GSTRING( gpio, pin, GDIRECTION );
if( ( p = GOPEN( gpio ) ) == NULL )
{
printf( "Problem opening gpio%d\n %s\n", pin, gpio );
return -1;
}
fprintf( p, "out");
fclose( p );
return 0;
}
int gpio_clean ( int pin )
{
FILE *p = NULL;
if( ( p = UNEXPORT) == NULL )
{
printf( "Problem closing gpio%d\n", pin );
return -1;
}
fprintf( p, "%d", pin );
fclose( p );
return 0;
}
int gpio_control ( int pin, int value )
{
FILE *p = NULL;
char gpio[50];
GSTRING( gpio, pin, GVALUE );
if( ( p = GOPEN( gpio ) ) == NULL )
{
printf( "Problem controlling gpio%d\n", pin );
return -1;
}
fprintf( p , "%d", value );
pclose( p );
}