T240mode.cpp

 

 

 

 

 

 


Dieses Programm demonstriert die Funktion des grafikfähigen Touchdisplays EAeDIP240-7 in seinem Terminalmodus. Benutzt werden können die serielle RS232-Schnittstelle, der I2C-Bus oder der SPI-Bus. Hierzu muss im unteren Programm eine der Headerdateien dip240x.h aktiviert werden (x= i|s|p). Die Benutzung des Terminalmodus anstelle des Grafikmodus stellt hier insofern keine Einschränkung dar, als die Treiber in den dip240x.h Headerdateien auch die Basis des Grafikmodus bilden. Die fünf dort programmierten Protokolle werden auch im Grafikmodus benutzt.

Terminalmodus
Im Terminalmodus verhält sich das Display wie jede Textanzeige. Es sind keine grafischen Ausgaben möglich und es steht nur der dauerhaft in der Anzeige vorhandene 8x8Bit Zeichensatz Nummer 0 zur Verfügung. Diesem Zeichensatz entsprechend können 16 Zeilen mit je 30 Spalten (Zeichen) ausgegeben werden.

Das nachfolgende Programm greift alle möglichen Befehle des Terminalmodus auf und demonstriert ihre Anwendung. Die Ausgaben dieser Befehle und des Textes sind an das Protokoll [DC1 | len | .. daten .. | Prüfsumme mod 256] gebunden, das über die Funktion dip240out() in den Includedateien dip240x.h verwirklicht wird.

Der auszugebende ASCII-Text ist wie die ASCII-Steuerzeichen CR, LF, FF an keine ESC-Sequenzen gebunden. Diese sind nur bei den nachfolgenden Kommandos notwendig ..

               .. Cursor positionieren            ESC T P x y
               .. Cursor on/off                   ESC T C x
               .. Cursorposition sichern          ESC T S
               .. Cursorposition zurückspeichern  ESC T R
               .. Terminal aus                    ESC T A
               .. Terminal ein                    ESC T E
               .. Version ausgeben                ESC T V

Diese Kommandos wurden im vorliegenden Programm als Unterprogramme ausgeformt, die in der Funktion main() zum Test aufgerufen werden. So wie diese Kommandos können auch die ESC-Kommandos des Grafikmodus programmiert werden.

Hinweise
Die main() Startfunktion dieses Programms gibt zwei Texte zur Anzeige aus. Der erste Text ist im Programm selber enthalten, der zweite Text wird zur Demonstration aus einer Datei des Massenspeichers A:\ des IPC gelesen. (In diesem Fall die Datei autoexec.bat). Um die Datei zu öffnen und zu lesen muss die Includedatei file.h im Programm eingebunden sein. Werden der Aufruf von T240file() in main() sowie die Definition dieser Funktion entfernt, kann auch das Einbinden von file.h entfallen.

Der Ablauf von main() wird durch die Funktion waitKey() mehrfach unterbrochen. So ist es möglich, die einzelnen Schritte auf dem Display zu verfolgen. Was geschehen soll wird als Text auf dem Terminalbildschirm des IPC-Rechners ausgegeben.

Anschlüsse

Das Programm geht davon aus, dass der IPC@CHIP Webserver wie üblich über seine serielle Schnittstelle COM mit einem PC und dem dort arbeitenden Terminalprogramm verbunden ist. Das Touchdisplay muss dem entsprechend, bei Verwendung einer seriellen Schnittstelle oder des SPI-Busses, an EXT betrieben werden. Ansonsten ist es am I2C-Bus anzuschliessen. Wie die Jumper des Touchdisplays bei der Verwendung einer dieser Schnittstellen zu setzen sind, muss der Beschreibung des Anzeige-Modells entnommen werden.


Spannungsversorgung des Modells

Wird die 5V Versorgungsgleichspannung über den jeweiligen Schnittstellenanschluss übertragen, kann das Display ohne Benutzung der 2,1mm Klinkenbuchse betrieben werden. (Hierzu ist bei der seriellen Verbindung der Pin RI hierfür vorgesehen, es muss im Display der Drahtschalter geschlossen sein). Es ist zwingend darauf zu achten, dass nur eine Spannungsversorgung aktiv ist.


Einzubindende Includedateien

