Table des Matières Kit de Périphériques     Index Kit de Périphériques

BJoystick

Hérité de : néant

Declaré dans : be/device/Joystick.h

Librairie : libdevice.so

Allocation : Uniquement par constructeur

Résumé

Un objet BJoystick propose une interface pour les joysticks (ou tout autre contrôleur de jeu) connecté à l'ordinateur. BeOS peut contrôler des joysticks sur les plate-formes BeBox ou Intel.

La BeBox supporte jusqu'à quatre joysticks analogiques, chacun d'entre eux pouvant avoir juqsu'à deux axes et deux boutons; les joysticks numériques ne sont pas supportés par les ports joystick d'origine de la machine. Vous pouvez cependant installer une carte qui ajoute des ports joystick (tel que la Sound Blaster AWE64), et dans ce cas utiliser des joysticks numériques sur ces ports.

BeOS pour Intel supporte les joysticks via les ports joystick des cartes, ainsi que les ports joystick intégrés à la carte mère.

Contrairement aux interfaces clavier et souris qui utilisent des messages et des événements pour indiquer leurs changements d'état, l'interface joystick ne renvoit de données que lorsqu'on les lui demande. Toute application qui l'utilise doit régulièrement demander l'état du joystick en appelant la fonction Update() de l'objet BJoystick. Update() effectue des requêtes sur le port et met à jour les données relatives à l'objet afin de correspondre à l'état actuel du joystick.

Deux modes sont disponibles. Le mode Standard n'accepte que deux axes et deux boutons par joystick. Ce mode existe depuis les débuts de BeOS. vous utilisez le joystick en mode standard en lisant les variables vertical et horizontal de BJoystick pour déterminer la position du joystick sur ses axes, et button1 et button2 pour déterminer l'état des boutons.

Le mode Étendu accepte jusqu'à 32 boutons par joystick, et peut utiliser un nombre quelconque d'axes et de "champignons" (petite manette annexe habituellement située au sommet de la manette principale). Il supporte également plusieurs joysticks branchés sur un même port. Au lieu de lire dans des variables pour déterminer l'état du joystick, il existe plusieurs fonctions qui font ça très bien.

De plus, le mode étendu propose un mécanisme pour déterminer quels joysticks sont présents et quels types (et combien) de contrôles sont disponibles sur chaque joystick. Il existe un panneau de préférences (très justement nommé "Joysticks") qui permet à l'utilisateur de choisir et de configurer les joysticks connectés à l'ordinateur.


Données Associées

bigtime_t timestamp   Heure de la dernière mise à jour, mesurée en microsecondes depuis le début de l'année 1970.

int16 horizontal   Position horizontale du joystick au moment de la dernière mise à jour. Cette valeur augmente quand le joystick est déplacé de gauche à droite.

int16 vertical   Position verticale du joystick au moment de la dernière mise à jour. Cette valeur diminue quand on pousse le joystick vers l'avant et augmente quand on le tire en arrière.

bool button1   false si le premier bouton était tenu appuyé au moment de la dernière mise à jour, et true si ce n'était pas le cas.

bool button2   false si le second bouton était tenu appuyé au moment de la dernière mise à jour, et true si ce n'était pas le cas.

Les valeurs de horizontal et vertical sont lues directement sur les ports, et sont des valeurs numérisées de la sortie analogique des joysticks. Cette classe ne convertit pas les valeurs vers une échelle standard uniforme. Les valeurs peuvent aller de 0 à 4,095, mais en général les joysticks n'utilisent pas toute la plage de valeurs. De même l'échelle n'est pas linéaire—des incréments numériques identiques ne reflètent pas un déplacement identique du joystick selon l'axe (vertical, horizontal ...) et selon l'endroit dans l'échelle 0 - 4095 (valeurs basses ou hautes). La variation exacte par rapport à une échelle linéaire et l'étendue des valeurs utilisables dépend à la fois du joystick et du port utilisé.

 
De toutes façons vous n'utiliserez pas ces variables si vous utilisez le mode étendu; elles n'existent encore que pour des raisons de compatibilité.



Constructeur et Destructeur


BJoystick()

                                                         
  

BJoystick(void)

Crée un objet BJoystick et met toutes les valeurs à 0. Avant d'utiliser l'objet, il faut appeler la fonction Open() pour ouvrir un port joystick particulier. Pour que l'objet dispose de valeurs significatives, vous devez utiliser la fonction Update() pour interroger le port ouvert.

voir également : Open(), Update()


~BJoystick()

                                                         
  

virtual ~BJoystick(void)

Ferme le port, s'il n'était pas déjà fermé.


Fonctions


ButtonValues() voir CountButtons()


Close() voir Open()


CountAxes() , GetAxisValues()

                                                         
  

int32 CountAxes(void)

status_t GetAxisValues(int16 *outValues, int32 forStick = 0)

CountAxes() renvoit le nombre d'axes sur le port concerné.

