From owner-freebsd-acpi@FreeBSD.ORG Mon Nov 27 00:33:19 2006 Return-Path: X-Original-To: freebsd-acpi@freebsd.org Delivered-To: freebsd-acpi@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D59E916A40F for ; Mon, 27 Nov 2006 00:33:19 +0000 (UTC) (envelope-from nate@root.org) Received: from root.org (root.org [67.118.192.226]) by mx1.FreeBSD.org (Postfix) with ESMTP id 9E93B43D49 for ; Mon, 27 Nov 2006 00:32:21 +0000 (GMT) (envelope-from nate@root.org) Received: (qmail 77511 invoked from network); 27 Nov 2006 00:27:38 -0000 Received: from ppp-71-139-31-204.dsl.snfc21.pacbell.net (HELO ?10.0.5.59?) (nate-mail@71.139.31.204) by root.org with ESMTPA; 27 Nov 2006 00:27:38 -0000 Message-ID: <456A30F0.3030004@root.org> Date: Sun, 26 Nov 2006 16:27:28 -0800 From: Nate Lawson User-Agent: Thunderbird 1.5.0.8 (Windows/20061025) MIME-Version: 1.0 To: "M. Warner Losh" References: <20061124.201214.1656128345.imp@bsdimp.com> <4568AA2F.4050602@root.org> <20061125.160917.1628359610.imp@bsdimp.com> In-Reply-To: <20061125.160917.1628359610.imp@bsdimp.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-acpi@freebsd.org Subject: Re: How do I... X-BeenThere: freebsd-acpi@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: ACPI and power management development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Nov 2006 00:33:19 -0000 M. Warner Losh wrote: > In message: <4568AA2F.4050602@root.org> > Nate Lawson writes: > : M. Warner Losh wrote: > : > ... run a command when there's < 1% battery life left? > : > > : > Warner > : > : You add support here in acpi_cmbat.c: > : /* XXX If all batteries are critical, perhaps we should suspend. */ > : if (sc->bst.state & ACPI_BATT_STAT_CRITICAL) { > : if ((sc->flags & ACPI_BATT_STAT_CRITICAL) == 0) { > : sc->flags |= ACPI_BATT_STAT_CRITICAL; > : device_printf(dev, "critically low charge!\n"); > : } > : } > : > : Use the acpi_NotifyMumble function to send a value to devd. You > : probably want to make sure you're off AC power also since you may still > : have that crit state when plugged in. So read the value of AC status > : (see kern_power.c for how to do this) before sending the notify. > > I was thinking of sending the critical message as well as for each % > of battery life that changed. I just wanted to make sure that it > wasn't being done already and i was captain clueless. > > Warner You'd have to add that to the code that pulls the new battery value. It would compare it to the last % and send a notify if they're different. You could get rid of that printf then and just add a default devd rule for that. Note though that it the critical flag is determined by the BIOS. It could be 5% on one system, 10% on the next. You could add a user-configurable sysctl "critical" flag that was compared to the % and if <=, sets the ACPI_BATT_STAT_CRITICAL flag even though the BIOS didn't. The devd notify code would be the same in either case. The flag as set by the BIOS is level-triggered so it stays set until the battery is charged above the critical level (i.e. even on AC). You don't want to trigger devd notifies on the way back up to normal, although sending a different notify once it is !critical might be useful. Please send me a patch for review if you implement this. Thanks, -- Nate