Bei Verwendung der seriellen Schnittstelle geht das Programm weiterhin davon aus, das die Schnittstelle EXT und das Display mit einer Baudrate von 115200 Baud miteinander kommunizieren. Dieser Parameter kann in der Includedatei dip240s.h geändert werden. Die seriellen Schnittstellentreiber aus serial.h werden ebenfalls in der Includedatei dip240s.h geladen, so wie dip240i.h die Headerdatei i2c.h einbindet. Bei der Benutzung von dip240p.h ist es die zusätzliche Headerdatei spi.h.


 

 

 


Headerdateien
Die in diesem Programm verwendeten Header- oder Includedateien für die IPC@CHIP Webserver sind, dem benutzten Bus entsprechend, durch Setzen oder Entfernen der Kommentarstriche im Programm unten zu aktivieren oder zu deaktivieren. Die benutzten Headerdateien sollten grundsätzlich im gleichen Verzeichnis wie das Hauptprogramm liegen.




.. serielle RS 232 Schnittstelle



dip240s.h

Protokoll- und Schnittstellentreiber für RS232 Schnittstelle des Touchdisplay. Diese Datei lädt die serial.h Includedatei.




serial.h Treiber für die RS232-Schnittstellen am IPC@CHIP Webserver


 

 

.. I2C-Bus

 


dip240i.h

Protokoll- und Schnittstellentreiber für die I2C-Bus Schnittstelle des Touchdisplay. Diese Datei lädt die i2c.h Includedatei.




i2c.h Treiber für den I2C-Bus am IPC@CHIP Webserver


 

 

.. SPI-Bus

 


dip240p.h

Protokoll- und Schnittstellentreiber für die SPI-Bus Schnittstelle des Touchdisplay. Diese Datei lädt die spi.h Includedatei.



spi.h

spi.h Treiber für den SPI-Bus am IPC@CHIP Webserver


 

 

 

 

 

 

.. Massenspeicher (nicht zwingend)

 


file.h

Funktionen zum Zugriff auf einen Massenspeicher. Ist nur für die Funktion T240file() des Hauptprogramms notwendig und kann weggelassen werden, wenn diese Funktion nicht benötigt wird.


 

 

 




// t240mode.cpp
// ------------  Version 21.03.2007
//               Borland IDE C++ 3.1 oder 5.02
//               Model:  SMALL
//               Char:   unsigned
//               bearbeitet: www.GoBlack.de, D.Schwarzer
// ----------------------------------------------------------------

// Testprogramm für das TouchDisplay EA eDIP240-7 im Terminal-Modus
// .. an einer der Schnittstellen: I2C-Bus| serielle Schnittstelle|
//    SPI-Bus

// Die Treiberprogramme für das TouchDisplay befinden sich in der
// Datei 'dip240x.h'. Dort werden alle Eigenschaften der jeweils
// benutzten Schnittstelle gesetzt.

// Die Headerdatei 'file.h' ist nur für den Programmteil notwendig,
// der eine Datei vom Massenspeicher liest und zum Display ausgibt.


#include <stdio.h>           // für printf()
#include <string.h>          // für strlen()

                             // Treiber für Anzeige EA eDIP240-7
                             // Header für benutzten Bus aktivieren 
                             // -----------------------------------
  #include "dip240s.h"       // RS232-Schnittst, (benöt serial.h)  
//#include "dip240i.h"       // I2C-Bus,         (benötigt i2c.h)
//#include "dip240p.h"       // SPI-Bus,         (benötigt spi.h)
  #include "file.h"          // nur für Funktion T240file()



// G240terminal()
// Grafikanzeige am TouchDisplay ein-(1) oder ausschalten(0)
// Rückgabe: 0 -es trat ein Fehler auf 1 -alles gesendet
// Wenn bereits ein Grafikmakro auf dem Display arbeitet kann es 
// hiermit ausgeblendet werden.
int G240terminal (char on)
{
  char cmd[]="\x1B""DE";              // ESC D E off
  if(!on)cmd[2]='A';                  // ESC D A on
  return(dip240out(cmd,3));
}

// G240beep()
// Schaltet den Beeper mit on=0-aus, on=1-ein, on=2..255 für on
// Zehntelsekunden ein.
int G240beep(char on)
{
  char cmd[]="\x1B""YS""\x00";        // ESC Y S beep
  cmd[3]=on;                          // 0-aus, 1 ein
  return(dip240out(cmd,4));           // 2-255 Zehntelsek
}

// T240terminal()
// Terminalanzeige am TouchDisplay ein-(1) oder ausschalten(0)
// Rückgabe: 0 -es trat ein Fehler auf 1 -alles gesendet
int T240terminal (char on)
{
  char cmd[]="\x1BTE";                // ESC T E off
  if(!on)cmd[2]='A';                  // ESC T A on
  return(dip240out(cmd,3));
}