GetAxisValues() remplit le tableau sur lequel pointe outValues avec les valeurs de tous les axes du joystick concerné. Le paramètre forStick vous permet de choisir de quel joystick du port on veut avoir les valeurs des axes (par défaut on lit sur le premier joystick du port).

Les valeurs renvoyées vont de -32,768 à 32,767.

Le tableau outValues doit être assez grand pour contenir les valeurs pour tous les axes. Vous pouvez vous en assurer au moyen du listing suivant :

   int16 *axes;
   
   axes = (int16 *) malloc(sizeof(int16) * stick->CountAxes());
   stick->GetAxisValues(axes);

 
Ces fonctions ne peuvent être utilisées qu'en mode étendu.


CODES DE RETOUR

B_OK. Le nom a bien été renvoyé.


CountButtons() , GetButtonValues()

                                                         
  

int32 CountButtons(void)

uint32 ButtonValues(void)

CountButtons() renvoit le nombre de boutons présents sur le port ouvert.

ButtonValues() renvoit un nombre sur 32 bits dans lequel chaque bit représente the l'état d'un bouton. Le paramètre forStick vous permet de choisir de quel joystick du port on va lire les valeurs (par défaut le premier). Vous pouvez déterminer si un bouton donné est appuyé en utilisant le listing suivant :

   uint32 buttonValues = stick->ButtonValues();
   
   if (buttonValues & (1 << whichButton)) {
      /* Le bouton n° whichButton est appuyé */
   }

 
Ces fonctions ne peuvent être utilisées qu'en mode étendu.



CountDevices() , GetDeviceName()

                                                         
  

int32 CountDevices(void)

status_t GetDeviceName(int32 index, char *outName,
      size_t bufSize = B_OS_NAME_LENGTH)

CountDevices() renvoit le nombre de ports de jeu présents dans l'ordinateur.

GetDeviceName() renvoit le nom du périphérique spécifié par index. Le buffer sur lequel pointe outName contient le nom du périphérique ; bufSize indique la taille du buffer.

Les noms renvoyés par GetDeviceName() peuvent être passés à la fonction Open() pour ouvrir un périphérique.

 
Un BJoystick n'a pas besoin que le périphérique soit ouvert pour utiliser ces fonctions ; en fait votre application les utilisera pour offrir à l'utilisateur une interface pour qu'il choisisse quel joystick il veut utiliser.


CODES DE RETOUR

B_OK. Le nom a bien été renvoyé.


CountHats() , GetHatValues()

                                                         
  

int32 CountHats(void)

status_t GetHatValues(int8 *outHats, int32 forStick = 0)

CountHats() renvoit le nombre de "champignons" (voir plus haut) présents sur le port ouvert.

GetHatValues() remplit le tableau sur lequel pointe outHats avec les valeurs de tous les champignons présents sur le joystick spécifié. Le paramètre forStick vous permet de choisir de quel joystick sur le port on va lire les valeurs (par défaut le premier).

Signification des valeurs renvoyées :

Le tableau outHats doit être assez grand pour contenir les valeurs de tous les champignons. Vous pouvez vous en assurer au moyen du listing suivant :

   int8 *hats;
   
   hats = (int8 *) malloc(sizeof(int8) * stick->CountAxes());
   stick->GetHatValues(hats);

 
Ces fonctions ne peuvent être utilisées qu'en mode étendu.


CODES DE RETOUR

B_OK. Le nom a bien été renvoyé.


CountSticks()

                                                         
  

int32 CountSticks(void)

Renvoit le nombre de joysticks connectés au port ouvert.

 
Cette fonction ne peut être utilisée qu'en mode étendu.



GetAxisNameAt() , GetHatNameAt() , GetButtonNameAt()

                                                         
  

status_t GetAxisNameAt(int32 index, BString *outName)

status_t GetHatNameAt(int32 index, BString *outName)

status_t GetButtonNameAt(int32 index, BString *outName)

Renvoit le nom du contrôle spécifié par index. L'objet BString sur lequel pointe outName prend la valeur du contrôle.

GetAxisNameAt() renvoit le nom de l'axe spécifié, GetHatNameAt() renvoit le nom du champignon spécifié, et GetButtonNameAt() renvoit le nom du bouton spécifié.

 
Ces fonctions ne sont disponibles qu'en mode étendu.


CODES DE RETOUR

B_OK. Le nom a bien été renvoyé.


GetAxisValues() voir CountAxes()


GetButtonNameAt() voir GetAxisNameAt()


GetControllerModule() , GetControllerName()

                                                         
  

status_t GetControllerModule(BString *outName)

status_t GetControllerName(BString *outName)

GetControllerModule() renvoit le nom du module joystick qui représente le périphérique joystick ouvert. Si le périphérique n'est pas en mode étendu, elle renvoit toujours "Legacy".

GetControllerName() renvoit le nom du joystick qui a été configuré pour le port ouvert. Il s'agit de la même chaîne de caractères qui apparaît dans les préférences Joysticks. La chaîne renvoyée est toujours "2-axis" si le port n'est pas en mode étendu.

 
Ces fonctions ne oeuvent être utilisées qu'en mode étendu.


