amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Wie CD-ROM Laufwerk ansprechen? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

17.07.2003, 22:29 Uhr

Micha1701
Posts: 938
Nutzer
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



[ - Antworten - Zitieren - Direktlink - ]

18.07.2003, 09:18 Uhr

thomas
Posts: 7717
Nutzer

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/

[ - Antworten - Zitieren - Direktlink - ]

18.07.2003, 11:29 Uhr

Micha1701
Posts: 938
Nutzer
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



[ - Antworten - Zitieren - Direktlink - ]

21.07.2003, 07:49 Uhr

Micha1701
Posts: 938
Nutzer
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. ]

[ - Antworten - Zitieren - Direktlink - ]

21.07.2003, 10:46 Uhr

thomas
Posts: 7717
Nutzer

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/

[ - Antworten - Zitieren - Direktlink - ]

21.07.2003, 11:20 Uhr

Micha1701
Posts: 938
Nutzer
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



[ - Antworten - Zitieren - Direktlink - ]

21.07.2003, 12:39 Uhr

thomas
Posts: 7717
Nutzer

Wenn nicht die Geräte, dann das Device.

Gruß Thomas


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

[ - Antworten - Zitieren - Direktlink - ]

24.07.2003, 08:12 Uhr

Micha1701
Posts: 938
Nutzer
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



[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Wie CD-ROM Laufwerk ansprechen? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.