// T240cursor()
// Cursor des Terminalmodus am TouchDisplay ein-oder ausschalten.
// Rückgabe: 0 -es trat ein Fehler auf 1 -alles gesendet
int T240cursor (char on)
{
  char cmd[]="\x1BTC\x01";            // ESC T C 1
  if(!on)cmd[3]=0;                    // ESC T C 0
  return(dip240out(cmd,4));
}

// T240gotoxy()
// Setze Cursor im Terminalmodus auf die Position(x,y)
// Im Terminalmodus ist nur der Zeichensatz 0 verfügbar.
// Entsprechend gibt es x=30 Spalten und y=16 Zeilen.
// Rückgabe: 0 -es trat ein Fehler auf 1 -alles gesendet
int T240gotoxy( char x, char y)
{
  char cmd[]="\x1BTP\x01\x01";        // ESC T P x y
  if(x<1||x>30||y<1||y>16){x=1;y=1;}
  cmd[3]=x; cmd[4]=y;
  return(dip240out(cmd,5));
}

// T240cpos()
// Sichert im Terminalmodus die aktuelle Cursorposition
// Anzeigenintern, oder setzt die letzt gemerkte Position
// wieder ein.
// save= 0 gemerkte Position zurückspeichern
// save= 1 momentane Position merken
// Rückgabe: 0 -es trat ein Fehler auf 1 -alles gesendet
int T240cpos(char save)
{
  char cmd[]="\x1BTS";                // ESC T S
  if(!save)cmd[2]='R';                // ESC T R
  return(dip240out(cmd,3));
}

// T240version()
// Gibt die Version der Anzeige als String auf dem
// Terminalbildschirm der Anzeige aus.
// Rückgabe: 0 -es trat ein Fehler auf 1 -alles gesendet
int T240version(void)
{
 return(dip240out("\x1BTV",3));
}

// T240file()
// öffnet die Datei 'dateiname' auf dem genannten Massenspeicher
// und sendet deren Inhalt zur EA eDIP240-7 Anzeige.
// Diese Funktion benötigt die Headerdatei 'file.h'
// Rückgabe 0 -Es trat ein Fehler auf 1 -alles gesendet
int T240file (char* dateiname)
{
 #define BUFLEN 64
 int  handle =0;
 char buffer[BUFLEN];
 unsigned long filelen =0L;
 unsigned long fileptr =0L;
 unsigned long toRead  =0L;

 // Datei zum Lesen öffnen, handle merken
 handle = openFile(dateiname, 0);     if(errOut()) goto end;
 // holt die Länge der Datei.
 filelen =getFileLen(handle);         if(errOut()) goto end;
 //fileptr auf Anfang der Datei setzen
 fileptr =setFilePtr(handle, 0, 0);   if(errOut()) goto end;

 while(fileptr<filelen){
   // momentanen Fileptr holen und Blöcke von BUFLEN Bytes
   // festlegen
   fileptr= getFilePtr(handle);       if(errOut()) goto end;
   toRead=filelen-fileptr;
   if(toRead>BUFLEN) toRead=BUFLEN;

   // lese BUFLEN Bytes der Datei
   readFile(handle, buffer, (unsigned)toRead);
                                      if(errOut()) goto end;
   // zur Anzeige senden
   if(!dip240out(buffer, (unsigned)toRead))
                                                   goto end;
 }

 // Datei schliessen
 closeFile(handle);                   if(errOut()) goto end;
 return(1);

 end:
 closeFile(handle);
 return(0);
}


// main()
// Dieses Testprogramm initialisiert die benutzte Schnittstelle,
// (seriell, I2C-Bus oder SPI-Bus) und nimmt lesenden sowie
// schreibenden Kontakt zu einer EA eDIP240-7 Anzeige auf.

// Die Anzeige wird im Terminal-Modus betrieben, das TouchDisplay
// wird von diesem Programm nicht angesprochen, dennoch kann
// kontrolliert werden, ob ein Empfang von der Anzeige möglich ist.
// Die benötigten Treiber für die diversen Schnittstellen befinden
// sich jeweils in der Headerdatei dip240x.h, x=s,i,p

