Smile pilote par script n'importe quel adaptateur USB/RS232. Par script, configurez la liaison série RS232 et ainsi recevez et envoyez des caractères. Pour piloter la liaison série, créez une ou plusieurs instances d'objets de classe RS232.
Voici des instructions détaillées.
-
Premièrement, installez le driver fourni avec votre adaptateur, branchez l'adaptateur dans votre machine et lancez Smile.
-
Demandez avec serial ports la liste des ports actifs. Cela renvoie une liste telle que celle donnée dans l'exemple ci-dessous. Nous supposerons que nous travaillons sur une machine ayant un adaptateur USB/Série 2-ports de marque Keyspan. (Nous rappelons que les commandes RS232 de Smile marchent pour tout type d'adaptateur.)
serial ports
-- {{9, "/dev/cu.modem", "modem"}, {9, "/dev/cu.USA28X21P1.1", "USA28X21P1.1"}, {9, "/dev/cu.USA28X21P2.2", "USA28X21P2.2"}, {10, "en0", ""}, {10, "en1", ""}}
Tous les éléments de la liste correspondent à un port actif de la machine. Les informations données pour un port sont une liste de trois éléments : un entier, du texte ressemblant à un chemin POSIX qui est la description de configuration, et un deuxième texte qui est le nom du port. Les ports que vous pilotez avec Smile ont le nombre 9 (les liaisons série).
Si votre machine a un modem intégré, un port "modem" apparaîtra dans la liste. De même, si votre machine a un port infrarouge intégré, un port "IrDA" apparaîtra dans la liste.
Pour piloter un port série, vous devez utiliser sa description de configuration du port qui vous intéresse. Dans notre exemple, nous choisissons le premier port de l'adaptateur Keyspan.
set the_config_name to "/dev/cu.USA28X21P1.1"
-
Créez un objet de classe RS232 et affectez-le à un port en définissant sa propriété configname dans la même instruction.
set the_RS to make new RS232 with properties {configname: the_config_name}
-
Définissez les réglages de la liaison avec la propriété RSOptions de l'objet RS232. Cette propriété est un record comme indiqué dans le dictionnaire à l'entrée Class RSOptions, qui peut être définie comme suit :
set RSOptions of the_RS to {bauds:9600, databits:8, stopbits:1, parity:0}
-
Le paramètre ICANON de RSOptions (valeur par défaut : 0) permet de régler la RS232 en mode canonique. En mode canonique, les entrées sont traitées lignes par lignes.
-
Une ligne est délimitée par un caractère de fin de ligne (ASCII 10) ou un caractère de fin de fichier (ASCII 255).
-
La lecture de la RS232 ne renverra rien avant qu'une ligne complète ne soit renvoyée.
-
Même si plusieurs lignes sont disponibles, au plus une ligne sera renvoyée par un ordre de lecture.
-
Activez l'objet RS232 en définissant sa propriété enabled à true.
set enabled of the_RS to true
-
Pour lire les octets reçus, utilisez la propriété contained data de l'objet RS232. Si aucun caractère n'est disponible, l'intruction de lecture renverra une erreur.
try
set the_input to contained data of the_RS
on error
-- no input available
end try
-
Pour envoyer des octets, définissez la propriété contained data de l'objet RS232 à la chaîne de caractères à envoyer.
set contained data of the_RS to "HELLO"
-
Si vous définissez la propriété want idle de l'objet RS232 à true, alors la RS232 surveillera son flux d'entrée, en l'interrogeant à un intervalle de temps défini en secondes par la propriété idle delay (1.0 par défaut; pour une plus grande réactivité, définissez la propriété idle delay par exemple à 0.01).
-
Lorsqu'une entrée est disponible, Smile enverra automatiquement à l'objet RS232 l'événement suivant .
notify the_object from the_sender with data the_string
the_object est l'objet qui sera notifié, c'est-à-dire par défaut l'objet RS232 lui-même
the_sender est l'objet responsable de la notification, ici la liaison RS232
the_string est le texte reçu (les caractères disponibles, ou une ligne entière en mode canonique).
-
En mode canonique, chaque ligne reçue provoquera un événement notify.
-
Pour gérer l'événement notify, définissez dans le script de l'objet RS232 une fonction notify (utilisez EditObjectScript(the_object) pour ouvrir le script d'un objet), ou définissez une fonction notify dans le contexte global (par exemple, dans un fichier texte enregistré dans Class scripts/Context additions/).
-
Vous pouvez rediriger l'événement notify en définissant la propriété target object de l'objet RS232 à une référence à un autre objet de Smile tel qu'une fenêtre ou un dialogue (mais pas un script, cependant). Par défaut, ou lorsque la propriété target object n'est pas définie ou contient une référence invalide, l'événement notify est envoyé à l'objet RS232 lui-même.
-
Si besoin est, vous pouvez accéder à tous les réglages documentés dans man termios : utilisez la propriété «class Term» de l'objet RS232. Par exemple voici comment vous pouvez personnaliser le caractère de fin de ligne utilisé par le mode canonique.
Vous pouvez lire et écrire la propriété «class Term», comme dans l'exemple ci-dessous :
set «class Term» of the_RS to {0, 0, 56064, 0, "□ˇˇ□□□ˇ□□□□□□□□ˇˇ", 19200, 19200}
«class Term» est une liste de 7 éléments : quatre nombres entiers, puis une chaîne de caractères (les caractères de contrôle), puis deux nombres entiers (les vitesses d'entrée et de sortie). Leur correspondance exacte avec man termios est donnée ci-dessous :
tcflag_t c_iflag; /* input flags */
tcflag_t c_oflag; /* output flags */
tcflag_t c_cflag; /* control flags */
tcflag_t c_lflag; /* local flags */
cc_t c_cc[NCCS]; /* control chars */
speed_t c_ispeed; /* input speed */
speed_t c_ospeed; /* output speed */
|