Как-то давно купил железку, потому что хотелось помимо видны, солярки и прочего подергать железку, покрутить моторчик и поморгать диодик...
Библиотека vtrc - библиотека накоженая на С++, используется для создания сервров и клиентов с RPC протоколом. Само название VTRC взял от имени железки (Virt To Real Controll; v2rc не взял потому что могли возражать авторы Virt2Real ну и + нашел еще упоминание о каком-то девайсе с таким именем).
Гит с сорсами либы и примерами (о них ниже) тут: https://github.com/newenclave/vtrc
Пишется JustForFun и о том, что "есть же куча подобных!!!11", я знаю.
Изначально хотел сделать маааленькую библиотечку с описательным интерфейсом протокола, на основе которого можно будет строить управлялку железом.
В результате получилась либа, которая умеет делать вызовы:
- с ожиданием (запрос->ждем ответа->получаем ответ)
- без ожидания (сделали вызов, забыли, получили ответ когда-то потом, где-то там, или не получили вообще)
- коллбеки (вызовы в контексте других вызовов на другой стороне)
немного инфы есть тут: https://github.com/newenclave/vtrc-docs ... ription.md (cо схемами =) )
Поддерживает транспорт:
- TCP (v4, v6)
- Локальный транспорт системы (POSIX Local IPC Sockets, Named Pipe для Windows)
Все удаленные вызовы и сообщения описываются в формате protobuf (см файлы протоколов от примеров).
В состав самой либы входят несколько примеров, демонстрирующих работу. https://github.com/newenclave/vtrc/tree/master/examples
Lukki-db - пример небольшой memory-only базы данных (ключ-значение) с возможностью установить значения, прочитать, обновить + получить статистику и подписаться на события изменения значений. Сервер написан таким образом, что обращения к базе (std::map

протокол описан тут: https://github.com/newenclave/vtrc/blob ... kidb.proto
Remote-fs - пример файлового клиента и сервера. Можно сделать листинг директории, вывернуть дерево рекурсивно, скачать файл, залить файл, скачать директорию, залить директорию. И!! ПОМОРГАТЬ ДИОДИКОМ (из-за этого все затевалось). Протокол тут:
https://github.com/newenclave/vtrc/blob ... tefs.proto
Stress - стресс тест. Клиент умеет флудить сервер, показывать некоторые цифры времени. Умеет делать рекурсивные взаимовызовы и получать Stack overflow от библиотеки при заданной со стороны сервера глубине вызовов. Умеет просить сервер послать несколько событий, как в контекст текущего вызова (callback), так и вне его(event). Сделан для того, чтоб посмотреть как ведет себя библиотека в тех или иных случаях. Протокол:
https://github.com/newenclave/vtrc/blob ... ress.proto
Все примеры собраны для v2r и их можно взять тут: https://dl.dropboxusercontent.com/u/221 ... in/lin.zip (архив с бинарниками) еще есть собранные клиенты и серверы для win (https://dl.dropboxusercontent.com/u/221 ... in/win.zip). Собраны 12 студией, и скорее всего на XP не заведутся.
Как собрать для линукс (Ubuntu в моём случае) есть дока тут https://github.com/newenclave/vtrc/blob ... -howto.txt
У всех серверных сторон можно открыть множество серверных точек, которые замечательно будет жить на 1-2-... потоках и обслуживать клиентов.
Пример:
откроем файловый сервер на стороне железки.
[root@virt2real default]# ./remote_fs_server -s 0.0.0.0:55550
Соединимся с сервером, откроем /dev/v2r_gpio, и запишем туда все, что попало на консоль (параметр "-u -").
./remote_fs_client -s 192.168.3.1:55550 -u - -o /dev/v2r_gpio
После слова Input: можно будет вбить команду из Wiki (set gpio 74 output 1) и нажать Enter, Ctrl+D (для windows Ctrl+Z, Enter)
% ./remote_fs_client -s 192.168.3.1:55550 -u - -o /dev/v2r_gpio
Creating client ... Ok
Connection is ready...
Connected to 192.168.3.1:55550
Path is: ''
Creating interface...Success; id is '101'
Path not exists
File size is unknown: - 'boost::filesystem::file_size: No such file or directory: "-"
Open remote file success.
Starting...
Block size = 4096
Input:
set gpio 74 output 1
Upload complete
Получим красный диодик =))
второй вариант включения: (для unix-консоли)
% echo "set gpio 74 output 1" > d.txt && ./remote_fs_client -s 192.168.3.1:55550 -u d.txt -o /dev/v2r_gpio
записали файл и его заслали в устройство.
а вот так:
можно сдампить карту =)./remote_fs_client -s 192.168.3.1:55550 -g /dev/mmcblk0 -o dump.dmp -b 65530
тут еще есть дока по файловому клиенту-серверу, стресс-тесту https://github.com/newenclave/vtrc-docs/tree/master/ru
Дока по тому, как использовать вместе с С++ есть тут: https://github.com/newenclave/vtrc-docs ... u/howto.md
К сожалению я не большой писатель доков поэтому доками пока все не очень хорошо
