Sophie

Sophie

distrib > Mandriva > 9.0 > i586 > by-pkgid > 0d5cd12c82d627a82c59047e1ba7b8a9 > files > 1189

howto-html-fr-9.0-0.2mdk.noarch.rpm

<HTML>
<HEAD>
<TITLE>Exemple d'utilisation du tampon SCSI</TITLE>
</HEAD>
<BODY>
<H1>11. <A NAME="s11"></A>Exemple d'utilisation du tampon SCSI</H1>
<P>
<A HREF="SCSI-Programming-HOWTO.html#toc11">Contenu de cette section</A></P>

<P>Nous allons utiliser ici la commande "TEST UNIT READY" pour contr&ocirc;ler si un support est charg&eacute; dans notre p&eacute;riph&eacute;rique. Les d&eacute;clarations d'en-t&ecirc;te et la fonction <CODE>handle_SCSI_cmd</CODE> de l'exemple de "Inquiry" seront aussi n&eacute;cessaires.</P>
<P></P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
                        Table 73: Commande TEST UNIT READY
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Octet|        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Code operation (00h)                        |
|-----+-----------------------------------------------------------------------|
| 1   |Numero d'unite logique LUN|                  Reserve                   |
|-----+-----------------------------------------------------------------------|
| 2   |                           Reserve                                     |
|-----+-----------------------------------------------------------------------|
| 3   |                           Reserve                                     |
|-----+-----------------------------------------------------------------------|
| 4   |                           Reserve                                     |
|-----+-----------------------------------------------------------------------|
| 5   |                           Controle                                    |
+=============================================================================+
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Voici la fonction qui l'impl&eacute;mente&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
#define TESTUNITREADY_CMD 0
#define TESTUNITREADY_CMDLEN 6

#define ADD_SENSECODE 12
#define ADD_SC_QUALIFIER 13
#define NO_MEDIA_SC 0x3a
#define NO_MEDIA_SCQ 0x00

int TestForMedium ( void )
{
  /* demande le statut READY */
  static unsigned char cmdblk [TESTUNITREADY_CMDLEN] = {
      TESTUNITREADY_CMD, /* commande */
                      0, /* lun/reserve */
                      0, /* reserve */
                      0, /* reserve */
                      0, /* reserve */
                      0};/* controle */

  memcpy( cmd + SCSI_OFF, cmdblk, sizeof(cmdblk) );

  /*
   * +------------------+
   * | struct sg_header | &lt;- commande
   * +------------------+
   * | copie de cmdblk  | &lt;- commande + SCSI_OFF
   * +------------------+
   */

  if (handle_SCSI_cmd(sizeof(cmdblk), 0, cmd,
                            0, NULL)) {
      fprintf (stderr, &quot;Unite non prete\n&quot;);
      exit(2);
  }

  return
   *(((struct sg_header*)cmd)-&gt;sense_buffer +ADD_SENSECODE) !=
                                                        NO_MEDIA_SC ||
   *(((struct sg_header*)cmd)-&gt;sense_buffer +ADD_SC_QUALIFIER) !=
                                                        NO_MEDIA_SCQ;
}
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Nous pouvons maintenant r&eacute;aliser le contr&ocirc;le &agrave; l'aide de la fonction <CODE>main</CODE>&nbsp;:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
void main( void )
{
  fd = open(DEVICE, O_RDWR);
  if (fd &lt; 0) {
    fprintf( stderr, &quot;Il faut les permissions lecture/ecriture pour &quot;DEVICE&quot;.\n&quot;
 );
    exit(1);
  }

  /* on regarde si le support est charge */

  if (!TestForMedium()) {
    printf(&quot;le support n'est pas charge\n&quot;);
  } else {
    printf(&quot;le support est charge\n&quot;);
  }
}
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Le fichier <CODE>generic_demo.c</CODE> en annexe contient les deux exemples.</P>
<P></P>
<HR>
<P>
Chapitre <A HREF="SCSI-Programming-HOWTO-12.html">suivant</A>,
Chapitre <A HREF="SCSI-Programming-HOWTO-10.html">Pr&eacute;c&eacute;dent</A>
<P>
Table des mati&egrave;res de <A HREF="SCSI-Programming-HOWTO.html#toc11">ce chapitre</A>,
 <A HREF="SCSI-Programming-HOWTO.html#toc">Table des mati&egrave;res</A> g&eacute;n&eacute;rale</P>
<P>
<A HREF="SCSI-Programming-HOWTO.html">D&eacute;but</A> du document,
 <A HREF="#0"> D&eacute;but de ce chapitre</A></P>
</BODY>
</HTML>