My slstatus configuration
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

59 rivejä
1.2 KiB

  1. /* See LICENSE file for copyright and license details. */
  2. #include <errno.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <limits.h>
  6. #include <string.h>
  7. #include "../../util.h"
  8. const char *
  9. battery_perc(const char *bat)
  10. {
  11. int perc;
  12. char path[PATH_MAX];
  13. snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/capacity");
  14. return (pscanf(path, "%i", &perc) == 1) ?
  15. bprintf("%d", perc) : NULL;
  16. }
  17. const char *
  18. battery_power(const char *bat)
  19. {
  20. int watts;
  21. char path[PATH_MAX];
  22. snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/power_now");
  23. return (pscanf(path, "%i", &watts) == 1) ?
  24. bprintf("%d", (watts + 500000) / 1000000) : NULL;
  25. }
  26. const char *
  27. battery_state(const char *bat)
  28. {
  29. struct {
  30. char *state;
  31. char *symbol;
  32. } map[] = {
  33. { "Charging", "+" },
  34. { "Discharging", "-" },
  35. { "Full", "=" },
  36. { "Unknown", "/" },
  37. };
  38. size_t i;
  39. char path[PATH_MAX], state[12];
  40. snprintf(path, sizeof(path), "%s%s%s", "/sys/class/power_supply/", bat, "/status");
  41. if (pscanf(path, "%12s", state) != 1) {
  42. return NULL;
  43. }
  44. for (i = 0; i < LEN(map); i++) {
  45. if (!strcmp(map[i].state, state)) {
  46. break;
  47. }
  48. }
  49. return (i == LEN(map)) ? "?" : map[i].symbol;
  50. }