Linux Wireless Network Testbed - PullRequest
0 голосов
/ 08 июня 2009

Я пишу тестовый стенд Linux для беспроводных сенсорных сетей. Основная цель - проверить передачу данных между любыми двумя узлами. Сеть работает с использованием топологии дерева. Один узел в сети - это «Драйвер». Этот узел подключен через последовательный порт к ПК с Linux. Я пытаюсь написать программное обеспечение на этом компьютере Linux, которое будет управлять передачей данных в сети.

Узел «Драйвер», получающий команды от программного обеспечения, работающего на компьютере с Linux, отправит сообщение с запросом данных на узел Отправителя. Узел отправителя проанализирует сообщение с запросом данных и начнет передачу данных в «Драйвер». Может существовать несколько таких отправителей. Все данные передаются от Отправителей к узлу «Драйвер». Узел «Драйвер» передает все полученные данные в приложение linux. Приложение linux отслеживает, сколько пакетов было получено от разных отправителей.

Ниже приведены требования.

  1. Любой узел в сети может быть драйвером (пунктом назначения), а любой узел может быть Отправителем.
  2. В любой момент времени может быть несколько Отправителей, отправляющих данные на узел «Драйвер».
  3. Данные, полученные от последовательного порта и отправленные последовательным портом приложением linux, заносятся в файл.
  4. Приложение linux должно иметь возможность считывать сообщения запроса данных из файла и отправлять их в указанное время.
  5. Графический интерфейс для этого приложения Linux. Весь код должен быть на C, поэтому выбор GUI должен быть размещен с C.

Один последний поворот: данные от Отправителя к «Водителю» представляют собой фрагментированные данные. На стороне отправителя фрагментация обрабатывается в самом устройстве. На стороне «Водителя» фрагментация будет обрабатываться в приложении linux. Таким образом, приложению linux придется отслеживать окно фрагментации и отправлять фрагменты подтверждения для каждой передачи данных, выполняемой несколькими отправителями, и отслеживать количество пакетов, полученных на данный момент от каждого отправителя.

Итак, в приложении linux есть ли возможность использовать несколько потоков - по одному потоку для каждого Отправителя? Будет ли несколько потоков играть хорошо с одним последовательным портом отправлять и получать одновременно?

Консультирование по любому требованию будет оценено. Основная идея заключается в тестировании передачи данных, особенно сбора данных (несколько узлов отправляют данные на один узел). Если предлагается иной подход, чем изложенный выше, я также буду рад их услышать.

Спасибо большое

Джеймс

Ответы [ 2 ]

1 голос
/ 09 июня 2009

Итак, в приложении linux есть способ иметь несколько потоков - по одному потоку для каждого Отправителя?
Будет ли хорошо работать несколько потоков с одним последовательным портом для отправки и получения одновременно?

Вы хотите, чтобы только один считыватель / отправитель считывал / записывал на последовательном порту. Когда ваше заявление блоки на выходе, вам понадобится неблокирующий ввод / вывод на порту, чтобы вы могли отвечать на полученные символы и обрабатывать запросы пользовательского интерфейса. Также, по прочтении, вы захотите собрать полный набор данные в полный пакет. Это может занять несколько чтений, пока вы не получите полный пакет.

Если ваш выбор GUI - X, вы можете добавить обработчик событий для чтения и записи последовательного порта с помощью XtAppAddInput ().

0 голосов
/ 09 июня 2009

Это не вопрос, а скорее неполная спецификация для полного пакета программного обеспечения. Тем не менее, я сделаю все возможное, чтобы помочь вам здесь.

Относительно одного против многопоточного: Вы, конечно, можете написать это в одном потоке. При таком подходе вы, вероятно, просто сохраните состояние фрагмента в структуре данных и будете использовать poll () для чтения со всех датчиков и последовательного порта. Если вы выбрали многопоточный подход, вы, вероятно, захотите обернуть свой доступ к последовательному порту (и любые другие общие ресурсы) в мьютекс, используя pthreads.

Да, поэтому я не вижу других вопросов, которые вы задаете здесь. Что именно вы ищете в дополнение?

...