С++ GUI приложение на wxWidgets
Полностью рабочая программа с подобным функционалом есть на С++, но рассчитанная на консольный режим работы. Т.е. фактически нужно адаптировать имеющееся консольное приложение под GUI интерфейс.
Программа получает пакеты данных для отображения с внешнего устройства, взаимодействие с которым осуществляется через виртуальный COM порт.
В программе следует учесть особенность, что пакетов с внешнего устройства может приходить порядка 2000–3000 в секунду. При этом отображение не должно «тормозить» и данные не должны теряться (если вовремя их не выбрать с устройства, данные теряются).
На данный момент при включенном выводе на экран полученных данных, данные таки теряются ввиду медленного их вывода на экран. Вижу решение проблемы в создании двух потоков, один из которых занимается отображением, второй — получение данных от устройства.
Вывод данных в реальном времени не интересен, и поэтому даже если между получением данных от устройства и отображением его на экране пройдет несколько секунд — ничего страшного. Важно не потерять данные.
В дальнейшем собранные данные обрабатываются пользователем в оффлайне.
Достаточно обычного классического интерфейса для отображения полученных данных в виде ListView с возможностью сортировки по каждому полю, группировке по полю, а также записи/чтению полученных данных в/из файла.
Также добавить пользователю возможность выбора скорости, фильтра, режима работы (сейчас все это жестко задается в программе), сделать возможность фильтрации отображаемых сообщений «на лету».
Обязательное требование — документирование классов, методов и никакого «спагетти-кода». Данный проект планируется сделать OpenSource.
Приложение планируется сделать кроссплатформенным, поэтому задачу можно разбить на несколько этапов, начав с GUI приложения под Windows и затем адаптировав его под Mac OSX, Linux.
Обязательно наличие поддержи мультиязычности интерфейса.
Исходники на С++ (CodeBlock), а также пример вывода консольной программы прилагаю.
Подобная по функционалу программа - CANHacker. Отображение данных можно сделать в таком же виде.
Все остальные подробности по проекту по запросу.