Page suivantePage pr�c�denteTable des mati�res

9. Exemple de commande de requ�te

L'une des commandes SCSI de base est INQUIRY, utilis�e pour identifier les type et constructeur du p�riph�rique. Voici la d�finition issue de la sp�cification SCSI-2 (se reporter au standard SCSI-2 pour les d�tails).

 Table 44: Commande INQUIRY
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Octet|        |        |        |        |        |        |        |        |
|=====+=======================================================================|
| 0   |                           Code op�ration (12h)                        |
|-----+-----------------------------------------------------------------------|
| 1   |Num�ro d'unit� logique    |                  R�serv�          |  EVPD  |
|-----+-----------------------------------------------------------------------|
| 2   |                           Code page                                   |
|-----+-----------------------------------------------------------------------|
| 3   |                           R�serv�                                     |
|-----+-----------------------------------------------------------------------|
| 4   |                           Taille d'allocation                         |
|-----+-----------------------------------------------------------------------|
| 5   |                           Contr�le                                    |
+=============================================================================+

Les donn�es en sortie ont l'allure suivante :

 Table 45: Format standard de donn�es INQUIRY
+=====-========-========-========-========-========-========-========-========+
|  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
|Octet|        |        |        |        |        |        |        |        |
|=====+==========================+============================================|
| 0   | Qualificateur de p�riph. |           Type de p�riph�rique             |
|-----+-----------------------------------------------------------------------|
| 1   |  RMB   |                  Modificateur de type de p�riph�rique        |
|-----+-----------------------------------------------------------------------|
| 2   |   Version ISO   |       Version ECMA       |  Version approuv�e ANSI  |
|-----+-----------------+-----------------------------------------------------|
| 3   |  AENC  | TrmIOP |     R�serv�     |   Format de donn�es en r�ponse    |
|-----+-----------------------------------------------------------------------|
| 4   |                    Longueur additionnelle (n-4)                       |
|-----+-----------------------------------------------------------------------|
| 5   |                           R�serv�                                     |
|-----+-----------------------------------------------------------------------|
| 6   |                           R�serv�                                     |
|-----+-----------------------------------------------------------------------|
| 7   | RelAdr | WBus32 | WBus16 |  Sync  | Linked |Reserve | CmdQue | SftRe  |
|-----+-----------------------------------------------------------------------|
| 8   | (MSB)                                                                 |
|- - -+---                      Identification de constructeur             ---|
| 15  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 16  | (MSB)                                                                 |
|- - -+---                      Identification de produit                  ---|
| 31  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 32  | (MSB)                                                                 |
|- - -+---                      Niveau de r�vision du produit              ---|
| 35  |                                                                 (LSB) |
|-----+-----------------------------------------------------------------------|
| 36  |                                                                       |
|- - -+---                      Sp�cifique constructeur                    ---|
| 55  |                                                                       |
|-----+-----------------------------------------------------------------------|
| 56  |                                                                       |
|- - -+---                        R�serv�                                  ---|
| 95  |                                                                       |
|=====+=======================================================================|
|     |                       Param�tres sp�cifiques constructeur             |
|=====+=======================================================================|
| 96  |                                                                       |
|- - -+---                      Sp�cifique constructeur                    ---|
| n   |                                                                       |
+=============================================================================+

L'exemple qui suit utilise la fonction de bas niveau handle_SCSI_cmd pour effectuer la commande SCSI INQUIRY.

Tout d'abord, nous ajoutons le bloc de commande � l'en-t�te g�n�rique, puis appelons handle_SCSI_cmd. Notez que l'argument taille de tampon en sortie de l'appel handle_SCSI_cmd exclut la taille de l'en-t�te g�n�rique. Apr�s l'ex�cution de la commande, le tampon de sortie contient les informations, sauf si une erreur s'est produite.

#define INQUIRY_CMD     0x12
#define INQUIRY_CMDLEN  6
#define INQUIRY_REPLY_LEN 96
#define INQUIRY_VENDOR  8       /* d�calage vers le nom du constructeur */
/* recherche du constructeur et du mod�le */
static unsigned char *Inquiry ( void )
{
 unsigned char Inqbuffer[ SCSI_OFF + INQUIRY_REPLY_LEN ];
 unsigned char cmdblk [ INQUIRY_CMDLEN ] =
 { INQUIRY_CMD,  /* commande                 */
 0,  /* lun/r�serv�              */
 0,  /* code de page             */
 0,  /* r�serv�                  */
 INQUIRY_REPLY_LEN,  /* longueur allocation      */
 0 };/* r�serv� / drapeau / lien */
 memcpy( cmd + SCSI_OFF, cmdblk, sizeof(cmdblk) );
 /*
 * +------------------+
 * | struct sg_header | <- commande
 * +------------------+
 * | copie de cmdblk  | <- commande + SCSI_OFF
 * +------------------+
 */
 if (handle_SCSI_cmd(sizeof(cmdblk), 0, cmd,
 sizeof(Inqbuffer) - SCSI_OFF, Inqbuffer )) {
 fprintf( stderr, "La requete a echoue\n" );
 exit(2);
 }
 return (Inqbuffer + SCSI_OFF);
}

L'exemple ci-dessus suit cette structure. La fonction Inquiry recopie son bloc de commande apr�s l'en-t�te g�n�rique (donn� par SCSI_OFF). Les donn�es en entr�e sont absentes de cette commande. handle_SCSI_cmd d�finit la structure d'en-t�te. Nous pouvons maintenant impl�menter la fonction main qui compl�te ce programme d'exemple fonctionnel.

void main( void )
{
 fd = open(DEVICE, O_RDWR);
 if (fd < 0) {
 fprintf( stderr, "Il faut les permissions lecture/ecriture pour "DEVICE".\n" );
 exit(1);
 }
 /* affiche certains champs du r�sultat de Inquiry() */
 printf( "%s\n", Inquiry() + INQUIRY_VENDOR );
}

Tout d'abord, nous ouvrons le p�riph�rique, contr�lons l'absence d'erreur, puis appelons la fonction de haut niveau. Ensuite, nous affichons des r�sultats sous une forme lisible, dont le constructeur, le produit et la version.

Note : il y a plus d'informations dans le r�sultat de "Inquiry" que ce que fournit ce petit programme. Il vous est loisible d'�tendre celui-ci au type de p�riph�rique, version ANSI, etc. Le type de p�riph�rique a une importance particuli�re, puisqu'il d�termine les jeux de commandes obligatoires et facultatives pour celui-ci. Si vous ne souhaitez pas le programmer vous-m�me, Eric Youngdale a r�alis� le programme scsiinfo, qui fournit � peu pr�s toute information disponible pour un p�riph�rique SCSI. Cherchez sur tsx-11.mit.edu dans pub/Linux/ALPHA/scsi (NdT : on trouvera ce programme sur les sites miroirs fran�ais, comme ftp.ibp.fr, � un emplacement similaire).


Page suivantePage pr�c�denteTable des mati�res

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:15