rssileds: improve performance
LEDs brightness is now only updated if the value actually changed, thus reducing the number of fwrite syscalls significantly. Signed-off-by: Daniel Golle <dgolle@allnet.de> SVN-Revision: 33766
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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) | ||||
| { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Florian Fainelli
					Florian Fainelli