#include "sound.h" #include "common/io/io.h" #include #include #include #include #include const char* ffDetectSound(FFlist* devices) { int defaultDev; { char audiop[12]; ssize_t plen = readlink("/dev/audio", audiop, ARRAY_SIZE(audiop)); if (plen < (ssize_t) strlen("audioN")) return "readlink(/dev/audio) failed"; defaultDev = audiop[plen - 1] - '0'; if (defaultDev < 0 || defaultDev > 9) return "Invalid audio device"; } char path[] = "/dev/audio0"; for (int idev = 0; idev < 9; ++idev) { path[strlen("/dev/audio")] = (char) ('0' + idev); FF_AUTO_CLOSE_FD int fd = open(path, O_RDWR); if (fd < 0) break; audio_device_t ad; if (ioctl(fd, AUDIO_GETDEV, &ad) < 0) continue; audio_info_t ai; if (ioctl(fd, AUDIO_GETINFO, &ai) < 0) continue; FFSoundDevice* device = ffListAdd(devices); ffStrbufInitS(&device->identifier, path); ffStrbufInitS(&device->name, ad.name); ffStrbufTrimRightSpace(&device->name); ffStrbufInitF(&device->platformApi, "%s", "SunAudio"); device->volume = (uint8_t) ((ai.play.gain * 100 + AUDIO_MAX_GAIN / 2) / AUDIO_MAX_GAIN); device->active = true; device->main = defaultDev == idev; } return NULL; }