NEWS: update what's up
lib/driver/Makefile.am: increment library number lib/driver/FreeBSD/*: FreeBSD get_media_changed fixes for ioctl.
This commit is contained in:
11
NEWS
11
NEWS
@@ -1,5 +1,16 @@
|
|||||||
$Id: NEWS,v 1.124 2008/10/20 01:10:19 rocky Exp $
|
$Id: NEWS,v 1.124 2008/10/20 01:10:19 rocky Exp $
|
||||||
|
|
||||||
|
version 0.82
|
||||||
|
2009-10-27
|
||||||
|
|
||||||
|
- Remove all uses of CDIO_MIN_DRIVER,
|
||||||
|
CDIO_MAX_DRIVER, CDIO_MIN_DEVICE_DRIVER or CDIO_MAX_DEVICE_DRIVER.
|
||||||
|
- FreeBSD get_media_changed fixes
|
||||||
|
- MingGW/Msys compilation issues
|
||||||
|
- Add OS/2 driver
|
||||||
|
- Cross compilations fixes and uclinix is like GNU/Linux
|
||||||
|
- Numerous other bug fixes
|
||||||
|
|
||||||
version 0.81
|
version 0.81
|
||||||
2008-10-27
|
2008-10-27
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
control of the CD drive. Culled initially I think from xine's or
|
control of the CD drive. Culled initially I think from xine's or
|
||||||
mplayer's FreeBSD code with lots of modifications.
|
mplayer's FreeBSD code with lots of modifications.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_CONFIG_H
|
#ifdef HAVE_CONFIG_H
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -651,6 +651,8 @@ cdio_get_devices_freebsd (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Scan are ATAPI devices */
|
/* Scan are ATAPI devices */
|
||||||
|
exists = true;
|
||||||
|
|
||||||
for ( c='0'; exists && c <='9'; c++ ) {
|
for ( c='0'; exists && c <='9'; c++ ) {
|
||||||
sprintf(drive, "/dev/acd%c%s", c, DEVICE_POSTFIX);
|
sprintf(drive, "/dev/acd%c%s", c, DEVICE_POSTFIX);
|
||||||
exists = cdio_is_cdrom(drive, NULL);
|
exists = cdio_is_cdrom(drive, NULL);
|
||||||
@@ -707,6 +709,8 @@ cdio_get_default_device_freebsd()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Scan are ATAPI devices */
|
/* Scan are ATAPI devices */
|
||||||
|
exists = true;
|
||||||
|
|
||||||
for ( c='0'; exists && c <='9'; c++ ) {
|
for ( c='0'; exists && c <='9'; c++ ) {
|
||||||
sprintf(drive, "/dev/acd%c%s", c, DEVICE_POSTFIX);
|
sprintf(drive, "/dev/acd%c%s", c, DEVICE_POSTFIX);
|
||||||
exists = cdio_is_cdrom(drive, NULL);
|
exists = cdio_is_cdrom(drive, NULL);
|
||||||
@@ -760,6 +764,57 @@ get_media_changed_freebsd (const void *p_user_data)
|
|||||||
}
|
}
|
||||||
#endif /*HAVE_FREEBSD_CDROM*/
|
#endif /*HAVE_FREEBSD_CDROM*/
|
||||||
|
|
||||||
|
/*! Find out if media has changed since the last call. @param
|
||||||
|
p_user_data the environment of the CD object to be acted upon.
|
||||||
|
@return 1 if media has changed since last call, 0 if not. Error
|
||||||
|
return codes are the same as driver_return_code_t
|
||||||
|
*/
|
||||||
|
|
||||||
|
int
|
||||||
|
get_media_changed_freebsd (const void *p_user_data)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_FREEBSD_CDROM
|
||||||
|
const _img_private_t *p_env = p_user_data;
|
||||||
|
int changed = 0 ;
|
||||||
|
|
||||||
|
if ( p_env->access_mode == _AM_CAM ) {
|
||||||
|
changed = mmc_get_media_changed( p_env->gen.cdio );
|
||||||
|
}
|
||||||
|
else if ( p_env->access_mode == _AM_IOCTL ) {
|
||||||
|
changed = mmc_get_media_changed( p_env->gen.cdio );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return DRIVER_OP_UNSUPPORTED;
|
||||||
|
|
||||||
|
return ((changed > 0) ? changed : 0);
|
||||||
|
|
||||||
|
#else
|
||||||
|
return DRIVER_OP_NO_DRIVER;
|
||||||
|
|
||||||
|
#endif /*HAVE_FREEBSD_CDROM*/
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char*
|
||||||
|
get_access_mode(const char *source)
|
||||||
|
{
|
||||||
|
if(source) {
|
||||||
|
if (!(strncmp(source, "/dev/acd", 8)))
|
||||||
|
return "ioctl";
|
||||||
|
else {
|
||||||
|
char devname[256];
|
||||||
|
int bytes = readlink(source, devname, 255);
|
||||||
|
|
||||||
|
if(bytes >0) {
|
||||||
|
devname[bytes]=0;
|
||||||
|
if (!(strncmp(devname, "acd", 3)))
|
||||||
|
return "ioctl";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return "CAM";
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Initialization routine. This is the only thing that doesn't
|
Initialization routine. This is the only thing that doesn't
|
||||||
get called via a function pointer. In fact *we* are the
|
get called via a function pointer. In fact *we* are the
|
||||||
@@ -786,6 +841,9 @@ cdio_open_am_freebsd (const char *psz_orig_source_name,
|
|||||||
CdIo *ret;
|
CdIo *ret;
|
||||||
_img_private_t *_data;
|
_img_private_t *_data;
|
||||||
char *psz_source_name;
|
char *psz_source_name;
|
||||||
|
|
||||||
|
if(!psz_access_mode)
|
||||||
|
psz_access_mode = get_access_mode(psz_orig_source_name);
|
||||||
|
|
||||||
cdio_funcs_t _funcs = {
|
cdio_funcs_t _funcs = {
|
||||||
.audio_get_volume = audio_get_volume_freebsd,
|
.audio_get_volume = audio_get_volume_freebsd,
|
||||||
|
|||||||
@@ -159,6 +159,8 @@ void get_drive_cap_freebsd_cam (const _img_private_t *p_env,
|
|||||||
|
|
||||||
static int get_media_changed_freebsd (const void *p_user_data);
|
static int get_media_changed_freebsd (const void *p_user_data);
|
||||||
|
|
||||||
|
int get_media_changed_freebsd (const void *p_user_data);
|
||||||
|
|
||||||
char *get_mcn_freebsd_ioctl (const _img_private_t *p_env);
|
char *get_mcn_freebsd_ioctl (const _img_private_t *p_env);
|
||||||
|
|
||||||
void free_freebsd_cam (void *obj);
|
void free_freebsd_cam (void *obj);
|
||||||
|
|||||||
@@ -76,21 +76,17 @@ int
|
|||||||
read_audio_sectors_freebsd_ioctl (_img_private_t *_obj, void *data, lsn_t lsn,
|
read_audio_sectors_freebsd_ioctl (_img_private_t *_obj, void *data, lsn_t lsn,
|
||||||
unsigned int nblocks)
|
unsigned int nblocks)
|
||||||
{
|
{
|
||||||
unsigned char buf[CDIO_CD_FRAMESIZE_RAW] = { 0, };
|
int bsize = CDIO_CD_FRAMESIZE_RAW;
|
||||||
struct ioc_read_audio cdda;
|
|
||||||
|
/* set block size */
|
||||||
cdda.address.lba = lsn;
|
if (ioctl(_obj->gen.fd, CDRIOCSETBLOCKSIZE, &bsize) == -1) return 1;
|
||||||
cdda.buffer = buf;
|
|
||||||
cdda.nframes = nblocks;
|
|
||||||
cdda.address_format = CDIO_CDROM_LBA;
|
|
||||||
|
|
||||||
/* read a frame */
|
/* read a frame */
|
||||||
if(ioctl(_obj->gen.fd, CDIOCREADAUDIO, &cdda) < 0) {
|
if (pread(_obj->gen.fd, data, nblocks*bsize, lsn*bsize) != nblocks*bsize) {
|
||||||
perror("CDIOCREADAUDIO");
|
perror("read_audio_sectors_freebsd_ioctl");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
memcpy (data, buf, CDIO_CD_FRAMESIZE_RAW);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@
|
|||||||
# public release, then set AGE to 0. A changed interface means an
|
# public release, then set AGE to 0. A changed interface means an
|
||||||
# incompatibility with previous versions.
|
# incompatibility with previous versions.
|
||||||
|
|
||||||
libcdio_la_CURRENT = 11
|
libcdio_la_CURRENT = 12
|
||||||
libcdio_la_REVISION = 0
|
libcdio_la_REVISION = 0
|
||||||
libcdio_la_AGE = 0
|
libcdio_la_AGE = 0
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user