HI

Thanks! It works, seems that 3600 - 4000 are voltage in millivolts!


On 1/11/09, Roberto Piola <[email protected]> wrote:
> davor emard wrote:
>> HI
>>
>> Thanks again for the on-off, and I'd like to know more - do you
>> have some similar recipe either via proc or ioctl to read the battery
>> status?
>>
>> (I'd like to perform a shutdown if battery is found low)
>>
>> On the opentom there's a small code snippet but it
>> refers to #include some ioctl constants that I don't
>> know the value as I don't have adequate include file.h
>>
>
> The code I use for reading the battery is this (cut & paste from a
> larger project):
>
> support of /proc/barcelona/battery disappeared in fwcore 6.
>
> this is the code I use now to read an approximate battery level (from 0
> to 100)
>
>
> #define BATTERY_DEVNAME                         "battery"
> #define BATTERY_MAJOR                           241
>
> typedef struct {
>         UINT16 u16BatteryVoltage;               /* battery voltage */
>         UINT16 u16ChargeCurrent;                /* charge current */
>         UINT8 u8ChargeStatus;
>         UINT8 u8VoltageSource;
> } BATTERY_STATUS;
>
>
> #define BATTERY_DRIVER_MAGIC    'B' /* Battery driver magic number */
> #define IOR_BATTERY_STATUS      _IOR(BATTERY_DRIVER_MAGIC, 3,
> BATTERY_STATUS)
> #define IO_ENABLE_CHARGING      _IO(BATTERY_DRIVER_MAGIC, 4)
> #define IO_DISABLE_CHARGING     _IO(BATTERY_DRIVER_MAGIC, 5)
>
>
> BATTERY_STATUS bs;
>
> fd=open("/dev/battery",O_RDONLY|O_NOCTTY|O_NONBLOCK);
> ioctl(fd,IOR_BATTERY_STATUS,&bs);
> if(bs.u16ChargeCurrent>10)
>   return BATTERY_IS_CHARGING;
>
>   if(bs.u16BatteryVoltage>4000)
>     return 100;
>   else if(bs.u16BatteryVoltage<3600)
>     return 0;
>   else return (bs.u16BatteryVoltage-3600)/4;
>
>

Reply via email to