// Das Programm gibt seine durchgeführten Aktivitäten zum
// Bildschirm eines auf dem PC arbeitenden Terminalprogramms aus,
// auf der Anzeige sollten diese Aktivitäten beobachtbar sein.
void main(void)
{
 // Text der folgend zur Anzeige ausgegeben werden soll
 char txt[]= "\fText aus laufendem Programm"
             "\r\n-----------------------------"
             "\r\n"
             "\r\nDieser Text ist im laufenden"
             "\r\nProgramm enthalten. Er be-"
             "\r\nsteht aus mehr als 64 Zeichen"
             "\r\nso dass er in mehrere Frames"
             "\r\nzerlegt, gesendet werden muss"
             "\r\n............................."
             "\r\n       Spalten:  30"
             "\r\n       Zeilen:   16"
             "\r\n............................."
             "\r\n"
             "\r\nDer nun folgende Text wird"
             "\r\nvon dem Laufwerk A:\\ gelesen";

 // Medungen die zum Terminalbildschirm gesendet werden
 printf("\r\n [Start] .. EAeDIP240 TerminalModus");
 printf("\r\n ----------------------------------\r\n");
 setStdio(2);

 // EAeDIP240-Display bezüglich der verwendeten Schnittstelle
 // initialisieren (in dip240x.h)
 if(!dip240init()){
   printf("\r\n         .. Anzeige nicht erreicht"); goto ende;
 }

 // Lesen von der Anzeige, testet dip240rec()
   dip240vers();
   printf("\r\n ~Version: %s",version);
   dip240getbuf();
   printf("\r\n ~belegt im  Sendebuffer= %d",sbuf);
   printf("\r\n ~frei im Empfangsbuffer= %d",rbuf);
   // nur bei Versionen der Anzeige-Firmware >1.2 möglich
   dip240getprot();
   printf("\r\n ~maximale Paketgroesse = %d",mps);
   printf("\r\n ~aktuelle Paketgroesse = %d",aps);
   printf("\r\n ~aktuelle Timeoutzeit  = %d",ato);
   printf("\r\n -2/10 Sekunde Pieper ein");
   printf("\r\n");

   // Schreiben zur Anzeige, testet dip240cmd()
   G240terminal(0);                      // Grafik aus
   G240beep(2);                          // Pieper 2/10s ein
   T240terminal(1);                      // Terminal ein
   T240cursor(1);                        // Cursor   ein
   dip240out("\f",1);                    // Display löschen
   printf("\r\n -Grafik   ausgeschaltet"
          "\r\n -Terminal eingeschaltet"
          "\r\n -Cursor   eingeschaltet"
          "\r\n -Terminalanzeige geloescht");
   waitKey();
   T240gotoxy(2,5);                      // Cursor auf Pos. x,y
   printf("\r\n +Cursor auf Position 2,5");
   waitKey();
   T240version();                        // Versionstring ausgeben
   printf("\r\n -Version der Anzeige ausgegeben");
   waitKey();
   T240gotoxy(1,4);                      // Curs auf x,y
   T240cpos(1);                          // Pos. merken
   T240cursor(0);                        // Cursor aus
   printf("\r\n +Cursor auf Position 1,4"
          "\r\n +Cursorposition gemerkt"
          "\r\n +Cursor ausgeschaltet");
   waitKey();

   // Text aus Programm ausgeben
   dip240out(txt,strlen(txt));
   printf("\r\n -Text aus dem Programmcode ausgegeben");
   waitKey();

   // Text ausgeben
   dip240out("\fautoexec.bat von Laufw. A:\\",28);
   T240cursor(1);                        // Cursor ein
   T240cpos(0);                          // gemerkte Curs.Position

   // Text aus autoexec.bat von A:\ holen und ausgeben
   // Nur dieser Programmteil benötigt die Headerdatei file.h
   T240file("a:\\autoexec.bat");

   printf ("\r\n +Cursor einschalten"
           "\r\n +gemerkte Cursorposition setzen"
           "\r\n +Text von Laufwerk A:\\ ausgegeben"
           "\r\n");
   waitKey();
 // ---------------------------------------------------------------
 ende:
 printf ("\r\n -Terminalanzeige loeschen"
         "\r\n -Cursor          ausschalten"
         "\r\n -Grafikanzeige   einschalten"
         "\r\n");
 dip240out("\f",1);                    // TerminalDisplay löschen
 T240cursor(0);                        // TerminalCursor aus
 G240terminal(1);                      // Grafikanzeige ein
 dip240release();
 printf("\r\n [Ende]  .. EAeDIP240 TerminalModus"
        "\r\n");
 setStdio(3);
}


www..de