Lua: Unterschied zwischen den Versionen

Aus Hacker Motor Wiki
Wechseln zu: Navigation, Suche
(Plugin für Lua-Text-Highlighting)
(Funktion init())
 
(36 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:
 
[[en:Lua]]
 
[[en:Lua]]
  
[[File:Luaa.gif|350px|link=|thumb|DPSI Lua the programming language]]
+
[[File:Luaa.gif|350px|link=|thumb|Lua the programming language]]
 
==Allgemeines==
 
==Allgemeines==
 
Lua ist eine freie Skriptsprache, die in erster Linie dazu konzipiert wurde, um Erweiterungen in C-basierte Programme einbinden zu können. Lua greift hierbei auf Schnittstellen (APIs) des Programms zu. So wird eine Trennung zwischen dem eigentlich Programm und den vom Benutzer entwickelten Erweiterungen sichergestellt.
 
Lua ist eine freie Skriptsprache, die in erster Linie dazu konzipiert wurde, um Erweiterungen in C-basierte Programme einbinden zu können. Lua greift hierbei auf Schnittstellen (APIs) des Programms zu. So wird eine Trennung zwischen dem eigentlich Programm und den vom Benutzer entwickelten Erweiterungen sichergestellt.
Zeile 10: Zeile 10:
 
Die folgenden JETI Duplex-Systeme können mit Lua-Apps um benutzerdefinierte Funktionen erweitert werden:
 
Die folgenden JETI Duplex-Systeme können mit Lua-Apps um benutzerdefinierte Funktionen erweitert werden:
 
* Handsender JETI Duplex DS-12
 
* Handsender JETI Duplex DS-12
 +
* Handsender JETI Duplex DS-16
 
* Handsender JETI Duplex DS-16 II
 
* Handsender JETI Duplex DS-16 II
 
* [[DS-24|Handsender JETI Duplex DS-24]]
 
* [[DS-24|Handsender JETI Duplex DS-24]]
 +
* Pultsender JETI Duplex DC-16
 
* Pultsender JETI Duplex DC-16 II
 
* Pultsender JETI Duplex DC-16 II
 
* [[DC-24|Pultsender JETI Duplex DC-24]]
 
* [[DC-24|Pultsender JETI Duplex DC-24]]
Zeile 22: Zeile 24:
 
Informationen zum Download findet Ihr im Bereich [[#Downloads|Downloads.]]
 
Informationen zum Download findet Ihr im Bereich [[#Downloads|Downloads.]]
 
===Plugin für Lua-Text-Highlighting===
 
===Plugin für Lua-Text-Highlighting===
Um das sprachspezifische Text-Highlighting für die Lua-Programmiersprache zu implementieren, muss das Plugin "language-lua" nachinstalliert werden.
+
Um das sprachspezifische Text-Highlighting für die Lua-Programmiersprache zu implementieren, muss das Package "language-lua" nachinstalliert werden.
  
 +
Um das Package "language-lua" zu installieren, klicken Sie im Menüpunkt "Edit" auf den Eintrag "Preferences". In der Tab-Leiste erscheint der Tab "Settings". Klicken Sie im Tab "Settings" links auf den Menüpunkt "Install" und geben Sie im Suchfeld "language-lua" ein. Klicken Sie beim entsprechenden Suchergebnis auf den blauen Button "Install".
 +
Das Package "language-lua" wurde installiert, das Text-Highlighting funktioniert nun.
  
[[File:Atom-install-lua-language.jpg|link=|Installation des Plugins "language-lua"]]
+
[[File:Atom-install-lua-language.jpg|800px|link=|Installation des Plugins "language-lua"]]
  
==Grundsätzlicher Skript-Aufbau für DS/DC-Sender==
+
==Lua-Apps auf JETI Duplex DS/DC-Sendern==
 +
Jede App besteht aus einer einzelnen Skript-Datei, die im Ordner "/Apps" auf der SD-Karte des entsprechenden Senders abgelegt wird. Zusätzliche Skript-Dateien oder Lua-Libaries können mit dem "require"-Statement eingebunden werden.
 +
 
 +
===Funktion initForm()===
 +
Text
 +
 
 +
===Funktion printForm()===
 +
Text
 +
 
 +
===return-Wert der App===
 +
Jede App muss ein Table zurückgeben, welcher die Schnittstellen der App beschreibt.
 +
 
 +
return {<span style="background-color: #66cdaa">init = init</span>, <span style="background-color: #f08080">loop = loop</span>, author = "Hacker Motor GmbH", version = "1.0", name = "App name"}
 +
 
 +
{| class="wikitable"
 +
|+align="bottom"|''Beschreibung der Funktionen des return-Tables''
 +
|-
 +
!Funktion
 +
!Beschreibung
 +
|-
 +
|style="background-color:#66cdaa; color: white;"|init(&lt;code&gt;)
 +
|Wird aufgerufen wenn ein Modell geladen oder geändert wird. Hier werden sämtliche Variablen initialisiert sowie die Telemetrie-Fenster und Konfigurations-Formulare registriert.
 +
|-
 +
|style="background-color:#f08080; color: white;"|loop()
 +
|Wird in regelmäßigen Intervallen (20 bis 30 Milliskeunden) aufgerufen.
 +
|-
 +
|style="background-color:#6495ed; color: white;"|destroy()
 +
|Wird aufgerufen bevor die Lua-Umgebung abgebrochen wird. Sie kann zum Bereinigen aller Resourcen und zum sicheren Schließen einer App genutzt werden.
 +
|}
 +
 
 +
===Funktion init()===
 +
Wird aufgerufen wenn ein Modell geladen oder geändert wird. Hier werden sämtliche Variablen initialisiert sowie die Telemetrie-Fenster und Konfigurations-Formulare registriert.
 +
 
 +
Die Funktion wird über die Rückgabe (init=init) aufgerufen und beinhaltet die Funktion "system.registerForm".
 +
 
 +
===Funktion system.registerForm()===
 +
Funktion innerhalb der App registriert nach Aufruf ein interaktives Formular, welches in einem der Sender-Menüs untergebracht werden kann. Die Funktion sollte innerhalb der init()-Funktion stehen und während der Initialisierung der App aufgerufen werden.
 +
system.registerForm (<formNo>, <parentMenuID>, <label>, <initFunction>, <keyPressFunction>, <printFunction>, <closeFunction>)
 +
{| class="wikitable"
 +
|+align="bottom"|''Parameter der Funktion registerForm()''
 +
|-
 +
!Parameter
 +
!Datentyp
 +
!Beispiel (mögliche Werte)
 +
!Beschreibung
 +
|-
 +
|formNo
 +
|Integer
 +
|1 oder 2
 +
|Formular-ID (form identifier).
 +
|-
 +
|parentMenuID
 +
|Menü-Definition
 +
|MENU_MAIN, MENU_FINE, MENU_ADVANCED
 +
|Das Sender-Menü, ind dem das Formluar erscheinen soll.
 +
|-
 +
|label
 +
|String
 +
|z. B. "Name der App"
 +
|Frei wählbare Bezeichnung der App, welche in der Titelzeile angezeigt wird.
 +
|-
 +
|initFunction
 +
|Funktion
 +
|z. B. initForm(subForm)
 +
|Funktion, die aufgerufen wird, nachdem das Formular erstellt wurde. Übergeben wird der Parameter SubformID (Standard 1).
 +
|-
 +
|keyPressFunction
 +
|Funktion
 +
|z. B. keyForm(keyCode)
 +
|Funktion, die jedes Mal aufgerufen wird, nachdem ein entsprechender Button gedrückt oder losgelassen wurde. Übergeben wird der Parameter keyCode, welcher den Button bezeichnet.
 +
|-
 +
|printFunction
 +
|Funktion
 +
|z. B. printForm(width, height)
 +
|Funktion, die aufgerufen wird um Inhalte in das Formular-Fenster zu erstellen. Übergeben werden die Parameter width und height.
 +
|-
 +
|closeFunction
 +
|Funktion
 +
|z. B. (folgt)
 +
|Funktion, die aufgerufen wird, bevor das Formular geschlossen wird.
 +
|}
 +
 
 +
===Grundsätzlicher Skript-Aufbau für DS/DC-Sender===
 +
local appName = "Hacker Motor Info App 3"
 +
local appVersion = "0.42"
 +
local appAuthor = "Marco Köhler, Hacker Motor GmbH"
 +
 +
local function initForm(subform)
 +
  form.addLabel({label="Page "..subform,font=FONT_BIG})
 +
  if(subform == 1) then
 +
  -- Link to the following subform
 +
  form.addLink((function() form.reinit(2) end), {label = "Next >>"})
 +
  else
 +
  -- Link to the first subform
 +
  form.addLink((function() form.reinit(1) end), {label = "<< Back"})
 +
  end
 +
end
 +
 
  local function init(code)
 
  local function init(code)
system.registerForm(1,MENU_MAIN,appName ,initForm, keyForm, printForm, closeForm)
+
  system.registerForm(1,MENU_MAIN,appName ,initForm, keyForm, printForm, closeForm)
image = lcd.loadImage("Apps/hacker/hacker-logo.png")
 
print("Init function running")
 
end
 
 
 
local function loop()
 
 
  end
 
  end
 
   
 
   

Aktuelle Version vom 23. Juli 2020, 10:26 Uhr


Lua the programming language

Allgemeines

Lua ist eine freie Skriptsprache, die in erster Linie dazu konzipiert wurde, um Erweiterungen in C-basierte Programme einbinden zu können. Lua greift hierbei auf Schnittstellen (APIs) des Programms zu. So wird eine Trennung zwischen dem eigentlich Programm und den vom Benutzer entwickelten Erweiterungen sichergestellt. Lua kann zur Erweiterung von JETI Duplex DS/DC-Fernsteuersystemen genutzt werden.

Kompatible JETI Duplex-Systeme

Die folgenden JETI Duplex-Systeme können mit Lua-Apps um benutzerdefinierte Funktionen erweitert werden:

Entwicklung von Lua-Skripten

Um Lua-Skripte zu entwicklen genügt theoretisch ein einfacher Text-Editor wie z. B. Notepad++ idealerweise mit Text-Highlighting. Die komfortablere Alternative stellt jedoch eine Entwicklungsumgebung (IDE) wie z. B. ZeroBrane Studio oder Atom dar. Die Skripte, die in dieser Dokumentation beschrieben werden, wurden mit Atom entwickelt.

Entwicklungsumgebung Atom

Die Entwicklungsumgebung Atom ist kostenlos für die Plattformen Windows, MAC und Linux erhältlich.

Download

Informationen zum Download findet Ihr im Bereich Downloads.

Plugin für Lua-Text-Highlighting

Um das sprachspezifische Text-Highlighting für die Lua-Programmiersprache zu implementieren, muss das Package "language-lua" nachinstalliert werden.

Um das Package "language-lua" zu installieren, klicken Sie im Menüpunkt "Edit" auf den Eintrag "Preferences". In der Tab-Leiste erscheint der Tab "Settings". Klicken Sie im Tab "Settings" links auf den Menüpunkt "Install" und geben Sie im Suchfeld "language-lua" ein. Klicken Sie beim entsprechenden Suchergebnis auf den blauen Button "Install". Das Package "language-lua" wurde installiert, das Text-Highlighting funktioniert nun.

Installation des Plugins "language-lua"

Lua-Apps auf JETI Duplex DS/DC-Sendern

Jede App besteht aus einer einzelnen Skript-Datei, die im Ordner "/Apps" auf der SD-Karte des entsprechenden Senders abgelegt wird. Zusätzliche Skript-Dateien oder Lua-Libaries können mit dem "require"-Statement eingebunden werden.

Funktion initForm()

Text

Funktion printForm()

Text

return-Wert der App

Jede App muss ein Table zurückgeben, welcher die Schnittstellen der App beschreibt.

return {init = init, loop = loop, author = "Hacker Motor GmbH", version = "1.0", name = "App name"}
Beschreibung der Funktionen des return-Tables
Funktion Beschreibung
init(<code>) Wird aufgerufen wenn ein Modell geladen oder geändert wird. Hier werden sämtliche Variablen initialisiert sowie die Telemetrie-Fenster und Konfigurations-Formulare registriert.
loop() Wird in regelmäßigen Intervallen (20 bis 30 Milliskeunden) aufgerufen.
destroy() Wird aufgerufen bevor die Lua-Umgebung abgebrochen wird. Sie kann zum Bereinigen aller Resourcen und zum sicheren Schließen einer App genutzt werden.

Funktion init()

Wird aufgerufen wenn ein Modell geladen oder geändert wird. Hier werden sämtliche Variablen initialisiert sowie die Telemetrie-Fenster und Konfigurations-Formulare registriert.

Die Funktion wird über die Rückgabe (init=init) aufgerufen und beinhaltet die Funktion "system.registerForm".

Funktion system.registerForm()

Funktion innerhalb der App registriert nach Aufruf ein interaktives Formular, welches in einem der Sender-Menüs untergebracht werden kann. Die Funktion sollte innerhalb der init()-Funktion stehen und während der Initialisierung der App aufgerufen werden.

system.registerForm (<formNo>, <parentMenuID>, <label>, <initFunction>, <keyPressFunction>, <printFunction>, <closeFunction>)
Parameter der Funktion registerForm()
Parameter Datentyp Beispiel (mögliche Werte) Beschreibung
formNo Integer 1 oder 2 Formular-ID (form identifier).
parentMenuID Menü-Definition MENU_MAIN, MENU_FINE, MENU_ADVANCED Das Sender-Menü, ind dem das Formluar erscheinen soll.
label String z. B. "Name der App" Frei wählbare Bezeichnung der App, welche in der Titelzeile angezeigt wird.
initFunction Funktion z. B. initForm(subForm) Funktion, die aufgerufen wird, nachdem das Formular erstellt wurde. Übergeben wird der Parameter SubformID (Standard 1).
keyPressFunction Funktion z. B. keyForm(keyCode) Funktion, die jedes Mal aufgerufen wird, nachdem ein entsprechender Button gedrückt oder losgelassen wurde. Übergeben wird der Parameter keyCode, welcher den Button bezeichnet.
printFunction Funktion z. B. printForm(width, height) Funktion, die aufgerufen wird um Inhalte in das Formular-Fenster zu erstellen. Übergeben werden die Parameter width und height.
closeFunction Funktion z. B. (folgt) Funktion, die aufgerufen wird, bevor das Formular geschlossen wird.

Grundsätzlicher Skript-Aufbau für DS/DC-Sender

local appName = "Hacker Motor Info App 3"
local appVersion = "0.42"
local appAuthor = "Marco Köhler, Hacker Motor GmbH"

local function initForm(subform)
  form.addLabel({label="Page "..subform,font=FONT_BIG})
  if(subform == 1) then
  -- Link to the following subform
  form.addLink((function() form.reinit(2) end), {label = "Next >>"})
  else
  -- Link to the first subform
  form.addLink((function() form.reinit(1) end), {label = "<< Back"})
  end
end

local function init(code)
  system.registerForm(1,MENU_MAIN,appName ,initForm, keyForm, printForm, closeForm)
end

return {init=init, loop=nil, author=appAuthor, version=appVersion, name=appName}

Links

Offizielle Links

Sonstiges hilfreiche Links

Downloads

Entwicklungsumgebungen

JETImodel

Fertige Lua-Skripte von Drittanbietern

  • Text
  • Text