Esempio n. 1
0
static ssize_t battery_read_supply(struct kobj_t * kobj, void * buf, size_t size)
{
	struct battery_t * bat = (struct battery_t *)kobj->priv;
	struct battery_info_t info;
	char * supply = "unknown";

	if(battery_update(bat, &info))
	{
		switch(info.supply)
		{
		case POWER_SUPPLAY_BATTERY:
			supply = "battery";
			break;
		case POWER_SUPPLAY_AC:
			supply = "ac";
			break;
		case POWER_SUPPLAY_USB:
			supply = "usb";
			break;
		case POWER_SUPPLAY_WIRELESS:
			supply = "wireless";
			break;
		default:
			break;
		}
	}
	return sprintf(buf, "%s", supply);
}
Esempio n. 2
0
battery *battery_get() {
    GError * error = NULL;
    const gchar *entry;
    GDir * dir = g_dir_open( ACPI_PATH_SYS_POWER_SUPPY, 0, &error );
    battery *b = NULL;
    if ( dir == NULL ) 
    {
	g_warning( "NO ACPI/sysfs support in kernel: %s", error->message );
	return NULL;
    }
    while ( ( entry = g_dir_read_name (dir) ) != NULL )  
    {
	b = battery_new();
	b->path = g_strdup( entry );
	battery_update ( b );
	if ( b->type_battery == TRUE ) 
	    break;
	/* ignore non-batteries */
	else { 			
	    g_free(b);
	    b = NULL;
	}
    }
    g_dir_close( dir );
    return b;
}
Esempio n. 3
0
static ssize_t battery_read_status(struct kobj_t * kobj, void * buf, size_t size)
{
	struct battery_t * bat = (struct battery_t *)kobj->priv;
	struct battery_info_t info;
	char * status = "unknown";

	if(battery_update(bat, &info))
	{
		switch(info.status)
		{
		case BATTERY_STATUS_DISCHARGING:
			status = "discharging";
			break;
		case BATTERY_STATUS_CHARGING:
			status = "charging";
			break;
		case BATTERY_STATUS_FULL:
			status = "full";
			break;
		default:
			break;
		}
	}
	return sprintf(buf, "%s", status);
}
Esempio n. 4
0
static ssize_t battery_read_health(struct kobj_t * kobj, void * buf, size_t size)
{
	struct battery_t * bat = (struct battery_t *)kobj->priv;
	struct battery_info_t info;
	char * health = "unknown";

	if(battery_update(bat, &info))
	{
		switch(info.health)
		{
		case BATTERY_HEALTH_GOOD:
			health = "good";
			break;
		case BATTERY_HEALTH_DEAD:
			health = "dead";
			break;
		case BATTERY_HEALTH_OVERHEAT:
			health = "overheat";
			break;
		case BATTERY_HEALTH_OVERVOLTAGE:
			health = "overvoltage";
			break;
		default:
			break;
		}
	}
	return sprintf(buf, "%s", health);
}
Esempio n. 5
0
static void
battery_cb(struct ev_loop *loop, ev_timer *w, int revents)
{
  (void) loop;
  (void) revents;
  BatteryInfo *info = (BatteryInfo *)w->data;
  battery_update(info);
}
Esempio n. 6
0
static ssize_t battery_read_level(struct kobj_t * kobj, void * buf, size_t size)
{
	struct battery_t * bat = (struct battery_t *)kobj->priv;
	struct battery_info_t info;

	if(battery_update(bat, &info))
		return sprintf(buf, "%d", info.level);
	return sprintf(buf, "%d", 0);
}
Esempio n. 7
0
int
main(int argc, char *argv[])
{
	int ret = 1;
	int fd = -1;
	char *udi;
	char device_file[HAL_PATH_MAX] = "/devices";
	char *devfs_path;
	LibHalContext *ctx = NULL;
	DBusError error;

	if ((udi = getenv("UDI")) == NULL)
		goto out;
	if ((devfs_path = getenv("HAL_PROP_SOLARIS_DEVFS_PATH")) == NULL)
		goto out;
	strlcat(device_file, devfs_path, HAL_PATH_MAX);

	setup_logger();

	dbus_error_init(&error);
	if ((ctx = libhal_ctx_init_direct(&error)) == NULL)
		goto out;

	HAL_DEBUG(("Doing probe-battery for %s (udi=%s)",
	    device_file, udi));

	if ((fd = open(device_file, O_RDONLY | O_NONBLOCK)) < 0) {
		HAL_DEBUG(("Cannot open %s: %s", device_file, strerror(errno)));
		goto out;
	}
	if (strstr(udi, "ac")) {
		ac_adapter_update(ctx, udi, fd);
	} else {
		battery_update(ctx, udi, fd);
	}

	ret = 0;

out:
	if (fd >= 0) {
		close(fd);
	}

	if (ctx != NULL) {
		libhal_ctx_shutdown(ctx, &error);
		libhal_ctx_free(ctx);
		if (dbus_error_is_set(&error)) {
			dbus_error_free(&error);
		}
	}

	return (ret);
}
Esempio n. 8
0
File: battery.c Progetto: g7/fbpanel
static int
battery_constructor(plugin_instance *p)
{
    battery_priv *c;

    ENTER;
    if (!(k = class_get("meter")))
        RET(0);
    if (!PLUGIN_CLASS(k)->constructor(p))
        RET(0);
    c = (battery_priv *) p;
    c->timer = g_timeout_add(2000, (GSourceFunc) battery_update, c);
    battery_update(c);
    RET(1);
}
Esempio n. 9
0
static void
battery_refresh(struct sysmon_envsys *sme, envsys_data_t *edata)
{
	struct battery_softc *sc = sme->sme_cookie;
	int which = edata->sensor;

	battery_update(sc, 0);

	switch (which) {
	case BAT_CPU_TEMPERATURE:
		edata->value_cur = sc->sc_cpu_temp * 1000000 + 273150000;
		break;
	case BAT_AC_PRESENT:
		edata->value_cur = (sc->sc_flags & PMU_PWR_AC_PRESENT);
		break;
	case BAT_PRESENT:
		edata->value_cur = (sc->sc_flags & PMU_PWR_BATT_PRESENT);
		break;
	case BAT_VOLTAGE:
		edata->value_cur = sc->sc_voltage * 1000;
		break;
	case BAT_CURRENT:
		edata->value_cur = sc->sc_current * 1000;
		break;
	case BAT_CHARGE:
		edata->value_cur = sc->sc_charge;
		break;
	case BAT_MAX_CHARGE:
		edata->value_cur = 100;
		break;
	case BAT_TEMPERATURE:
		edata->value_cur = sc->sc_bat_temp * 1000000 + 273150000;
		break;
	case BAT_CHARGING:
		if ((sc->sc_flags & PMU_PWR_BATT_CHARGING) &&
		    (sc->sc_flags & PMU_PWR_AC_PRESENT))
			edata->value_cur = 1;
		else
			edata->value_cur = 0;

		break;
	case BAT_FULL:
		edata->value_cur = (sc->sc_flags & PMU_PWR_BATT_FULL);
		break;
	}

	edata->state = ENVSYS_SVALID;
}
Esempio n. 10
0
static void
battery_poll(void *cookie)
{
	struct battery_softc *sc = cookie;


	battery_update(sc, 0);
	if ((sc->sc_flags & PMU_PWR_AC_PRESENT) == sc->sc_oflags)
		return;

	sc->sc_oflags = sc->sc_flags & PMU_PWR_AC_PRESENT;

	sysmon_pswitch_event(&sc->sc_sm_acpower, 
	    sc->sc_oflags ? PSWITCH_EVENT_PRESSED :
	    PSWITCH_EVENT_RELEASED);
}
Esempio n. 11
0
void gui_set_debug_action(uint8_t index)
{
	switch(index)
	{
//		case(3):
//			gui_dialog_set_P(PSTR("Confirmation"), PSTR("Do you want to\nreset Factory\ntest?"), GUI_STYLE_YESNO, gui_set_debug_reset_fc);
//			gui_switch_task(GUI_DIALOG);
//		break;

		case(2):
			battery_update();
		break;

		case(4):
			if (config.system.debug_log == DEBUG_MAGIC_ON)
				config.system.debug_log = 0;
			else
				config.system.debug_log = DEBUG_MAGIC_ON;
			eeprom_busy_wait();
			eeprom_update_byte(&config_ee.system.debug_log, config.system.debug_log);
		break;

		case(5):
			gui_dialog_set_P(PSTR("Confirmation"), PSTR("Clear\ndebug.log?"), GUI_STYLE_YESNO, gui_set_debug_delete_fc);
			gui_switch_task(GUI_DIALOG);
		break;

		case(6):
			config.system.debug_gps = !config.system.debug_gps;
			eeprom_busy_wait();
			eeprom_update_byte(&config_ee.system.debug_gps, config.system.debug_gps);
		break;

		case(8):
			config.system.record_screen = !config.system.record_screen;
			eeprom_busy_wait();
			eeprom_update_byte(&config_ee.system.record_screen, config.system.record_screen);
		break;
	}
}
Esempio n. 12
0
static void
battery_attach(struct device *parent, struct device *self, void *aux)
{
	struct battery_attach_args *baa = aux;
	struct battery_softc *sc = (struct battery_softc *)self;
	uint32_t reg;

	sc->sc_pmu_ops = baa->baa_pmu_ops;
	printf(": legacy battery ");

	reg = in32rb(0xf3000034);
	DPRINTF("reg: %08x\n", reg);
	if (reg & 0x20000000) {
		sc->sc_type = BTYPE_HOOPER;
		sc->sc_vmax_charged = 330;
		sc->sc_vmax_charging = 365;
		printf("[hooper]\n");
	} else {
		sc->sc_type = BTYPE_COMET;
		sc->sc_vmax_charged = 189;
		sc->sc_vmax_charging = 213;
		printf("[comet]\n");
	}
	battery_update(sc, 1);
	/* trigger a status update */
	sc->sc_oflags = ~sc->sc_flags;

	battery_setup_envsys(sc);
	sc->sc_pmu_ops->register_callback(sc->sc_pmu_ops->cookie, battery_poll,
	    sc);

	memset(&sc->sc_sm_acpower, 0, sizeof(struct sysmon_pswitch));
	sc->sc_sm_acpower.smpsw_name = "AC Power";
	sc->sc_sm_acpower.smpsw_type = PSWITCH_TYPE_ACADAPTER;
	if (sysmon_pswitch_register(&sc->sc_sm_acpower) != 0)
		printf("%s: unable to register AC power status with sysmon\n",
		    sc->sc_dev.dv_xname);

}
Esempio n. 13
0
int main(void)
{
	init();

	sei();

	if(wdt_wasReset())
		resetError();

	buzzer_buzz(200, TONE_4KHZ, VOL_UI);
	led_flash(LED_GREEN, 50, 255);

	watchface_setFace(watchface_normal);
	watchface_loadFace();
/*
	while(1)
	{
		buzzer_buzzb(200,TONE_5KHZ, VOL_UI);
		buzzer_buzzb(200,TONE_4KHZ, VOL_UI);
		buzzer_buzzb(200,TONE_2_5KHZ, VOL_UI);
		buzzer_buzzb(200,TONE_2KHZ, VOL_UI);
		buzzer_buzzb(200,TONE_4KHZ, VOL_UI);
		buzzer_buzzb(200,TONE_5KHZ, VOL_UI);
		buzzer_buzzb(200,TONE_2_5KHZ, VOL_UI);
		buzzer_buzzb(200,TONE_2KHZ, VOL_UI);
		buzzer_buzzb(200,TONE_3_5KHZ, VOL_UI);
		buzzer_buzzb(200,TONE_4KHZ, VOL_UI);
		buzzer_buzzb(200,TONE_3KHZ, VOL_UI);
		buzzer_buzzb(250,TONE_2KHZ, VOL_UI);
		buzzer_buzzb(250,TONE_2KHZ, VOL_UI);
		buzzer_buzzb(200,TONE_4KHZ, VOL_UI);
		buzzer_buzzb(200,TONE_4KHZ, VOL_UI);
	}
*/
	while(1)
	{
		bool timeUpt = time_update();
		if(pwrmgr_userActive())
		{
			if(timeUpt && timeData.secs == 0)
				battery_update();
			buttons_update();
		}

		buzzer_update();
		led_update();
		stopwatch_update();

		if(pwrmgr_userActive())
		{
			alarm_update();
			display_update();
		}

//		freeRAM();

		wdt_update();

		pwrmgr_update();
	}
}
battery *battery_get(int battery_number) {
    GError * error = NULL;
    const gchar *entry;
    gchar *batt_name = NULL;
    gchar *batt_path = NULL;
    GDir * dir;
    battery *b = NULL;

    /* Try the expected path in sysfs first */
    batt_name = g_strdup_printf(ACPI_BATTERY_DEVICE_NAME "%d", battery_number);
    batt_path = g_strdup_printf(ACPI_PATH_SYS_POWER_SUPPLY "/%s", batt_name);
    if (g_file_test(batt_path, G_FILE_TEST_IS_DIR) == TRUE) {
        b = battery_new();
        b->path = g_strdup( batt_name);
        battery_update ( b );

        if (!b->type_battery) {
            g_warning( "Not a battery: %s", batt_path );
            battery_free(b);
            b = NULL;
        }
    }

    g_free(batt_name);
    g_free(batt_path);

    if (b != NULL)
        return b;

    /*
     * We didn't find the expected path in sysfs.
     * Walk the dir and return any battery.
     */
    dir = g_dir_open( ACPI_PATH_SYS_POWER_SUPPLY, 0, &error );
    if ( dir == NULL )
    {
        g_warning( "NO ACPI/sysfs support in kernel: %s", error->message );
        g_error_free(error);
        return NULL;
    }

    while ( ( entry = g_dir_read_name (dir) ) != NULL )
    {
        b = battery_new();
        b->path = g_strdup( entry );
        battery_update ( b );

        /* We're looking for a battery with the selected ID */
        if (b->type_battery == TRUE) {
            break;
        }
        battery_free(b);
        b = NULL;
    }
    if (b != NULL)
        g_warning( "Battery entry " ACPI_BATTERY_DEVICE_NAME "%d not found, using %s",
            battery_number, b->path);
        // FIXME: update config?
    else
        g_warning( "Battery %d not found", battery_number );

    g_dir_close( dir );
    return b;
}