/** * Set the parameters of the dsp device */ int dsp_configuration(int const fd_dsp, music_file_t const * audio_file) { unsigned arg; int ret; // Nb of channels arg = audio_file -> channels; MY_IOCTL(fd_dsp, SNDCTL_DSP_CHANNELS, & arg); if (arg != audio_file -> channels) { fprintf(stderr, "This number of channels not supported by OSS! Sorry...\n"); return 1; } // Sample format arg = audio_file -> oss_format; unsigned format = audio_file -> oss_format; // Some sound cards don't support AFMT_S8 but use AFMT_U8 instead... ret = ioctl(fd_dsp, SNDCTL_DSP_SETFMT, &arg); if (ret == -1 && errno == EINVAL && format == AFMT_S8) { arg = format = AFMT_U8; ret = ioctl(fd_dsp, SNDCTL_DSP_SETFMT, &arg); } if (ret == -1) { perror ("ioctl"); return 2; } if (arg != format) { fprintf(stderr, "Unable to set OSS sample format.\n"); return 1; } // Sample rate arg = audio_file -> sample_rate; MY_IOCTL(fd_dsp, SNDCTL_DSP_SPEED, & arg); if (arg != audio_file -> sample_rate) { fprintf(stderr, "This sample rate is not supported by OSS... Sorry!\n"); return 1; } return 0; }
int az_pgroup_destroy(az_groupid_t gid) { struct az_pgroup_destroy_args a; if (__azulinit()) { errno = __azul_errno; return -1; } a.gid = gid; return MY_IOCTL(__azulfd, IOC_AZ_PGROUP_DESTROY, &a); }
int64_t az_process_get_gid(pid_t pid) { struct az_process_get_gid_args a; if (__azulinit()) { errno = __azul_errno; return -1; } a.label = pid; return MY_IOCTL(__azulfd, IOC_AZ_PROCESS_GET_GID, &a); }
int az_pgroup_uncommit_all(az_groupid_t gid) { struct az_pgroup_uncommit_all_args a; if (__azulinit()) { errno = __azul_errno; return -1; } a.gid = gid; return MY_IOCTL(__azulfd, IOC_AZ_PGROUP_UNCOMMIT_ALL, &a); }
/** * Stop playing thread */ int stop_play_loop_music_buffer(pthread_t thread, music_buffer_t *music_buf) { int ret; music_buf->playing = 0; music_buf->pausing = 0; pthread_cond_broadcast(&(music_buf->cond)); MY_IOCTL(music_buf->fd_dsp, SNDCTL_DSP_RESET, NULL); ret = pthread_join(thread, NULL); if (ret) { fprintf(stderr, "pthread_join returned error code %d\n", ret); return 1; } return 0; }
int private_az_process_get_list(az_pgroup_member_t *pm, uint64_t *cnt) { struct az_process_get_list_args a; if (__azulinit()) { errno = __azul_errno; return -1; } a.memberp = pm; a.countp = cnt; return MY_IOCTL(__azulfd, IOC_AZ_PROCESS_GET_LIST, &a); }
int az_process_kill(pid_t pid, int signum) { struct az_process_kill_args a; if (__azulinit()) { errno = __azul_errno; return -1; } a.label = pid; a.signo = signum; return MY_IOCTL(__azulfd, IOC_AZ_PROCESS_KILL, &a); }
int az_pgroup_get_list(az_groupid_t *gids, size_t *numgids) { struct az_pgroup_get_list_args a; if (__azulinit()) { errno = __azul_errno; return -1; } a.gidp = (uint64_t *)gids; /* TODO FIXME */ a.countp = numgids; return MY_IOCTL(__azulfd, IOC_AZ_PGROUP_GET_LIST, &a); }
int az_pgroup_get_data(az_groupid_t gid, void *data, size_t *size) { struct az_pgroup_get_data_args a; if (__azulinit()) { errno = __azul_errno; return -1; } a.gid = gid; a.data = data; a.data_size = size; return MY_IOCTL(__azulfd, IOC_AZ_PGROUP_GET_DATA, &a); }
int az_pgroup_create(az_groupid_t gid, const void *data, size_t size) { struct az_pgroup_create_args a; if (__azulinit()) { errno = __azul_errno; return -1; } a.gid = gid; a.data = (void *)data; a.data_size = size; return MY_IOCTL(__azulfd, IOC_AZ_PGROUP_CREATE, &a); }
int az_process_move(pid_t pid, int64_t sgid, int64_t dgid) { struct az_process_move_args a; if (__azulinit()) { errno = __azul_errno; return -1; } a.label = pid; a.sgid = sgid; a.dgid = dgid; return MY_IOCTL(__azulfd, IOC_AZ_PROCESS_MOVE, &a); }
int az_process_add(az_allocid_t ignored, pid_t pid, az_groupid_t gid) { struct az_process_add_args a; if (__azulinit()) { errno = __azul_errno; return -1; } a.label = pid; a.pid = pid; a.gid = gid; return MY_IOCTL(__azulfd, IOC_AZ_PROCESS_ADD, &a); }
int az_pgroup_get_rlimit(az_groupid_t gid, process_resource_t type, az_rlimit_t *rl) { struct az_pgroup_get_rlimit_args a; if (__azulinit()) { errno = __azul_errno; return -1; } a.gid = gid; a.resource = type; a.rlimit = rl; return MY_IOCTL(__azulfd, IOC_AZ_PGROUP_GET_RLIMIT, &a); }