0

久しぶりにここ。最近JavaScriptでプログラミングを始めたばかりで、デザインの問題に直面しています。

1. シリアル ポートからの特定の入力を待機します。2. 入力が見つかると、次の関数に移動します。3. 次の関数は、シリアル ポートを介してコマンドを送信し、再び入力を待ちます。

これで、stepone() steptwo() など 9 つの関数が定義されました。これを行うには、もっと良い方法が必要です。各関数は、必要な入力と出力の変数が異なることを除いて同じです。

ただし、プログラムにステップをスキップさせたくありません。次のコマンドを送信する前に、正しいシリアル入力を待つ必要があります。

お互いを参照するコールバック関数を使用しようとしましたが、どうやら間違っているようです。また、うまくいきません。コマンドを送信する前に正しい入力を待ちません。

    var waitforinput = function(input, regex, callback)
    {
        if (regex.search != -1)
            callback();
    };

    var sendcommand = function(command,callback)
    {
        port.writeline(command);
        if (callback)
            callback();
    };

    var connect = function()
    {
        var int = setInterval(function()
        {
            waitforinput(input, "Please choose:", function()
            {
                sendcommand("1", function()
                {
                    waitforinput(input, "You choosed", function()
                    {
                        sendcommand("saveenv 1");
                    });
                });
            });
        },50);
    };
4

1 に答える 1

0

ケースで switch() を使用し、step という変数を追跡することになりました。

    step = 1;
    switch(step)
    {
    case 1:
        if (inputbuffer.search('Please choose') !== -1)
        {
            if (!waitdisplaystarted)
            {
                waitdisplaystarted = true;
                waitint = setInterval(showwait,1000);
            }
            window.$("#instructions").hide();
            window.$("#status").html("Step 1: Choosing boot option.");
            SELF.sendserialcommand("1");
            step = 2;
        }
        break;
    case 2:
        if (inputbuffer.search('You choosed 1') !== -1)
        {
            SELF.sendserialcommand('setenv bootargs "board=ALFA console=ttyATH0,115200 rootfstype=squashfs,jffs2 noinitrd"\r');
            setTimeout(function(){SELF.sendserialcommand('saveenv\r');}, 50);
            window.$("#status").html("Step 2: Transferring new kernel.");
            setTimeout(function(){SELF.sendserialcommand('tftp 0x80600000 kernel.bin\r');}, 2000);
            step = 3;
        }
        break;
    case 3:
        if (inputbuffer.search('Bytes transferred = ' + 878938) !== -1)
        {
            window.$("#status").html("Step 3: Erasing old kernel.");
            SELF.sendserialcommand('erase 0x9f650000 +0x190000\r');
            step = 'finished';
        }
    }
于 2013-05-01T20:48:32.463 に答える