CODES DE RETOUR

B_OK. Le nom a bien été renvoyé.


GetDeviceName() voir CountDevices()


GetHatNameAt() voir GetAxisNameAt()


GetHatValues() voir CountHats()


EnableCalibration() voir IsCalibrationEnabled()


EnterEnhancedMode()

                                                         
  

bool EnterEnhancedMode(const entry_ref *ref = NULL)

Fait passer le périphérique en mode étendu. Si ref ne vaut pas NULL, il est traité comme une référence vers un fichier de description de joystick (comme ceux que l'on trouve dans /boot/beos/etc/joysticks). Si ref vaut NULL, les paramètres du joystick actuellement configuré (via les préférences Joysticks) seront utilisés.

Si le passage en mode étendu se passe bien (ou si le périphérique est déjà en mode étendu), true est renvoyé. Sinon, EnterEnhancedMode() renvoit false.


IsCalibrationEnabled() , EnableCalibration()

                                                         
  

bool IsCalibrationEnabled(void)

status_t EnableCalibration(bool calibrates = true)

IsCalibrationEnabled() renvoit true si les valeurs des axes renvoyées par le joystick sont calibrées automatiquement dans l'intervalle -32,768 à 32,767, et false si des valeurs "brutes" sont renvoyées.

EnableCalibration() enables or disables automatic calibration for the joystick's axes. Specify a value of true for calibrates to enable calibration; otherwise, specify false.

Les noms renvoyés par GetDeviceName() peuvent être passés à la fonction Open() pour ouvrir un périphérique.

 
Les préférences Joysticks permettent à l'utilisateur de calibrer le joystick. La calibration est autorisée par défaut. Ces fonctions ne peuvent être utilisées qu'en mode étendu.


CODES DE RETOUR

B_OK. Le nom a bien été renvoyé.


Open() , Close()

                                                         
  

status_t Open(const char *devName)

status_t Open(const char *devName, bool enterEnhanced)

void Close(void)

Ces fonctions ouvrent le port joystick spécifié par devName ou le ferment.

Sur la BeBox, il y a deux sur la face arrière de l'ordinateur, et leurs noms correspondent aux noms imprimés sur la machine (et dans le diagramme du The BeOS User's Guide :

 
"joystick1" (port du haut)
"joystick2" (port du bas)


En connectant un cable Y (séparateur de ports) sur un port, vous pouvez y connecter deux joysticks. Les câbles peuvent donc ajouter deux port supplémentaires :

 
"joystick3" (port du haut)
"joystick4" (port du bas)


La rangée du bas de chaque connecteur de jeu sur la machine correspond à la rangée du haut de connecteurs du câble. C'est pourquoi, les deux premiers noms cités précédemment correspondent aux rangées du haut des connecteurs des ports de jeu ; les deux derniers noms correspondent aux deux rangées du bas.

Sur les autres systèmes, devName doit être le nom du port. Le meilleur moyen de déterminer les noms de ports est d'utiliser les fonctions CountDevices() et GetDeviceName().

Si elle peut ouvrir le port, Open() renvoit un entier positif. Si elle ne peut pas l'ouvrir ou si name est incorrect, elle renvoit B_ERROR. Si le port name est déjà ouvert, Open() essaie d'abord de le fermer, puis le rouvre.

Par défaut, Open() ouvre le périphérique en mode étendu. Si vous voulez utiliser le mode Standard (non étendu donc), vous pouvez utiliser la deuxième form de Open() pour préciser si vous voulez ou non utiliser le mode étendu ; mettez enterEnhanced à true pour utiliser le mode étendu ; mettez-le à false pour utiliser le mode standard.

 
Même en mode étendu, les variables du mode standard d'un BJoystick sont disponibles et utilisables (pour rester compatible avec des applications anciennes). Cependant, elles ne donnent accès qu'aux deux premiers axes et aux deux premiers boutons du joystick.


Pour pouvoir récupérer des valeurs d'un joystick, un objet BJoystick doit avoir un port ouvert.


SetMaxLatency()

                                                         
  

status_t SetMaxLatency(bigtime_t maxLatency)

Spécifie le temps de latence maximal autorisé lors de l'accès à un joystick. Renvoit B_OK si la modification a bien été prise en compte, et un code d'erreur dans le cas contraire.


Update()

                                                         
  

status_t Update(void)

Met à jour les données de l'objet de façon à ce qu'elles correspondent à l'état actuel du joystick. Une application appellera Update() régulièrement afin de connaître l'état du périphérique, puis lira les valeurs contenues dans les données, ou—en mode étendu—utilisera les diverses foncions afin de connaître la position du joystick.

Cette fonction renvoit B_ERROR si l'objet BJoystick n'a pas de port ouvert, et B_OK si c'est le cas.


Table des Matières Kit de Périphériques     Index Kit de Périphériques


The Be Book,
...in lovely HTML...
for BeOS Release 5.

Copyright © 2000 Be, Inc. All rights reserved..