LEDs brightness is now only updated if the value actually changed, thus reducing
the number of fwrite syscalls significantly.

Signed-off-by: Daniel Golle <[email protected]>
---
 package/network/utils/rssileds/Makefile       |  2 +-
 package/network/utils/rssileds/src/rssileds.c | 58 ++++++++++++++++-----------
 2 files changed, 35 insertions(+), 25 deletions(-)

diff --git a/package/network/utils/rssileds/Makefile 
b/package/network/utils/rssileds/Makefile
index 8e292df..b572eac 100644
--- a/package/network/utils/rssileds/Makefile
+++ b/package/network/utils/rssileds/Makefile
@@ -8,7 +8,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=rssileds
-PKG_VERSION:=0.1
+PKG_VERSION:=0.2
 PKG_RELEASE:=1
 
 include $(INCLUDE_DIR)/package.mk
diff --git a/package/network/utils/rssileds/src/rssileds.c 
b/package/network/utils/rssileds/src/rssileds.c
index 2f25c84..60d30f1 100644
--- a/package/network/utils/rssileds/src/rssileds.c
+++ b/package/network/utils/rssileds/src/rssileds.c
@@ -70,6 +70,32 @@ void log_rules(rule_t *rules)
        }
 }
 
+int set_led(struct led *led, unsigned char value)
+{
+       char buf[8];
+
+       if ( ! led )
+               return -1;
+
+       if ( ! led->controlfd )
+               return -1;
+
+       if ( led->state == value )
+               return 0;
+
+       snprintf(buf, 8, "%d", value);
+
+       rewind(led->controlfd);
+
+       if ( ! fwrite(buf, sizeof(char), strlen(buf), led->controlfd) )
+               return -2;
+
+       fflush(led->controlfd);
+       led->state=value;
+
+       return 0;
+}
+
 int init_led(struct led **led, char *ledname)
 {
        struct led *newled;
@@ -102,8 +128,15 @@ int init_led(struct led **led, char *ledname)
 
        newled->sysfspath = bp;
        newled->controlfd = bfp;
-       
+
        *led = newled;
+
+       if ( set_led(newled, 255) )
+               goto cleanup_fp;
+
+       if ( set_led(newled, 0) )
+               goto cleanup_fp;
+
        return 0;
 
 cleanup_fp:
@@ -124,29 +157,6 @@ void close_led(struct led **led)
        (*led)=NULL;
 }
 
-int set_led(struct led *led, unsigned char value)
-{
-       char buf[8];
-
-       if ( ! led )
-               return -1;
-
-       if ( ! led->controlfd )
-               return -1;
-
-       snprintf(buf, 8, "%d", value);
-
-       rewind(led->controlfd);
-
-       if ( ! fwrite(buf, sizeof(char), strlen(buf), led->controlfd) )
-               return -2;
-
-       fflush(led->controlfd);
-       led->state=value;
-
-       return 0;
-}
-
 
 int quality(const struct iwinfo_ops *iw, const char *ifname)
 {
-- 
1.7.12.2

Attachment: pgpQeuaF1KCL6.pgp
Description: PGP signature

_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to