Logu pārvaldnieka izstrāde mikrokontrolerim - 💡 Fix My Ideas

Logu pārvaldnieka izstrāde mikrokontrolerim

Logu pārvaldnieka izstrāde mikrokontrolerim


Autors: Ethan Holmes, 2019

Šo ziņu sākotnēji rakstīja Andrew Rossignol, un 4. aprīlī tas tika publicēts The Resistor Network tīklā.

Pēdējo pāris nedēļu laikā esmu eksperimentējis ar VVGA-II VGA kontrolieri. Tas ir uzjautrinošs aparatūras gabals, kas spēj zīmēt grafikas uz VGA framebuffer. VGA kontrolieris rūpējas par līnijas zīmēšanas algoritmiem un palīdz aparatūrai paātrināt ģeometrisko primitīvu (kvadrātu, apļu, trijstūru, daudzstūru, līniju) zīmēšanu.

Kad es sapratu šīs aparatūras jaudu, es nolēmu ieviest tādu logu pārvaldnieku, kādu jūs varētu sagaidīt jebkurā standarta datora datorā. Esmu izmantojis peli lietotāja ievadīšanai sistēmā.

Noklusējuma konfigurācijas tuvplāns

Noklusējuma sistēmas zābaki ar trim lietojumiem: Theme Manager, Audio Player. un Window Factory. Theme Manager tiek izmantots, lai mainītu sistēmas tēmas krāsas, audio atskaņotājs tiek izmantots, lai atskaņotu dažus SD kartē saglabātos audio failus, un Window Factory tiek izmantota, lai izveidotu jaunus logus demonstrācijas nolūkos.

Nedaudz zilā tēma ar vairāk Windows

Šeit ir video, kas demonstrē sistēmu.

Programmatūras pārskats

Šajā programmatūrā esmu mēģinājis uzturēt abstrakcijas slāņus. Es sākšu, izskaidrojot slāņveida pieeju, ko esmu izmantojis vadītājiem, logu pārvaldniekiem un lietojumprogrammām.

Slāņveida pieeja

Koka apakšā ir UART draiveris. Manam MCU ir divi UART moduļi, tāpēc es varu vienlaikus saskarties gan ar uVGA-II, gan sērijveida peli.

Diemžēl es esmu iekļuvis slazdā mēģināt uzrakstīt labu kodu, un starp slāņiem ir blur. Logu pārvaldnieks veic zvanus tieši uz uVGA-II slāni, kas nozīmē, ka būtu grūti šo loga pārvaldnieku pārnest uz citu VGA kontrolieri. To var atrisināt, izveidojot starpposma, platformas neatkarīgu aparatūras saskarnes slāni. Ja lietotājs vēlējās palaist AVRDE, izmantojot citu VGA kontrolieri, viņi drīzāk mainītu aparatūras abstrakcijas slāni, nevis pats loga pārvaldnieks.

Neskatoties uz neskaidrību starp slāņiem, man ir viegli uzturēt. Pāris stundu laikā es varēju pievienot jaunu logrīku (slīdni).

GUI rīkkopa modelēšana C

Šis ir mans pirmais mēģinājums izmantot C, lai modelētu kompleksu abstrakciju. Parasti es izmantoju C, lai kontrolētu aparatūru, reģistrus un citas zema līmeņa aparatūras koncepcijas. Šis projekts ir pilnīgi atšķirīgs un mēģina modelēt darbvirsmas metaforu. Es nepieprasu zināt C + +, tāpēc es esmu nolēmis palikt manā elementā un izmantot struktūras un arodbiedrības C.

Visi ekrāna objekti ir logrīka pēcnācēji

DWidget_t ir anonīms visu bērnu veidu savienojums. Tas ļauj dWidget_t objektam būt visu darbvirsmas logrīku mātes tipam. Mātes dWidget_t objekta peles atcelšana, peles pārvietošana un peles atsaukšana tiek apstrādāta ar paša loga pārvaldnieku. Funkciju norādes “iedzimto” veidu ietvaros ir lietotāja lietojumprogrammas. Lai saistītu tēmu izmaiņas, es saistos ar atzvanīšanas vērtību ().

