/ docs / src / hal / general_ref_fr.txt
general_ref_fr.txt
  1  :lang: fr
  2  :toc:
  3  
  4  = Conventions générales
  5  
  6  [[cha:References-generales]]
  7  
  8  == Les noms
  9  
 10  Toutes les entités de HAL sont accessibles et manipulées par leurs
 11  noms, donc, documenter les noms des pins, signaux, paramètres, etc, est
 12  très important. Les noms dans HAL ont un maximum de 41 caractères de
 13  long (comme défini par HAL_NAME_LEN dans hal.h). De nombreux noms
 14  seront présentés dans la forme générale, avec un texte mis en forme
 15  _<comme-cela>_ représentant les champs de valeurs diverses.
 16  
 17  Quand les pins, signaux, ou paramètres sont décrits pour la première
 18  fois, leur nom sera précédé par leur type entre parenthèses (_float_) et
 19  suivi d'une brève description. Les définitions typiques de pins
 20  ressemblent à ces exemples:
 21  
 22  (bit) parport.<portnum>.pin-<pinnum>-in::
 23      La HAL pin associée avec la broche physique d'entrée _<pinnum>_ du 
 24      connecteur db25.
 25  
 26  (float) pid.<loopnum>.output::
 27      La sortie de la boucle PID.
 28  
 29  De temps en temps, une version abrégée du nom peut être utilisée, par
 30  exemple la deuxième pin ci-dessus pourrait être appelée simplement
 31  avec _.output_ quand cela peut être fait sans prêter à confusion.
 32  
 33  == Conventions générales de nommage[[sec:GR-Conventions-nommage]]
 34  
 35  Le but des conventions de nommage est de rendre l'utilisation de HAL
 36  plus facile. Par exemple, si plusieurs interfaces de codeur fournissent
 37  le même jeu de pins et qu'elles sont nommées de la même façon, il
 38  serait facile de changer l'interface d'un codeur à un autre.
 39  Malheureusement, comme tout projet open-source, HAL est la combinaison
 40  de choses diversement conçues et comme les choses simples évoluent. Il
 41  en résulte de nombreuses incohérences. Cette section vise à remédier à
 42  ce problème en définissant certaines conventions, mais il faudra
 43  certainement un certain temps avant que tous les modules soient
 44  convertis pour les suivre.
 45  
 46  Halcmd et d'autres utilitaires HAL de bas niveau, traitent les noms
 47  HAL comme de simples entités, sans structure. Toutefois, la plupart des
 48  modules ont une certaine structure implicite. Par exemple, une carte
 49  fournit plusieurs blocs fonctionnels, chaque bloc peut avoir plusieurs
 50  canaux et chaque canal, une ou plusieurs broches. La structure qui en
 51  résulte ressemble à une arborescence de répertoires. Même si halcmd ne
 52  reconnait pas la structure arborescente, la convention de nommage est
 53  un bon choix, elles lui permettra de regrouper ensemble, les items du
 54  même groupe, car il trie les noms. En outre, les outils de haut niveau
 55  peuvent être conçus pour reconnaitre de telles structures si les noms
 56  fournissent les informations nécessaires. Pour cela, tous les modules
 57  de HAL devraient suivrent les règles suivantes:
 58  
 59   - Les points (_._) séparent les niveaux hiérarchiques. C'est analogue à
 60     la barre de fraction (_/_) dans les noms de fichiers.
 61   - Le tiret (_-_) sépare les mots ou les champs dans la même hiérarchie.
 62   - Les modules HAL ne doivent pas utiliser le caractère souligné ou les
 63     casses mélangées. footnote:[Les caractères souslignés ont été enlevés,
 64     mais il reste quelques cas
 65     de mélange de casses, par exemple _pid.0.Pgain_ au lieux de 
 66     _pid.0.p-gain_.]
 67   - Utiliser seulement des caractères minuscules, lettres et chiffres.
 68  
 69  == Conventions de nommage des pilotes de matériels[[sec:GR-Nommage-pilotes-materiel]]
 70  footnote:[La plupart des pilotes ne suivent pas ces conventions dans la version 2.0. 
 71  Ce chapitre est réellement un guide pour les développements futurs.]
 72  
 73  === Noms de pin/paramètre
 74  
 75  Les pilotes matériels devraient utiliser cinq champs (sur trois
 76  niveaux) pour obtenir un nom de pin ou de paramètre, comme le suivant:
 77  ----
 78  <device-name>.<device-num>.<io-type>.<chan-num>.<specific-name>
 79  ----
 80  
 81  Les champs individuels sont:
 82  
 83  <device-name>::
 84        Le matériel avec lequel le pilote est sensé travailler. Il s'agit le
 85      plus souvent d'une carte d'interface d'un certain type, mais il existe
 86      d'autres possibilités. 
 87  
 88  <device-num>::
 89        Il est possible d'installer plusieurs cartes servo, ports parallèles
 90      ou autre périphérique matériel dans un ordinateur. Le numéro du
 91      périphérique identifie un périphérique spécifique. Les numéros de
 92      périphériques commencent à 0 et s'incrémentent.footnote:[Certains
 93      matériels utilisent des cavaliers ou d'autres dispositifs
 94      pour définir une identification spécifique à chacun. Idéalement, le
 95      pilote fournit une manière à l'utilisateur de dire, le _device-num 0
 96      est spécifique au périphérique qui a l'ID XXX_, ses sous-ensembles
 97      porterons tous un numéro commençant par 0. Mais à l'heure actuelle,
 98      certains pilotes utilisent l'ID directement comme numéro de
 99      périphérique. Ce qui signifie qu'il est possible d'avoir un
