added an LED that turns on when the wrist is zeroed
diff --git a/bbb_cape/src/bbb/bbb.gyp b/bbb_cape/src/bbb/bbb.gyp
index 8efe553..1da4732 100644
--- a/bbb_cape/src/bbb/bbb.gyp
+++ b/bbb_cape/src/bbb/bbb.gyp
@@ -11,6 +11,16 @@
},
'targets': [
{
+ 'target_name': 'led',
+ 'type': 'static_library',
+ 'sources': [
+ 'led.cc',
+ ],
+ 'dependencies': [
+ '<(AOS)/build/aos.gyp:logging',
+ ],
+ },
+ {
'target_name': 'crc',
'type': 'static_library',
'sources': [
diff --git a/bbb_cape/src/bbb/gpios.h b/bbb_cape/src/bbb/gpios.h
index 1471b43..0ba3323 100644
--- a/bbb_cape/src/bbb/gpios.h
+++ b/bbb_cape/src/bbb/gpios.h
@@ -1,5 +1,5 @@
-#ifndef BBB_CAPE_SRC_BBB_CAPE_CONTROL_H_
-#define BBB_CAPE_SRC_BBB_CAPE_CONTROL_H_
+#ifndef BBB_CAPE_SRC_BBB_GPIOS_H_
+#define BBB_CAPE_SRC_BBB_GPIOS_H_
#include <stdio.h>
@@ -31,4 +31,4 @@
} // namespace bbb
-#endif
+#endif // BBB_CAPE_SRC_BBB_GPIOS_H_
diff --git a/bbb_cape/src/bbb/led.cc b/bbb_cape/src/bbb/led.cc
new file mode 100644
index 0000000..5dc5e71
--- /dev/null
+++ b/bbb_cape/src/bbb/led.cc
@@ -0,0 +1,60 @@
+#include "bbb_cape/src/bbb/led.h"
+
+#include "aos/common/logging/logging.h"
+
+#include <string.h>
+#include <errno.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) {
+ LOG(FATAL, "couldn't open trigger file for LED %d because of %d: %s\n",
+ number_, errno, strerror(errno));
+ }
+ if (fputs("none", trigger_handle) < 0) {
+ LOG(FATAL,
+ "writing 'none' to file %p (trigger for LED %d) failed with %d: %s\n",
+ trigger_handle, number_, errno, strerror(errno));
+ }
+ if (fclose(trigger_handle) == -1) {
+ LOG(WARNING, "fclose(%p) failed with %d: %s\n",
+ trigger_handle, errno, strerror(errno));
+ }
+
+ char brightness_path[64];
+ snprintf(brightness_path, sizeof(brightness_path),
+ DIRECTORY "brightness", number_);
+
+ brightness_handle_ = fopen(brightness_path, "w");
+ if (brightness_handle_ == nullptr) {
+ LOG(FATAL, "fopen('%s', 'w') failed with %d: %s\n",
+ brightness_path, errno, strerror(errno));
+ }
+}
+
+LED::~LED() {
+ if (fclose(brightness_handle_) == -1) {
+ LOG(WARNING, "fclose(%p) failed with %d: %s\n",
+ brightness_handle_, errno, strerror(errno));
+ }
+}
+
+void LED::Set(bool on) {
+ rewind(brightness_handle_);
+ if (fputs(on ? "255" : "0", brightness_handle_) == EOF) {
+ LOG(FATAL, "fputs(255|0, %p) for LED %d failed with %d: %s\n",
+ brightness_handle_, number_, errno, strerror(errno));
+ }
+ if (fflush(brightness_handle_) == EOF) {
+ LOG(FATAL, "fflush(%p) for LED %d failed with %d: %s\n",
+ brightness_handle_, number_, errno, strerror(errno));
+ }
+}
+
+} // namespace bbb
diff --git a/bbb_cape/src/bbb/led.h b/bbb_cape/src/bbb/led.h
new file mode 100644
index 0000000..19976e6
--- /dev/null
+++ b/bbb_cape/src/bbb/led.h
@@ -0,0 +1,27 @@
+#ifndef BBB_CAPE_SRC_BBB_LED_H_
+#define BBB_CAPE_SRC_BBB_LED_H_
+
+#include <stdio.h>
+
+#include "aos/common/macros.h"
+
+namespace bbb {
+
+// Allows easily controlling one of the LEDs.
+class LED {
+ public:
+ LED(int number);
+ ~LED();
+
+ void Set(bool on);
+
+ private:
+ FILE *brightness_handle_ = nullptr;
+ const int number_;
+
+ DISALLOW_COPY_AND_ASSIGN(LED);
+};
+
+} // namespace bbb
+
+#endif // BBB_CAPE_SRC_BBB_LED_H_