C#, Как я могу читать / записывать команды на Linux SB C (BeagleBone) через последовательный порт в определенном порядке? - PullRequest
1 голос
/ 18 апреля 2020

Я пытаюсь записать команду в BeagleBone через последовательный порт, а затем прочитать этот вывод, но по некоторым причинам он, похоже, не работает. Вот мой код:

SerialPort port = new SerialPort("COM1", 115200, Parity.None, 8, StopBits.One);

            port.ReadTimeout = 500;
            port.WriteTimeout = 500;


            port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);

            port.Open();

            port.WriteLine("debian\r\n"); //default login username
            port.WriteLine("temppwd\r\n");//default login password


            void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {

                    string message = port.ReadExisting();
                    System.Diagnostics.Debug.WriteLine(message);


            }

Например, port.WriteLine("debian\r\n"), кажется, работает правильно, но сразу после этого port.WriteLine("temppwd\r\n"), кажется, не работает. Я ожидаю увидеть debian@beaglebone:~$: распечатанным в консоли отладки, но после port.WriteLine("debian\r\n") все, что распечатано, является пустым пространством. Это потому, что мне нужно дождаться выполнения первой команды перед второй? Насколько я знаю, я думал, что SerialDataReceivedEventHandler позаботился об этом. Спасибо, любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ : Просто чтобы уточнить, я могу установить sh соединение с SB C, потому что в консоли отладки по умолчанию текст при входе в систему распечатывается.

1 Ответ

1 голос
/ 26 апреля 2020

Простой сон между командами работает нормально, и может быть достаточным для вашего случая использования:

    port.WriteLine("debian\r\n"); 
    Thread.Sleep(500);
    port.WriteLine("temppwd\r\n"); 
    Thread.Sleep(500);
    port.WriteLine("ls /\r\n"); 

Лучшим решением будет анализ полученных данных. Обратите внимание, что строка «message», которую вы получаете от события последовательного порта

  • , может не содержать всю строку
  • может содержать несколько строк
  • может никогда не заканчиваться с CR / LF (если это приглашение)
  • может содержать управляющие символы терминала
...