#ifndef FD_xtuner_h_ #include "xtuner.h" #endif extern flags_t flags; extern xtuner_data_t xtuner_data; extern mixer_data_t mixer_data; /* ========================================================================= */ /* Checks for mixer device and bass-treble adjustment capabilites */ /* ========================================================================= */ init_hw() { int i, level, curmask; char errmsg[64], iocstr[64]; /* Open device */ if ((mixer_data.dev_fd = open("/dev/mixer", O_RDONLY)) < 0) { sprintf(errmsg, "%s: Cannot open device %s", "Xtuner", "/dev/mixer"); perror(errmsg); return; } flags.mixer_f = TRUE; /* Read device mask */ do_ioctl(SOUND_MIXER_READ_DEVMASK, &mixer_data.devmask, "SOUND_MIXER_READ_DEVMASK", IOC_DATA_IN); /* If bass and treble is supported then goooden sweet*/ if ((mixer_data.devmask & SOUND_MASK_BASS) && (mixer_data.devmask & SOUND_MASK_TREBLE)) mixer_data.mixer_supp = TRUE; else fprintf(stderr,"Xtuner: Mixer not supported"); } /* ========================================================================= */ /* Reads the current bass-treble values */ /* ========================================================================= */ query_status() { int i, level, curmask; char iocstr[64]; sprintf(iocstr, "MIXER_READ: TREBLE"); do_ioctl(MIXER_READ(SOUND_MIXER_TREBLE), &level, iocstr, IOC_DATA_IN); mixer_data.treble_level = (level & 0xff); sprintf(iocstr, "MIXER_READ: BASS"); do_ioctl(MIXER_READ(SOUND_MIXER_BASS), &level, iocstr, IOC_DATA_IN); mixer_data.bass_level = (level & 0xff); sprintf(iocstr, "MIXER_READ: VOLUME"); do_ioctl(MIXER_READ(SOUND_MIXER_VOLUME), &level, iocstr, IOC_DATA_IN); mixer_data.volume_level = (level & 0xff); if (mixer_data.treble_level > 100) mixer_data.treble_level = 100; if (mixer_data.bass_level > 100) mixer_data.bass_level = 100; } /* ========================================================================= */ /* Adjusts the bass-treble levels */ /* ========================================================================= */ adjust_mixer(int control) { int level; char iocstr[64]; if (control == SOUND_MIXER_BASS) level = (mixer_data.bass_level << 8) | mixer_data.bass_level; else level = (mixer_data.treble_level << 8) | mixer_data.treble_level; sprintf(iocstr, "MIXER_WRITE[%d]", control); do_ioctl(MIXER_WRITE(control), &level, iocstr, IOC_DATA_OUT); }