/*OOP in C++ example for LEDs */
|
|
#include<iostream>
|
|
#include<fstream>
|
|
#include<string>
|
|
#include<sstream>
|
|
using namespace std;
|
|
|
|
#define LED_PATH "/sys/class/leds/beaglebone:green:usr"
|
|
|
|
class LED{
|
|
private:
|
|
string path;
|
|
int number;
|
|
virtual void writeLED(string filename, string value);
|
|
virtual void removeTrigger();
|
|
public:
|
|
LED(int number);
|
|
virtual void turnOn();
|
|
virtual void turnOff();
|
|
virtual void flash(string delayms);
|
|
virtual void outputState();
|
|
virtual ~LED();
|
|
};
|
|
|
|
LED::LED(int number){
|
|
this->number = number;
|
|
ostringstream s;
|
|
s << LED_PATH << number; // LED number to the Path
|
|
path = string(s.str()); // convert to string
|
|
}
|
|
|
|
void LED::writeLED(string filename, string value){
|
|
ofstream fs;
|
|
fs.open((path + filename).c_str());
|
|
fs << value;
|
|
fs.close();
|
|
}
|
|
|
|
void LED::removeTrigger(){
|
|
writeLED("/trigger", "none");
|
|
}
|
|
|
|
void LED::turnOn(){
|
|
cout << "Turning LED" << number << "on" << endl;
|
|
removeTrigger();
|
|
writeLED("/brightness", "1");
|
|
}
|
|
|
|
void LED::turnOff(){
|
|
cout << "Turning LED" << number << "off" << endl;
|
|
removeTrigger();
|
|
writeLED("/brightness", "0");
|
|
}
|
|
|
|
void LED::flash(string delayms ="50"){
|
|
cout << "Making LED" << number << "flash" << endl;
|
|
writeLED("/trigger", "timer");
|
|
writeLED("/delay_on", delayms);
|
|
writeLED("/delay_off", delayms);
|
|
}
|
|
|
|
void LED::outputState(){
|
|
ifstream fs;
|
|
fs.open((path + "/trigger").c_str());
|
|
string line;
|
|
while(getline(fs,line)) cout << line <<endl;
|
|
fs.close();
|
|
}
|
|
|
|
LED::~LED(){
|
|
cout << "!!Destroying the LED with path: " << path << endl;
|
|
}
|
|
|
|
int main(int argc, char* argv[]){
|
|
if(argc!=2){
|
|
cout << "The usage is main <command>" << endl;
|
|
cout << "<command> is on, off flash or status" << endl;
|
|
cout << "e.g. main on" << endl;
|
|
}
|
|
cout << "Starting program ..." << endl;
|
|
string cmd(argv[1]);
|
|
LED leds[4] = {LED(0), LED(1), LED(2), LED(3)};
|
|
for(int i=0; i<=3; i++){
|
|
if(cmd=="on")
|
|
leds[i].turnOn();
|
|
else if(cmd=="off")
|
|
leds[i].turnOff();
|
|
else if(cmd=="flash")
|
|
leds[i].flash("100");
|
|
else if(cmd=="status")
|
|
leds[i].outputState();
|
|
else
|
|
cout << "invalid command, please type main" << endl;
|
|
}
|
|
cout << "Program done, Thanks." << endl;
|
|
return 0;
|
|
}
|