From owner-freebsd-acpi@FreeBSD.ORG Tue May 25 13:13:42 2004 Return-Path: Delivered-To: freebsd-acpi@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 041DF16A4CE for ; Tue, 25 May 2004 13:13:42 -0700 (PDT) Received: from moutvdomng.kundenserver.de (moutvdom.kundenserver.de [212.227.126.249]) by mx1.FreeBSD.org (Postfix) with ESMTP id E03EF43D49 for ; Tue, 25 May 2004 13:13:40 -0700 (PDT) (envelope-from liamfoy@sepulcrum.org) Received: from [212.227.126.224] (helo=mrvdomng.kundenserver.de) by moutvdomng.kundenserver.de with esmtp (Exim 3.35 #1) id 1BSiIZ-0004y1-00 for freebsd-acpi@freebsd.org; Tue, 25 May 2004 22:13:19 +0200 Received: from [217.43.131.157] (helo=liamfoy.ath.cx) by mrvdomng.kundenserver.de with esmtp (Exim 3.35 #1) id 1BSiIZ-000849-00 for freebsd-acpi@freebsd.org; Tue, 25 May 2004 22:13:19 +0200 Date: Tue, 25 May 2004 21:12:20 +0100 From: "Liam J. Foy" To: freebsd-acpi@freebsd.org Message-Id: <20040525211220.6f349011.liamfoy@sepulcrum.org> X-Mailer: Sylpheed version 0.9.10 (GTK+ 1.2.10; i386-portbld-freebsd5.2) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: APM Patch - review X-BeenThere: freebsd-acpi@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: ACPI and power management development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 25 May 2004 20:13:42 -0000 Hey guys, Just writing to request your views on a patch I have wrote for apm. This patch makes sure single options such as apm -l have their values checked. The print_all_info function seems to do this, so I imagine it should be done for single options also. The single options will return 255 when device is unsupported, -1 when an invalid value and anything else is the correct value. I would love any feedback. Thanks guys, Liam Foy --- /usr/src/usr.sbin/apm/apm.c Sat May 22 17:18:57 2004 +++ /hd3/apm/apm.c Tue May 25 20:24:39 2004 @@ -33,6 +33,8 @@ #include #define APMDEV "/dev/apm" +#define UNKNOWN 255 /* Unknown/unsupported by device */ +#define INVALID -1 /* We return -1 on invalid values for single options */ #define xh(a) (((a) & 0xff00) >> 8) #define xl(a) ((a) & 0xff) @@ -143,55 +145,137 @@ } } -void -print_all_info(int fd, apm_info_t aip, int bioscall_available) +void +print_batt_acline(u_int acline, int return_choice) { - struct apm_bios_arg args; - int apmerr; - - printf("APM version: %d.%d\n", aip->ai_major, aip->ai_minor); - printf("APM Management: %s\n", (aip->ai_status ? "Enabled" : "Disabled")); - printf("AC Line status: "); - if (aip->ai_acline == 255) - printf("unknown"); - else if (aip->ai_acline > 1) - printf("invalid value (0x%x)", aip->ai_acline); + if (acline == UNKNOWN) + if (return_choice) + printf("unknown\n"); + else + printf("%d\n", UNKNOWN); + else if (acline > 1) + if (return_choice) + printf("invalid value 0x%x (%d)\n", acline, acline); + else + printf("%d\n", INVALID); else { - char *messages[] = { "off-line", "on-line" }; - printf("%s", messages[aip->ai_acline]); + if (return_choice) { + char *messages[] = { "off-line", "on-line" }; + printf("%s\n", messages[acline]); + } else + printf("%d\n", acline); } - printf("\n"); - printf("Battery status: "); - if (aip->ai_batt_stat == 255) - printf("unknown"); - else if (aip->ai_batt_stat > 3) - printf("invalid value (0x%x)", aip->ai_batt_stat); +} + +void +print_batt_stat(u_int batt_stat, int return_choice) +{ + if (batt_stat == UNKNOWN) + if (return_choice) + printf("unknown\n"); + else + printf("%d\n", UNKNOWN); + else if (batt_stat > 3) + if (return_choice) + printf("invalid value 0x%x (%d)\n", batt_stat, batt_stat); + else + printf("%d\n", INVALID); else { - char *messages[] = { "high", "low", "critical", "charging" }; - printf("%s", messages[aip->ai_batt_stat]); + if (return_choice) { + char *messages[] = { "high", "low", "critical", "charging" }; + printf("%s\n", messages[batt_stat]); + } else + printf("%d\n", batt_stat); } - printf("\n"); - printf("Remaining battery life: "); - if (aip->ai_batt_life == 255) - printf("unknown\n"); - else if (aip->ai_batt_life <= 100) - printf("%d%%\n", aip->ai_batt_life); +} + +void +print_batt_life(u_int batt_life, int return_choice) +{ + if (batt_life == UNKNOWN) + if (return_choice) + printf("unknown\n"); + else + printf("%d\n", UNKNOWN); + else if (batt_life >= 0 && batt_life <= 100) + if (return_choice) + printf("%d%%\n", batt_life); + else + printf("%d\n", batt_life); else - printf("invalid value (0x%x)\n", aip->ai_batt_life); - printf("Remaining battery time: "); - if (aip->ai_batt_time == -1) - printf("unknown\n"); + if (return_choice) + printf("invalid value 0x%x (%d)\n", batt_life, batt_life); + else + printf("%d\n", INVALID); +} + +void +print_batt_time(int time_seconds,int return_choice) +{ + if (time_seconds == -1) + if (return_choice) + printf("unknown\n"); + else + printf("%d\n", UNKNOWN); else { int t, h, m, s; - - t = aip->ai_batt_time; + + t = time_seconds; s = t % 60; t /= 60; m = t % 60; t /= 60; h = t; - printf("%2d:%02d:%02d\n", h, m, s); + + if (return_choice) + printf("%2d:%02d:%02d\n", h, m, s); + else + printf("%d\n", time_seconds); } +} + +void +print_apm_status(u_int apm_status, int return_choice) +{ + if (apm_status == 1) + if (return_choice) + printf("enabled\n"); + else + printf("%d\n", apm_status); + else if (apm_status == 0) + if(return_choice) + printf("disabled\n"); + else + printf("%d\n", apm_status); + else + if (return_choice) + printf("invalid value 0x%x (%d)\n", apm_status, apm_status); + else + printf("%d\n", INVALID); +} + +void +print_all_info(int fd, apm_info_t aip, int bioscall_available) +{ + struct apm_bios_arg args; + int apmerr; + + printf("APM version: %d.%d\n", aip->ai_major, aip->ai_minor); + printf("APM Management: "); + print_apm_status(aip->ai_status, 1); + + printf("AC Line status: "); + print_batt_acline(aip->ai_acline, 1); + + printf("Battery status: "); + print_batt_stat(aip->ai_batt_stat, 1); + + printf("Remaining battery life: "); + print_batt_life(aip->ai_batt_life, 1); + + printf("Remaining battery time: "); + print_batt_time(aip->ai_batt_time, 1); + if (aip->ai_infoversion >= 1) { printf("Number of batteries: "); if (aip->ai_batteries == (u_int) -1) @@ -208,46 +292,19 @@ continue; printf("Battery %d:\n", i); printf("\tBattery status: "); - if (aps.ap_batt_flag != 255 && + if (aps.ap_batt_flag != UNKNOWN && (aps.ap_batt_flag & APM_BATT_NOT_PRESENT)) { printf("not present\n"); continue; } - if (aps.ap_batt_stat == 255) - printf("unknown\n"); - else if (aps.ap_batt_stat > 3) - printf("invalid value (0x%x)\n", - aps.ap_batt_stat); - else { - char *messages[] = { "high", - "low", - "critical", - "charging" }; - printf("%s\n", - messages[aps.ap_batt_stat]); - } + + print_batt_stat(aps.ap_batt_stat, 1); + printf("\tRemaining battery life: "); - if (aps.ap_batt_life == 255) - printf("unknown\n"); - else if (aps.ap_batt_life <= 100) - printf("%d%%\n", aps.ap_batt_life); - else - printf("invalid value (0x%x)\n", - aps.ap_batt_life); + print_batt_life(aps.ap_batt_life, 1); + printf("\tRemaining battery time: "); - if (aps.ap_batt_time == -1) - printf("unknown\n"); - else { - int t, h, m, s; - - t = aps.ap_batt_time; - s = t % 60; - t /= 60; - m = t % 60; - t /= 60; - h = t; - printf("%2d:%02d:%02d\n", h, m, s); - } + print_batt_time(aps.ap_batt_time, 1); } } } @@ -496,19 +553,18 @@ if (all_info) print_all_info(fd, &info, bioscall_available); if (ac_status) - printf("%d\n", info.ai_acline); + print_batt_acline(info.ai_acline, 0); if (batt_status) - printf("%d\n", info.ai_batt_stat); + print_batt_stat(info.ai_batt_stat, 0); if (batt_life) - printf("%d\n", info.ai_batt_life); + print_batt_life(info.ai_batt_life, 0); if (apm_status) - printf("%d\n", info.ai_status); + print_apm_status(info.ai_status, 0); if (batt_time) - printf("%d\n", info.ai_batt_time); + print_batt_time(info.ai_batt_time, 0); if (display != -1) apm_display(fd, display); } close(fd); exit(0); } -