| @ -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; | |||||
| } | |||||