|
|
@ -0,0 +1,97 @@ |
|
|
|
/*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; |
|
|
|
} |