needed by the new kernel.
unsigned char bc_stopcap = 99; // battery capacity threshold as stop condition 1
unsigned int bc_stopcur = 80000; // charge current threshold as stop condition 2, in uA
unsigned char bc_startcap = 95; // battery capacity threshold to resume charging
unsigned char bc_stopcap = 99; // battery capacity threshold as stop condition 1
unsigned int bc_stopcur = 80000; // charge current threshold as stop condition 2, in uA
unsigned char bc_startcap = 95; // battery capacity threshold to resume charging
-char *bc_charge_device = NULL; // charger /sys/class/power_supply/ device, changes between kernel versions
+char *bc_charge_devices = NULL; // charger /sys/class/power_supply/ devices, changes between kernel versions
bc_startcap = pnd_conf_get_as_int ( evmaph, "battery_charge.start_capacity" );
pnd_log ( pndn_rem, "Battery charge start capacity set to %u", bc_startcap );
}
bc_startcap = pnd_conf_get_as_int ( evmaph, "battery_charge.start_capacity" );
pnd_log ( pndn_rem, "Battery charge start capacity set to %u", bc_startcap );
}
- if ( pnd_conf_get_as_char ( evmaph, "battery_charge.device" ) != NULL ) {
- bc_charge_device = strdup ( pnd_conf_get_as_char ( evmaph, "battery_charge.device" ) );
- pnd_log ( pndn_rem, "Battery charge device set to %s", bc_charge_device );
+ if ( pnd_conf_get_as_char ( evmaph, "battery_charge.devices" ) != NULL ) {
+ bc_charge_devices = strdup ( pnd_conf_get_as_char ( evmaph, "battery_charge.devices" ) );
+ pnd_log ( pndn_rem, "Battery charge devices set to %s", bc_charge_devices );
}
/* do we have anything to do?
}
/* do we have anything to do?
// charge monitoring
now = time(NULL);
// charge monitoring
now = time(NULL);
- if ( bc_enable && bc_charge_device != NULL && (unsigned int)(now - last_charge_check) > 60 ) {
+ if ( bc_enable && bc_charge_devices != NULL && (unsigned int)(now - last_charge_check) > 60 ) {
- int charge_enabled = pnd_device_get_charger_enable ( bc_charge_device );
+ int charge_enabled = pnd_device_get_charger_enable ( bc_charge_devices );
if ( charge_enabled < 0 )
pnd_log ( pndn_error, "ERROR: Couldn't read charger enable control\n" );
else {
if ( charge_enabled && batlevel >= bc_stopcap && 0 < uamps && uamps < bc_stopcur ) {
pnd_log ( pndn_debug, "Charge stop conditions reached, disabling charging\n" );
if ( charge_enabled < 0 )
pnd_log ( pndn_error, "ERROR: Couldn't read charger enable control\n" );
else {
if ( charge_enabled && batlevel >= bc_stopcap && 0 < uamps && uamps < bc_stopcur ) {
pnd_log ( pndn_debug, "Charge stop conditions reached, disabling charging\n" );
- pnd_device_set_charger_enable ( bc_charge_device, 0 );
+ pnd_device_set_charger_enable ( bc_charge_devices, 0 );
}
else if ( !charge_enabled && batlevel <= bc_startcap ) {
pnd_log ( pndn_debug, "Charge start conditions reached, enabling charging\n" );
}
else if ( !charge_enabled && batlevel <= bc_startcap ) {
pnd_log ( pndn_debug, "Charge start conditions reached, enabling charging\n" );
- pnd_device_set_charger_enable ( bc_charge_device, 1 );
+ pnd_device_set_charger_enable ( bc_charge_devices, 1 );
}
// for some unknown reason it just stops charging randomly (happens once per week or so),
}
// for some unknown reason it just stops charging randomly (happens once per week or so),
// by writing to enable. Doing it occasionally should do no harm even with missing charger.
if ( batlevel <= bc_startcap && (unsigned int)(now - last_charge_worka) > 20*60 ) {
pnd_log ( pndn_debug, "Charge workaround trigger\n" );
// by writing to enable. Doing it occasionally should do no harm even with missing charger.
if ( batlevel <= bc_startcap && (unsigned int)(now - last_charge_worka) > 20*60 ) {
pnd_log ( pndn_debug, "Charge workaround trigger\n" );
- pnd_device_set_charger_enable ( bc_charge_device, 1 );
+ pnd_device_set_charger_enable ( bc_charge_devices, 1 );
last_charge_worka = now;
}
}
last_charge_worka = now;
}
}
stop_capacity 99 # battery capacity threshold as stop condition 1
stop_current 80000 # charge current threshold as stop condition 2, in uA
start_capacity 95 # battery capacity threshold to resume charging
stop_capacity 99 # battery capacity threshold as stop condition 1
stop_current 80000 # charge current threshold as stop condition 2, in uA
start_capacity 95 # battery capacity threshold to resume charging
-device twl4030_bci_battery
+devices twl4030_bci_battery twl4030_ac twl4030_usb
-int pnd_device_get_charger_enable ( const char *device ) {
+int pnd_device_get_charger_enable ( const char *devices ) {
char fullname [ 100 ];
char buffer [ 100 ];
char fullname [ 100 ];
char buffer [ 100 ];
- snprintf ( fullname, sizeof ( fullname ), PND_DEVICE_POWER_BASE "/%s/enable", device );
+ while ( 1 ) {
+ if ( sscanf ( devices, "%99s", buffer ) != 1 ) {
+ break;
+ }
- if ( pnd_device_open_read_close ( fullname, buffer, 100 ) ) {
- return ( atoi ( buffer ) );
+ while ( isspace ( *devices ) )
+ devices++;
+ devices += strlen ( buffer );
+ snprintf ( fullname, sizeof ( fullname ), PND_DEVICE_POWER_BASE "/%s/enable", buffer );
+
+ /* XXX: only ckecks first good device, but that should be enough for our needs */
+ if ( pnd_device_open_read_close ( fullname, buffer, 100 ) ) {
+ return ( atoi ( buffer ) );
+ }
-unsigned char pnd_device_set_charger_enable ( const char *device, unsigned char v ) {
+unsigned char pnd_device_set_charger_enable ( const char *devices, unsigned char v ) {
char fullname [ 100 ];
char buffer [ 100 ];
char fullname [ 100 ];
char buffer [ 100 ];
- snprintf ( fullname, sizeof ( fullname ), PND_DEVICE_POWER_BASE "/%s/enable", device );
- sprintf ( buffer, "%u", v );
+ while ( 1 ) {
+ if ( sscanf ( devices, "%99s", buffer ) != 1 ) {
+ break;
+ }
+
+ while ( isspace ( *devices ) )
+ devices++;
+ devices += strlen ( buffer );
+ snprintf ( fullname, sizeof ( fullname ), PND_DEVICE_POWER_BASE "/%s/enable", buffer );
+
+ sprintf ( buffer, "%u", v );
+ ret |= pnd_device_open_write_close ( fullname, buffer );
+ }
- return ( pnd_device_open_write_close ( fullname, buffer ) );
}
unsigned char pnd_device_set_led_power_brightness ( unsigned char v ) {
}
unsigned char pnd_device_set_led_power_brightness ( unsigned char v ) {