100      périphérique Numéro 2, sans en avoir en Numéro 0. C'est un bug qui
101      devrait disparaître en version 2.1.]
102  
103  <io-type>::
104        La plupart des périphériques fournissent plus d'un type d'I/O. Même
105      le simple port parallèle a, à la fois plusieurs entrées et plusieurs
106      sorties numériques. Les cartes commerciales plus complexes peuvent
107      avoir des entrées et des sorties numériques, des compteurs de codeurs,
108      des générateurs d'impulsions de pas ou de PWM, des convertisseurs
109      numérique/analogique, analogique/numérique et d'autres possibilités
110      plus spécifiques. Le _I/O type_ est utilisé pour identifier le type
111      d'I/O avec lequel la pin ou le paramètre est associé. Idéalement, les
112      pilotes qui implémentent les mêmes type d'I/O, même sur des dispositifs
113      très différents, devraient fournir un jeu de pins et de paramètres
114      cohérents et de comportements identiques. Par exemple, toutes les
115      entrées numériques doivent se comporter de la même manière quand elles
116      sont vues de l'intérieur de HAL, indépendamment du périphérique.
117  
118  <chan-num>::
119        Quasiment tous les périphériques d'I/O ont plusieurs canaux, le
120      numéro de canal _chan-num_ identifie un de ceux ci. Comme les numéros
121      de périphériques _device-num_, les numéros de canaux, _chan-num_, 
122      commencent à zéro et s'incrémentent.footnote:[Une exception à la règle
123      du _numéro de canal commençant à zéro_ est le
124      port parallèle. Ses _HAL pins_ sont numérotées avec le numéro de la
125      broche correspondante du connecteur DB-25. C'est plus pratique pour le
126      câblage, mais non cohérent avec les autres pilotes. Il y a débat pour
127      savoir si c'est un bogue ou une fonctionnalité.] 
128      Si plusieurs périphériques sont installés, les numéro de canaux des
129      périphériques supplémentaires recommencent à zéro. Comme il est
130      possible d'avoir un numéro de canal supérieur à 9, les numéros de
131      canaux doivent avoir deux chiffres, avec un zéro en tête pour les
132      nombres inférieur à 10 pour préserver l'ordre des tris. Certains
133      modules ont des pins et/ou des paramètres qui affectent plusieurs
134      canaux. Par exemple un générateur de PWM peut avoir quatre canaux avec
135      quatre entrées _duty-cycle_ indépendantes, mais un seul paramètre
136      _frequency_ qui contrôle les quatres canaux (à cause de limitations
137      matérielles). Le paramètre _frequency_ doit utiliser les numéros de
138      canaux de _00-03_. 
139  
140  <specific-name>::
141        Un canal individuel d'I/O peut avoir une seule HAL pin associée avec
142      lui, mais la plupart en ont plus. Par exemple, une entrée numérique a
143      deux pins, une qui est l'état de la broche physique, l'autre qui est la
144      même chose mais inversée. Cela permet au configurateur de choisir entre
145      les deux états de l'entrée, active haute ou active basse. Pour la
146      plupart des types d' entrée/sortie, il existe un jeu standard de
147      broches et de paramètres, (appelé l'_interface canonique_) que le
148      pilote doit implémenter. Les interfaces canoniques sont décrites
149      <<sec:Peripheriques-canoniques, dans ce chapitre qui leur est dédié>>.
150  
151  ==== Exemples
152  
153  motenc.0.encoder.2.position::
154       La sortie position du troisième canal codeur sur la première carte Motenc.
155  
156  stg.0.din.03.in::
157       L'état de la quatrième entrée numérique sur la première carte Servo-to-Go.
158  
159  ppmc.0.pwm.00-03.frequency::
160       La fréquence porteuse utilisée sur les canaux PWM de 0 à 3 sur la 
161      première carte Pico Systems ppmc.
162  
163  === Noms des fonctions
164  
165  Les pilotes matériels ont généralement seulement deux types de
166  fonctions HAL, une qui lit l'état du matériel et met à jour les pins
167  HAL, l'autre qui écrit sur le matériel en utilisant les données
168  fournies sur les pins HAL. Ce qui devrait être nommé de la façon
169  suivante:
170  ----
171  <device-name>-<device-num>.<io-type>-<chan-num-range>.read|write
172  ----
173  
174  <device-name>::
175       Le même que celui utilisé pour les pins et les paramètres.
176  
177  <device-num>::
178       Le périphérique spécifique auquel la fonction aura accès.
179  
180  <io-type>::
181        Optionnel. Une fonction peut accéder à toutes les d'entrées/sorties
182      d'une carte ou, elle peut accéder seulement à un certain type. Par
183      exemple, il peut y avoir des fonctions indépendantes pour lire les
184      compteurs de codeurs et lire les entrées/sorties numériques. Si de
185      telles fonctions indépendantes existent, le champ <io-type> identifie
186      le type d'I/O auxquelles elles auront accès. Si une simple fonction lit
187      toutes les entrés/sorties fournies par la carte, <io-type> n'est pas
188      utilisé.footnote:[Note aux programmeurs de pilotes: ne PAS implémenter
189      des fonctions
190      séparées pour différents types d'I/O à moins qu'elles ne soient
191      interruptibles et puissent marcher dans des threads indépendants. Si
192      l'interruption de la lecture d'un codeur pour lire des entrées
193      numériques, puis reprendre la lecture du codeur peut poser problème,
194      alors implémentez une fonction unique qui fera tout.] 
195  
196  <chan-num-range>::
197        Optionnel. Utilisé seulement si l'entrée/sortie <io-type> est cassée
198      dans des groupes et est accédée par différentes fonctions.
199  
200  read|write::
201       Indique si la fonction lit le matériel ou lui écrit.
202  
203  ==== Exemples
204  
205  motenc.0.encoder.read::
206       Lit tous les codeurs sur la première carte motenc.
207  
208  generic8255.0.din.09-15.read::
209       Lit le deuxième port 8 bits sur la première carte
210      d'entrées/sorties à base de 8255.
211  
212  ppmc.0.write::
213       Écrit toutes les sorties (générateur de pas, pwm, DAC et ADC) sur
214      la première carte Pico Systems ppmc.
215  
216  [[sec:Peripheriques-canoniques]]
217  == Périphériques d'interfaces canoniques
218  (((Périphériques canoniques)))
219  
220  Les sections qui suivent expliquent les pins, paramètres et fonctions
221  qui sont fournies par les _périphériques canoniques_. Tous les pilotes
222  de périphériques HAL devraient fournir les mêmes pins et paramètres et
223  implémenter les mêmes comportements.
224  
225  Noter que seuls les champs _<io-type>_ et _<specific-name>_ sont
226  définis pour un périphérique canonique. Les champs _<device-name>_,
227  _<device-num>_ et _<chan-num>_ sont définis en fonction des
228  caractéristiques du périphérique réel.
229  
230  == Entrée numérique (Digital Input)[[sec:CanonDigIn]]
231  
232  L'entrée numérique canonique (I/O type: _digin_) est assez simple.
233  
234  === Pins
235  
236  (bit) _in_::
237     État de l'entrée matérielle.
238  (bit) _in-not_::
239     État inversé de l'entrée matérielle.
240  
241  === Paramètres
242  
243  Aucun
244  
245  === Fonctions
246  
247  (funct) _read_::
248       Lire le matériel et ajuster les HAL pins _in_ et _in-not_.
249  
250  == Sortie numérique (Digital Output)[[sec:CanonDigOut]]
251  
252  La sortie numérique canonique est également très simple (I/O type: _digout_).
253  
254  === Pins
255  
256  (bit) _out_::
257      Valeur à écrire (éventuellement inversée) sur une sortie matérielle.
258  
259  === Paramètres
260  
261  (bit) _invert_::
262      Si TRUE, _out_ est inversée avant écriture sur la sortie matérielle.
263  
264  === Fonctions
265  
266  (funct) _write_::
267      Lit _out_ et _invert_ et ajuste la sortie en conséquence.
268  
269  == Entrée analogique (Analog Input)
270  
271  L'entrée analogique canonique (I/O type: _adcin_ ). Devrait être
272  utilisée pour les convertisseurs
273  analogiques/numériques, qui convertissent par exemple, les tensions en
274  une échelle continue de valeurs.
275  
276  === Pins
277  
278  (float) _value_::
279       Lecture du matériel, avec mise à l'échelle ajustée par les 
280      paramètres _scale_ et _offset_. _Value_ = ((lecture entrée, en unités 
281      dépendantes du matériel) x _scale_) - _offset_
282  
283  === Paramètres
284  
285  (float) _scale_::
286       La tension d'entrée (ou l'intensité) sera
287      multipliée par _scale_ avant d'être placée dans _value_.
288  (float) _offset_::
289       Sera soustrait à la tension d'entrée (ou l'intensité) après que 
290      la mise à l'échelle par scale ait été appliquée.
291  (float) _bit_weight_::
292       Valeur du bit le moins significatif (LSB). C'est effectivement, la 
293      granularité de lecture en entrée.
294  (float) _hw_offset_::
295       Valeur présente sur l'entrée quand aucune tension n'est appliquée sur la 
296      pin.
297  
298  === Fonctions
299  
300  (funct) _read_::
301       Lit les valeurs de ce canal d'entrée analogique. Peut être utilisé pour 
302      lire un canal individuellement, ou pour lire tous les canaux à la fois. 
303  
304  == Sortie analogique (Analog Output)
305  
306  La sortie analogique canonique (I/O Type: _adcout_ ). Elle est
307  destinée à tout type de matériel capable de sortir une
308  échelle plus ou moins étendue de valeurs. Comme par exemple les
309  convertisseurs numérique/analogique ou les générateurs de PWM.
310  
311  === Pins
312  
313  (float) _value_::
314       La valeur à écrire. La valeur réelle sur la sortie matérielle dépends 
315      de la mise à l'échelle des paramètres d'offset.
316  (bit) _enable_::
317       Si fausse, la sortie matérielle passera à 0, indépendamment de la pin _value_.
318  
319  === Paramètres
320  
321  (float) _offset_::
322       Sera ajouté à _value_ avant l'actualisation du
323     matériel.
324  (float) _scale_::
325       Doit être défini de sorte qu'une entrée avec 1 dans _value_ produira 1V 
326  (float) _high_limit_::
327       (optionnel) Quand la valeur en sortie matérielle est calculée, 
328      si _value_ + _offset_ est plus grande que _high_limit_, alors _high_limit_ 
329      lui sera substitué.
330  (float) _low_limit_::
331       (optionnel) Quand la valeur en sortie matérielle est calculée, 
332      si _value_ + _offset_ est plus petite que _low_limit_, alors _low_limit_ 
333      lui sera substitué.
334  (float) _bit_weight_::
335       (optionnel) La valeur du bit le moins significatif (LSB), en Volts
336      (ou mA, pour les sorties courant)
337  (float) _hw_offset_::
338       (optionnel) La tension actuelle (ou l'intensité) présente sur la
339      sortie quand 0 est écrit sur le matériel.
340  
341  === Fonctions
342  
343  (funct) _write_::
344       Ecrit la valeur calculée sur la sortie matérielle. Si enable est FALSE, 
345      la sortie passera à 0, indépendamment des valeurs de _value_, _scale_ et 
346      _offset_ . La signification de _0_ dépend du matériel. Par exemple, un 
347      convertisseur A/D 12 bits peut vouloir écrire 0x1FF (milieu d'échelle)
348      alors que le convertisseur D/A reçoit 0 Volt de la broche matérielle.
349      Si enable est TRUE, l'échelle, l'offset et la valeur sont traités et
350      (_scale_ _ _value_) + _offset_ sont envoyés à la sortie du DAC . Si
351      enable est FALSE, la sortie passe à 0.
352  
353