amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > Wie CD-ROM Laufwerk ansprechen? [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2003-07-17, 22:29 h

Micha1701
Posts: 938
User
Hi!

Nachdem ich nun das Device und die Unitnummer eines Laufwerks ermitteln kann (in diesem Fall von CD0: ) stehe ich vor dem Problem, daß ich nicht weiß wie ich ein CD-ROM Laufwerk ansprechen kann.

Ich hab versucht mit den CD Befehlen (z.B. CD_PLAYTRACK) das Device direkt anzusprechen aber nichts tut sich. Eine im AmiNET gefundene CDLib (cdplayer.library) konnte mir auch nicht helfen...

Weiß hier jemand auf Rat?

--
:boing: Micha :boing:

Look at my HPs:
http://www.lanser-online.de.vu

http://www.RealmsofPower.de.vu



[ - Answer - Quote - Direct link - ]

2003-07-18, 09:18 h

thomas
Posts: 7717
User

Was heißt das, "nichts tut sich" ? Was hast du denn für einen Return-Code bekommen ?

Falls das Device die CD_-Befehle nicht versteht, mußt du mit HD_SCSICMD die SCSI-Befehle direkt senden.

Eine Beschreibung der SCSI-Kommandos gibt es hier: http://www.t10.org/drafts.htm



Oder hast du den Standard-Fehler gemacht ? Das CD-ROM spielt die Musik ab, aber du kannst nichts hören, weil das CD-ROM nicht an die Lautsprecher angeschlossen ist ?

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Answer - Quote - Direct link - ]

2003-07-18, 11:29 h

Micha1701
Posts: 938
User
Ne, ne, da sind schon Lautsprecher dran... ;-D

Tja, den Returncode hab ich mir gar nicht angesehen... Jetzt wo Du es erwähnst...

Werd nachher mal sehen, worans hängt, vielleicht wars gestern einfach nur zu spät...

--
:boing: Micha :boing:

Look at my HPs:
http://www.lanser-online.de.vu

http://www.RealmsofPower.de.vu



[ - Answer - Quote - Direct link - ]

2003-07-21, 07:49 h

Micha1701
Posts: 938
User
So, habs nochmal gecheckt. Returncode ist immer "0"....

Der Befehl "CD_EJECT" funktioniert auch. Aber alle anderen geben nur Müll zurück, oder das Laufwerk macht einfach gar nix...

Device und Unit sind übrigends auch richtig...

Hier mal der Code dazu:

code:
#include <exec/io.h>
#include <exec/types.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>

#include <devices/cd.h>

#include <stdio.h>
#include <string.h>

struct IOStdReq *cdrequest = NULL;
struct MsgPort *cdmsgport = NULL;

UBYTE rc;

void main(int argc, UBYTE **argv)
{
   cdmsgport = CreateMsgPort();
   if(cdmsgport)
   {
      cdrequest = CreateIORequest(cdmsgport, sizeof(struct IOStdReq));

      if(cdrequest)
      }
         rc = OpenDevice("blizzppc.device", 1, (struct IORequest *) cdrequest, 0);
	 if(rc == 0)
	 {
	    PutStr("Öffnen des Device erfolgreich!nn");

	    cdrequest->io_Command = CD_PLAYTRACK;
	    cdrequest->io_Data = NULL;
	    cdrequest->io_Length = 1;
	    cdrequest->io_Offset = 1;

	    rc = DoIO((struct IORequest *) cdrequest);
	    printf("ReturnCode = %dn", rc);*/

	    Delay(500);

	    CloseDevice((struct IORequest *) cdrequest);
	 }
	 else
	 {
	    printf("Fehler beim öffnen des Devices!nErrorcode = %dnn", rc);
	 }
	 DeleteIORequest(cdrequest);
      }
      else
      {
	 PutStr("Konnte IORequest nicht erstellen!nn");
      }

      DeleteMsgPort(cdmsgport);
   }
   else
   {
      PutStr("Fehler beim CreateMsgPort()!nn");
   }
}


Hab auch mal versucht die cdplayer.library zu verwenden. Das Beispielprog (bereits kompiliert im Archiv) funktioniert hier tadellos. Aber selber kompilieren ist wohl nicht. Dann schmiert es immer ab oder es gibt nur Müll... StormCV3 scheinen die Includes nicht zu schmecken...




--
:boing: Micha :boing:

Look at my HPs:
http://www.lanser-online.de.vu


http://www.RealmsofPower.de.vu





