Towards audio controls working on FreeBSD.
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
$Id: freebsd.c,v 1.18 2005/02/17 04:57:21 rocky Exp $
|
$Id: freebsd.c,v 1.19 2005/03/03 13:48:47 rocky Exp $
|
||||||
|
|
||||||
Copyright (C) 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
Copyright (C) 2003, 2004, 2005 Rocky Bernstein <rocky@panix.com>
|
||||||
|
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
# include "config.h"
|
# include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static const char _rcsid[] = "$Id: freebsd.c,v 1.18 2005/02/17 04:57:21 rocky Exp $";
|
static const char _rcsid[] = "$Id: freebsd.c,v 1.19 2005/03/03 13:48:47 rocky Exp $";
|
||||||
|
|
||||||
#include "freebsd.h"
|
#include "freebsd.h"
|
||||||
|
|
||||||
@@ -39,6 +39,8 @@ static const char _rcsid[] = "$Id: freebsd.c,v 1.18 2005/02/17 04:57:21 rocky Ex
|
|||||||
|
|
||||||
#include <cdio/sector.h>
|
#include <cdio/sector.h>
|
||||||
|
|
||||||
|
static lba_t get_track_lba_freebsd(void *p_user_data, track_t i_track);
|
||||||
|
|
||||||
static access_mode_t
|
static access_mode_t
|
||||||
str_to_access_mode_freebsd(const char *psz_access_mode)
|
str_to_access_mode_freebsd(const char *psz_access_mode)
|
||||||
{
|
{
|
||||||
@@ -260,6 +262,114 @@ read_toc_freebsd (void *p_user_data)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Get the volume of an audio CD.
|
||||||
|
|
||||||
|
@param p_cdio the CD object to be acted upon.
|
||||||
|
*/
|
||||||
|
static driver_return_code_t
|
||||||
|
audio_get_volume_freebsd (void *p_user_data,
|
||||||
|
/*out*/ cdio_audio_volume_t *p_volume)
|
||||||
|
{
|
||||||
|
|
||||||
|
const _img_private_t *p_env = p_user_data;
|
||||||
|
return ioctl(p_env->gen.fd, CDIOCGETVOL, p_volume);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Pause playing CD through analog output
|
||||||
|
|
||||||
|
@param p_cdio the CD object to be acted upon.
|
||||||
|
*/
|
||||||
|
static driver_return_code_t
|
||||||
|
audio_pause_freebsd (void *p_user_data)
|
||||||
|
{
|
||||||
|
|
||||||
|
const _img_private_t *p_env = p_user_data;
|
||||||
|
return ioctl(p_env->gen.fd, CDIOCPAUSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Playing starting at given MSF through analog output
|
||||||
|
|
||||||
|
@param p_cdio the CD object to be acted upon.
|
||||||
|
*/
|
||||||
|
static driver_return_code_t
|
||||||
|
audio_play_msf_freebsd (void *p_user_data, msf_t *p_msf)
|
||||||
|
{
|
||||||
|
|
||||||
|
const _img_private_t *p_env = p_user_data;
|
||||||
|
return ioctl(p_env->gen.fd, CDIOCPLAYMSF, p_msf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Playing CD through analog output at the desired track and index
|
||||||
|
|
||||||
|
@param p_cdio the CD object to be acted upon.
|
||||||
|
@param p_track_index location to start/end.
|
||||||
|
*/
|
||||||
|
static driver_return_code_t
|
||||||
|
audio_play_track_index_freebsd (void *p_user_data,
|
||||||
|
cdio_track_index_t *p_track_index)
|
||||||
|
{
|
||||||
|
|
||||||
|
const _img_private_t *p_env = p_user_data;
|
||||||
|
msf_t start_msf;
|
||||||
|
/* msf_t end_msf; */
|
||||||
|
lsn_t i_lsn = get_track_lba_freebsd(p_user_data, p_track_index->i_start_track);
|
||||||
|
/* lsn_t i_end_lsn = cdio_msf_to_lsn(&end_msf); */
|
||||||
|
|
||||||
|
/*get_track_msf_bsdi(p_user_data, p_track_index->i_end_track, &end_msf);*/
|
||||||
|
return ioctl(p_env->gen.fd, CDIOCPLAYMSF, &start_msf);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Read Audio Subchannel information
|
||||||
|
|
||||||
|
@param p_cdio the CD object to be acted upon.
|
||||||
|
|
||||||
|
*/
|
||||||
|
#if 0
|
||||||
|
static driver_return_code_t
|
||||||
|
audio_read_subchannel_freebsd (void *p_user_data,
|
||||||
|
cdio_subchannel_t *p_subchannel)
|
||||||
|
{
|
||||||
|
|
||||||
|
const _img_private_t *p_env = p_user_data;
|
||||||
|
return ioctl(p_env->gen.fd, CDROMSUBCHNL, p_subchannel);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Resume playing an audio CD.
|
||||||
|
|
||||||
|
@param p_cdio the CD object to be acted upon.
|
||||||
|
|
||||||
|
*/
|
||||||
|
static driver_return_code_t
|
||||||
|
audio_resume_freebsd (void *p_user_data)
|
||||||
|
{
|
||||||
|
|
||||||
|
const _img_private_t *p_env = p_user_data;
|
||||||
|
return ioctl(p_env->gen.fd, CDIOCRESUME, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Set the volume of an audio CD.
|
||||||
|
|
||||||
|
@param p_cdio the CD object to be acted upon.
|
||||||
|
|
||||||
|
*/
|
||||||
|
static driver_return_code_t
|
||||||
|
audio_set_volume_freebsd (void *p_user_data,
|
||||||
|
const cdio_audio_volume_t *p_volume)
|
||||||
|
{
|
||||||
|
|
||||||
|
const _img_private_t *p_env = p_user_data;
|
||||||
|
return ioctl(p_env->gen.fd, CDIOCSETVOL, p_volume);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Eject media. Return 1 if successful, 0 otherwise.
|
Eject media. Return 1 if successful, 0 otherwise.
|
||||||
*/
|
*/
|
||||||
@@ -422,7 +532,7 @@ _get_track_green_freebsd(void *user_data, track_t i_track)
|
|||||||
CDIO_INVALID_LBA is returned if there is no track entry.
|
CDIO_INVALID_LBA is returned if there is no track entry.
|
||||||
*/
|
*/
|
||||||
static lba_t
|
static lba_t
|
||||||
_get_track_lba_freebsd(void *user_data, track_t i_track)
|
get_track_lba_freebsd(void *user_data, track_t i_track)
|
||||||
{
|
{
|
||||||
_img_private_t *p_env = user_data;
|
_img_private_t *p_env = user_data;
|
||||||
|
|
||||||
@@ -580,6 +690,12 @@ cdio_open_am_freebsd (const char *psz_orig_source_name,
|
|||||||
char *psz_source_name;
|
char *psz_source_name;
|
||||||
|
|
||||||
cdio_funcs_t _funcs = {
|
cdio_funcs_t _funcs = {
|
||||||
|
.audio_get_volume = audio_get_volume_freebsd,
|
||||||
|
.audio_pause = audio_pause_freebsd,
|
||||||
|
.audio_play_msf = audio_play_msf_freebsd,
|
||||||
|
.audio_play_track_index = audio_play_track_index_freebsd,
|
||||||
|
.audio_resume = audio_resume_freebsd,
|
||||||
|
.audio_set_volume = audio_set_volume_freebsd,
|
||||||
.eject_media = _eject_media_freebsd,
|
.eject_media = _eject_media_freebsd,
|
||||||
.free = _free_freebsd,
|
.free = _free_freebsd,
|
||||||
.get_arg = _get_arg_freebsd,
|
.get_arg = _get_arg_freebsd,
|
||||||
@@ -597,7 +713,7 @@ cdio_open_am_freebsd (const char *psz_orig_source_name,
|
|||||||
.get_track_copy_permit = get_track_copy_permit_generic,
|
.get_track_copy_permit = get_track_copy_permit_generic,
|
||||||
.get_track_format = _get_track_format_freebsd,
|
.get_track_format = _get_track_format_freebsd,
|
||||||
.get_track_green = _get_track_green_freebsd,
|
.get_track_green = _get_track_green_freebsd,
|
||||||
.get_track_lba = _get_track_lba_freebsd,
|
.get_track_lba = get_track_lba_freebsd,
|
||||||
.get_track_preemphasis = get_track_preemphasis_generic,
|
.get_track_preemphasis = get_track_preemphasis_generic,
|
||||||
.get_track_msf = NULL,
|
.get_track_msf = NULL,
|
||||||
.lseek = cdio_generic_lseek,
|
.lseek = cdio_generic_lseek,
|
||||||
|
|||||||
Reference in New Issue
Block a user