static Joystick_Mapper _joystick_mapping_info_get(const char* syspath) { int index, mapping_info_size; const char *parent, *vendor, *product; Joystick_Mapper ret; ret = NULL; parent = eeze_udev_syspath_get_parent_filtered(syspath, "input", NULL); vendor = eeze_udev_syspath_get_sysattr(parent, "id/vendor"); product = eeze_udev_syspath_get_sysattr(parent, "id/product"); mapping_info_size = (int)(sizeof(Joystick_Mapping_Info) / sizeof(Joystick_Mapping_Info[0])); for (index = 0; index < mapping_info_size; index++) { if ((vendor && !strcmp(vendor, Joystick_Mapping_Info[index].vendor)) && (product && !strcmp(product, Joystick_Mapping_Info[index].product))) { INF("joystick mapping info found (vendor: %s, product: %s)", vendor, product); ret = Joystick_Mapping_Info[index].mapper; break; } } eina_stringshare_del(parent); eina_stringshare_del(vendor); eina_stringshare_del(product); return ret; }
EINA_LIST_FREE(devs, f) { const char *str; str = eeze_udev_syspath_get_sysattr(f, "max_brightness"); if (str) { maxlevel = atoi(str); eina_stringshare_del(str); str = eeze_udev_syspath_get_sysattr(f, "brightness"); if (str) { curlevel = atoi(str); eina_stringshare_del(str); } } if (maxlevel <= 0) maxlevel = 255; if (curlevel >= 0) { curlevel = ((maxlevel * level) + (500 / maxlevel)) / 1000; // printf("SET: %i, %i/%i\n", level, curlevel, maxlevel); snprintf(buf, sizeof(buf), "%s/brightness", f); return _bl_write_file(buf, curlevel); } eina_stringshare_del(f); /* Currently this will set brightness levels on ALL detected devices If this is not desired, add a break here */ }
static Emotion_Webcam * _emotion_webcam_new(const char *syspath) { Emotion_Webcam *test; const char *device; char *local; test = malloc(sizeof (Emotion_Webcam)); if (!test) return NULL; test->custom = NULL; test->syspath = eina_stringshare_ref(syspath); test->name = eeze_udev_syspath_get_sysattr(syspath, "name"); device = eeze_udev_syspath_get_property(syspath, "DEVNAME"); local = alloca(eina_stringshare_strlen(device) + 8); snprintf(local, eina_stringshare_strlen(device) + 8, "v4l2://%s", device); test->device = eina_stringshare_add(local); eina_stringshare_del(device); test->filename = test->device + 7; return test; }
END_TEST START_TEST(eeze_test_udev_syspath) { Eina_List *type, *l; const char *name; Eina_Bool r; eeze_init(); type = eeze_udev_find_by_type(EEZE_UDEV_TYPE_KEYBOARD, NULL); type = eeze_udev_find_unlisted_similar(type); EINA_LIST_FOREACH(type, l, name) { eeze_udev_syspath_get_devpath(name); eeze_udev_find_similar_from_syspath(name); eeze_udev_find_similar_from_syspath(NULL); eeze_udev_syspath_get_parent(name); eeze_udev_syspath_get_parent(NULL); eeze_udev_syspath_get_parents(name); eeze_udev_syspath_get_parents(NULL); eeze_udev_syspath_get_devname(name); eeze_udev_syspath_get_devname(NULL); eeze_udev_syspath_get_subsystem(name); eeze_udev_syspath_get_sysattr(name, "manufacturer"); eeze_udev_syspath_is_mouse(name); eeze_udev_syspath_is_kbd(name); eeze_udev_syspath_is_touchpad(name); eeze_udev_syspath_is_joystick(name); eeze_udev_walk_get_sysattr(name, "manufacturer"); eeze_udev_find_by_sysattr("manufacturer", NULL); eeze_udev_find_by_sysattr(NULL, NULL); eeze_udev_walk_check_sysattr(name, "manufacturer", NULL); eeze_udev_walk_check_sysattr(name, "manufacturer", "foo"); eeze_udev_walk_get_sysattr(NULL, "manufacturer"); eeze_udev_walk_get_sysattr(name, NULL); }
/* externally accessible functions */ int main(int argc, char **argv) { int i; int level; const char *f; int maxlevel = 0, curlevel = -1; Eina_List *devs; char buf[4096] = ""; for (i = 1; i < argc; i++) { if ((!strcmp(argv[i], "-h")) || (!strcmp(argv[i], "-help")) || (!strcmp(argv[i], "--help"))) { printf("This is an internal tool for Enlightenment.\n" "do not use it.\n"); exit(0); } } if (argc == 2) level = atoi(argv[1]); else exit(1); if (setuid(0) != 0) { printf("ERROR: UNABLE TO ASSUME ROOT PRIVILEGES\n"); exit(5); } if (setgid(0) != 0) { printf("ERROR: UNABLE TO ASSUME ROOT GROUP PRIVILEGES\n"); exit(7); } eeze_init(); devs = eeze_udev_find_by_filter("backlight", NULL, NULL); if (!devs) { devs = eeze_udev_find_by_filter("leds", NULL, NULL); if (!devs) return -1; } if (eina_list_count(devs) > 1) { const char *s = NULL; Eina_List *l, *new = NULL; Eina_Bool use = EINA_FALSE; /* prefer backlights of type "firmware" where available */ EINA_LIST_FOREACH(devs, l, f) { s = eeze_udev_syspath_get_sysattr(f, "type"); use = (s && (!strcmp(s, "firmware"))); eina_stringshare_del(s); if (!use) continue; eina_list_move_list(&new, &devs, l); EINA_LIST_FREE(devs, f) eina_stringshare_del(f); devs = new; break; } }