/* DBus filter function */ static DBusHandlerResult filter_function (DBusConnection *connection, DBusMessage *message, void *userdata) { DBusError err; DBusMessage *reply; if (!check_priv (halctx, connection, message, dbus_message_get_path (message), "org.freedesktop.hal.power-management.lcd-panel")) { return DBUS_HANDLER_RESULT_HANDLED; } #ifdef DEBUG_OMAP_BL dbg ("filter_function: sender=%s destination=%s obj_path=%s interface=%s method=%s", dbus_message_get_sender (message), dbus_message_get_destination (message), dbus_message_get_path (message), dbus_message_get_interface (message), dbus_message_get_member (message)); #endif reply = NULL; dbus_error_init (&err); if (dbus_message_is_method_call (message, "org.freedesktop.Hal.Device.LaptopPanel", "SetBrightness")) { int brightness; if (dbus_message_get_args (message, &err, DBUS_TYPE_INT32, &brightness, DBUS_TYPE_INVALID)) { if (brightness < 0 || brightness > 228) { reply = dbus_message_new_error (message, "org.freedesktop.Hal.Device.LaptopPanel.Invalid", "Brightness has to be between 0 and 228!"); } else { int return_code; bl_data.set_backlight_level (&bl_data, brightness); reply = dbus_message_new_method_return (message); if (reply == NULL) goto error; return_code = 0; dbus_message_append_args (reply, DBUS_TYPE_INT32, &return_code, DBUS_TYPE_INVALID); } dbus_connection_send (connection, reply, NULL); } } else if (dbus_message_is_method_call (message, "org.freedesktop.Hal.Device.LaptopPanel", "GetBrightness")) { int brightness; if (dbus_message_get_args (message, &err, DBUS_TYPE_INVALID)) { brightness = bl_data.get_backlight_level (&bl_data); if (brightness < bl_data.bl_min) brightness = bl_data.bl_min; if (brightness > bl_data.bl_max) brightness = bl_data.bl_max; /* dbg ("getting brightness, it's %d", brightness); */ reply = dbus_message_new_method_return (message); if (reply == NULL) goto error; dbus_message_append_args (reply, DBUS_TYPE_INT32, &brightness, DBUS_TYPE_INVALID); dbus_connection_send (connection, reply, NULL); } } error: if (reply != NULL) dbus_message_unref (reply); LIBHAL_FREE_DBUS_ERROR (&err); return DBUS_HANDLER_RESULT_HANDLED; }
static DBusHandlerResult filter_function (DBusConnection *connection, DBusMessage *message, void *userdata) { DBusError err; DBusMessage *reply; const char *udi; udi = dbus_message_get_path (message); /*dbg ("filter_function: sender=%s destination=%s obj_path=%s interface=%s method=%s", dbus_message_get_sender (message), dbus_message_get_destination (message), dbus_message_get_path (message), dbus_message_get_interface (message), dbus_message_get_member (message));*/ reply = NULL; dbus_error_init (&err); if (dbus_message_is_method_call (message, "org.freedesktop.Hal.Device.LaptopPanel", "SetBrightness")) { int brightness; if (!check_priv (halctx, connection, message, udi, "org.freedesktop.hal.power-management.lcd-panel")) goto error; if (dbus_message_get_args (message, &err, DBUS_TYPE_INT32, &brightness, DBUS_TYPE_INVALID)) { /* dbg ("setting brightness %d", brightness); */ if (brightness < 0 || brightness > 228) { reply = dbus_message_new_error (message, "org.freedesktop.Hal.Device.LaptopPanel.Invalid", "Brightness has to be between 0 and 228!"); } else { int return_code; write_backlight (brightness + 27); reply = dbus_message_new_method_return (message); if (reply == NULL) goto error; return_code = 0; dbus_message_append_args (reply, DBUS_TYPE_INT32, &return_code, DBUS_TYPE_INVALID); } dbus_connection_send (connection, reply, NULL); } } else if (dbus_message_is_method_call (message, "org.freedesktop.Hal.Device.LaptopPanel", "GetBrightness")) { int brightness; if (!check_priv (halctx, connection, message, udi, "org.freedesktop.hal.power-management.lcd-panel")) goto error; if (dbus_message_get_args (message, &err, DBUS_TYPE_INVALID)) { brightness = read_backlight () - 27; if (brightness < 0) brightness = 0; if (brightness > 228) brightness = 228; /* dbg ("getting brightness, it's %d", brightness); */ reply = dbus_message_new_method_return (message); if (reply == NULL) goto error; dbus_message_append_args (reply, DBUS_TYPE_INT32, &brightness, DBUS_TYPE_INVALID); dbus_connection_send (connection, reply, NULL); } } else if (dbus_message_is_method_call (message, "org.freedesktop.Hal.Device.LightSensor", "GetBrightness")) { int brightness[2]; if (!check_priv (halctx, connection, message, udi, "org.freedesktop.hal.power-management.light-sensor")) goto error; brightness[0] = read_light_sensor (FALSE); /* right */ brightness[1] = read_light_sensor (TRUE); /* left */ if (brightness[0] == -1 || brightness[1] == -1) { reply = dbus_message_new_error (message, "org.freedesktop.Hal.Device.LightSensors.Error", "Error poking hardware"); dbus_connection_send (connection, reply, NULL); } else { int (*pb)[] = &brightness; reply = dbus_message_new_method_return (message); if (reply == NULL) goto error; dbus_message_append_args (reply, DBUS_TYPE_ARRAY, DBUS_TYPE_INT32, &pb, 2, DBUS_TYPE_INVALID); dbus_connection_send (connection, reply, NULL); } } else if (dbus_message_is_method_call (message, "org.freedesktop.Hal.Device.KeyboardBacklight", "GetBrightness")) { if (!check_priv (halctx, connection, message, udi, "org.freedesktop.hal.power-management.keyboard-backlight")) goto error; /* I can't get this working so just cache last SetBrightness value :-/ */ if (last_keyboard_brightness == -1 ) { reply = dbus_message_new_error (message, "org.freedesktop.Hal.Device.KeyboardBacklight.Error", "Error poking hardware"); dbus_connection_send (connection, reply, NULL); } else { reply = dbus_message_new_method_return (message); if (reply == NULL) goto error; dbus_message_append_args (reply, DBUS_TYPE_INT32, &last_keyboard_brightness, DBUS_TYPE_INVALID); dbus_connection_send (connection, reply, NULL); } #if 0 int brightness; brightness = read_keyboard_backlight (); if (brightness == -1) { reply = dbus_message_new_error (message, "org.freedesktop.Hal.Device.KeyboardBacklight.Error", "Error poking hardware"); dbus_connection_send (connection, reply, NULL); } else { reply = dbus_message_new_method_return (message); if (reply == NULL) goto error; dbus_message_append_args (reply, DBUS_TYPE_INT32, &brightness, DBUS_TYPE_INVALID); dbus_connection_send (connection, reply, NULL); } #endif } else if (dbus_message_is_method_call (message, "org.freedesktop.Hal.Device.KeyboardBacklight", "SetBrightness")) { int brightness; if (!check_priv (halctx, connection, message, udi, "org.freedesktop.hal.power-management.keyboard-backlight")) goto error; if (dbus_message_get_args (message, &err, DBUS_TYPE_INT32, &brightness, DBUS_TYPE_INVALID)) { /*dbg ("setting keyboard brightness %d", brightness);*/ if (brightness < 0 || brightness > 255) { reply = dbus_message_new_error (message, "org.freedesktop.Hal.Device.KeyboardBacklight.Invalid", "Brightness has to be between 0 and 255!"); } else { set_keyboard_backlight (brightness); last_keyboard_brightness = brightness; reply = dbus_message_new_method_return (message); if (reply == NULL) goto error; } dbus_connection_send (connection, reply, NULL); } } error: if (reply != NULL) dbus_message_unref (reply); LIBHAL_FREE_DBUS_ERROR (&err); return DBUS_HANDLER_RESULT_HANDLED; }
/* DBus filter function */ static DBusHandlerResult filter_function (DBusConnection *connection, DBusMessage *message, void *userdata) { DBusError err; DBusMessage *reply; const char *_udi; const char *interface; char *sysfs_path; if ((_udi = dbus_message_get_path (message)) == NULL) { HAL_DEBUG (("Couldn't get the udi for this call, ignore it.")); return DBUS_HANDLER_RESULT_HANDLED; } else { if(!g_hash_table_lookup_extended (leds, _udi, NULL, (gpointer *) &sysfs_path)) { HAL_DEBUG (("This device (%s) isn't yet handled by the addon.", _udi)); return DBUS_HANDLER_RESULT_HANDLED; } } dbus_error_init (&err); interface = dbus_message_get_interface (message); if (interface != NULL && strcmp (interface, "org.freedesktop.Hal.Device.KeyboardBacklight") == 0) { if (!check_priv (ctx, connection, message, dbus_message_get_path (message), "org.freedesktop.hal.power-management.keyboard-backlight")) { HAL_DEBUG(("User don't have the permissions to call the interface")); return DBUS_HANDLER_RESULT_HANDLED; } } else if (!check_priv (ctx, connection, message, dbus_message_get_path (message), "org.freedesktop.hal.leds.brightness")) { HAL_DEBUG(("User don't have the permissions to call the interface")); return DBUS_HANDLER_RESULT_HANDLED; } reply = NULL; if (dbus_message_is_method_call (message, "org.freedesktop.Hal.Device.Leds", "SetBrightness") || dbus_message_is_method_call (message, "org.freedesktop.Hal.Device.KeyboardBacklight", "SetBrightness")) { int brightness; if (dbus_message_get_args (message, &err, DBUS_TYPE_INT32, &brightness, DBUS_TYPE_INVALID)) { int return_code = 0; int set; set = set_leds_brightness (_udi, brightness); reply = dbus_message_new_method_return (message); if (reply == NULL) goto error; if (set == brightness) return_code = 0; else return_code = 1; dbus_message_append_args (reply, DBUS_TYPE_INT32, &return_code, DBUS_TYPE_INVALID); dbus_connection_send (connection, reply, NULL); } } else if (dbus_message_is_method_call (message, "org.freedesktop.Hal.Device.Leds", "GetBrightness") || dbus_message_is_method_call (message, "org.freedesktop.Hal.Device.KeyboardBacklight", "GetBrightness")) { int brightness; if (dbus_message_get_args (message, &err, DBUS_TYPE_INVALID)) { brightness = get_leds_brightness(_udi); reply = dbus_message_new_method_return (message); if (reply == NULL) goto error; dbus_message_append_args (reply, DBUS_TYPE_INT32, &brightness, DBUS_TYPE_INVALID); dbus_connection_send (connection, reply, NULL); } } error: if (reply != NULL) dbus_message_unref (reply); LIBHAL_FREE_DBUS_ERROR (&err); return DBUS_HANDLER_RESULT_HANDLED; }