Cours Lua

Lua Application Note en PDF


Télécharger Lua Application Note en PDF

★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Télécharger aussi :


Lua Application Note ressource de formation [Eng]

...

Introduction

L'extension SIM52XX LUA est une fonctionnalité qui permet aux applications client de contrôler et de piloter le module en interne et facilement.

L'extension SIM52XX LUA est destinée aux applications légères où l'application était généralement effectuée par un petit microcontrôleur qui gérait certaines broches d'E / S et le module via l'interface de commande AT.

En utilisant les API d'extension LUA, le client peut écrire des applications en utilisant très rapidement le langage LUA de haut niveau.

SIM52XX LUA caractéristiques:

 · Langage de script léger, facile à étendre.

  • Supporte le développement de styles orienté vers la procédure et orienté objet.

Les fichiers de script sont sauvegardés dans EFS

  • Support de l'opération de commande AT dans le script.
  • Support GPIO / IIC / SPI / ADC / PCM / Audio / GPS / UART opération dans le script.
  • Supporte le fonctionnement FTP au lieu d'utiliser les commandes AT.
  • La mémoire disponible pour le script est limitée à 3.5M.
  • Script peut être démarré par MCU externe en utilisant la commande AT

 · Le script peut s'exécuter automatiquement lorsque le module est mis sous tension si le nom de fichier est "c: \ autorun.lua" ou "c: \ autorun.out".

  • La priorité de la tâche de script peut être réglée sur HIGH, NORMAL, LOW (par défaut).
  • Il n'est pas recommandé d'utiliser une priorité élevée lorsque le MCU externe est connecté.
  • Fonctionnement de l'événement de soutien.
  • Fonctionnement de la minuterie de soutien (le nombre maximal de minuterie est de 10).
  • Support XMODEM méthode de transfert de fichier script entre MCU externe et le module.

1.2 Références

Le présent document est basé sur les documents suivants: [1] SIMCOM_SIM5218ATCENV1.11.doc.

1.3 Ternis et abréviations

 Pour les besoins du présent document, les abréviations suivantes s'appliquent:

API Interface de programmation d'application

Unité de traitement centrale CPU

  • Bibliothèque LIB

Système d'exploitation OS

Unité de données du protocole PDU

RAM mémoire à accès aléatoire

Mémoire ROM Read-Only

Système universel de télécommunications mobiles UMTS

Module universel d'identité d'abonné USIM

  • Accès multiple par répartition en code à large bande WCDMA
  1. ARCHITECTURE DU LOGICIEL

2.1 Organisation du logiciel

La fonction Embedded LUA est un mécanisme logiciel, elle suit l'architecture logicielle comme indiqué ci-dessous:

2.2 Informations sur la bibliothèque LUA incorporée

Les applications client écrites à l'aide de scripts LUA sont des fichiers texte stockés dans le système EFS du module SIM52XX. Avant d'exécuter les applications client, l'utilisateur doit placer ses scripts dans le répertoire C: \ du module SIM52XX.

Le script LUA est exécuté dans une tâche à l'intérieur du module SIM52XX à basse priorité, pour ne pas interférer avec les autres fonctions du système, l'API étendue vmsetpri n'est pas recommandée pour définir le moteur LUA en haute priorité, sauf dans certains cas très spéciaux.

