Вероятно, потому, что это было удобно в то время, и это был самый простой способ сделать его доступным для пользователя, используя уже существующие структуры ядра.
Малоизвестно, что можно записывать в /dev/input/eventX
файлы и таким образом генерировать события входного -уровня.
Таким же образом можно записатьEV_SND
события в /dev/input/eventX
файл, представляющий спикера (или на одну из симлинков, обычно /dev/input/by-path/platform-pcspkr-event-spkr
), и таким образом использовать спикера для генерировать звук. Это еще менее известно.:-)
Вот Perl oneliner для 32-битных систем, который генерирует ноту с заданной высотой тона
perl -e 'print pack("qssl", 0, 0x12, 2, 2000)' > /dev/input/by-path/platform-pcspkr-event-spkr
и вот еще один онлайнер, чтобы его отключить
perl -e 'print pack("qssl", 0, 0x12, 2, 0)' > /dev/input/by-path/platform-pcspkr-event-spkr
Для 64-битных систем используйте
пакет ("qqssl", 0, 0, 0x12, 2, ШАГ)
Фактический макет зависит от того, как скомпилирован заголовочный файл C, определяющий структуру.
Кстати, события подключения для аудиоустройств HDA также отображаются на входном слое в виде файлов /dev/input/eventX
. Хотя логичнее классифицировать их как фактические входные события.
вывести желаемое значение в следующие два файла:
/sys/kernel/debug/bluetooth/hci0/adv_min_interval
/sys/kernel/debug/bluetooth/hci0/adv_max_interval
где hci0 — ваше устройство bt/ble. Доп. интервал рассчитывается как значение *0,625 мс
Для того, чтобы это работало, вам нужно иметь CONFIG _BT _DEBUGFS=y в конфигурации вашего ядра.
Это работает на bluez -5.50, не уверен насчет предыдущих версий.