Grundsätzliches
Die Grafikschnittstelle besitzt zwei Ebenen:
- In der Hauptebene werden die einzelnen Funktionen bestimmt (z.B. Aktivieren des Terminalmodus). Aus dem jeweils aktiven Modus kommt man immer heraus, indem man das Kommando MODE_QUIT sendet. Dann muss man einen neuen Modus wählen.
- Jede Unterebene besitzt eigene Kommandos, die nur hier gelten. Sie sollten – obwohl möglicherweise ähnlich – nicht in anderen Modi benutzt werden
- Manche Modi besitzen temporäre Untermodi – so kann man beim Modus fürs freie Zeichnen auch in den Terminalmodus wechseln, um Texte ausgeben zu können. Solange der temporäre Modus aktiv ist, gelten dessen Kommandos. Temporäre Modi kann man ebenfalsl durch „MODE_QUIT“ oder besser „MODE_END_INTERMEDIATE“ verlassen und befindet sich danach wieder im eigentlichen Modus, dessen Einstellungen und Bildschirm danach auch noch zur Verfügung stehen und nicht zerstört sind.
Hauptebene
Kommando | Bedeutung |
---|---|
MODE_TERMINAL | Terminalmodus |
MODE_BALKENGRAFIK | Balkengrafik |
MODE_MESSWERTE | Messwerte |
MODE_MENU | Menue |
MODE_KEYBOARD_ALPHA | Bildschirmtastatur für Texteingabe |
MODE_KEYBOARD_NUMERIC | Bildschirmtastatur für Zahleneingabe |
MODE_MESSAGEBOX | Auswahlfenster Ja-Nein / Ok-Abbrechen |
MODE_8COLOR_LED | 8fach-LED-Bildschirm |
MODE_3COLOR_LED | 3fach-LED in Ampelanordnung und -farbe |
MODE_DRAW | Freie Grafiken zeichnen |
MODE_COLORPALETTE | Farbpalette – Rechtecke mit Farbe aufsteigend von 0..255 |
MODE_SLIDER | Schieberegler |
MODE_TOUCHSCREEN_CONFIG | Touchscreen-Konfiguration |
MODE_KEYBOARD_DRAW | Tastatur ohne Beschriftungen |
MODE_QUIT | beendet den aktuellen Modus |
MODE_END_INTERMEDIATE | beendet einen temporären Modus |
Unterebenen
Terminalmodus
Im Terminalmodus werden Zeichen hintereinander am Bildschirm ausgegeben. Farbe und Hintergrundfarbe können festgelegt werden, ebenso die Ausgabeposition. Zur Wahl stehen drei Fonts, von denen der mittlere der zum Lesen angenehmste ist. Mit ihm können bis zu 30 Zeilen a 40 Zeichen ausgegeben werden. Durch die Wahl der Ausgabeposition können auch einfache Textbildschirme umgesetzt werden. Text wird von links nach rechts und oben nach unten ausgegeben. Wenn der Bildschirm voll ist, wird er gelöscht.
Alle Zeichen mit einem Wert größer 32 (Leerzeichen) werden als Text interpretiert. Nur die Zeichen bis 127, dazu die deutschen Sonderzeichen werden ausgegeben, alle anderen Werte führen zur Ausgabe des Leerzeichens 32.
Kommando | Bedeutung |
---|---|
TERMINAL_CURSORHOME | Textausgabeposition nach links oben setzen |
TERMINAL_CURSORHOME | Textausgabeposition nach links oben setzen |
TERMINAL_CLEARSCREEN | Bildschirm löschen |
TERMINAL_TEXTCOLOR | Textfarbe als Wert (ein weiterer einzelner Wert zwischen 0 und 255) |
TERMINAL_BKCOLOR | Hintergrundfarbe als Wert (ein weiterer einzelner Wert zwischen 0 und 255) |
TERMINAL_LINEFEEED | Line Feed – Zeilenvorschub (Standard-Steuerzeichen) |
TERMINAL_CARRIAGERETURN | Carriage Return – Wagenrücklauf (Standard-Steuerzeichen) |
TERMINAL_SETCURSOR | Cursor-Position setzen (weitere 2 Werte für x, y erforderlich) |
TERMINAL_FONT_SMALL | Fontgröße 0 (Kleine Schrift) |
TERMINAL_FONT_MEDIUM | Fontgröße 1 (doppelt hohe Schrift, Standardschrift) |
TERMINAL_FONT_BIG | Fontgröße 2 (doppelt hohe und doppelt breite Schrift) |
Balkengrafikanzeige
Hier können ein bis acht Balken in zweihundert Stufen dargestellt werden. Die Farben der Balken können insgesamt oder einzeln festgelegt werden. Die Zeichengeschwindigkeit ist lediglich durch die serielle Schnittstelle (19.200 Bit/s = maximal 300 Aktualisierungen aller acht Balken pro Sekunde) limitiert. Es wird keine Achsendarstellung hinzugefügt. Balkenewerte müssen größer oder gleich BALKENGRAFIK_BAROFFSET sein.
Kommando | Bedeutung |
---|---|
BALKENGRAFIK_NUMACHSEN_1 | 1 Balken zeichnen |
BALKENGRAFIK_NUMACHSEN_2 | 2 Balken zeichnen |
BALKENGRAFIK_NUMACHSEN_3 | 3 Balken zeichnen |
BALKENGRAFIK_NUMACHSEN_4 | 4 Balken zeichnen |
BALKENGRAFIK_NUMACHSEN_5 | 5 Balken zeichnen |
BALKENGRAFIK_NUMACHSEN_6 | 6 Balken zeichnen |
BALKENGRAFIK_NUMACHSEN_7 | 7 Balken zeichnen |
BALKENGRAFIK_NUMACHSEN_8 | 8 Balken zeichnen |
BALKENGRAFIK_COLOR_BALKEN_1 | Farbe für Balken 1 setzen – ein zusätzlicher Wert zwischen 0 und 255 für die Farbe erforderlich |
BALKENGRAFIK_COLOR_BALKEN_2 | Farbe für Balken 1 setzen – ein zusätzlicher Wert zwischen 0 und 255 für die Farbe erforderlich |
BALKENGRAFIK_COLOR_BALKEN_3 | Farbe für Balken 1 setzen – ein zusätzlicher Wert zwischen 0 und 255 für die Farbe erforderlich |
BALKENGRAFIK_COLOR_BALKEN_4 | Farbe für Balken 1 setzen – ein zusätzlicher Wert zwischen 0 und 255 für die Farbe erforderlich |
BALKENGRAFIK_COLOR_BALKEN_5 | Farbe für Balken 1 setzen – ein zusätzlicher Wert zwischen 0 und 255 für die Farbe erforderlich |
BALKENGRAFIK_COLOR_BALKEN_6 | Farbe für Balken 1 setzen – ein zusätzlicher Wert zwischen 0 und 255 für die Farbe erforderlich |
BALKENGRAFIK_COLOR_BALKEN_7 | Farbe für Balken 1 setzen – ein zusätzlicher Wert zwischen 0 und 255 für die Farbe erforderlich |
BALKENGRAFIK_COLOR_BALKEN_8 | Farbe für Balken 1 setzen – ein zusätzlicher Wert zwischen 0 und 255 für die Farbe erforderlich |
BALKENGRAFIK_COLOR_BLUE | Farbe dunkelblau für alle Balken |
BALKENGRAFIK_COLOR_LTBLUE | Farbe dunkelblau für alle Balken |
BALKENGRAFIK_COLOR_GREEN | Farbe dunkelgruen für alle Balken |
BALKENGRAFIK_COLOR_LTGREEN | Farbe hellgruen für alle Balken |
BALKENGRAFIK_COLOR_YELLOW | Farbe dunkelgelb für alle Balken |
BALKENGRAFIK_COLOR_LTYELLOW | Farbe hellgelb für alle Balken |
BALKENGRAFIK_COLOR_RED | Farbe rot für alle Balken |
BALKENGRAFIK_COLOR_ORANGE | Farbe orange für alle Balken |
BALKENGRAFIK_COLOR_WHITE | Farbe weiß für alle Balken |
BALKENGRAFIK_DRAWBAR_1 | Zeichne Balken 1 – ein zusätzlicher Wert zwischen 52 und 251 für die Höhe erforderlich |
BALKENGRAFIK_DRAWBAR_2 | Zeichne Balken 2 – ein zusätzlicher Wert zwischen 52 und 251 für die Höhe erforderlich |
BALKENGRAFIK_DRAWBAR_3 | Zeichne Balken 3 – ein zusätzlicher Wert zwischen 52 und 251 für die Höhe erforderlich |
BALKENGRAFIK_DRAWBAR_4 | Zeichne Balken 4 – ein zusätzlicher Wert zwischen 52 und 251 für die Höhe erforderlich |
BALKENGRAFIK_DRAWBAR_5 | Zeichne Balken 5 – ein zusätzlicher Wert zwischen 52 und 251 für die Höhe erforderlich |
BALKENGRAFIK_DRAWBAR_6 | Zeichne Balken 6 – ein zusätzlicher Wert zwischen 52 und 251 für die Höhe erforderlich |
BALKENGRAFIK_DRAWBAR_7 | Zeichne Balken 7 – ein zusätzlicher Wert zwischen 52 und 251 für die Höhe erforderlich |
BALKENGRAFIK_DRAWBAR_8 | Zeichne Balken 8 – ein zusätzlicher Wert zwischen 52 und 251 für die Höhe erforderlich |
BALKENGRAFIK_BAROFFSET | = 52, Hilfswert für BALKENGRAFIK_DRAWBAR_X |
Messwert-Modus
Hier wird ein Raster auf den Bildschirm gezeichnet, das von links nach rehts durch übergebene Werte überschrieben wird (Wertebereich 0..200). Wenn die Zeichnung ganz rechts angekommen ist, beginnt sie links wieder. Auch das Raster wird eimmal neu gezeichnet, so dass man die aktuelle Zeichenposition leicht erkennen kann. Die Farbe des Verlaufs ist einstellbar, außerdem kann unterhalb der Grafik ein Text dargestellt werden. Diese Funktion ist damit für Langzeitmessungen gut geeignet, da sie 256 Messwerte speichern kann. Die maximale Aktualisierung liegt bei 2400 Hz / 2400 Werte pro Sekunde, womit man schon ein einfaches Oszilloskop bauen kann. Der übergebene Wertebereich liegt zwischen 32..255, wobei 255 oben und 32 unten ist
Kommando | Bedeutung |
---|---|
MESSWERTE_RASTER | zeichnet ein Raster |
MESSWERTE_CLEARSCREEN | Bildschirm löschen (zeichnet auch ein Raster) |
MESSWERTE_TEXTCOLOR | Textfarbe als Wert (ein weiterer einzelner Wert zwischen 0 und 255) |
MESSWERTE_START | Mindestwert für anzuzeigende Werte |
MESSWERTE_WERTE | folgende Werte größer oder gleich 32 werden als Messwerte interpretiert |
MESSWERTE_TEXT | folgende Werte größer oder gleich werden als Text interpretiert |
Tastatur-Modus
Zeigt ein Tastenfeld mit 26 Zeichen und 10 Ziffern, dazu zwei Schaltern für “OK” und “Abbrechen”. Wozu auch immer man Text eingeben mag – hier ist die Möglichkeit dazu. Ungelöst ist bisher noch die Frage mach Groß-Kleinschreibung und dem Leerzeichen. Hierzu wurde in der Bibliothek eine spezielle Funktion “Show_Keyboard” geschaffen, die nach ihrem Aufruf mit dem eingegebenen Wert zurückkehrt.
Es gibt drei Tastaturmodi:
- alphanumerische Eingabe mit Zahlen und Buchstaben
- numerische Eingabe mit Zahlen
- keine Tastaturbeschriftung – dafür muss das Programm dann selbst sorgen
Kommando | Bedeutung |
---|---|
KEYBOARD_RELEASE | wird in Addition mit den anderen KEYBAORD_XXX-Konstanten benutzt – Knopf wird ungedrückt gezeichnet |
KEYBOARD_PRESSED | wird in Addition mit den anderen KEYBAORD_XXX-Konstanten benutzt – Knopf wird gedrückt gezeichnet |
KEYBOARD_SELECT | Taste ist selektiert (bei Tastaturauswahl |
KEYBOARD_TEXT | Text ist bestätigt und wird ausgegeben |
KEYBOARD_SWITCHTERMINAL | schaltet temporär in den Terminalmodus um |
KEYBOARD_RELEASE31 | Button 31 wird ungedrückt dargestellt |
KEYBOARD_RESET | setzt Textposition auf Anfang |
KEYBOARD_0 | Tastencode für 0 |
KEYBOARD_A | Tastencode für A |
KEYBOARD_OK | Tastennummer für OK |
KEYBOARD_CANCEL | Tastennummer für Abbrechen |
Menü-Modus
Eine typische Menüdarstellung mit Überschrift (schwarz auf weißem Grund) und maximal fünf Auswahlwerten, die per Touchscreen oder Tastatur (Rechts-Links-OK) ausgewählt werden können. Der ausgewählte Eintrag wird hervorgehoben dargestellt. Hierzu wurde in der Bibliothek eine spezielle Funktion “Show_Menu” geschaffen, die nach ihrem Aufruf mit dem Wert des ausgewählten Eintrags zurückkehrt. Diese Funktion kapselt die folgenden Kommandos auf einfache Weise
Kommando | Bedeutung |
---|---|
MENU_LINE1_SELECTED | Menü 1 selektiert |
MENU_LINE2_SELECTED | Menü 2 selektiert |
MENU_LINE3_SELECTED | Menü 3 selektiert |
MENU_LINE4_SELECTED | Menü 4 selektiert |
MENU_LINE5_SELECTED | Menü 5 selektiert |
MENU_TEXT_LINE1 21 | Text wird ab sofort in Zeile 1 ausgegeben (Überschrift, schwarz auf weifl) |
MENU_TEXT_LINE2 22 | Text wird ab sofort in Zeile 2 ausgegeben (linker Rand, weifl auf blau) |
MENU_TEXT_LINE3 23 | Text wird ab sofort in Zeile 3 ausgegeben (linker Rand) |
MENU_TEXT_LINE4 24 | Text wird ab sofort in Zeile 4 ausgegeben (linker Rand) |
MENU_TEXT_LINE5 25 | Text wird ab sofort in Zeile 5 ausgegeben (linker Rand) |
MENU_TEXT_LINE6 26 | Text wird ab sofort in Zeile 6 ausgegeben (linker Rand) |
MENU_DRAWFRAME 29 | Es werden Rahmen um die 5 Menü-Elemente ausgegeben (Standard). Dabei wird ein Rahmen selektiert dargestellt |
Messagebox-Modus
eine Dialogbox, die ein Fenster darstellt mit Überschrift (in doppelter Schrifthöhe) und drei Zeilen. Man kann außerdem aus den folgenden Schaltflächenkombinationen wählen:
- OK/Abbrechen
- Ja/Nein
- Zurück/OK/Weiter
- Zurück/Weiter*OK
Hierzu wurde in der Bibliothek eine spezielle Funktion “Messagebox” geschaffen, die nach ihrem Aufruf mit dem Wert des ausgewählten Eintrags zurückkehrt. Diese Funktion kapselt die folgenden Kommandos auf einfache Weise.
Kommando | Bedeutung |
---|---|
MESSAGEBOX_BACK_NEXT | Pfeile nach links und nach rechts |
MESSAGEBOX_BACK_OK_NEXT | Pfeile nach links und nach rechts, auflerdem OK in der Mitte |
MESSAGEBOX_OK_CANCEL | OK und Abbrechen |
MESSAGEBOX_YES_NO | Ja und Nein |
MESSAGEBOX_OK | OK |
MESSAGEBOX_SELECTBTN1 | linker Knopf gedrückt |
MESSAGEBOX_SELECTBTN2 | mittlerer Knopf gedrückt |
MESSAGEBOX_SELECTBTN3 | rechter Knopf gedrückt |
MESSAGEBOX_LINE1 | Text in Zeile 1 ausgeben |
MESSAGEBOX_LINE2 | Text in Zeile 2 ausgeben |
MESSAGEBOX_LINE3 | Text in Zeile 3 ausgeben |
MESSAGEBOX_LINE4 | Text in Zeile 4 ausgeben |
8-LED-Modus
Ein Bildschirm, der acht farbige Rechtecke horizontal anordnet und dazu die Ausgabe eines Textes oberhalb erlaubt. Dieser Modus orientiert sich an den 8 LEDs des MC6400-Originals. Die “LED” können aber in rot, gelb, grün, blau und weiß oder in Kombination oder Regenbogenfarbe leuchten.
Kommando | Bedeutung |
---|---|
LED_8COLOR_BLUE | Alle LEDs sind blau |
LED_8COLOR_GREEN | Alle LEDs sind grün |
LED_8COLOR_RED | Alle LEDs sind rot |
LED_8COLOR_YELLOW | Alle LEDs sind gelb |
LED_8COLOR_WHITE | Alle LEDs sind weiß |
LED_8COLOR_MIXED | Je 2 LEDs sind blau, grün, gelb, rot |
LED_8COLOR_RAINBOW | Regenbogen-Farbanordnung |
LED_NOBKCOLOR | keine Hintergrundfarbe, wird durch LED_8COLOR_CLEARSCREEN aufgehoben |
LED_8COLOR_CLEARSCREEN | Löscht den Bildschirm |
LED_1_OFF | schaltet LED 1 aus |
LED_2_OFF | schaltet LED 2 aus |
LED_3_OFF | schaltet LED 3 aus |
LED_4_OFF | schaltet LED 4 aus |
LED_5_OFF | schaltet LED 5 aus |
LED_6_OFF | schaltet LED 6 aus |
LED_7_OFF | schaltet LED 7 aus |
LED_8_OFF | schaltet LED 8 aus |
LED_1_ON | schaltet LED 1 ein |
LED_2_ON | schaltet LED 2 ein |
LED_3_ON | schaltet LED 3 ein |
LED_4_ON | schaltet LED 4 ein |
LED_5_ON | schaltet LED 5 ein |
LED_6_ON | schaltet LED 6 ein |
LED_7_ON | schaltet LED 7 ein |
LED_8_ON | schaltet LED 8 ein |
Ampel-Modus
Ein Bildschirm in Ampelanordnung und -farbe, der drei farbige Rechtecke vertikal anordnet. Dieser Modus orientiert sich an den 3 farbigen LEDs des MC6400-Originals.
Kommando | Bedeutung |
---|---|
LED_3COLOR_GREEN_ON 2 | grün hell |
LED_3COLOR_GREEN_OFF 3 | grün dunkel |
LED_3COLOR_YELLOW_ON 4 | gelb hell |
LED_3COLOR_YELLOW_OFF 5 | gelb dunkel |
LED_3COLOR_RED_ON 6 | rot hell |
LED_3COLOR_RED_OFF 7 | rot dunkel |
Freier Zeichenmodus
Ein leerer Bildschirm, auf dem wahlweise (auch gefüllte) Rechtecke, Linien und Punkte dargestellt werden können. Um Texte ausgeben zu können, kann zwischendurch in einen Terminalmodus geschaltet werden (siehe oben). Farben können festgelegt oder über die eingebaute Farbpalette (siehe oben) ausgewählt werden.
Kommando | Bedeutung |
---|---|
DRAW_CLEARSCREEN | Bildschirm loeschen |
DRAW_COLOR | Zeichenfarbe als Wert (ein weiterer einzelner Wert zwischen 0 und 255) |
DRAW_BKCOLOR | Hintergrundfarbe als Wert (ein weiterer einzelner Wert zwischen 0 und 255), löscht nicht automatisch den Bildschirm! |
DRAW_SELECTCOLOR | Ruft eine Farbauswahl auf – Farbe muss vom aufrufenden Programm gesetzt werden! |
DRAW_LINE | Linie, erfordert vier weitere Werte für x1/y1 und x2/y2 |
DRAW_SETPIXEL | Pixel, erfordert zwei weitere Werte für x/y |
DRAW_DRAWRECT | Rechteck, erfordert vier weitere Werte für x1/y1 und x2/y2 |
DRAW_FILLRECT | Gefülltes Rechteck, erfordert vier weitere Werte für x1/y1 und x2/y2 |
DRAW_BUTTONFFRAME | zeichnet einen transparenten Knopf (links oben: hell, rechts unten: dunkel) |
DRAW_SELBUTTONFFRAME | zeichnet einen selektierten Knopf (links oben: dunkel, rechts unten: hell) |
DRAW_SWITCHTERMINAL | schaltet temporär in den Terminalmodus, damit Texte ausgegeben werden können |
Schieberegler-Modus
- MODE_SLIDER
Ein Modus, in dem ein Regler mit dem Wertebereich 0..199 gezeichnet wird und wahlweise durch die Knöpfe links und rechts, die Tastatur oder durch Antippen verschoben werden kann. Hierzu wurde in der Bibliothek eine spezielle Funktion “Slider” geschaffen, die nach ihrem Aufruf mit dem Wert des ausgewählten Eintrags zurückkehrt. Diese Funktion akzeptiert beliebige Bereiche und rechnet das Ergebnis des Schiebereglers automatisch um und kapselt damit diese Kommandos auf einfache Weise.
Eine Überschrift kann übergeben werden – alle Zeichen größer oder gleich 32 werden als Text interpretiert und hintereinander ausgegeben.
Kommando | Bedeutung |
---|---|
SLIDER_REDRAW | Neuzeichnen im unselektierten Zustand |
SLIDER_BTN_BACK_PRESSED | Back-Button gedrückt |
SLIDER_BTN_NEXT_PRESSED | Next-Button gedrückt |
SLIDER_BTN_OK_PRESSED | OK-Button gedrückt |
SLIDER_VALUE | Wert für Slider – zweiter Wert wird abgefragt, zulässig sind Werte von 0 bis 200 |
SLIDER_CLEARSCREEN | löscht den Bildschirm inklusive des Textes |
Funktionen der mclib.c
Einfache Kommando- und Prüffunktionen
Kommando | Bedeutung |
---|---|
Send_Command(unsigned char c) | Übergabe eines Kommandos an den Grafikcontroller (kapselt uart_putc) |
Send_Value(unsigned char c) | Übergabe eines Wertes zwischen 0 und 255 an den Grafikcontroller (kapselt uart_putc) |
Send_String(const char *s) | Übergabe eines nullbasierten Strings an den Grafikcontroller (kapselt uart_puts) |
unsigned char Wait_For_Input() | wartet auf eine Eingabe durch den Tastatur- und Touchscreencontroller (kapselt uart_getchar()) |
unsigned char Check_For_Input() | prüft auf Vorhandensein einer Eingabe durch den Tastatur- und Touchscreencontroller, kehrt aber auch zurück, wenn keine Eingabe vorliegt (kapselt uart_getc()) |
void Send_Coordinates(unsigned char x, unsigned char y) | sendet ein Koordinatenpaar an den Grafikcontroller |
void Send_Double_Coordinates(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2) | sendet zwei Koordinatenpaare an den Grafikcontroller |
void Send_Terminal_String(unsigned char x, unsigned char y, unsigned char delete_line, const char *s) | Sendet einen String ans Terminal an einer bestimmten Position. Die Zeile kann vorher gelöscht werden, indem „delete_line“ nicht Null ist. |
char Point_in_Rect(unsigned char x, unsigned char y , unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2) | Prüft, ob ein Punkt innerhalb eines Rechtecks liegt. Es gilt x1 < x <= x2 und y1 < y <= <2. |
Show_Menu_Screen
Diese Funktion zeigt einen Menübildschirm an und kehrt mit der getroffenen Auswahl zurück. Die Auswahl kann gleichermaßen über Touchscreen oder die drei Tastaturknöpfe erfolgen.
char Show_Menu_Screen(const char *caption, const char *menu1, const char *menu2, const char *menu3, const char *menu4, const char *menu5)
Es werden eine Überschrift und maximal 5 Menüeinträge als String übergeben. Je 40 Zeichen können dargestellt werden. Folgende Rückgabewerte sind möglich:
Rückgabewert | Bedeutung |
---|---|
MENUITEM1 | Erster Menüeintrag wurde ausgewählt |
MENUITEM2 | Zweiter Menüeintrag wurde ausgewählt |
MENUITEM3 | Dritter Menüeintrag wurde ausgewählt |
MENUITEM4 | Vierter Menüeintrag wurde ausgewählt |
MENUITEM5 | Fünfter Menüeintrag wurde ausgewählt |
Show_Keyboard
Diese Funktion zeigt die Bildschirmtastatur an. Die Tastatur kann auch mit den drei Tasten auf dem Schaltpult bedient werden. Dabei dienen die Knöpfe für „Links“ und „Rechts“ zur Auswahl des gewünschten Zeichens, mit „OK“ wählt man es aus. Um die Eingabe abzuschließen, muss man dann den „OK“-Knopf auf der Tastatur auswählen und betätigen.
signed int Show_Keyboard(int Min, int Max, char Keyboard_Mode, const char *caption)
Folgende Möglichkeiten sind vorhanden:
Eingabe | Wert | Erklärung |
---|---|---|
Keyboard_Mode | KEYBOARD_ALPHA | stellt eine alphanumerische Tastatur dar |
KEYBOARD_NUMERIC | stellt eine numerische Tastatur dar | |
KEYBOARD_DRAW | stellt eine Tastatur ohne Beschriftung dar | |
Min, Max | Integer-Werte von -32767 bis +32767 | Diese Werte haben nur Bedeutung, wenn KEYBOARD_NUMERIC gewählt wurde. Dann muss Min <= eingegebener Wert <= Max sein, ansonsten akzeptiert die Tastatur die Eingabe nicht |
caption | Überschrift | String-Wert |
Bei KEYBOARD_NUMERIC ist der Rückgabewert der eingetippte Wert, bei KEYBOARD_ALPHA wird der eingegebene String in der globalen Variable „Value_Buffer“ abgelegt. Wenn der Knopf „Abbrechen“ getippt wurde, ist der Rückgabewert „KEYBOARD_CANCELLED“.
MessageBox
Diese Funktion zeigt eine Dialogbox an. Sie dient zur Beantwortung von geschlossenen Fragen oder für Hinweise.
unsigned char MessageBox(char mode, const char *caption, const char *line1, const char *line2, const char *line3)
Die Überschrift wird in doppelt breiter Schrift dargestellt und bietet daher nur Platz für 20 Zeichen. Die drei Zeilen darunter bieten Platz für je 40 Zeichen.
Die Dialogbox kann auch mit den drei Tasten auf dem Schaltpult bedient werden.
Es können die Modi gemäß der oben im Bereich „MESSAGEBOX“ dargestellten Beschreibung ausgewählt werden; sie führen zur Anzeige unterschiedlicher Kombinationen der Schaltflächen. Gemäß diesen Kombinationen sind dann auch die Rückgabewerte der Funktion gestaltet:
Rückgabewert | Bedeutung |
---|---|
MR_OK | OK-Knopf wurde gedrückt |
MR_CANCEL | Abbrechen-Knopf wurde gedrückt |
MR_YES | Ja-Knopf wurde gedrückt |
MR_NO | Nein-Knopf wurde gedrückt |
MR_NEXT | „->“ Knopf wurde gedrückt |
MR_BACK | „<-“ Knopf wurde gedrückt |
MR_ERROR | Ungültiger Wert für „mode“ wurde übergeben |
Schieberegler-Funktion
Es wird ein Schieberegler mit Knöpfen zur Einstellung des Wertes dargestellt. Die Funktion kann auch mit den drei Tasten der Pulttastatur ausgelöst werden.
int Slider(const char *caption, int min, int value, int max)
Die Werte für „min“ und „max“ geben die gewünschten Minimal- und Maximalwerte an, die der Schieberegler erreichen soll. „value“ gibt den Wert an, der anfangs eingestellt sein soll. Die Funktion rechnet dabei die internen Werte des Sliders des Grafikcontrollers automatisch in die gewünschten Werte um.
Zurückgegeben wird der ausgewählte Wert des Schiebereglers. Wenn min >= max war, wird der Schieberegler nicht angezeigt und statt dessen der Wert von „value“ zurückgeliefert.
Kommandos der Tastatur und des Touchscreens
Tastaturkommandos
Mit jedem Druck auf eine der drei Hardware-Tasten auf dem Schaltpult empfängt der Hauptcontroller ein Kommando. Die Tasten sind elektronisch entprellt, so dass nicht mehrfach hintereinander das gleiche Kommando gesendet wird, sofern es nicht beabsichtigt ist.
Kommando | Bedeutung |
---|---|
SENDKEY_OK | OK-Taste wurde gedrückt |
SENDKEY_LEFT | Taste „Links“ wurde gedrückt |
SENDKEY_RIGHT | Taste „Rechts“ wurde gedrückt |
Touchscreen-Kommandos
Der Touchscreen sendet Kommandos beim Berühren und beim Loslassen des Touchscreens. Er kennt verschiedene Modi und kann dann Koordinaten (passend zur Bildschirmauflösung 256×252) oder Felder (8 in x- und 6 in y-Richtung) senden. In manchen Modi (bspw. dem Terminal) sendet er nicht.
Kommando | Bedeutung |
---|---|
SENDKEY_COORDINATES 242 | Touchscreen liefert Koordinaten – diese werden nach diesem Kommando als zwei weitere Werte geliefert (x/y) |
SENDKEY_TOUCH_START | Touchscreen liefert Felder, und gesendet werden dann beim Berühren SENDKEY_TOUCH_START bis SENDKEY_TOUCH_START+48 für die 48 Felder |
SENDKEY_TOUCH_END | Touchscreen liefert Felder, und gesendet werden dann beim Loslassen SENDKEY_TOUCH_END bis SENDKEY_TOUCH_END+48 für die 48 Felder |
Der Touchscreen kennt noch ein paar weitere Kommandos;
Kommando | Bedeutung |
---|---|
SENDKEY_STARTUP | gesendet beim Start des Touchscreen-Controllers, kann normalerweise ignoriert werden |
SENDKEY_ERROR | Overflow bei Koordinaten – wird gesendet, wenn Werte verloren gegangen sind |
SENDKEY_SLEEP | Wird gesendet, wenn der Controller nichts zu tun hat, kann normalerweise ignoriert werden |
Touchscreen-Konfiguration
Dieser Sonder-Modus dient einzig zur Kalibrierung des Touchscreens. In der Bibliothek findet sich dazu eine Funktion “Calibrate”, die – einmal aufgerufen – vier rote Ecken und Hinweise auf den Bildschirm zeichnet. Die Ecken müssen nacheinander angetippt werden und werden bei Erfolg grün dargestellt. Die Funktion prüft sehr genau auf Korrektheit der Ergebnisse, damit eine Fehlkalibrierung vermieden wird. Trotzdem Vorsicht! Die ermittelten Werte werden im EEPROM des Touchscreen-Controllers gespeichert, damit sie beim nächsten Einschalten wieder zur Verfügung stehen. Es wurde eine Funktion „Calibrate“ geschaffen, die Grafik und Touchscreen in sinnvoller Weise ansteuert und eine einfache Kalibrierung ermöglicht. Diese Funktion kapselt damit die hier vorgestellten Kommandos auf einfache Weise und sollte eingesetzt werden.
Kommando | Bedeutung |
---|---|
TOUCHSCREEN_CONFIG_LEFT_TOP | zeichnet links oben eine rote Ecke |
TOUCHSCREEN_CONFIG_RIGHT_TOP | zeichnet links oben eine grüne und rechts oben eine rote Ecke |
TOUCHSCREEN_CONFIG_LEFT_BOTTOM | zeichnet rechts oben eine grüne und links unten eine rote Ecke |
TOUCHSCREEN_CONFIG_RIGHT_BOTTOM | zeichnet links unten eine grüne und rechts unten eine rote Ecke |
TOUCHSCREEN_CONFIG_OK | zeichnet rechts unten eine grüne Ecke |
TOUCHSCREEN_CONFIG_TERMINAL | schaltet in den temporären Terminalmodus zur Textausgabe |
Der Touchscreen sendet ein paar spezielle Kommandos, wenn er sich im Konfigurationsmodus befindet.
Kommando | Bedeutung |
---|---|
SENDKEY_CONFIG_2 | wird als Antwort auf korrektes Tippen der linken oberen Ecke gesendet – Konfiguration Stufe 2 kann gestartet werden |
SENDKEY_CONFIG_3 | wird als Antwort auf korrektes Tippen der rechten oberen Ecke gesendet – Konfiguration Stufe 3 kann gestartet werden |
SENDKEY_CONFIG_4 | wird als Antwort auf korrektes Tippen der linken unteren Ecke gesendet – Konfiguration Stufe 4 kann gestartet werden |
SENDKEY_CONFIG_COMPLETE | Konfiguration erfolgreich beendet |
SENDKEY_RESTART_CONFIG_X | Konfiguration neu starten, Fehler aufgetreten, x im falschen feld |
SENDKEY_RESTART_CONFIG_Y | Konfiguration neu starten, Fehler aufgetreten, y im falschen Feld |
SENDKEY_RESTART_CONFIG_POSITION | Konfiguration neu starten, Abweichung zwischen links/rechts oder oben/unten zu groß |
Der Aufruf der Funktion Calibrate aus der mclib.c ist sehr einfach; sie erwartet keine Eingaben und liefert auch nichts zurück.
void Calibrate(void)
Die Konfiguration wird dann durchgeführt und kann durch Drücken des „OK“-Knopfes auf der Pulttastatur jederzeit abgebrochen werden.