0

第一次在这里很久。我最近才开始用 javascript 编程,我遇到了一个设计问题。

我有一些工作代码:1.等待来自串行端口的特定输入,2.找到输入后,它会移动到下一个函数。3. 下一个函数通过串口发送命令,然后再次等待输入。

现在我有 9 个函数定义为 stepone() steptwo() 等......必须有更好的方法来做到这一点。除了所需的输入和输出变量不同外,每个函数都是相同的。

但是,我不希望程序跳过步骤。在发送下一个命令之前,它需要等待正确的串行输入。

我尝试过使用相互引用的回调函数,它似乎......错了?此外,它不起作用。它不会在发送命令之前等待正确的输入。

    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 回答