dbus_message_unref(signal_msg);
}
+static void send_device_state_changed_signal(uint32_t event_id, pa_tz_device *device, bool activated, pa_device_manager *dm) {
+ DBusMessage *signal_msg;
+ DBusMessageIter msg_iter, device_iter;
+ dm_device_state_t compound_state;
+ dbus_int32_t device_id, direction;
+ char *type, *name;
+
+ pa_assert(device);
+ pa_assert(dm);
+
+ pa_log_debug("Send device state changed signal, event_id(%u)", event_id);
+
+ pa_assert_se(signal_msg = dbus_message_new_signal(DBUS_OBJECT_DEVICE_MANAGER, DBUS_INTERFACE_DEVICE_MANAGER, "DeviceStateChanged"));
+ dbus_message_iter_init_append(signal_msg, &msg_iter);
+ dbus_message_iter_append_basic(&msg_iter, DBUS_TYPE_UINT32, &event_id);
+ pa_assert_se(dbus_message_iter_open_container(&msg_iter, DBUS_TYPE_STRUCT, NULL, &device_iter));
+
+ direction = (dbus_int32_t) pa_tz_device_get_direction(device);
+ type = pa_tz_device_get_type(device);
+ name = pa_tz_device_get_name(device);
+ device_id = (dbus_int32_t) pa_tz_device_get_id(device);
+ compound_state = activated ? DM_DEVICE_STATE_ACTIVATED : DM_DEVICE_STATE_DEACTIVATED;
+
+ simple_device_dump(PA_LOG_DEBUG, "[State Changed]", device_id, type, name, direction, compound_state);
+
+ dbus_message_iter_append_basic(&device_iter, DBUS_TYPE_INT32, &device_id);
+ dbus_message_iter_append_basic(&device_iter, DBUS_TYPE_STRING, &type);
+ dbus_message_iter_append_basic(&device_iter, DBUS_TYPE_INT32, &direction);
+ dbus_message_iter_append_basic(&device_iter, DBUS_TYPE_INT32, &compound_state);
+ dbus_message_iter_append_basic(&device_iter, DBUS_TYPE_STRING, &name);
+ pa_assert_se(dbus_message_iter_close_container(&msg_iter, &device_iter));
+
+ pa_assert_se(dbus_connection_send(pa_dbus_connection_get(dm->dbus_conn), signal_msg, NULL));
+
+ dbus_message_unref(signal_msg);
+}
+
static bool device_is_match_direction(pa_tz_device *device, int direction_mask) {
dm_device_direction_t direction;
static pa_hook_result_t device_state_changed_hook_cb(pa_core *c, pa_tz_device_hook_data_for_state_changed *data, pa_device_manager *dm) {
send_device_info_changed_signal(data->event_id, data->device, DM_DEVICE_CHANGED_INFO_STATE, dm);
+ send_device_state_changed_signal(data->event_id, data->device, data->activated, dm);
return PA_HOOK_OK;
}