Windows pārvaldība

Papildus dWidget_t tipam esmu ieviesis dManager_t. Šo struktūru izmanto, lai saglabātu logus un ar tiem saistītās funkcijas.

Logu pārvaldnieks

Šis vadītājs struktūrs seko līdzi loga pārvaldnieka lielumam (lai izvairītos no grūti kodētām konstantēm), dažiem kursora aspektiem, logu norādījumu saraksta un uzdevumjoslas pogas pozīcijām un izmēriem.

Darba virsmas zīmēšana

Esmu izmantojis Gleznotāja algoritmu, lai apstrādātu logu zīmēšanu. Tas nozīmē, ka es kārtoju logus ar Z-Index un pēc tam tos no zemākā uz augstāko, lai priekšplāna logs vienmēr būtu augšpusē.

Esmu aizņēmies koncepciju no Android, ka es esmu ļoti mīlējis. Es izmantoju pārkrāsošanas karogu, lai vajadzības gadījumā apstrādātu krāsošanu. Tas nozīmē, ka, ja es veikšu modifikācijas modeli (piemēram, mainiet Label tekstu), man ir jāzvana dInvalidate () šajā logrīkā, lai to uzgleznotu uz ekrāna. Tas samazina nepieciešamo kopējo repainu skaitu.

Man ir arī pārkrāsošanas karogs vadītājā. Šis karodziņš tiek iestatīts, kad logs tiek pārvietots, tēma ir mainīta vai logs ir samazināts līdz minimumam. Pārvaldnieks.repaint karogs rada pilnīgu darbvirsmas vides pārkrāsojumu.

Daudz logu

Sistēmas tēma

Katrs logrīks satur rādītāju uz tēmu. Tas ļauj dažādiem logiem būt dažādām tēmām vai lietojumprogrammām, lai saglabātu savu izskatu. Es neesmu izmantojis šo funkcionalitāti demonstrācijas video.

Pārvaldniekam ir arī atsauce uz uzdevumu joslas zīmēšanas sistēmas tēmu.

Uzdevumjosla

Uzdevumjosla ir diezgan vienkārša. Tas nav ieviests kā logrīks, ja tas ir nepieciešams, tas tiek vienkārši uzvilkts loga pārvaldnieka augšpusē, un pogas atrašanās vietas tiek saglabātas logu pārslēgšanai.

Ja loga nosaukumi pogai ir pārāk garš, pēdējās 2 rakstzīmes tiek aizstātas ar “..”.

Nosaukuma saīsināšana

Aparatūra

Aparatūrai nav pārāk daudz. Man ir ATmega1284p mikrokontrolleris, uVGA-II VGA kontrolieris, MAX233 līmeņa pārveidotājs un Microsoft sērijas pele.

Sīkāka informācija par maizes klāja aparatūru

Kods

Man ir jāstrādā pie UART draivera vēl vairāk un jāapstiprina daži dokumenti pirms koda augšupielādes savā Github repozitorijā.

PateicotiesAndrew Rossignollai ļautu mums atkārtot savu rakstu šeit MAKE vietnē.



Jums Var Būt Interesē

Laipni lūdzam - Make Like Picasso

Laipni lūdzam - Make Like Picasso


Atvērtā pasaule: pievienojieties mums, izzinot Maker kultūras un telpas

Atvērtā pasaule: pievienojieties mums, izzinot Maker kultūras un telpas


Red Bull svin Baltimore Makers ar jauno dokumentālo sēriju

Red Bull svin Baltimore Makers ar jauno dokumentālo sēriju


Maker Pro News: salātu roboti, zivju hakeri un citi

Maker Pro News: salātu roboti, zivju hakeri un citi