Список интерфейсов
Инструмент Lua использует версию Lua 5.3, которая включает все необходимые функции.
Важно: Этот движок использует библиотеку xlua от Tencent, что позволяет вам вызывать низкоуровневые функции C#.
Различия между отправкой скриптов обработки и интерфейсами выполнения Lua-скриптов
При отправке скриптов обработки недоступны интерфейсы таймеров/задач, а также логирования/log/print.
Отличие от интерфейса luat от Espressif
- В большинстве utils реализованы интерфейсы работы со строками.
- Реализованы все интерфейсы вывода логов.
- Реализованы все интерфейсы таймеров и задач.
Добавленные интерфейсы на уровне C# (низкоуровневые интерфейсы)
apiSend(канал, данные[, таблица])
Отправляет данные в канал. Для более подробной информации обратитесь к примеру channel-demo.lua
.
-
Параметры
|Тип данных|Описание|
|---|---|
|string|канал — имя канала, куда будут отправлены данные|
|string|данные — данные, которые будут отправлены (если требуется передать сложные данные, этот параметр обычно заполняется nil)|
|таблица|необязательный параметр, сложные данные, предназначены для каналов MQTT и других, где требуется одновременная передача нескольких параметров|
-
Возвращаемое значение
boolean, результат отправки, true при успешной отправке
-
Пример
local str = ("01020304"):fromHex()
local result = apiSend("uart", str)
```### apiSetCb(канал, callback)
Подписывается на получение данных с канала. Для более подробной информации обратитесь к примеру `channel-demo.lua`.
* Параметры
|Тип данных|Описание|
|---|---|
|string|канал — имя канала, для которого будет установлен callback|
|функция|callback — функция обратного вызова, которая принимает один параметр, который может быть строкой или таблицей, как показано в примере `channel-demo.lua`|
* Возвращаемое значение
Нет
* Пример
```lua
apiSetCb("uart",function (data)
log.info("uart received", data)
end)
-- Можно использовать различные функции для подписки на несколько событий, они все будут вызваны
apiSetCb("uart",function (data)
log.info("uart received2", data)
end)
apiSetCb("mqtt",function (data)
log.info("mqtt received", data.topic, data.payload)
end)
apiUnsetCb(канал, callback)
Отменяет подписку на канал.
-
Параметры
|Тип данных|Описание|
|---|---|
|string|канал — имя канала, от которого нужно отменить подписку|
|функция|callback — функция, которую использовали для установки подписки, должна быть той же самой|
-
Возвращаемое значение
boolean, результат отмены подписки, true если подписка была успешно отменена
-
Пример
local uartCb = function (data)
log.info("uart received", data)
end
apiSetCb("uart", uartCb)
-- Отменяем вышеуказанную подписку
apiUnsetCb("uart", uartCb)
```### apiSendUartData(строка) (устаревший интерфейс, не рекомендуется, будет удален в будущих версиях)
Отправляет данные через UART.
* Параметры
|Тип входных данных|Описание|
|-|-|
|строка|string, данные для отправки через последовательный порт|
* Возвращаемое значение
логическое значение, результат отправки, true при успешной отправке
* Пример
```lua
local str = ("01020304"):fromHex()
local result = apiSendUartData(str)
uartReceive обратный вызов (устаревший интерфейс, не рекомендован, будет удален в будущих версиях)
Обратите внимание, этот интерфейс используется для обратного вызова. Если вы используете Lua и должны обрабатывать обратные вызовы, объявите эту функцию как глобальную.
uartReceive = function(data)
log.info("uartReceive", data)
end
apiGetPath()
Получение пути к директории программы
- Параметры
отсутствуют
- Возвращаемое значение
строка, путь к директории с исполняемым файлом
- Пример
local path = apiGetPath()
apiUtf8ToHex(str)
Преобразование UTF-8 в HEX значения GBK кодировки
- Параметры
Тип входных данных |
Описание |
строка |
string, данные для преобразования в UTF-8 |
- Возвращаемое значение
строка, преобразованная HEX строка
- Пример
local str = apiUtf8ToHex("中文"):fromHex()
Эта функция предназначена для совместимости с проблемами загрузки китайских каталогов, подробнее см. head.lua
.
apiQuickSendList(id)
Получение данных из области быстрой отправки
- Параметры |Тип входных данных|Описание|
|-|-|
|id|число, номер данных для получения из области быстрой отправки|
- Возвращаемое значение
строка, содержимое данных из области быстрой отправки
Если такого id нет, то номер отсутствует
- Пример
local str = apiQuickSendList(1)
apiInputBox(строка Prompt, строка DefaultResponse = "", строка Title = nil)
Диалоговое окно
- Параметры
|Тип входных данных|Описание|
|-|-|
|Prompt|текст запроса|
|DefaultResponse|значение по умолчанию|
|Title|название диалогового окна (если nil, используется название по умолчанию)|
- Возвращаемое значение
логическое значение, указывает, был ли выбран "OK" или "Cancel"
строка, результат ввода
- Пример
local ok, result = apiInputBox("Введите данные для отправки TCP")
AddPoint(num, line)
Добавление точки для построения графика (точки добавляются в конец графика)
- Параметры
|Тип входных данных|Описание|
|-|-|
|num|значение точки|
|line|номер линии, может принимать значения от 0 до 9|
- Возвращаемое значение
отсутствует
- Пример
sys.taskInit(function()
for i=1,100 do
apiAddPoint(i, 1)
sys.wait(10)
end
end)
Дополнительные интерфейсы уровня Lua
Дополнительные методы для строки
Функционал модуля: добавление методов для работы со строкой
string.toHex(str, separator)
Преобразование Lua строки в HEX строку, например, "123abc" преобразуется в "313233616263"
- Параметры
|Тип входных данных|Описание|
|-|-| |строка|str, входная строка||string|Необязательный параметр с значением по умолчанию
" "
(пустая строка), разделитель выходной строки в шестнадцатеричном представлении
- Возвращаемое значение
hexstring - строка, составленная из шестнадцатеричных символов
len - длина входной строки
- Пример
string.toHex("\1\2\3") -> "010203" 3
string.toHex("123abc") -> "313233616263" 6
string.toHex("123abc"," ") -> "31 32 33 61 62 63 " 6
string.fromHex(hex)
Преобразует HEX-строку в Lua-строку, например, "313233616263" преобразуется в "123abc". Внутри функции используется фильтрация разделителей, что позволяет отфильтровывать большинство разделителей (можно сравнить с диапазонами \s и \p регулярных выражений).
- Параметры
|Тип передаваемого значения|Описание|
|-|-|
|string|hex - строка, составленная из шестнадцатеричных символов|
- Возвращаемое значение
charstring - строка, составленная из символов
len - длина выходной строки
- Пример
string.fromHex("010203") -> "\1\2\3"
string.fromHex("313233616263") -> "123abc"
string.toValue(str)
Возвращает строковое представление для конвертации строки в число с помощью tonumber (поддерживает преобразование чисел, превышающих 31 бит).
- Параметры
|Тип передаваемого значения|Описание|
|-|-|
|string|str - входная строка|
- Возвращаемое значение
str - преобразованная Lua-строка двоичного представления
len - количество символов, которое было преобразовано
- Пример
string.toValue("123456") -> "\1\2\3\4\5\6" 6
string.toValue("123abc") -> "\1\2\3\a\b\c" 6
string.```markdown
utf8Len(str)
Возвращает длину UTF-8 закодированной строки.
- Параметры
|Тип передаваемого значения|Описание|
|-|-|
|string|str - UTF-8 закодированная строка, поддерживающая кириллицу|
- Возвращаемое значение
number - длина строки
- Пример
local cnt = string.utf8Len("Россияa"), cnt == 3
string.formatNumberThousands(num)
Возвращает строковое представление числа с разделителями тысяч.
- Параметры
|Тип передаваемого значения|Описание|
|-|-|
|number|num - число|
- Возвращаемое значение
string - строковое представление числа с разделителями тысяч
- Пример
local s = string.formatNumberThousands(1000), s == "1,000"
string.split(str, delimiter)
Разделяет строку по указанному разделителю.
- Параметры
|Тип передаваемого значения|Описание|
|-|-|
|string|str - входная строка|
|string|delimiter - разделитель|
- Возвращаемое значение
список разделённых строк
- Пример
"123,456,789":split(',') -> {'123', '456', '789'}
string.urlEncode(str)
Возвращает URL-кодированную версию строки.
- Параметры
|Тип передаваемого значения|Описание|
|-|-|
|string|str - строка для кодирования, поддерживающая UTF-8 закодированный кириллицей|
- Возвращаемое значение
str - URL-кодированная строка
- Пример
local str = string.urlEncode("####133"), str == "%23%23%23%23133"
local str = string.urlEncode("中国2018"), str == "%e4%b8%ad%e5%9b%bd2018"
Модуль предназначен для записи системных журналов с использованием уровней логирования.
### Лог. трейс(тег, ...)
Отображает сообщение уровня трейс.
* Параметры
|Тип входных данных|Описание|
|---|---|
|параметр|тег — имя модуля или функции, используемое в качестве префикса журнала|
|параметр|... — содержание журнала, переменное количество параметров|
* Возвращаемое значение
`nil`
* Пример использования
```lua
trace('модульA', 'текст журнала')
Лог. дебаг(тег, ...)
Отображает сообщение уровня дебаг.
- Параметры
|Тип входных данных|Описание|
|---|---|
|параметр|тег — имя модуля или функции, используемое в качестве префикса журнала|
|параметр|... — содержание журнала, переменное количество параметров|
- Возвращаемое значение
nil
- Пример использования
debug('модульA', 'текст журнала')
Лог. информ(тег, ...)
Отображает сообщение уровня информ.
- Параметры
|Тип входных данных|Описание|
|---|---|
|параметр|тег — имя модуля или функции, используемое в качестве префикса журнала|
|параметр|... — содержание журнала, переменное количество параметров|
- Возвращаемое значение
nil
- Пример использования
info('модульA', 'текст журнала')
```---
### Лог. варн(тэг, ...)
Отображает сообщение уровня варн.
* Параметры
|Тип входных данных|Описание|
|---|---|
|параметр|тэг — имя модуля или функции, используемое в качестве префикса журнала|
|параметр|... — содержание журнала, переменное количество параметров|
* Возвращаемое значение
`nil`
* Пример использования
```lua
warn('модульA', 'текст журнала')
```---
### Лог. ошибка(тэг, ...)
Отображает сообщение уровня ошибки.
* Параметры
|Тип входных данных|Описание|
|---|---|
|параметр|тэг — имя модуля или функции, используемое в качестве префикса журнала|
|параметр|... — содержание журнала, переменное количество параметров|
* Возвращаемое значение
`nil`
* Пример использования
```lua
error('модульА', 'текст журнала')
Лог. фатальная(тэг, ...)
Отображает сообщение уровня фатальной.
- Параметры
|Тип входных данных|Описание|
|---|---|
|параметр|тэг — имя модуля или функции, используемое в качестве префикса журнала|
|параметр|... — содержание журнала, переменное количество параметров|
- Возвращаемое значение
nil
- Пример использования
fatal('модульА', 'текст журнала')
Система
Модуль предназначен для управления Lua корутинами.### Система. ожидание(мс)
Функция задержки задачи, может использоваться только внутри задачи.
- Параметры
|Тип входных данных|Описание|
|---|---|
|число|мс — целое число, максимальное время ожидания составляет 126322567 миллисекунд|
- Возвращаемое значение
Закончившаяся задержка возвращает
nil
, если она была прервана другим потоком, то возвращается аргумент, переданный вызывающим потоком.
- Пример использования
Функция ожидания условий задачи (включая сообщения событий и таймеры) может использоваться только внутри функций задач.
- Параметры
|Тип входных данных|Описание|
|-|-|
|param|id - идентификатор сообщения|
|number|ms - время ожидания до истечения срока действия в миллисекундах, максимальное значение составляет 126322567 мс|
- Возвращаемое значение
result - true при получении сообщения, false при превышении времени ожидания
data - параметры сообщения при получении
- Пример
result, data = sys.waitUntil("SIM_IND", 120000)
sys.waitUntilExt(id, ms)
Расширенная функция ожидания условий задачи (включая сообщения событий и таймеры) может использоваться только внутри функций задач.
- Параметры
|Тип входных данных|Описание|
|-|-|
|param|id - идентификатор сообщения|
|number|ms - время ожидания до истечения срока действия в миллисекундах, максимальное значение составляет 126322567 мс|
- Возвращаемое значение message — сообщение при получении, false при превышении времени ожидания
data — параметры сообщения при получении
result, data = sys.waitUntilExt("SIM_IND", 120000)
sys.taskInit(fun, ...)
Создает поток задачи, вызывается в конце модуля для регистрации функций задач в модуле, main.lua импортирует этот модуль
- Параметры
|Тип входных данных|Описание|
|-|-|
|param|fun — имя функции задачи, используется для resuming при возобновлении|
|param|... — переменные аргументы для функции fun|
- Возвращаемое значение
co — номер потока задачи
- Пример
sys.taskInit(task1, 'a', 'b')
sys.timerStop(val, ...)
Остановка таймера
- Параметры
|Тип входных данных|Описание|
|-|-|
|param|val — если это число, то это id таймера, если это обратный вызов, то передаются параметры|
|param|... — переменные аргументы для обратного вызова val|
- Возвращаемое значение
нет
- Пример
sys.timerStopAll(fnc)
Остановка всех таймеров одного обратного вызова
- Параметры
|Тип входных данных|Описание|
|-|-|
|param|fnc — обратный вызов таймера|
- Возвращаемое значение
нет
- Пример
sys.timerStart(fnc, ms, ...)
Запуск таймера
- Параметры
|Тип входных данных|Описание|
|-|-|
|param|fnc — обратный вызов таймера|
|number|ms — целое число, максимальное значение таймера составляет 126322567 мс|
|param|... — переменные аргументы для обратного вызова fnc|
- Возвращаемое значение
number - ID таймера, nil при ошибке
- Пример
отсутствует
sys.timerLoopStart(fnc, ms, ...)
Запуск циклического таймера
- Параметры
|Тип входных данных|Описание|
|-|-|
|param|fnc - обратный вызов таймера|
|number|ms - целое число, максимальное значение таймера составляет 126322567 мс|
|param|... - переменные аргументы для обратного вызова fnc|
|number|ms - целое число, максимальное время задержки — 126322567 миллисекунд|
|param|... - допустимые параметры функции fnc|
- Возвращаемое значение
number - ID таймера, nil при ошибке
- Пример
отсутствует
sys.timerIsActive(val, ...)
Проверяет активность указанного таймера
- Параметры
|Тип входных данных|Описание|
|-|-|
|param|val имеет две формы:
Первая форма — это ID таймера, полученный при его запуске. При использовании этой формы нет необходимости передавать дополнительные параметры ... для уникальной идентификации таймера.
Вторая форма — это обратный вызов функции, используемой при запуске таймера. При использовании этой формы необходимо передать дополнительные параметры ... для уникальной идентификации таймера|
|param|... - дополнительные параметры|
- Возвращаемое значение
boolean - возвращает true, если таймер активен, в противном случае возвращает nil
- Пример
отсутствует
sys.subscribe(id, callback)
Подписывается на сообщение
- Параметры
|Тип входных данных|Описание|
|-|-|
|param|id - ID сообщения|
|param|callback - обратный вызов|
- Пример
отсутствует
---|param|callback Обратный вызов для обработки сообщения|
- Возвращаемое значение
отсутствует
- Пример
subscribe("NET_STATUS_IND", callback)
sys.unsubscribe(id, callback)
Отменяет подписку на сообщение
- Параметры
|Тип входных данных|Описание|
|-|-|
|param|id ID сообщения|
|param|callback Обратный вызов для обработки сообщения|
- Возвращаемое значение
отсутствует
- Пример
unsubscribe("NET_STATUS_IND", callback)
sys.publish(. . . )
Публикует внутреннее сообщение, хранящееся в очереди внутренних сообщений
- Параметры
|Тип входных данных|Описание|
|-|-|
|param|. . . Дополнительные параметры, определяемые пользователем|
- Возвращаемое значение
отсутствует
- Пример
publish("NET_STATUS_IND")
Опубликовать ( 0 )