Forum: Projekte & Code OpenSource GUI für STM32F4 in "C"


von Uwe B. (derexponent)


Angehängte Dateien:

Lesenswert?

Hi,

ich habe die Version 1.0 einer "einfachen" GUI
für das STM32F429 Disco-Board als OpenSource-Projekt fertig.

Ein paar Demo-Bilder hab ich angehängt.

hier der Link :

http://mikrocontroller.bplaced.net/wordpress/?page_id=4723

das ganze ist natürlich noch ausbaufähig
und sicher nicht fehlerfrei,
wer will kann es aber als "Basis" benutzen.

Für einen Port auf eine andere CPU und ein anderes Display/Touch
hier ein paar Infos :

Alle Files sind Hardware unabhängig, bis auf zwei Files :

1. "stm32_ub_sgui.c"

hier wird das angeschlossene Display und der Touch initialisiert
(das muss von euch angepasst werden)

es gibt hier auch eine ISR die per Timer jede ms
aufgerufen werden muss

Der Touch wird dann alle 50ms gepollt und die Touch-Daten
werden in eine Struktur kopiert.

2. "ub_sgui_screen.c"

hier stehen die einzelnen Aufrufe für das Display drin,
also Linien, Punkte, gefüllte Rechtecke, Texte zeichnen usw.

diese Funktionen müsst ihr auch an eure Hardware anpassen


Der Rest sollte "eigentlich" ohne Änderung überall laufen ;-)

Gruss Uwe

: Bearbeitet durch User
von Rene B. (themason) Benutzerseite


Lesenswert?

Schick schick. Ich arbeite gerade auch an einer GUI in "reinem" C ;) 
Werd mal reinschauen.

Danke übrigens für deine tolle library. Hat mir den Einstieg echt leicht 
gemacht und schön verifizierbar. Echt tolle Arbeit.

von Uwe B. (derexponent)


Lesenswert?

@Rene,

die größte "Arbeit" ist eigentlich das zeichnen
der Komponenten zur Laufzeit

da kann man beliebig viel Zeit investieren

ich habe es mir recht einfach gemacht
und z.B. bei einer Listbox den Slider nicht animiert usw.

aber das ist reine Fleißarbeit, wer will kannn das noch hinzufügen :-)

Mit kommerziellen Produkten kann man es natürlich nicht vergleichen
mir ging es aber mehr ums Prinzip als um einen Designpreis.

von Quibby (Gast)


Lesenswert?

Whaaaa!!! Und wer bezahlt mir jetzt die Augenkrebs-Behandlung?
Wobei: es hat einen gewissen 1970er Retro-Charme ;-)

von User (Gast)


Lesenswert?

Ist doch state of the art bei Linux? ;)

von Axel R. (Gast)


Lesenswert?

Ich möchte den Thread gern mal hochholen dürfen :)

Ich habe eine Listbox mit mehreren Einträgen. Die Einträge möchte zum 
Zeitpunkt x alle verwerfen und durch 12 neue, gänzlich andere Einträge 
ersetzen.

Im Augenblick verfahre ich so:

Ich hole mir mit SGUI_ListboxGetItemCnt die Anzahl der Einträge und
lösche in einer For Schleife alle Einträge mit SGUI_ListboxDeleteItem

Anschliessend lade ich die neuen Einträge mit SGUI_ListboxSetItem

Kann man nicht die Listbox einfach "drüberinitialisieren"?
Einfach ein SGUI_ListboxCreate mit gleichem Namen ausführen?

Danke fürs Lesen...

Axelr.
DG1RTO

von Rene H. (Gast)


Lesenswert?

Quibby schrieb:
> Wobei: es hat einen gewissen 1970er Retro-Charme ;-)

Ich finds gut. Erinnert doch schön an die guten alten Motif Zeiten :)

von Axel R. (Gast)


Lesenswert?

Ich finds auch RICHTIG klasse - allein die Arbeit, die da hinter steckt. 
Da muss ich unbedingt ... Verschickt Fleurop auch Bier?

Aber ich möchte gern noch was hinterher schicken.
Ich habe das Gefühl, das SGUI_ListboxDeleteItem ansich nicht 
funktioniert.

