adatft

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 17, 2023 License: MIT Imports: 12 Imported by: 16

README

adatft

Mit Go das TFT-Display von AdaFruit auf einem RPi ansteuern.

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

Constants

This section is empty.

Variables

View Source
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
)
View Source
var (
	Width, Height int
)

Functions

func Init

func Init()

Damit wird die 'periph.io'-Umgebung initialisiert. Diese Funktion muss immer als erstes aufgerufen werden, noch bevor irgendwelche Devices geoeffnet werden.

func PrintStat

func PrintStat()

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) Clear

func (buf *Buffer) Clear()

func (*Buffer) Convert

func (buf *Buffer) Convert(src *image.RGBA)

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) Bounds

func (dsp *Display) Bounds() image.Rectangle

func (*Display) Close

func (dsp *Display) Close()

Schliesst die Verbindung zum ILI9341.

func (*Display) Draw

func (dsp *Display) Draw(img image.Image) error

func (*Display) DrawSync

func (dsp *Display) DrawSync(img image.Image) error

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

type PenEvent struct {
	Type PenEventType
	TouchData
	TouchPos
	Time     time.Time
	FifoSize uint8
}

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) Close

func (tch *Touch) Close()

func (*Touch) InitTouch

func (tch *Touch) InitTouch()

func (*Touch) WaitForEvent

func (tch *Touch) WaitForEvent() PenEvent

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.

type TouchData

type TouchData struct {
	RawX, RawY uint16
}

Dieser Typ enthält die rohen, unkalibrierten Display-Daten

func (TouchData) String

func (td TouchData) String() string

type TouchPos

type TouchPos struct {
	X, Y float64
}

Während in diesem Typ die kalibrierten Postitionsdaten abgelegt werden.

func (TouchPos) Near

func (p1 TouchPos) Near(p2 TouchPos) bool

func (TouchPos) String

func (tp TouchPos) String() string

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL