void ResourceMonitorAndroid::uevent_read()
{
        char buffer[1024];
        int buffer_length = sizeof(buffer);
        uevent_type_t event_type;
	long battery_capacity = 100;

        ssize_t len = recv(uevent_fd, buffer, buffer_length, 0);
        
        if (len <= 0) {
                HAGGLE_ERR("Could not read uevent\n");
                return;
        }
        
        //HAGGLE_DBG("UEvent: %s\n", buffer);

	event_type = getEvent(buffer);

	switch (event_type) {
	case UEVENT_AC:
	case UEVENT_USB:
		HAGGLE_DBG("Power state: %s\n", power_mode_str[getPowerMode()]);
		break;
	case UEVENT_BATTERY:
	case UEVENT_BATTERY_CAPACITY:
		battery_capacity = getBatteryPercent();

		HAGGLE_DBG("Battery capacity is %ld\n", battery_capacity);
		
		if (battery_capacity > 0 && 
		    battery_capacity < 10 && 
		    getPowerMode() == POWER_MODE_BATTERY) {
			HAGGLE_DBG("Shutting down due to low power\n");
			getManager()->getKernel()->shutdown();
		}
		break;
	case UEVENT_BATTERY_STATUS:
		HAGGLE_DBG("Battery status\n");
		break;
	case UEVENT_BATTERY_HEALTH:
		HAGGLE_DBG("Battery health\n");
		break;
	case UEVENT_UNKNOWN:
		break;
	}
}
Esempio n. 2
0
int main(int argc, char * argv[])
{
	int k;
	char * file_name = 0;
	int verbose = 0;
	
	
	for (k = 1; k < argc; ++k) {
		if (0 == strcmp(argv[k], "-v"))
			++verbose;
		else if (0 == strcmp(argv[k], "-vv"))
			verbose += 2;
		else if (0 == strcmp(argv[k], "-vvv"))
			verbose += 3;
		else if (*argv[k] == '-') {
			printf("Unrecognized switch: %s\n", argv[k]);
			file_name = 0;
			break;
		}
	}
	if(!verbose)
		daemon(0, 0); /*  run in the background */
	/* start button thread */
	pthread_t button_thread;
	void *ButtonControl();
	pthread_create(&button_thread,NULL, ButtonControl, NULL);
	
        for (;;) {
        	if (file_exists(STATUS_FILE))
        		setStatusLed(2, verbose);
        	else {
        		int st_sda = getPowerMode(DEVNAME_SDA, verbose);
        		int st_sdb = getPowerMode(DEVNAME_SDB, verbose);
        		if(st_sda == PM_STATUS_STANDBY && st_sdb == PM_STATUS_STANDBY) {
        			setStatusLed(0, verbose);
        		}
        		else {
        			setStatusLed(1, verbose);
        		}
        	}
        	sleep(1);
        }
        return 0;
}
Esempio n. 3
0
void setCurrentGate(unsigned long gate)
{
/*
	if gate == 1 mode1
	else mode0
*/
    	unsigned long gate_reg;
    	unsigned long mode;
    	/* Get current power mode. */
    	mode = getPowerMode();
	gate_reg = (gate==1)?MODE1_GATE:MODE0_GATE;
    	pokeRegisterDWord(gate_reg, gate);
}
Esempio n. 4
0
void setCurrentGate(unsigned int gate)
{
	unsigned int gate_reg;
	unsigned int mode;

	/* Get current power mode. */
	mode = getPowerMode();

	switch (mode) {
	case POWER_MODE_CTRL_MODE_MODE0:
		gate_reg = MODE0_GATE;
		break;

	case POWER_MODE_CTRL_MODE_MODE1:
		gate_reg = MODE1_GATE;
		break;

	default:
		gate_reg = MODE0_GATE;
		break;
	}
	POKE32(gate_reg, gate);
}