Ich habe das jetzt erst einmal so umschifft, das ich die 78 nicht 
sehenswerten Einträge mit "     " überschreibe und die neuen 12 Einträge 
mit SGUI_ListboxSetItem ab Index 0 neu belege. Speicher ist ja genug 
vorhanden.
Ich habe das löschen der Einträge schon mit einem kleinen Delay(50ms) 
und einem "Scoobydoo" ( SGUI_Do(); ) in der Schleife visualieren wollen, 
damit der User sieht, das hier was gelöscht wird. Flackert auch ein 
wenig und die Zeit vergeht auch entsprechend, die Einträge bleiben aber 
in der Listbox erhalten und verschwinden leider nicht nach und nach - 
hmm

Axelr.
DG1RTO

von Olaf (Gast)


Lesenswert?

> Ich finds gut. Erinnert doch schön an die guten alten Motif Zeiten :)

Sobald es soweit kommt das an wirklich jedem Microcontroller ein Display 
mit 640x480 haengt, raff ich mich mal auf und implementiere open-look.

https://en.wikipedia.org/wiki/Olwm

So langsam erreichen unsere Toaster ja die Rechenleistung von den 
Luxusrechnern die wir damals hatten. :-)

Eine andere Moeglichkeit waere noch das alte PalmOS (so V2.0) 
nachzubauen. Das stellt nur sehr geringe Ansprueche an die Hardware.

Der Vorteil den soetwas haette liegt darin das damals uebliche Tools, 
Beispielprogramme und Fachliteratur verwendbar wird. Das spart erheblich 
Arbeit ein.


Olaf

von Arc N. (arc)


Lesenswert?

Olaf schrieb:
>> Ich finds gut. Erinnert doch schön an die guten alten Motif Zeiten :)
>
> Sobald es soweit kommt das an wirklich jedem Microcontroller ein Display
> mit 640x480 haengt, raff ich mich mal auf und implementiere open-look.
>
> https://en.wikipedia.org/wiki/Olwm
>
> So langsam erreichen unsere Toaster ja die Rechenleistung von den
> Luxusrechnern die wir damals hatten. :-)
>
> Eine andere Moeglichkeit waere noch das alte PalmOS (so V2.0)
> nachzubauen. Das stellt nur sehr geringe Ansprueche an die Hardware.

Nein, besser nicht. Vorallem wenn es mehr als nur das Aussehen der 
Oberfläche sein soll.
PalmOS hat/ist
1. das imo eklige Resourcen-System der älteren MacOS-Versionen
2. auf einem 68k mit 24/32-Bit-Adressen so gut wie alles auf 65536 Bytes 
beschränkt
3. ein bescheidenes API.
Simples Beispiel: Text in einem Texteingabefeld vorbelegen:
1
MemHandle newTextHandle, oldTextHandle;
2
MemPtr newTextP;
3
FieldPtr fieldP;
4
FormPtr formP;
5
6
formP = FrmGetActiveForm();
7
if (!formP) ...
8
9
// das OS hat bei einem Event natürlich nicht den Objektindex 
10
// oder die aktive Form mitgeliefert...
11
fieldP = FrmGetObjectPtr(formP, FrmGetObjectIndex(formP, FIELDRESOURCEID));
12
if (!fieldP) ...
13
14
newTextHandle = MemHandleNew(StrLen(textP) + 1);
15
if (!newTextHandle) ...
16
newTextPtr = MemHandleLock(newTextHandle);
17
if (!newTextPtr) ...
18
19
StrCopy(newTextPtr, textP);
20
21
oldTextHandle = FdlGetTextHandle(fieldP);
22
FldSetTextHandle(fieldP);
23
24
MemHandleUnlock(newTextHandle);
25
if (oldTextHandle) MemHandleFree(oldTextHandle);
26
27
FldDrawField(fieldP);


> Der Vorteil den soetwas haette liegt darin das damals uebliche Tools,
> Beispielprogramme und Fachliteratur verwendbar wird. Das spart erheblich
> Arbeit ein.

Nein, siehe Codebeispiel...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.