La RAM maximale peut être utilisée par le moteur LUA est 3,5M. Deux API (getcurmem et getpeakmem) sont fournies pour obtenir la mémoire actuelle utilisée et la mémoire maximale utilisée lors de l'exécution du script.

  1. Bibliothèques ajoutées
  • La bibliothèque SIO est la plus importante. Il permet au script LUA d'envoyer des commandes AT, de recevoir des réponses et des indications non sollicitées. La commande AT est tout à fait la même que l'AT habituelle envoyée via l'interface de port série dans le module SIM52XX. La différence est que cette interface n'est pas un vrai port série mais juste un pont logiciel interne entre le LUA et le moteur de gestion de commande interne mobile. Les commandes Ali AT fonctionnant dans le module SIM52XX fonctionnent également dans cette interface logicielle.
  • La bibliothèque GPIO permet au script LUA de gérer les sorties d'entrée à usage général plus rapidement que par le biais des commandes AT, en ignorant l'analyseur de commande et en passant directement au contrôle des broches.
  • La bibliothèque UART est une implémentation sur le noyau LUA du maître UART. Il permet à LUA de gérer les opérations UART au lieu d'utiliser des commandes AT.
  • La bibliothèque I2C est une implémentation sur le noyau LUA du maître de bus IIC. Il permet à LUA de lire et d'écrire les registres IIC spécifiés.
  • La bibliothèque AUDIO est une implémentation sur le noyau LUA du gestionnaire AUDIO.
  • La bibliothèque GPS permet au script LUA de définir et interroger les paramètres GPS et les informations géographiques.
  • La bibliothèque NET permet au script LUA d'interroger les informations du réseau sans fil, comme les informations d'enregistrement, les informations RSSI et le mode réseau (GSM, GPRS et WCDMA, etc.).
  • La bibliothèque FTP permet au script LUA d'effectuer des opérations FTP simples et rapides.
  • La bibliothèque ADC permet au script LUA de lire la valeur analogique sur le canal ADC spécifié.
  • La bibliothèque PCM permet le basculement des broches spécifiées entre la commande GPIO et les fonctions PCM.
  • La bibliothèque BIT permet au script LUA d'effectuer des opérations au niveau du bit.
  • La bibliothèque ATCTL permet au script LUA de gérer les données reçues du port série externe au lieu de le traiter à l'aide du moteur de traitement interne d'AT.
  1. Bibliothèques étendues

Les API suivantes sont étendues dans la bibliothèque de base:

  • Printdir

Impression

  • Reportte

Sendtoport

 · vmsetpri

Vmgetpri

 · vmsleep

 · pathoffilename

  • · Setevtpri

 · waitevt

 · setevt

  • Clearevts
  • Vmstarttimer
  • Vmstoptimer
  • Getcurmem
  • Getpeakmem

L'API suivante est étendue dans la bibliothèque io:

Fichier: ccur

Les API suivantes sont étendues dans la bibliothèque OS:

 · os.filelength

 · os.delfile

Les API suivantes sont étendues dans la bibliothèque de chaînes:

 · string.concat

 · string.equal

 · string.startwith

 · string.absfind

  1. Bibliothèques supprimées

La bibliothèque suivante n'est pas prise en charge sur le moteur LUA SIMS2XX:

  • Déboguer

Les API suivantes ne sont pas prises en charge dans la bibliothèque io:

  • · Io.flush
  • · Io.input
  • · Io.lines
  • · Io.output
  • · Io.popen
  • · Io.read

 · io.tmpfile

 · io.type

 · io.write

Les API suivantes ne sont pas prises en charge dans la bibliothèque OS:

 · os.execute



 · os.exit

  • Os.getenv

 · os.tmpname

Le module SIM52XX fournit une extension LUA basée sur LUA5.1.4, qui prend en charge la plupart des API LUA standard d'origine. Le module SIM52XX fournit également des API qui peuvent accéder aux fonctions du système et au fonctionnement du matériel SIM52XX directement.

Le Tableau 2.1 répertorie les bibliothèques LUA SIM52XX étendues.

...

  1. Bibliothèques personnalisées LUA Build-in

3.1 Bibliothèque BASE

3.1.1 Description de printdir

La fonction est utilisée pour définir la direction de la fonction d'impression

...

Exemple

--print à DIAG printdir (0) print ("ceci est imprimé sur DIAG trace \ r \ n")

--print à l'interface AT printdir (1) print ("ceci est imprimé sur l'interface AT \ r \ n")

3.1.2 imprimer Description

La fonction est utilisée pour imprimer des informations de trace vers DIAG ou une interface AT externe, il s'agit d'une API LUA originale, la seule différence est que la longueur totale de la chaîne d'impression ne peut pas dépasser 1024 octets.

Prototype void print (varl, ...)

Paramètres var 1 ...: toute valeur pouvant être convertie en chaîne

Valeur de retour Aucune

Exemple

prompt = "Ceci est mon invite, compte ="

compte = 1;

print (prompt, count, "\ r \ n");

3.1.3 reportte Description

La fonction est utilisée pour envoyer des informations au TE. Cela ressemble à la fonction d'impression lors de l'impression sur l'interface AT externe et la longueur totale de la chaîne d'impression ne peut pas dépasser 1024 octets.

Prototype void reportte (varl, ...)

Paramètres varl ...: toute valeur pouvant être convertie en chaîne

Valeur de retour Aucune

Exemple

prompt = "Ceci est mon invite, compte ="

compte = 1;

reportte (prompt, count, "\ r \ n");

