Documentation ¶
Overview ¶
Mit diesem Package kann das 2.8” TFT-Display mit Touchscreen von Adafruit via Go angesprochen werden.
Das Package besteht im Wesentlichen aus 2 Teilen
- Einer Sammlung von Typen und Funktionen für das Ansteuern des Bildschirms
- und einem Teil für die Ansteuerung des Touchscreens.
Jeder Teil ist dabei in eine hardwarenahe Implementation und ein etwas abstraketeres API unterteilt. Konkret:
- ili9341.go, ili9341-spi.go: enthalten alles, was für die direkte Ansteuerung des Display-Chips benötigt wird.
- display.go:
Interfaces: der SPI-Verbindung zum Display-Chip ILI9341 und der SPI-Verbindung zum Touchscreen-Chip STMPE610. Die Packages 'adatft/ili9341' und 'adatft/stmpe610' enthalten Typen und Methoden für den direkten Zugang zu diesen Hardware-Komponenten (low level API).
Darauf aufbauend enthält das Package die Typen 'Display' und 'Touch', welche ein "high level API" anbieten.
Index ¶
- Variables
- func Init()
- func PrintStat()
- type Buffer
- type ChannelDir
- type Display
- type DistortedPlane
- func (d *DistortedPlane) ReadConfig()
- func (d *DistortedPlane) ReadConfigFile(fileName string)
- func (d *DistortedPlane) SetRefPoint(id RefPointType, touchData TouchData, touchPos TouchPos)
- func (d *DistortedPlane) SetRefPoints(DataList []TouchData, posList []TouchPos)
- func (d *DistortedPlane) Transform(touchData TouchData) (touchPos TouchPos, err error)
- func (d *DistortedPlane) WriteConfig()
- func (d *DistortedPlane) WriteConfigFile(fileName string)
- type PenEvent
- type PenEventChannelType
- type PenEventHandlerType
- type PenEventType
- type RefPointType
- type RotationData
- type RotationType
- type Touch
- type TouchData
- type TouchPos
Constants ¶
This section is empty.
Variables ¶
var ( // ConvTime enthält die kumulierte Zeit, welche für das Konvertieren der // Bilder vom RGBA-Format in das 565-/666-Format verwendet wird. // Misst im Wesentlichen die aktive Zeit der Methode 'Convert'. ConvTime time.Duration // NumConv enthält die Anzahl Aufrufe von 'Convert'. NumConv int // DispTime enthält die kumulierte Zeit, welche für das Senden der Bilder // zum Display verwendet wird. Misst im Wesentlichen die aktive Zeit // der Methode 'drawBuffer'. DispTime time.Duration // NumDisp enthält die Anzahl Aufrufe von 'drawBuffer'. NumDisp int PaintTime time.Duration NumPaint int )
var (
Width, Height int
)
Functions ¶
Types ¶
type Buffer ¶
type Buffer struct {
// contains filtered or unexported fields
}
func NewBuffer ¶
func NewBuffer() *Buffer
Erzeugt einen neuen Buffer, der fuer die Anzeige von image.RGBA Bildern zwingend gebraucht wird.
func (*Buffer) Convert ¶
Mit dieser Funktion wird ein Bild vom RGBA-Format (image.RGBA) in das fuer den ILI9341 typische 666 oder (praeferiert) 565 Format konvertiert. Die Masse von src muessen den Massen des TFT-Displays (d.h. ILI9341_WIDTH x ILI9341_HEIGHT) entsprechen. Allfaellige Anpassungen sind vorgaengig mit anderen Funktionen (bspw. aus dem Package gg oder image/draw) durchzufuehren. Die Zeitmessung ueber die Variable 'ConvTime' ist in dieser Funktion realisiert.
type ChannelDir ¶
type ChannelDir int
type Display ¶
type Display struct {
// contains filtered or unexported fields
}
Dies ist der Datentyp, welche für die Verbindung zum ILI9341 via SPI steht. Im Wesentlichen handelt es sich dabei um den Filedescriptor auf das Device-File und um die Channels zu den Go-Routinen, welche a) die Konvertierung eines image.RGBA Bildes in ein ILI9341-konformes
Format vornimmt und
b) die Daten via SPI-Bus an den ILI9341 sendet.
func OpenDisplay ¶
func OpenDisplay(rot RotationType) *Display
func (*Display) InitChannels ¶
func (dsp *Display) InitChannels()
Diese Routine baut die GO-Routinen fuer die parallelisierte Konvertierung und Anzeige auf und retourniert einen Channel, auf welchem die Pointer auf die RGBA-Images zur Anzeige gesendet werden.
func (*Display) InitDisplay ¶
func (dsp *Display) InitDisplay(rot RotationType)
Initialisiert die Werte im ILI9341. Der Inhalt dieser Funktion ist aus unzaehligen Beidspielen im Internet zusammengetragen und wurde durch "Trial und Error" ermittelt.
type DistortedPlane ¶
type DistortedPlane struct { DataList [NumRefPoints]TouchData PosList [NumRefPoints]TouchPos // contains filtered or unexported fields }
Dieser Typ schliesslich wird gebraucht, um von den verzerrten Touchscreen- Koordinaten auf Display-Koordinaten des Bildschirms umzurechnen.
func (*DistortedPlane) ReadConfig ¶
func (d *DistortedPlane) ReadConfig()
func (*DistortedPlane) ReadConfigFile ¶
func (d *DistortedPlane) ReadConfigFile(fileName string)
func (*DistortedPlane) SetRefPoint ¶
func (d *DistortedPlane) SetRefPoint(id RefPointType, touchData TouchData, touchPos TouchPos)
-----------------------------------------------------------------------------
func (*DistortedPlane) SetRefPoints ¶
func (d *DistortedPlane) SetRefPoints(DataList []TouchData, posList []TouchPos)
func (*DistortedPlane) Transform ¶
func (d *DistortedPlane) Transform(touchData TouchData) (touchPos TouchPos, err error)
func (*DistortedPlane) WriteConfig ¶
func (d *DistortedPlane) WriteConfig()
-----------------------------------------------------------------------------
func (*DistortedPlane) WriteConfigFile ¶
func (d *DistortedPlane) WriteConfigFile(fileName string)
type PenEvent ¶
Jedes Ereignis des Touchscreens wird durch eine Variable des Typs 'Event' repraesentiert.
type PenEventChannelType ¶
type PenEventChannelType chan PenEvent
type PenEventHandlerType ¶
type PenEventHandlerType func(event PenEvent)
Dies ist der Funktionstyp fuer den PenEvent-Handler - also jene Funktion, welche beim Eintreffen eines Interrupts vom STMPE610 aufgerufen werden soll.
type PenEventType ¶
type PenEventType uint8
Dies sind alle Pen- oder Touch-Events, auf welche man sich abonnieren kann. Vom SMTPE610 gibt es nur 3 Events: Press, Move und Release. Die anderen Events (wie Tap, DoubleTap, Enter oder Leave) sind virtuelle Events und werden im Package 'adagui' durch den Screen-Typ erzeugt.
const ( PenPress PenEventType = iota PenDrag PenRelease )
func (PenEventType) String ¶
func (pet PenEventType) String() string
type RefPointType ¶
type RefPointType uint8
const ( RefTopLeft RefPointType = iota RefTopRight RefBottomRight RefBottomLeft NumRefPoints )
func (RefPointType) String ¶
func (pt RefPointType) String() string
type RotationData ¶
type RotationData struct {
// contains filtered or unexported fields
}
In RotationData sind nun alle von der Rotation abhängigen Einstellungen abgelegt. Es ist ein interner Datentyp, der wohl verwendet, aber nicht verändert werden kann.
type RotationType ¶
type RotationType int
Rotationsmoeglichkeiten des Display. Es gibt (logischerweise) 4 Möglichkeiten das Display zu rotieren. Dies hat Auswirkungen auf die Initialisierung des Displays, auf die globalen Variablen Width und Height, auf die Konfigurationsdateien, in welchen die Daten für die Transformation von Touch-Koordinaten auf Display-Koordianten abgelegt sind, etc.
const ( Rotate000 RotationType = iota Rotate090 Rotate180 Rotate270 )
func (*RotationType) Set ¶
func (rot *RotationType) Set(s string) error
func (RotationType) String ¶
func (rot RotationType) String() string
type Touch ¶
type Touch struct { EventQ PenEventChannelType DistortedPlane // contains filtered or unexported fields }
Dieser Typ steht fuer das SPI Interface zum STMPE - dem Touchscreen.
func OpenTouch ¶
func OpenTouch() *Touch
-----------------------------------------------------------------------------
Funktionen
func (*Touch) WaitForEvent ¶
Diese Funktion wird von 'aussen' aufgerufen und gibt das nächste Pen-Event zurück. Es ist eine Alternative zum Lesen aus der öffentlichen Event-Queue.