[ Dieser Beitrag wurde von Micha1701 am 21.07.2003 editiert. ]

[ - Answer - Quote - Direct link - ]

2003-07-21, 10:46 h

thomas
Posts: 7717
User

Nun, die CD_-Befehle sind wohl nur für das cd.device.

Hier ist ein Beispiel, das funktioniert:

code:
#include <exec/io.h>
#include <exec/types.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>

#include <devices/scsidisk.h>

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

struct IOStdReq *cdrequest = NULL;
struct MsgPort *cdmsgport = NULL;

UBYTE rc;

char *device = "uaescsi.device";
long unit = 1;

struct SCSICmd cmd;
UBYTE sense[20];
UBYTE SCSI_PlayAudio[] = {0x45,0,0,0,0,0,0,0,0,0};

ULONG start = 0;         /* start block */
UWORD length = 120 * 75; /* number of blocks to play; 75 = 1 sec. */

void main(int argc, UBYTE **argv)
{
if (argc > 1)
   start = atoi(argv[1]);
if (argc > 2)
   length = atoi(argv[1]);

cdmsgport = CreateMsgPort();
if(cdmsgport)
   {
   cdrequest = CreateIORequest(cdmsgport, sizeof(struct IOStdReq));

   if(cdrequest)
      {
      rc = OpenDevice(device,unit, (struct IORequest *) cdrequest, 0);
      if(rc == 0)
         {
         PutStr("Öffnen des Device erfolgreich!nn");


         SCSI_PlayAudio[2] = start >> 24;
         SCSI_PlayAudio[3] = start >> 16;
         SCSI_PlayAudio[4] = start >> 8;
         SCSI_PlayAudio[5] = start;

         SCSI_PlayAudio[7] = length >> 8;
         SCSI_PlayAudio[8] = length;

         cmd.scsi_Data        = NULL;
         cmd.scsi_Length      = 0;
         cmd.scsi_Actual      = 0;
         cmd.scsi_Command     = SCSI_PlayAudio;
         cmd.scsi_CmdLength   = 10;
         cmd.scsi_CmdActual   = 0;
         cmd.scsi_Flags       = SCSIF_AUTOSENSE|SCSIF_WRITE;
         cmd.scsi_Status      = 0;
         cmd.scsi_SenseData   = sense;
         cmd.scsi_SenseLength = 18;
         cmd.scsi_SenseActual = 0;

         cdrequest->io_Command = HD_SCSICMD;
         cdrequest->io_Data = (APTR)&cmd;
         cdrequest->io_Length = sizeof(struct SCSICmd);
         cdrequest->io_Offset = 0;

         rc = DoIO((struct IORequest *) cdrequest);
         printf("ReturnCode = %dn", rc);

      /*   Delay(500); */

         CloseDevice((struct IORequest *) cdrequest);
         }
      else
         {
         printf("Fehler beim öffnen von %s unit %d!nErrorcode = %dnn",device,unit,rc);
         }
      DeleteIORequest(cdrequest);
      }
   else
      {
      PutStr("Konnte IORequest nicht erstellen!nn");
      }

   DeleteMsgPort(cdmsgport);
   }
else
   {
   PutStr("Fehler beim CreateMsgPort()!nn");
   }
}


Gruß Thomas

--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Answer - Quote - Direct link - ]

2003-07-21, 11:20 h

Micha1701
Posts: 938
User
hm, ok werd ich ausprobieren.

Aber verstehen denn auch IDE Laufwerke die SCSI Kommandos?

--
:boing: Micha :boing:

Look at my HPs:
http://www.lanser-online.de.vu

http://www.RealmsofPower.de.vu



[ - Answer - Quote - Direct link - ]

2003-07-21, 12:39 h

thomas
Posts: 7717
User

Wenn nicht die Geräte, dann das Device.

Gruß Thomas


--
Email: thomas-rapp@web.de
Home: home.t-online.de/home/thomas-rapp/

[ - Answer - Quote - Direct link - ]

2003-07-24, 08:12 h

Micha1701
Posts: 938
User
Hi Thomas!

So, bin endlich mal dazu gekommen Dein Beispiel zu testen.

Juhu! Es funktioniert!

Werd mir direkt mal die SCSI Kommandos ansehen...

Danke nochmal!

--
:boing: Micha :boing:

Look at my HPs:
http://www.lanser-online.de.vu

http://www.RealmsofPower.de.vu



[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > Wie CD-ROM Laufwerk ansprechen? [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.