summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-07-09 04:15:47 +0000
committerSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-07-09 04:15:47 +0000
commite52097ddfe6c54547af8e3e47aadd33e385a4db7 (patch)
treeca50fc5e6fb434d712fdd47c1fc1ed21ca0f47c4 /plugins
parent83e06df4098064f5e4ca3c9ae1214019e934e907 (diff)
downloadpcsxr-e52097ddfe6c54547af8e3e47aadd33e385a4db7.tar.gz
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@54386 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'plugins')
-rw-r--r--plugins/dfcdrom/cdr-freebsd.c38
-rw-r--r--plugins/dfcdrom/cdr-linux.c43
-rw-r--r--plugins/dfcdrom/cdr-null.c22
-rw-r--r--plugins/dfcdrom/cdr-solaris.c22
-rw-r--r--plugins/dfcdrom/cdr.c51
-rw-r--r--plugins/dfcdrom/cdr.h29
-rw-r--r--plugins/dfcdrom/cdrcfg-0.1df/main.c33
7 files changed, 145 insertions, 93 deletions
diff --git a/plugins/dfcdrom/cdr-freebsd.c b/plugins/dfcdrom/cdr-freebsd.c
index 49b8d83a..41c608b3 100644
--- a/plugins/dfcdrom/cdr-freebsd.c
+++ b/plugins/dfcdrom/cdr-freebsd.c
@@ -25,13 +25,15 @@
char *LibName = N_("CD-ROM Drive Reader");
+static int handle = -1;
+
int OpenCdHandle(const char *dev) {
- int h, parameter;
+ int parameter;
char spindown;
- h = open(dev, O_RDONLY);
+ handle = open(dev, O_RDONLY);
- if (h != -1) {
+ if (handle != -1) {
if (SpinDown != SPINDOWN_VENDOR_SPECIFIC) {
if (SpinDown > SPINDOWN_1S) {
parameter = (1 << (SpinDown - SPINDOWN_1S));
@@ -39,19 +41,19 @@ int OpenCdHandle(const char *dev) {
parameter = 1;
}
- ioctl(h, IOCATASSPINDOWN, &parameter);
+ ioctl(handle, IOCATASSPINDOWN, &parameter);
parameter = CdrSpeed * 177;
if (parameter == 0) parameter = CDR_MAX_SPEED;
- ioctl(h, CDRIOCREADSPEED, &parameter);
+ ioctl(handle, CDRIOCREADSPEED, &parameter);
}
}
- return h;
+ return (h == -1) ? -1 : 0;
}
-void CloseCdHandle(int handle) {
+void CloseCdHandle() {
int parameter;
parameter = 0;
@@ -61,24 +63,30 @@ void CloseCdHandle(int handle) {
ioctl(handle, CDRIOCREADSPEED, &parameter);
close(handle);
+
+ handle = -1;
+}
+
+int IsCdHandleOpen () {
+ return (handle != -1);
}
-long GetTN(int handle, unsigned char *buffer) {
+long GetTN(unsigned char *buffer) {
buffer[0] = 0;
buffer[1] = 0;
return 0;
}
-long GetTD(int handle, unsigned char track, unsigned char *buffer) {
+long GetTD(unsigned char track, unsigned char *buffer) {
memset(buffer + 1, 0, 3);
return 0;
}
-long GetTE(int handle, unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
+long GetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
return -1;
}
-long ReadSector(int handle, crdata *cr) {
+long ReadSector(crdata *cr) {
unsigned int lba = msf_to_lba(cr->msf.cdmsf_min0, cr->msf.cdmsf_sec0,
cr->msf.cdmsf_frame0);
@@ -99,19 +107,19 @@ long ReadSector(int handle, crdata *cr) {
return 0;
}
-long PlayCDDA(int handle, unsigned char *sector) {
+long PlayCDDA(unsigned char *sector) {
return -1;
}
-long StopCDDA(int handle) {
+long StopCDDA() {
return -1;
}
-long GetStatus(int handle, int playing, struct CdrStat *stat) {
+long GetStatus(int playing, struct CdrStat *stat) {
return -1;
}
-unsigned char *ReadSub(int handle, const unsigned char *time) {
+unsigned char *ReadSub(const unsigned char *time) {
return NULL;
}
diff --git a/plugins/dfcdrom/cdr-linux.c b/plugins/dfcdrom/cdr-linux.c
index b55e15d2..fdd41ddb 100644
--- a/plugins/dfcdrom/cdr-linux.c
+++ b/plugins/dfcdrom/cdr-linux.c
@@ -25,33 +25,40 @@
char *LibName = N_("CD-ROM Drive Reader");
+static int handle = -1;
+
int OpenCdHandle(const char *dev) {
- int h;
char spindown;
- h = open(dev, O_RDONLY);
+ handle = open(dev, O_RDONLY);
- if (h != -1) {
- ioctl(h, CDROM_LOCKDOOR, 0);
-// ioctl(h, CDROMSTART, NULL);
+ if (handle != -1) {
+ ioctl(handle, CDROM_LOCKDOOR, 0);
+// ioctl(handle, CDROMSTART, NULL);
spindown = (char)SpinDown;
- ioctl(h, CDROMSETSPINDOWN, &spindown);
+ ioctl(handle, CDROMSETSPINDOWN, &spindown);
- ioctl(h, CDROM_SELECT_SPEED, CdrSpeed);
+ ioctl(handle, CDROM_SELECT_SPEED, CdrSpeed);
}
- return h;
+ return (handle == -1) ? -1 : 0;
}
-void CloseCdHandle(int handle) {
+void CloseCdHandle() {
char spindown = SPINDOWN_VENDOR_SPECIFIC;
ioctl(handle, CDROMSETSPINDOWN, &spindown);
close(handle);
+
+ handle = -1;
+}
+
+int IsCdHandleOpen () {
+ return (handle != -1);
}
-long GetTN(int handle, unsigned char *buffer) {
+long GetTN(unsigned char *buffer) {
struct cdrom_tochdr toc;
if (ioctl(handle, CDROMREADTOCHDR, &toc) == -1)
@@ -63,7 +70,7 @@ long GetTN(int handle, unsigned char *buffer) {
return 0;
}
-long GetTD(int handle, unsigned char track, unsigned char *buffer) {
+long GetTD(unsigned char track, unsigned char *buffer) {
struct cdrom_tocentry entry;
if (track == 0)
@@ -81,7 +88,7 @@ long GetTD(int handle, unsigned char track, unsigned char *buffer) {
return 0;
}
-long GetTE(int handle, unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
+long GetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
struct cdrom_tocentry entry;
char msf[3];
@@ -100,19 +107,19 @@ long GetTE(int handle, unsigned char track, unsigned char *m, unsigned char *s,
return 0;
}
-long ReadSector(int handle, crdata *cr) {
+long ReadSector(crdata *cr) {
if (ioctl(handle, CDROMREADRAW, cr) == -1)
return -1;
return 0;
}
-long PlayCDDA(int handle, unsigned char *sector) {
+long PlayCDDA(unsigned char *sector) {
struct cdrom_msf addr;
unsigned char ptmp[4];
// 0 is the last track of every cdrom, so play up to there
- if (GetTD(handle, 0, ptmp) == -1)
+ if (GetTD(0, ptmp) == -1)
return -1;
addr.cdmsf_min0 = sector[0];
@@ -128,7 +135,7 @@ long PlayCDDA(int handle, unsigned char *sector) {
return 0;
}
-long StopCDDA(int handle) {
+long StopCDDA() {
struct cdrom_subchnl sc;
sc.cdsc_format = CDROM_MSF;
@@ -145,7 +152,7 @@ long StopCDDA(int handle) {
return 0;
}
-long GetStatus(int handle, int playing, struct CdrStat *stat) {
+long GetStatus(int playing, struct CdrStat *stat) {
struct cdrom_subchnl sc;
int ret;
char spindown;
@@ -193,7 +200,7 @@ long GetStatus(int handle, int playing, struct CdrStat *stat) {
return 0;
}
-unsigned char *ReadSub(int handle, const unsigned char *time) {
+unsigned char *ReadSub(const unsigned char *time) {
static struct SubQ subq;
struct cdrom_subchnl subchnl;
int ret;
diff --git a/plugins/dfcdrom/cdr-null.c b/plugins/dfcdrom/cdr-null.c
index c96632fa..0ee8eea3 100644
--- a/plugins/dfcdrom/cdr-null.c
+++ b/plugins/dfcdrom/cdr-null.c
@@ -29,41 +29,45 @@ int OpenCdHandle(const char *dev) {
return -1;
}
-void CloseCdHandle(int handle) {
+void CloseCdHandle() {
}
-long GetTN(int handle, unsigned char *buffer) {
+int IsCdHandleOpen () {
+ return 0;
+}
+
+long GetTN(unsigned char *buffer) {
buffer[0] = 0;
buffer[1] = 0;
return 0;
}
-long GetTD(int handle, unsigned char track, unsigned char *buffer) {
+long GetTD(unsigned char track, unsigned char *buffer) {
memset(buffer + 1, 0, 3);
return 0;
}
-long GetTE(int handle, unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
+long GetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
return -1;
}
-long ReadSector(int handle, crdata *cr) {
+long ReadSector(crdata *cr) {
return -1;
}
-long PlayCDDA(int handle, unsigned char *sector) {
+long PlayCDDA(unsigned char *sector) {
return -1;
}
-long StopCDDA(int handle) {
+long StopCDDA() {
return -1;
}
-long GetStatus(int handle, int playing, struct CdrStat *stat) {
+long GetStatus(int playing, struct CdrStat *stat) {
return -1;
}
-unsigned char *ReadSub(int handle, const unsigned char *time) {
+unsigned char *ReadSub(const unsigned char *time) {
return NULL;
}
diff --git a/plugins/dfcdrom/cdr-solaris.c b/plugins/dfcdrom/cdr-solaris.c
index e161bb29..435c76f4 100644
--- a/plugins/dfcdrom/cdr-solaris.c
+++ b/plugins/dfcdrom/cdr-solaris.c
@@ -29,41 +29,45 @@ int OpenCdHandle(const char *dev) {
return -1;
}
-void CloseCdHandle(int handle) {
+void CloseCdHandle() {
}
-long GetTN(int handle, unsigned char *buffer) {
+int IsCdHandleOpen () {
+ return 0;
+}
+
+long GetTN(unsigned char *buffer) {
buffer[0] = 0;
buffer[1] = 0;
return 0;
}
-long GetTD(int handle, unsigned char track, unsigned char *buffer) {
+long GetTD(unsigned char track, unsigned char *buffer) {
memset(buffer + 1, 0, 3);
return 0;
}
-long GetTE(int handle, unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
+long GetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
return -1;
}
-long ReadSector(int handle, crdata *cr) {
+long ReadSector(crdata *cr) {
return -1;
}
-long PlayCDDA(int handle, unsigned char *sector) {
+long PlayCDDA(unsigned char *sector) {
return -1;
}
-long StopCDDA(int handle) {
+long StopCDDA() {
return -1;
}
-long GetStatus(int handle, int playing, struct CdrStat *stat) {
+long GetStatus(int playing, struct CdrStat *stat) {
return -1;
}
-unsigned char *ReadSub(int handle, const unsigned char *time) {
+unsigned char *ReadSub(const unsigned char *time) {
return NULL;
}
diff --git a/plugins/dfcdrom/cdr.c b/plugins/dfcdrom/cdr.c
index fd33dddf..eb08929c 100644
--- a/plugins/dfcdrom/cdr.c
+++ b/plugins/dfcdrom/cdr.c
@@ -47,7 +47,6 @@ int cacheaddr;
crdata cr;
unsigned char lastTime[3];
-int cdHandle;
pthread_t thread;
int subqread;
volatile int stopth, found, locked, playing;
@@ -70,9 +69,7 @@ void *CdrThread(void *arg);
extern char *LibName;
long CDRinit(void) {
- cdHandle = -1;
thread = -1;
-
return 0;
}
@@ -83,11 +80,10 @@ long CDRshutdown(void) {
long CDRopen(void) {
LoadConf();
- if (cdHandle > 0)
+ if (IsCdHandleOpen())
return 0; /* it's already open */
- cdHandle = OpenCdHandle(CdromDev);
- if (cdHandle == -1) { // if we can't open the cdrom we'll works as a null plugin
+ if (OpenCdHandle(CdromDev) == -1) { // if we can't open the cdrom we'll works as a null plugin
fprintf(stderr, "CDR: Could not open %s\n", CdromDev);
}
@@ -125,12 +121,11 @@ long CDRopen(void) {
}
long CDRclose(void) {
- if (cdHandle < 1) return 0;
+ if (!IsCdHandleOpen()) return 0;
if (playing) CDRstop();
- CloseCdHandle(cdHandle);
- cdHandle = -1;
+ CloseCdHandle();
if (thread != -1) {
if (locked == 0) {
@@ -160,13 +155,13 @@ long CDRclose(void) {
// byte 0 - start track
// byte 1 - end track
long CDRgetTN(unsigned char *buffer) {
- if (cdHandle < 1) {
+ if (!IsCdHandleOpen()) {
buffer[0] = 1;
buffer[1] = 1;
return 0;
}
- return GetTN(cdHandle, buffer);
+ return GetTN(buffer);
}
// return Track Time
@@ -175,17 +170,17 @@ long CDRgetTN(unsigned char *buffer) {
// byte 1 - second
// byte 2 - minute
long CDRgetTD(unsigned char track, unsigned char *buffer) {
- if (cdHandle < 1) {
+ if (!IsCdHandleOpen()) {
memset(buffer + 1, 0, 3);
return 0;
}
- return GetTD(cdHandle, track, buffer);
+ return GetTD(track, buffer);
}
// normal reading
long ReadNormal() {
- if (ReadSector(cdHandle, &cr) == -1)
+ if (ReadSector(&cr) == -1)
return -1;
return 0;
@@ -270,7 +265,7 @@ void *CdrThread(void *arg) {
for (i = 0; i < CacheSize; i++) {
memcpy(&cdcache[i].cr.msf, curTime, 3);
PRINTF("reading %d:%d:%d\n", curTime[0], curTime[1], curTime[2]);
- cdcache[i].ret = ReadSector(cdHandle, &cdcache[i].cr);
+ cdcache[i].ret = ReadSector(&cdcache[i].cr);
PRINTF("readed %x:%x:%x\n", cdcache[i].cr.buf[12], cdcache[i].cr.buf[13], cdcache[i].cr.buf[14]);
if (cdcache[i].ret == -1) break;
@@ -301,7 +296,7 @@ void *CdrThread(void *arg) {
// byte 2 - frame
// uses bcd format
long CDRreadTrack(unsigned char *time) {
- if (cdHandle < 1) {
+ if (!IsCdHandleOpen()) {
memset(cr.buf, 0, DATA_SIZE);
return 0;
}
@@ -330,7 +325,7 @@ unsigned char *CDRgetBuffer(void) {
// byte 2 - frame
// does NOT uses bcd format
long CDRplay(unsigned char *sector) {
- if (cdHandle < 1)
+ if (!IsCdHandleOpen())
return 0;
// If play was called with the same time as the previous call,
@@ -345,7 +340,7 @@ long CDRplay(unsigned char *sector) {
initial_time = msf_to_lba(sector[0], sector[1], sector[2]);
- if (PlayCDDA(cdHandle, sector) == 0) {
+ if (PlayCDDA(sector) == 0) {
playing = 1;
return 0;
}
@@ -355,10 +350,10 @@ long CDRplay(unsigned char *sector) {
// stops cdda audio
long CDRstop(void) {
- if (cdHandle < 1)
+ if (!IsCdHandleOpen())
return 0;
- if (StopCDDA(cdHandle) == 0) {
+ if (StopCDDA() == 0) {
playing = 0;
initial_time = 0;
@@ -388,10 +383,10 @@ long CDRstop(void) {
// byte 2 - frame
long CDRgetStatus(struct CdrStat *stat) {
- if (cdHandle < 1)
+ if (!IsCdHandleOpen())
return -1;
- return GetStatus(cdHandle, playing, stat);
+ return GetStatus(playing, stat);
}
unsigned char *CDRgetBufferSub(void) {
@@ -402,7 +397,7 @@ unsigned char *CDRgetBufferSub(void) {
if (ReadMode == THREADED) pthread_mutex_lock(&mut);
- p = ReadSub(cdHandle, lastTime);
+ p = ReadSub(lastTime);
if (ReadMode == THREADED) pthread_mutex_unlock(&mut);
@@ -427,8 +422,8 @@ long CDRreadCDDA(unsigned char m, unsigned char s, unsigned char f, unsigned cha
// get Track End Time
long CDRgetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f) {
- if (cdHandle < 1) return -1;
- return GetTE(cdHandle, track, m, s, f);
+ if (!IsCdHandleOpen()) return -1;
+ return GetTE(track, m, s, f);
}
void ExecCfg(char *arg) {
@@ -469,11 +464,9 @@ void CDRabout() {
long CDRtest(void) {
#ifndef USE_NULL
- cdHandle = open(CdromDev, O_RDONLY);
- if (cdHandle == -1)
+ if (OpenCdHandle(CdromDev) == -1)
return -1;
- close(cdHandle);
- cdHandle = -1;
+ CloseCdHandle();
#endif
return 0;
}
diff --git a/plugins/dfcdrom/cdr.h b/plugins/dfcdrom/cdr.h
index 7faa3c0e..fa4f8cc0 100644
--- a/plugins/dfcdrom/cdr.h
+++ b/plugins/dfcdrom/cdr.h
@@ -74,7 +74,7 @@ struct cdrom_msf {
#define CD_FRAMESIZE_SUB 96
#define CD_MSF_OFFSET 150
-#ifdef __FreeBSD__
+#if defined (__FreeBSD__)
#include <sys/ata.h>
#include <sys/cdio.h>
@@ -83,6 +83,14 @@ struct cdrom_msf {
#define DEV_DEF "/dev/acd0"
+#elif defined (__sun)
+
+#include <sys/cdio.h>
+
+/* The CD-ROM device name seems to vary on different computers on Solaris, so
+ let user set this. */
+#define DEV_DEF ""
+
#else
#define DEV_DEF ""
@@ -178,14 +186,15 @@ unsigned int msf_to_lba(char m, char s, char f);
void lba_to_msf(unsigned int s, char *msf);
int OpenCdHandle();
-void CloseCdHandle(int handle);
-long GetTN(int handle, unsigned char *buffer);
-long GetTD(int handle, unsigned char track, unsigned char *buffer);
-long GetTE(int handle, unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f);
-long ReadSector(int handle, crdata *cr);
-long PlayCDDA(int handle, unsigned char *sector);
-long StopCDDA(int handle);
-long GetStatus(int handle, int playing, struct CdrStat *stat);
-unsigned char *ReadSub(int handle, const unsigned char *time);
+void CloseCdHandle();
+int IsCdHandleOpen();
+long GetTN(unsigned char *buffer);
+long GetTD(unsigned char track, unsigned char *buffer);
+long GetTE(unsigned char track, unsigned char *m, unsigned char *s, unsigned char *f);
+long ReadSector(crdata *cr);
+long PlayCDDA(unsigned char *sector);
+long StopCDDA();
+long GetStatus(int playing, struct CdrStat *stat);
+unsigned char *ReadSub(const unsigned char *time);
#endif
diff --git a/plugins/dfcdrom/cdrcfg-0.1df/main.c b/plugins/dfcdrom/cdrcfg-0.1df/main.c
index 2ab7c851..0fdd09fd 100644
--- a/plugins/dfcdrom/cdrcfg-0.1df/main.c
+++ b/plugins/dfcdrom/cdrcfg-0.1df/main.c
@@ -107,14 +107,41 @@ void fill_drives_list(GtkWidget *widget) {
"/dev/scd2",
"/dev/scd3",
"/dev/optcd",
- NULL};
+ ""};
#elif defined (__FreeBSD__)
static const char *cdrom_devices[] = {
"/dev/acd0",
"/dev/acd1",
"/dev/acd2",
"/dev/acd3",
- NULL};
+ ""};
+#elif defined (__sun)
+ char cdrom_devices[256][256];
+ FILE *fp;
+ char buf[256], *devname, *nick;
+
+ memset(cdrom_devices, 0, sizeof(cdrom_devices));
+
+ i = 0;
+
+ fp = popen("eject -l", "r");
+
+ if (fp != NULL) {
+ while (!feof(fp) && i < 256) {
+ fgets(buf, 256, fp);
+
+ devname = strtok(buf, " ");
+ nick = strtok(NULL, " ");
+
+ if (devname == NULL || nick == NULL) continue;
+
+ if (strstr(nick, "cdrom") != NULL) {
+ strcpy(cdrom_devices[i], devname);
+ }
+ }
+
+ pclose(fp);
+ }
#else
static const char *cdrom_devices[] = { NULL };
#endif
@@ -126,7 +153,7 @@ void fill_drives_list(GtkWidget *widget) {
gtk_list_store_set(store, &iter, 0, CdromDev, -1);
// scan cdrom_devices for real cdrom and add them to list
- while (cdrom_devices[i] != NULL) {
+ while (cdrom_devices[i][0] != '\0') {
// check that is not our current dev (already in list)
if (strcmp(cdrom_devices[i], CdromDev) != 0) {
// check that is a cdrom device