К сожалению времени на этот проект не так много как хотелось бы, но вот, тем не менее, думаю, что продвинулся вперед значительно.
Прежде всего, исправлены 2 ошибки в видеоадаптере: во-первых, иногда происходила неверная запись во фрейм буффер, во-вторых, во время записи иногда неверно читались данные из фреймбуффера. Последний баг приводил к неприятным мерцаниям во время загрузки изображения на экран.
Следующее улучшение в программной части на компьютере. Там у меня была программа cpp_draw_pict которая брала из командной строки имя файла картинки и посылала ее в плату. Нашелся и там баг: загрузка картинки шла очень медленно, около 380 миллисекунд и я все не мог понять почему так медленно. Оказывается просто использовались много небольших блоков для передачи и это нехорошо. Увеличение размера блока для функции FT_Write(...) существенно улучшает производительность системы.
Ну и, наконец, я написал еще одну программу на C/C++ - это vplayer. Программа может читать из stdin бинарные данные как битмапы и посылать их в плату Марсоход3. Это сделано вот так для того, чтобы использовать vplayer совместно с программой декодирования видео FFMPEG. При этом командная строка для передачи видео на плату может выглядеть как-то вот так:
> c:\test\ffmpeg -i c:\common\h264\test_video\test_video_640x360.mp4 -c:v bmp -f rawvideo -an - | vplayer.exe
В командной строке вывод одной программы (FFMPEG) перенаправляется другой программе (VPLAYER) с помощью "|"
Конечно, это не совсем настоящее кино, но до 14-ти кадров в секунду вполне прокачивается. Внимательный зритель конечно заметит, что кадры на экране монитора выглядят "рваными". Это известный эффект, который объясняется тем, что и для записи и для воспроизведения используется всего один фреймбуффер. Желательно было бы иметь двойной буфер: один выводится на экран, второй заполняется новым кадром. Потом во время кадрового импульса буферы моли бы меняться местами. Ну мне это пока не нужно, так, что я на это просто закрываю глаза.
Что дальше с проектом USBTerm?
Нужно сделать еще 2 крупных части:
- Поскольку я хочу использовать USBTerm, как терминал к виртуальной машине, но нужно написать сервис для Windows, который будет копировать изменения на экране виртуальной машина в терминал.
- Нужно подключить USB мышь и клавиатуру к терминалу. У меня есть Shield разъемов. Вот его возьму, вставлю в плату и к нему буду подключать внешние мышь и клавиатуру. Ну и протокол передачи кодов клавиш и движения мыши нужно еще продумать.
Вот этим дальше и планирую заниматься.
PS: весь проект на GITHUB: https://github.com/marsohod4you/UsbHwThinClient4Vm
Подробнее...