blob: df8139e7c77a35dbc79e63aa4b66ceb7053730fd [file] [log] [blame]
#include "bbb_cape/src/bbb/led.h"
#include "aos/common/logging/logging.h"
#include <string.h>
#define DIRECTORY "/sys/class/leds/beaglebone:green:usr%d/"
namespace bbb {
LED::LED(int number) : number_(number) {
char trigger_path[64];
snprintf(trigger_path, sizeof(trigger_path), DIRECTORY "trigger", number_);
FILE *trigger_handle = fopen(trigger_path, "w");
if (trigger_handle == nullptr) {
PLOG(FATAL, "couldn't open trigger file for LED %d", number_);
}
if (fputs("none", trigger_handle) < 0) {
PLOG(FATAL, "writing 'none' to file %p (trigger for LED %d) failed",
trigger_handle, number_);
}
if (fclose(trigger_handle) == -1) {
PLOG(WARNING, "fclose(%p) failed", trigger_handle);
}
char brightness_path[64];
snprintf(brightness_path, sizeof(brightness_path),
DIRECTORY "brightness", number_);
brightness_handle_ = fopen(brightness_path, "w");
if (brightness_handle_ == nullptr) {
PLOG(FATAL, "fopen('%s', 'w') failed", brightness_path);
}
}
LED::~LED() {
if (fclose(brightness_handle_) == -1) {
PLOG(WARNING, "fclose(%p) failed", brightness_handle_);
}
}
void LED::Set(bool on) {
rewind(brightness_handle_);
if (fputs(on ? "255" : "0", brightness_handle_) == EOF) {
PLOG(FATAL, "fputs(255|0, %p) for LED %d failed",
brightness_handle_, number_);
}
if (fflush(brightness_handle_) == EOF) {
PLOG(FATAL, "fflush(%p) for LED %d failed",
brightness_handle_, number_);
}
}
} // namespace bbb