diff options
| author | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-07-09 04:15:47 +0000 |
|---|---|---|
| committer | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-07-09 04:15:47 +0000 |
| commit | e52097ddfe6c54547af8e3e47aadd33e385a4db7 (patch) | |
| tree | ca50fc5e6fb434d712fdd47c1fc1ed21ca0f47c4 /plugins | |
| parent | 83e06df4098064f5e4ca3c9ae1214019e934e907 (diff) | |
| download | pcsxr-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.c | 38 | ||||
| -rw-r--r-- | plugins/dfcdrom/cdr-linux.c | 43 | ||||
| -rw-r--r-- | plugins/dfcdrom/cdr-null.c | 22 | ||||
| -rw-r--r-- | plugins/dfcdrom/cdr-solaris.c | 22 | ||||
| -rw-r--r-- | plugins/dfcdrom/cdr.c | 51 | ||||
| -rw-r--r-- | plugins/dfcdrom/cdr.h | 29 | ||||
| -rw-r--r-- | plugins/dfcdrom/cdrcfg-0.1df/main.c | 33 |
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, ¶meter); + ioctl(handle, IOCATASSPINDOWN, ¶meter); parameter = CdrSpeed * 177; if (parameter == 0) parameter = CDR_MAX_SPEED; - ioctl(h, CDRIOCREADSPEED, ¶meter); + ioctl(handle, CDRIOCREADSPEED, ¶meter); } } - 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, ¶meter); 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 |