3.1.4 sendtoport

La description

La fonction est utilisée pour envoyer des informations au TE.

Prototype void sendtoport (port int, données de chaîne)

Paramètres port: le port sio pour envoyer des données

(Ho le port décidé par AT + CATR

1 = port UART

2 = port modem USB

3 = port USB AT

data: les données à envoyer

Valeur de retour Aucune

Exemple prompt = "Ceci est mon invite \ r \ n" port = 1 sendtoport (port, invite);

3.1.5 vmsetpri

La description

La fonction est utilisée pour définir la priorité de la tâche interne pour LUA.

Prototype void vmsetpri (int pri)

Paramètres pri: la priorité de la tâche interne pour LUA

1: faible

2: moyen

3: high (Cette valeur est utilisée pour un cas très spécial, elle ne doit pas être utilisée pour la plupart des applications)

Valeur de retour Aucune

Exemple

LOW_PRIORITY = 1

MEDIUM_PRIORITY = 2 HIGH_PRIORITY = 3

vmsetpri (LOW_PRIORITY); vmsetpri (MEDIUM_PRIORITY); vmsetpri (HIGH_PRIORITY);

3.1.6 vmgetpri

La description

La fonction est utilisée pour obtenir la priorité de la tâche interne pour LUA.

Prototype int vmgetpri ()

Paramètres Aucun

Renvoie la priorité de la tâche interne pour LUA

1: faible

2: moyen

3: élevé

Exemple

LOW_PRIORITY = 1 MEDIUM_PRIORITY = 2 HIGH_PRIORITY = 3 pri = vmgetpri ()

print ("priorité actuelle est", pri, "\ r \ n")

3.1.7 vmsleep

La description

La fonction est utilisée pour rendre la tâche LUA interne en veille.

Prototype void vmsleep (int timeout)

Paramètres timeout: l'heure (ms) de dormir

Valeur de retour Aucune

Exemple

--sleep 2000 ms vmsleep (2000)

3.1.8 pathoffilename

La description

La fonction est utilisée pour obtenir le répertoire d'un chemin de fichier complet.

Prototype void pathoffilename (chaîne de caractères complète)

Paramètres fullpath: le chemin complet d'un fichier

Valeur de retour Aucune

Exemple

fullpath = "c: \\ testdir \\ monfichier.txt"; dir = pathoffilename (chemin complet); --print le répertoire ("c: \\ testdir \\") print ("dir =", dir, "en fr»)

3.1.9 Description de setevtpri

La fonction est utilisée pour définir la priorité d'un événement. Pour l'ID d'événement de 0 à 20, la priorité par défaut est 101 (maximum). Pour les formulaires d'identificateur d'événement 21 à 40, la priorité par défaut est (100-event_id).

Prototype ccurs setevtpri (int evt, int pri)

Paramètres evt: l'identifiant de l'événement à définir. Pri: la priorité de l'événement.

Renvoie le résultat du paramètre: true: réussi false: échoué

Exemple

event_id = 7

event_priority = 100

setevtpri (evt_id, event_priority)

3.1.10 waitevt

La description

La fonction est utilisée pour attendre qu'un événement se produise.

Prototype sur les ccurs waitevt (int timeout)

Paramètres timeout: le délai maximum d'attente.

Valeur de retour Il y a des valeurs de retour pour waitevt (...).

Event ID: l'ID de l'événement avec le plus haut

priorité qui s'est produite. Si aucun événement ne se produit, -1 sera

être retourné.

Event_paraml: le premier paramètre de l'événement. Pour



événement de minuterie, c'est l'identifiant de la minuterie. Pour le

Événement SCRIPTCMD, il s'agit du port sio de l'exécution de la commande. Pour les autres événements, ce paramètre est réservé maintenant.

event_param2: le deuxième paramètre de l'événement. Event_param3: le troisième paramètre de l'événement ..

...

Valeurs définies par le paramètre

 

Timer id, la plage est 0-9

 

L'état du réseau

0 non enregistré 1 € enregistré

 

Type d'appel

0 € pas d'appel

1 appel vocal

2 â € "appel de données CS

3 â € "appel de données PS

 

Statut du chargeur

0 â € "non connecté 1Â â €" connecté

 

Etat de charge

0 â € "ne charge pas 1 â ¢ â €" charge

Exemple

ID d'événement, event_param = waitevt (10000) print (event_id, "", event_param, "\ r \ n");

3.1.11 setevt

La description

La fonction est utilisée pour définir un événement.

Prototype

booléen setevt (int evt, int paraml, int param2, int

param3)

Paramètres evt: l'identifiant de l'événement à définir.

param I: le premier paramètre de l'événement param2: le deuxième paramètre de l'événement param3: le troisième paramètre de l'événement

Valeur renvoyée Résultat de la définition: TRUE: réussie FALSE: échouée

Exemple

ID d'événement = 30 setevt (event_id)

3.1.12 clearevts

La description

La fonction est utilisée pour effacer tous les événements qui se sont produits et contenus dans le tableau d'événements.

Prototype void clearevts ()

Paramètres Aucun

Valeur de retour Aucune

Exemple clearevts ()

3.1.13 vmstarttimer

La description

La fonction est utilisée pour démarrer un limer.

Prototype boolean vmstarttimer (id de temporisateur int, int timeout, int timer_type)

Paramètres timer id: l'identifiant du timer (0-9)

timeout: la valeur du timeout pour le timer (ms) timer_type: le type du timer

0: la minuterie ne générera qu'un événement de minuterie

1: la minuterie génère un événement de minuteur multiple jusqu'à ce que la fonction vmstoptimer soit appelée. (défaut)

Renvoie la valeur du début de la minuterie: true: réussie false: échouée

Exemple

rst = vmstarttimer (0, 1000);

alors que (vrai) fais

evt, evtj, aram = waitevt (10000);

si (evt -1) alors

print (evt, "\ r \ n"); fin;

fin;

3.1.14 vmstoptimer

La description

La fonction est utilisée pour arrêter une minuterie.

Prototype boolean vmstoptimer (int timer_id)

Paramètres timer_id: l'ID du timer (0-9)

Renvoie le résultat de l'arrêt du temporisateur: true: réussi false: échoué

Exemple

rst = vmstarttimer (0, 1000);

compte = 0;

alors que (vrai) fais

compte = compte + 1;

si (compte> 10) alors

Pause; fin;

evt, evtj, aram = waitevt (10000);

si (evt -1) alors

print (evt, "\ en");

fin;

fin;

vmstoptimer (0);

3.1.15 getcurmem

La description

La fonction est utilisée pour obtenir la taille de la mémoire actuelle utilisée pour le script LUA.

Prototype int getcurmem ()

Paramètres Aucun

Renvoie la valeur de la taille de la mémoire utilisée maintenant.

Exemple

cur_mem_used = getcurmem ()

prinecurTently ", cur_mem_used," les octets de mémoire sont utilisés pour ce script \ r \ n ")

3.1.16 getpeakmem

La description

La fonction est utilisée pour obtenir la taille de la mémoire de crête utilisée pour le script LUA.

Prototype int getpeakmem ()

Paramètres Aucun

Renvoie la valeur maximale de la mémoire utilisée pour exécuter le script en cours.

Exemple

peak_mem_used = getpeakmem ()

print (peak_mem_used, "les octets de mémoire de crête sont utilisés pour exécuter ce script \ r \ n")

3.1.16 getchargerstate

La description

La fonction est utilisée pour obtenir la taille de la mémoire de crête utilisée pour le script LUA.

Prototype Int int getchargerstate ()

Paramètres Aucun

Etat du chargeur de valeur de retour: l'état du chargeur 0: non connecté

1: connecté

état de charge: l'état de charge 0: pas de charge

1: charge

Exemple

peak_mem_used = getpeakmem ()

print (peak_mem_used, "les octets de mémoire de crête sont utilisés pour exécuter ce script \ r \ n")

3.2 Bibliothèque d'E / S

3.2.1 fichier: trunc

La description

La fonction est utilisée pour tronquer le fichier ouvert en utilisant io.open.

Fichier vide de prototype: trunc ()



Paramètres Aucun

Valeur de retour Aucune

Exemple

file = io.open ("cMtest 1 .txt", "w")

assert (fichier)

fichier: trunc ()

file: write ("tester le contenu \ r \ ntest \ r \ n")

fichier: close ()

3.3 Bibliothèque OS

3.3.1 os.filelength

La description

La fonction est utilisée pour obtenir la longueur d'un fichier.

Prototype int os.filelength (chemin de chaîne)

Paramètres path: le chemin complet du fichier

Renvoie la valeur de la longueur du fichier.

Exemple

len = os.filelength ("c Mtest 1 .txt")

prinethe la longueur de testl .txt est ", len", bytes \ r \ n ");

3.3.2 os.delfile

La description

La fonction est utilisée pour supprimer un fichier existant.

Prototype boolean os.delfile (chemin de chaîne)

Paramètres path: le chemin complet du fichier

Renvoie le résultat de la suppression: true: réussi false: échoué

Exemple

rst = os.delfile ("cMtestl.txt")

3.4 Bibliothèque SIO

3.4.1 sio.send

La description

La fonction est utilisée pour définir la commande send AT sur le port série virtuel du module.

Prototype void sio.send (chaîne cmd)

Paramètres cmd: les données à envoyer au port série virtuel

Valeur de retour Aucune

Exemple

sio.send ("ATI \ r \ n");

3.4.2 sio.recv

La description

La fonction est utilisée pour définir les données de réception du port série virtuel sur le module.

Chaîne prototype sio.recv (int timeout)

Paramètres timeout: la valeur de timeout en ms pour recevoir des données.

Valeur de retour Les données reçues sur le port série.

Exemple

sio.send ("ATI \ r \ n"); rst = sio.recv ();

3.4.3 sio.clear

La description

La fonction est utilisée pour effacer les données en cache reçues du port série virtuel sur le module.

Prototype void sio.clear ()

Paramètres Aucun

Valeur de retour Aucune

Exemple sio.clear ();

3.4.4 sio.exclrpt

La description

La fonction est utilisée pour forcer l'envoi du résultat non consolidé au port série virtuel du module uniquement.

Mode paramètres: le mode le résultat non consolidé de reporting

0: le résultat non consolidé sera envoyé au port série virtuel et aux autres ports décidés par at + catr.

1: le résultat non consolidé ne sera envoyé qu'au port série virtuel.

Valeur de retour Aucune

Exemple sio.exclrpt (1);

3.5 Bibliothèque GPIO

3.5.1 gpio.settrigtype Description

La fonction est utilisée pour définir le mode de déclenchement d'un GPIO spécifié. Il a la même fonction que la commande AT + CGPIO.

Prototype boolean gpio.settrigtype (int détecter, int polarité [, int sauvegarde])

Les paramètres détectent:

0: mode de déclenchement LEVEL

1: Polarité du mode de déclenchement EDGE:

0: déclenchement lorsque le niveau bas

1: déclencher quand haut niveau enregistrer:

0: pas enregistrer le paramètre (par défaut)

1: enregistrer le réglage

Renvoie la valeur du résultat de la configuration:

true: réussi false: échoué

Exemple

rst = gpio.settrigtype (0,1); print (premier, "\ r \ n");

3.5.2 gpio.setdrt Description

La fonction est utilisée pour définir la direction io d'un GPIO spécifié. Il a la même fonction que la commande AT + CGDRT.

Prototype boolean gpio.setdrt (int gpionum, int gpio_io [, int sauvegarde = 0])

Paramètres gpionum: le numéro du gpio (2, 3, 5)

gpio_io:

O: dans

1: sortir

enregistrer:

0: pas enregistrer le paramètre (par défaut)

1: enregistrer le réglage

Renvoie le résultat du paramètre: true: réussi false: échoué

Exemple

rst = gpio.setdrt (5,1); print (premier, "\ r \ n");

3.5.3 Description de gpio.setv

La fonction est utilisée pour définir la valeur du GPIO spécifié. Il a la même fonction que la commande AT + CGSETV.

Prototype boolean gpio.setv (int gpionum, int gpio_hl [, int sauvegarde = 0])

Paramètres gpionum: le numéro du gpio (2, 3, 5)

 gpio hl:

0: faible

1: haute sauvegarde:

0: trot enregistre le paramètre (par défaut)

1: enregistrer le réglage

Renvoie la valeur du résultat de la configuration:

true: réussi false: échoué

Exemple

rst = gpio.setv (2,0); print (premier, "\ r \ n");

3.5.4 Description de gpio.getv

La fonction est utilisée pour obtenir la valeur du GPIO spécifié. Il a la même fonction que la commande AT + CGGETV.

Prototype int gpio.getv (int gpionum)

Paramètres gpionum: le numéro du gpio (0, 1, 2, 3, 4, 5)

Renvoie la valeur du GPIO: 0: bas

1: élevé

Exemple

niveau = gpio.getdrt (5); print (niveau, "\ r \ n");



77