00001 /* Implémentation Linux de la bibliotheque XADLL de Sidena 00002 * Copyright (C) 2005 ENSTAR 00003 * 00004 * This program is free software; you can redistribute it and/or modify 00005 * it under the terms of the GNU General Public License as published by 00006 * the Free Software Foundation; either version 2 of the License, or 00007 * (at your option) any later version. 00008 * 00009 * This program is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 * GNU General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU General Public License 00015 * along with this program; if not, write to the Free Software 00016 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00017 * 00018 * You can contact us: 00019 * Association ENSTAR 00020 * Ecole Nationale Superieure de Techniques Avancees 00021 * 32 boulevard Victor 00022 * 75739 Paris Cedex 15 00023 * FRANCE 00024 * 00025 * enstar@ensta.fr 00026 */ 00027 00028 /** @file xalib.h 00029 * @brief Front-end de la bibliothèque 00030 * @author Francois Fevotte <francois.fevotte@ensta.org> 00031 * $Revision: 103 $ 00032 * $Date: 2006-04-25 17:35:44 +0200 (Tue, 25 Apr 2006) $ 00033 */ 00034 00035 /* $Id: xalib.h 103 2006-04-25 15:35:44Z bearclaw $ */ 00036 00037 /* Protection contre les inclusions multiples */ 00038 #ifndef XALIB_H 00039 #define XALIB_H 00040 #ifdef __cplusplus 00041 extern "C" { 00042 #endif 00043 #include "codes.h" 00044 00045 /* Gestion des mots clés 'extern' : seul le fichier xalib.c définira réellement les buffers */ 00046 #ifdef XALIB_C 00047 #define EXTERN 00048 #else 00049 #define EXTERN extern 00050 #endif 00051 00052 00053 /* Variables globales */ 00054 EXTERN int XA_opendone; /* Ouverture du port effectuée ? */ 00055 EXTERN int XA_typepack; /* Type de pack courant */ 00056 EXTERN int XA_adrpack; /* Adresse du pack courant */ 00057 EXTERN int coderr; /* Le dernier code d'erreur renvoyé par une fonction XA */ 00058 00059 00060 /** Octet de poids fort d'un mot 00061 * @param a mot 00062 * @return octet de poids fort du mot a 00063 * @remarks à tester... 00064 */ 00065 unsigned char hi (int a); 00066 00067 00068 /** Octet de poids faible d'un mot 00069 * @param x mot 00070 * @return octet de poids faible du mot x 00071 * @remarks à tester... 00072 */ 00073 unsigned char lo (int x); 00074 00075 /** Retour du dernier code d'erreur 00076 * @return le code de retour de la derniere fonction XA appelée 00077 */ 00078 int XA_coderr (void); 00079 00080 00081 /** Lecture d'un caractère (1 octet) dans le buffer de réception 00082 * @return le caractère lu. 00083 * @remarks le carcactère lu est aussi placé dans la variable globale lastget 00084 */ 00085 int XA_getB (void); 00086 00087 00088 /** Retour du dernier caractère (octet) lu dans le buffer de réception 00089 * @return le dernier caractère lu dans Rec_buffer par la fonction XA_getB 00090 */ 00091 long XA_lastgetB (void); 00092 00093 00094 /** Lecture d'un mot (2 octets) dans le buffer de réception 00095 * @return le mot lu. 00096 */ 00097 unsigned int XA_getW (void); 00098 00099 00100 /** Lecture d'un entier long (4 octets) dans le buffer de réception 00101 * @return l'entier long lu. 00102 */ 00103 long XA_getL (void); 00104 00105 00106 /** Envoi d'une instruction vers le matériel 00107 * @param send indique si l'instruction doit etre envoyée tout de suite ou bufferisée (cf. XAN() et XAN_buffer()) 00108 * @param fonction code de la fonction 00109 * @param adrmod adresse du module auquel on parle 00110 * @param arg1,arg2,arg3,arg4,arg5 arguments passés à la fonction 00111 * @return le code de retour de la fonction d'envoi de message 00112 * 00113 * @sa XAN, XAN_buffer 00114 */ 00115 long XA (char send, long fonction, long adrmod, long arg1, long arg2, long arg3, long arg4, long arg5); 00116 00117 /** Envoi immédiat d'une instruction vers le matériel 00118 * 00119 * Le message correspondant à l'instruction est construit, puis envoyé immédiatement 00120 * aux cartes. Si certains messages avaient été construits et mis en attente auparavant 00121 * grâce à un appel à XAN_buffer(), ils sont envoyés en même temps. 00122 * 00123 * @param fonction code de la fonction 00124 * @param adrmod adresse du module auquel on parle 00125 * @param arg1,arg2,arg3,arg4,arg5 arguments passés à la fonction 00126 * @return le code de retour de la fonction d'envoi de message 00127 * 00128 * @sa XA, XAN_buffer 00129 */ 00130 inline long XAN(long fonction, long adrmod, long arg1, long arg2, long arg3, long arg4, long arg5) 00131 { 00132 return XA(1, fonction, adrmod, arg1, arg2, arg3, arg4, arg5); 00133 } 00134 00135 /** Envoi différé d'une instruction vers le matériel 00136 * 00137 * Le message correspondant à l'instruction est construit, mais n'est pas envoyé immédiatement 00138 * aux cartes. L'appel suivant a XAN() complètera la file des messages ainsi mis en attente 00139 * et les enverra tous ensemble. 00140 * 00141 * @param fonction code de la fonction 00142 * @param adrmod adresse du module auquel on parle 00143 * @param arg1,arg2,arg3,arg4,arg5 arguments passés à la fonction 00144 * @return le code de retour de la fonction d'envoi de message 00145 * 00146 * @sa XA, XAN 00147 */ 00148 inline long XAN_buffer(long fonction, long adrmod, long arg1, long arg2, long arg3, long arg4, long arg5) 00149 { 00150 return XA(0, fonction, adrmod, arg1, arg2, arg3, arg4, arg5); 00151 } 00152 00153 /** Envoi d'une instruction avec arguments chaine ou long 00154 * @param fonction le code de la fonction à envoyer (81 ou 202) 00155 * @param adrmod l'adresse du module avec lequel on communique 00156 * @param chaine argument passé à la fonction 00157 * @param arg ??? 00158 * @return le code de retour de la fonction d'envoi du message 00159 */ 00160 long XAN_str (long fonction, long adrmod, char *chaine, long arg); 00161 00162 /** Initialisation du système XA 00163 * 00164 * @li ouverture du port série 1 00165 * @li clignotement de la led de la base 00166 */ 00167 void XA_startup (void); 00168 00169 /** Fermeture propre du système XA 00170 * 00171 * fermeture des connexions série 00172 */ 00173 void XA_cleanup (void); 00174 00175 #undef EXTERN 00176 00177 #ifdef __cplusplus 00178 } 00179 #endif 00180 #endif