LINUX.ORG.RU

Следить за изменением псевдофайла в /proc

 


1

3

Ситуация такая, что есть скрипт на bash, который грепает строчку в псевдофайле в /proc и в зависимости от значения выполняет команду. Проблема в том, что это значение 95% времени одинаковое, а команда все-равно выполняется все время. inotify как выяснилось не может в /proc, может есть способ накостылять что-то с проверкой контрольных сумм? Что подскажете? Вот скрипт:

#!/bin/bash

do_it(){
    RATE="$(grep -E "rate: .*" /proc/asound/card1/pcm0p/sub0/hw_params | awk '{print $2}')"
    case "${RATE}" in
        44100    ) SET="0" ;;
        48000    ) SET="1" ;;
        88200    ) SET="2" ;;
        96000    ) SET="3" ;;
        176400    ) SET="4" ;;
        192000    ) SET="5" ;;
        *        ) SET="0" ;;
    esac
    amixer -c 1 set 'Clock rate Selector' ${SET}
}

while :; do
        do_it && sleep 0.01
done

★★★
Ответ на: комментарий от anonymous

Жесть.

ЕМНИП это проблема самого фф, там выкинули поддержку 16/24-битного вывода.

По-моему единственный вариант избежать проблем с ляликсом и в то же время на этом ляликсе оставаться.

Так в OSS же драйверов на эту звуковушку нет (где-то находил списочек), чего там ловить. Да и сомневаюсь я что-то, что какая-то «левая» (уже) OSS для линукса сделает мне зашибись.

А во фряхе, походу, эта карточка действительно не поддерживается. Можно в ручную kldload snd_uaudio сделать, чтобы убедиться

Пробовал, не видит.

Andrew ★★★
() автор топика
Последнее исправление: Andrew (всего исправлений: 1)
Ответ на: комментарий от Andrew

А вообще, у меня смутные сомнения, потому что device_probe там прост до безобразия. Интересно, что в dmesg пишет, когда модуль подключается

static int
uaudio_probe(device_t dev)
{
	struct usb_attach_arg *uaa = device_get_ivars(dev);

	if (uaa->usb_mode != USB_MODE_HOST)
		return (ENXIO);

	/* lookup non-standard device(s) */

	if (usbd_lookup_id_by_uaa(uaudio_vendor_midi,
	    sizeof(uaudio_vendor_midi), uaa) == 0) {
		return (BUS_PROBE_SPECIFIC);
	}

	if (uaa->info.bInterfaceClass != UICLASS_AUDIO) {
		if (uaa->info.bInterfaceClass != UICLASS_VENDOR ||
		    usb_test_quirk(uaa, UQ_AU_VENDOR_CLASS) == 0)
			return (ENXIO);
	}

	/* check for AUDIO control interface */

	if (uaa->info.bInterfaceSubClass == UISUBCLASS_AUDIOCONTROL) {
		if (usb_test_quirk(uaa, UQ_BAD_AUDIO))
			return (ENXIO);
		else
			return (BUS_PROBE_GENERIC);
	}

	/* check for MIDI stream */

	if (uaa->info.bInterfaceSubClass == UISUBCLASS_MIDISTREAM) {
		if (usb_test_quirk(uaa, UQ_BAD_MIDI))
			return (ENXIO);
		else
			return (BUS_PROBE_GENERIC);
	}
	return (ENXIO);
}

какбе должен подключать всё, что audio class

anonymous
()
Ответ на: комментарий от Andrew

Да, в сырцах OSS она явно не указана, хз как он будет себя вести.

От креатива только

  {0x41e, 0x3000, "Creative Sound Blaster Extigy"},
  {0x41e, 0x3010, "Creative Sound Blaster MP3+"},
  {0x41e, 0x3020, "Creative Audigy2 NX USB",

С другой стороны они все стандартные, так что хз, почему не пашет

anonymous
()
Ответ на: комментарий от anonymous

С другой стороны они все стандартные, так что хз, почему не пашет

Вот и я хз. Сам отнюдь не прочь поковырять фряшку в качестве десктопной системы, но без звуковушки не торт, увы.

Andrew ★★★
() автор топика
Ответ на: комментарий от anonymous

После подгрузки модуля snd_uaudio в dmesg ничего нового нет. Но как usb-устройство оно в dmesg детектится при загрузке.

Andrew ★★★
() автор топика
Ответ на: комментарий от Andrew

Странно. Жаль у меня нет такого устройстваA

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.