Here is the code:
gpio.cpp
- Code: Select all
#include <stdio.h>
#include "gpio.h"
/******** GPIO ***********/
PinOut GPIO::setOutput(int pinId){
PinOut pin(pinId);
return pin;
}
PinIn GPIO::setInput(int pinId){
PinIn pin(pinId);
return pin;
}
/*********** Pin **********/
Pin::Pin(int pinId){
this->pinId = pinId;
this->exportPin();
}
Pin::~Pin(void){
this->unexportPin();
}
bool Pin::state(void){
int state = 0;
char dir[50];
sprintf(dir,"/sys/class/gpio/gpio%d/value", pinId);
FILE *file;
file = fopen(dir, "r");
fscanf (file, "%d", &state);
fclose (file);
return (bool)state;
}
void Pin::exportPin(void){
FILE *file;
file = fopen("/sys/class/gpio/export", "w");
fprintf(file,"%d",this->pinId);
fclose(file);
}
void Pin::unexportPin(void){
FILE *file;
file = fopen("/sys/class/gpio/unexport", "w");
fprintf(file,"%d",this->pinId);
fclose(file);
}
/******** PinOut ************/
PinOut::PinOut(int pinid):Pin(pinid){
Pin pin(pinId);
char dir[50];
sprintf(dir, "/sys/class/gpio/gpio%d/direction", pinId);
FILE *file;
file = fopen(dir, "w");
fprintf(file,"out");
fclose(file);
}
void PinOut::setPin(void){
char dir[50];
sprintf(dir, "/sys/class/gpio/gpio%d/value", this->pinId);
FILE *file;
file = fopen(dir, "w");
fprintf(file,"1");
fclose(file);
}
void PinOut::clearPin(void){
char dir[50];
sprintf(dir, "/sys/class/gpio/gpio%d/value", this->pinId);
FILE *file;
file = fopen(dir, "w");
fprintf(file,"0");
fclose(file);
}
void PinOut::writePin(bool val){
char dir[50];
sprintf(dir, "/sys/class/gpio/gpio%d/value", this->pinId);
FILE *file;
file = fopen(dir, "w");
fprintf(file,"%d",val);
fclose(file);
}
void PinOut::togglePin(void){
//int newstate = !
this->writePin((int)~this->state());
}
/********* PinIn ***********/
PinIn::PinIn(int pinid):Pin(pinid){
Pin pin(pinId);
char dir[50];
sprintf(dir, "/sys/class/gpio/gpio%d/direction", pinId);
FILE *file;
file = fopen(dir, "w");
fprintf(file,"in");
fclose(file);
}
gpio.h
- Code: Select all
#ifndef gpio
#define gpio
typedef enum {GPIO0, GPIO1, GPIO2, GPIO3, GPIO4, GPIO5, GPIO6, GPIO7, GPIO8, GPIO9, GPIO10, GPIO11, GPIO12, GPIO13, GPIO14, GPIO15, GPIO16, GPIO17, GPIO18, GPIO19, GPIO20, GPIO21, GPIO22, GPIO23, GPIO24, GPIO25, GPIO26, GPIO27, GPIO28, GPIO29, GPIO30, GPIO31, GPIO32, GPIO33, GPIO34, GPIO35, GPIO36, GPIO37, GPIO38, GPIO39, GPIO41, GPIO42, GPIO43, GPIO44 } PinId;
class Pin{
public:
bool state(void);
Pin(int pinId);
~Pin(void);
protected:
void exportPin(void);
void unexportPin(void);
int pinId;
};
class PinOut: public Pin{
public:
void setPin(void);
void writePin(bool val);
void clearPin(void);
void togglePin(void);
PinOut(int pinid);
};
class PinIn: public Pin{
public:
void setPin(void);
void clearPin(void);
void togglePin(void);
PinIn(int pinId);
};
class GPIO{
public:
static PinOut setOutput(int pinId);
static PinIn setInput(int pinId);
};
#endif
main.c
- Code: Select all
#include <stdio.h>
#include "gpio.h"
int main(void){
PinOut led = GPIO::setOutput(GPIO41);
led.togglePin();
return 0;
}