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; } }
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; }
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); }
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); }