Logiciels Libres et Systèmes Embarqués


3.3. Applications

3.3.1. Exemples

Voici un exemple d'application que l'on peut trouver sur Dream[Slack] : la configuration d'un réseau SLIP. Ce dernier permet d'avoir une interface réseau grâce au port série de la DreamCast, ce qui signifie qu'il faille posséder le câble adéquat. Le but de la Dream[Slack] étant d'être utilisable par tous possesseurs 'traditionnels' de DreamCast, cet outil de configuration n'a qu'une valeur de démonstration, et cela permet d'être prêt lorsque le pilote du modem sortira puisque l'interface sera similaire.

Figure 3.3. Exemple de l'interface de configuration du SLIP pour Dream[Slack]

Exemple de l'interface de configuration du SLIP pour Dream[Slack]

On peut même laisser à l'utilisateur le pouvoir de lancer ces propres commandes, cela peut être dangereux car s'il existe une connexion réseau, une personne mal intentionné pourrait exécuter des commandes arbitraires. Pour le moment Dream[Slack] ne s'occupe pas de la sécurité, mais dés qu'elle sera opérationnelle, ce point sera traité.

Figure 3.4. Exemple de clavier virtuel en JavaScript pour Links 2

Exemple de clavier virtuel en JavaScript pour Links 2

Figure 3.5. Résultat de la commande exécuter sur l'hôte local

Résultat de la commande exécuter sur l'hôte local

3.3.2. Implémentation de l'interface

Voici des exemples de l'implémentation de l'interface. Ici je présente la page où l'utilisateur doit saisir l'adresse IP de sa DreamCast lors de la configuration du SLIP.

Fichier ip-dc.htm

<HTML>
<HEAD>
    <META http-equiv="content-type" content="text/html;
    charset=ISO-8859-1">
</HEAD>
<BODY>
Set your DreamCast serial interface IP,
for example 192.168.0.2<BR><BR>
<FORM NAME="Keypad" ACTION="/cgi-bin/ifconfig.cgi">
    <TABLE BORDER="0" WIDTH="50" HEIGHT="60" CELLPADDING="1"
            CELLSPACING="2">
        <CAPTION ALIGN="top">
        </CAPTION>
        <TR>
            <TD COLSPAN="3" ALIGN="MIDDLE"><INPUT NAME="ReadOut"
                TYPE="Text" SIZE="24" WIDTH="100%"></TD>
        </TR>
        <TR>
            <TD><INPUT NAME="btnSeven" TYPE="Button" VALUE=" 7 "
                        onClick="NumPressed(7)"></TD>
            <TD><INPUT NAME="btnEight" TYPE="Button" VALUE=" 8 "
                        onClick="NumPressed(8)"></TD>
            <TD><INPUT NAME="btnNine" TYPE="Button" VALUE=" 9 "
                        onClick="NumPressed(9)"></TD>
        </TR>
        <TR>
            <TD><INPUT NAME="btnFour" TYPE="Button" VALUE=" 4 "
                        OnClick="NumPressed(4)"></TD>
            <TD><INPUT NAME="btnFive" TYPE="Button" VALUE=" 5 "
                        OnClick="NumPressed(5)"></TD>
            <TD><INPUT NAME="btnSix" TYPE="Button" VALUE=" 6 "
                        OnClick="NumPressed(6)"></TD>
        </TR>
        <TR>
            <TD><INPUT NAME="btnOne" TYPE="Button" VALUE=" 1 "
                        OnClick="NumPressed(1)"></TD>
            <TD><INPUT NAME="btnTwo" TYPE="Button" VALUE=" 2 "
                        OnClick="NumPressed(2)"></TD>
            <TD><INPUT NAME="btnThree" TYPE="Button" VALUE=" 3 "
                        OnClick="NumPressed(3)"></TD>
        </TR>
        <TR>
            <TD><INPUT NAME="btnZero" TYPE="Button" VALUE=" 0 "
                        OnClick="NumPressed(0)"></TD>
            <TD><INPUT NAME="btnComma" TYPE="Button" VALUE=" . "
                        OnClick="NumPressed('.')"></TD>
            <TD><INPUT NAME="btnClear" TYPE="Button" VALUE=" C "
                        onClick="Clear()"></TD>
        </TR>
    </TABLE>
    <INPUT type="hidden" name="argument" value="ip-dc">
    <INPUT TYPE="SUBMIT" VALUE="OK">
</FORM>
<SCRIPT SRC="/keypad.js">
</SCRIPT>
</BODY>
</HTML>

Comme on le voit, c'est le script keypad.js qui s'occupe du clavier virtuel.

Fichier keypad.js

<!--
// Module-level variables
var FKeyPad = document.Keypad;
// Flag to indicate a new number (operand) is being entered
var FlagNewNum = false;

function NumPressed (Num)
{
    if (FlagNewNum) {
        FKeyPad.ReadOut.value = Num;
        FlagNewNum = false;
    }
    else {
        FKeyPad.ReadOut.value += Num;
    }
}

function Clear ()
{
    // Remove current number and reset state
    FKeyPad.ReadOut.value = "";
    FlagNewNum = true;
}
//-->

Figure 3.6. Résultat pour la saisie de l'adresse IP

Résultat pour la saisie de l'adresse IP

Je ne détaillerais pas les scripts CGI qui s'occupent de la configuration SLIP, car ils sont un peu complexes. En revanche, le script run.cgi est beaucoup plus simple, nous avons déjà vu le résultat d'une exécution précédemment lors des exemples d'applications

Fichier run.cgi :

#!/bin/sh
echo "Content-type: text/html"
echo ""
echo "<HTML>"
echo "<HEAD>"
echo " <META http-equiv=\"content-type\" content=\"text/html; \
              charset=ISO-8859-1\">"
echo "</HEAD>"
echo "<BODY>"
TMP=/tmp/
OPTS=`echo $QUERY_STRING | sed 's/&/ /g'`
COMMAND=`echo $OPTS | sed 's/=/ /g' | awk '{print $2}' | \
         sed 's,%,\\\x,g' | sed 's/+/ /g'`
#exécute la commande et affiche sa sortie standart sur une page HTML
echo "<PRE>"
$COMMAND
echo "</PRE>"
if [ $? != 0 ]
    then
    echo "ERROR : "
    cat $TMP/tmpERRds
    rm $TMP/tmp*ds
    cat ../failed.htm
    exit
fi
echo "<BR>"
echo "<FORM NAME=\"Keypad\" ACTION=\"/index.html\">"
echo "
<INPUT TYPE="SUBMIT" VALUE=\"OK\">"
echo "</FORM>"
echo "</BODY>"
echo "</HTML>"

3.3.3. Idées et évolutions

Le problème lié à GPM peut être contourné de différentes manières, je pourrais tracer l'exécution de ce logiciel et de ceux qui l'utilisent pour trouver d'où vient le problème. Dans le cas contraire, je pourrais intégrer directement un support du joystick à Links 2.

Le support du VMU et de son système de fichiers venant d'être intégrés au noyau Linux, Kurdy présenta l'idée de pouvoir copier des sauvegardes de jeux à partir du CD-ROM de Dream[Slack] vers le VMU. De plus Kurdy a commencé à créer une jolie interface HTML intuitive et complète.

Pour le moment, les formulaires sont remplis grâce à un clavier virtuel écrit en JavaScript, mais lorsque Linux pour DreamCast sera capable d'utiliser le modem, il faudra trouver une autre solution pour pouvoir naviguer sur Internet. D'où l'idée d'implémenter directement un clavier virtuel dans Links 2, comme le font les navigateurs officiels de SEGA sur DreamCast.