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

Ссылка на github та же. Скачать собранного агента (теперь так называется серверная сторона), клиента для виртурилки (в смысле клиент, который может запуститься на виртурилке), а так же клиента для windows можно тут
Для привлечения внимания =)
- Код: Выделить всё
function main( argv )
dev = gpio.export( tonumber( argv.gpio ), gpio.DIRECT_OUT ) -- открыть GPIO
local i = 0
local on_off = { 'OFF', 'ON' }
while true do --- do work
println( on_off[(i % 2) + 1] )
gpio.set_value( dev, i % 2 ) -- поменять состояние пина на противоположное
sleep( 1 ) -- спать секунду
i = i + 1
end
end
Краткое описание.
Что уже есть: консольный клиент, который я уже описывал в соседней теме, который, к тому же, умеет исполнять lua-скрипты.
Нюансы:
- Скрипт исполняется на стороне клиента уже в настроенной среде.
- Клиент может быть на любой удаленной системе, либо на той же виртурилке, что и агент.
- клиент уже подключен к удаленной машине (виртурилке, например)
- в состояние Луа предоставлена таблица с интерфейсами вызовов и некоторые переменные (например флаги открытия файлов, направление GPIO ...)
В скрипты добавлены все возможности библиотеки ferro-remote, как то:
- os.system( "" ),
- работа с файловой системой,
- работа с интерфейсом GPIO (через /dev/)
- Поддерживает асинхронные события от спец. файлов и GPIO (по-сути тоже файлы, но интерфейс этих событий немного упрощен, поскольку заранее известно, что ожидается)
На github в состав проекта входят некоторые скрипты-примеры там же (в README.md) есть разворот таблицы fr, которая является основным инструментом для удаленной работы.
Про таблицу:
В таблицу входит еще одна большая таблица, названная client, что намекает на принадлежность к пространству клиента. В таблицу клиента входят еще 3 таблицы:
- os - для вызов system на удаленной системе
- fs - для работы с файловой системой. Сюда входит и таблица file, которая есть интерфейс для работы с файлами (чтение, запись...)
- gpio - собссно для работы с GPIO
Нюансы скриптования:
У скпритов есть 2 фазы исполнения: первая - это загрузка и инициализация и вторая - это исполнение функции main, в которою передается таблица параметров (параметры задаются в командной строке клиента как -p"param=value", все параметры строковые). Скрипт можно прервать в любой момент вызовом 'die("строка с сообщением")', который кинет исключение например так.
Примеры:
- show-fr-table.lua, show-main-argv.lua: просто выводят таблицы
- remote-exec.lua: исполняет команду на удаленной системе. Команда должна быть передана как -p"command=command"
- directory-tree.lua, directory-list.lua: показывают директорию как дерево и как список соответственно. Показывают работу с файловыми итераторами
- file-push.lua, file-pull.lua: заливают и сливают файл соответственно.
- file-stat.lua: статистика удаленного пути (см. man 2 stat)
- gpio-blinking.lua: включает, выключает GPIO по заданному номеру, с паузой в секунду
- gpio-change-event.lua: Один из интересных примеров. Открывается GPIO и происходит подписка на событие изменения состояния пина. Сигнал о смене приходит асинхронно и вызовы main и change_handler исполняются в разных потоках Lua. В main симулируется "работа", путем вывода точек на консоль.
- dev-random-event.lua: и еще один похожий на предыдущий пример. Только подписка производится на события файла /dev/random, который является специальным устройством. В обработчике события выводится тот "мусор", который сгенерячился для данного открытого файла.
Пример работы (GPIO, например)
На виртурилке запустим агента
- Код: Выделить всё
./ferro_remote_agent -s 0.0.0.0:12345
Теперь запустим первого клиента, который будет отслеживать изменения GPIO с интедсом 3 (На виртурилке прерывания умеют только GPIO 1-7 )
- Код: Выделить всё
./ferro_remote_client -s 192.168.3.1:12345 -clua -e gpio-change-event.lua -p"gpio=3"
А на другой машине я запущу скрипт gpio-blinking.lua, который раз в секунду будет менять состояние GPIO 3
- Код: Выделить всё
./ferro_remote_client -s 192.168.3.1:12345 -clua -e gpio-blinking.lua -p"gpio=3"
на второй машине начитается смена состояния GPIO 3
- Код: Выделить всё
...
OFF
ON
OFF
ON
...
В это же время первая машина получает событие по этому поводу.
- Код: Выделить всё
...
.Value for gpio 3 changed to 1
.Value for gpio 3 changed to 0
.Value for gpio 3 changed to 1
.Value for gpio 3 changed to 0
...
Данное событие так же будет возникать, если GPIO3 будет соединено с каким-либо GPIO, настроенным на OUT через кнопку. Кнопку нажал - 1, отпустил - 0
PS: И про ошибки. Обработка ошибок пока по минимуму. ТО есть передал некорректный интерфейс - упал, попытался открыть несуществующий файл - вылетел. Пока это только тестовая платформа. Потом по дороге можно что-то добавить.
PSS: Еще примерами пока не покрыты вызовы работы с файловой системой. В арсенале функции
- mkdir - создает директорию
- write - записывает в файл заданную строку/данные. Делается за один вызов. Максимальный размер данных - 40к
- read - читает заданный файл. Делается за один вызов. Максимальный размер данных - 40к
- del - удаляет пустую директорию, либо файл
- rename - переименовывает файловый объект
На этом краткое описание закончено =) Будут вопросы, отвечу.