Zephyrnet logo

Lääketieteellisten laitteiden käynnistysnäytön luominen QNX:lle

Treffi:

QNX Medical Device -käynnistysnäyttö

Useimmissa, ellei kaikissa tärkeimmissä laitteissa (mukaan lukien lääketieteelliset laitteet) kaikkialla maailmassa on jonkinlainen käynnistysnäyttö. Tällä usein näyttävällä, mutta joskus yksinkertaisella animaatiolla on kaksi tarkoitusta. Yksi on yksinkertaisesti se, että se näyttää hyvältä, ja yritykset voivat personoida ja lisätä siihen brändiään. Mutta toinen syy on kiistatta tärkeämpi; se ilmoittaa käyttäjälle, että laite toimii ja on vielä käynnistysvaiheessa.
Tämä blogi tulee erittäin tekniseksi, koska siinä kuvataan käynnistysnäytön suunnittelua ja luomista.

Blogissa jaetaan erityisesti vinkkejä, joiden avulla voit korjata sudenkuopat ja komplikaatiot, jotka liittyvät POSIX-yhteensopivan QNX-käyttöjärjestelmän (OS) käynnistysnäytön suunnitteluun. QNX on mikroydinkäyttöjärjestelmä, joka on suunniteltu käytettäväksi sulautetuissa järjestelmissä ja erityisesti turvallisuuskriittisissä laitteissa. Teknisten yksityiskohtien helpottamiseksi kaikkialla on viittaukset QNX-dokumentaatioon lisäselvyyden vuoksi.

QNX:n määrittäminen käyttöjärjestelmän koontitiedostoksi

Ensimmäinen askel käynnistysnäytön suunnittelussa on QNX:n asetukset sen varmistamiseksi, että käynnistysnäyttö tulee näkyviin mahdollisimman aikaisin käynnistysjakson aikana. QNX:n käyttämiseksi kehittäjän on määritettävä OS-koontitiedosto joka kuvaa olennaisesti, mitkä ohjaimet, sovellukset ja muut ylimääräiset tiedostot on sisällytettävä käyttöjärjestelmän näköistiedostoon. Tämä käyttöjärjestelmäkuva välitetään sitten kohdejärjestelmään ja ohjaa, mitkä sovellukset ja ohjaimet käynnistetään käynnistyksen yhteydessä. QNX:ssä on grafiikkajärjestelmä, joka tunnetaan nimellä Näytön alijärjestelmä. Sitä käytetään kuvan näyttämiseen tietylle laitteistoon liitetylle näytölle. Tämä tulisi käynnistää mahdollisimman pian käynnistyksen aikana. Käynnistyssekvenssi on määritetty rakennustiedostossa komentosarjatunnisteeksi, joka näyttää tältä:

[+script] .script={}

ja mitkä tahansa määritetyt rivit aaltosulkeiden sisällä toimivat kuin komentotulkkikomentosarja. Tästä on käynnistettävä Screen-alijärjestelmä.

Komento Screen-alijärjestelmän käynnistämiseksi näyttää tältä:

näyttö -c {path_to_config_file}.

Lisää tietoa löytyy tätä. Kun Screen-alijärjestelmä on käynnistetty, käynnistysnäytön binaari voidaan käynnistää myöhemmin.

Työskentely näyttöjärjestelmän kanssa

Seuraava askel on itse käynnistysnäytön kehittäminen. QNX:llä ei ole alkuperäistä tapaa näyttää kuvaa tai animaatiota osana käynnistysjaksoa. Tämä on kehitettävä laitekohtaisesti. Koska Screen API on kirjoitettu C-kielellä, myös käynnistysnäyttö tulee kirjoittaa C-kielellä. Lisäksi C:n käyttö varmistaa, että käynnistysnäyttö voidaan käynnistää paljon nopeammin, mikä vähentää aikaa, joka kuluu käyttäjälle laitteen toiminnasta tiedottamiseen. Käynnistysnäytön on määritettävä yleiskoodi ollakseen yhteydessä Screen API:n kanssa. Yksityiskohdat löytyy tätä mutta niiden luetteloimiseksi käynnistysnäytön on luotava kontekstiobjekti, renderöintikohde (tässä tapauksessa tarvittava renderöintikohde on ikkunakohde) ja lopuksi näytön puskuriobjekti. Teknisesti, koska C ei ole oliokeskeinen, objektien käsitettä ei ole olemassa kielessä. Mutta selityksen helpottamiseksi termiä objektit käytetään kuvaamaan käytettyjen rakennetyyppien tyyppejä.

Tässä on selvennyksiä ja viitteitä joihinkin tiettyihin parametreihin juuri määritetyille objekteille. Kun luot käynnistysnäytön näytön kontekstiobjektia, SCREEN_APPLICATION_CONTEXT-tyyppi ei ole riittävä. Sen sijaan käynnistysnäyttö tarvitsee SCREEN_WINDOW_MANAGER_CONTEXT. Syy selitetään täysin myöhemmin, mutta se liittyy olennaisesti siihen, että tiedetään, milloin käynnistysnäytön on lopetettava. Lisätietoa on tätä.

Seuraavaksi määritettäessä renderöintikohteen, tässä tapauksessa ikkunan, käyttöominaisuutta, tämä tulee asettaa ainakin arvoon SCREEN_USAGE_WRITE, koska käynnistysnäyttö aikoo kirjoittaa renderöintipuskuriin, mutta sen ei välttämättä tarvitse lukea siitä. Oletusasetus on kirjoitus- ja lukulippujen yhdistelmä. Lisätietoa on tätä.

Lopuksi, renderöintikohteen käyttämien puskureiden ihanteellinen määrä voidaan asettaa yhdeksi tai kahdeksi käytetyn käynnistysnäytön tyypistä riippuen. Jos laitteessa on staattinen käynnistysnäyttö, joka muodostaa yhden kuvan, niin 1 puskuri riittää. Jos se kuitenkin näyttää animaation, suositellaan kahta. Kahden käyttäminen yhdessä ikkunan renderöintikohteen kanssa mahdollistaa käynnistysnäytön kaksinkertaisen puskuroinnin. Toisin sanoen, kun animaation yhtä kehystä ladataan yhteen puskuriin, Screen-alijärjestelmä voi näyttää toisen puskurin. Sitten kun puskuri on ladattu, Screen-alijärjestelmä vaihtaa aktiivisen puskurin uuteen.

Työskentely kuvakirjaston kanssa

Nyt on käytettävä toista QNX-kirjastoa käynnistysnäytön kuvan tai animaation tiettyjen kehysten jäsentämiseen ja lataamiseen. Screen-alijärjestelmä ei käsittele tätä. Sen sijaan Kuvakirjasto käytetään. Käynnistysnäytössä käytettävän kuvatiedoston tyypistä riippuen tarvitaan erilaisia ​​Shared Object (.so) -koodekkitiedostoja. Nämä sisällytettäisiin käyttöjärjestelmän kuvan koontitiedostoon, ja luettelo saatavilla olevista on tätä. On suoritettava sarja vaiheita, jotta animaation kehys hahmonnetaan liitetylle näytölle.

Nämä vaiheet on määritelty tätä muutamalla varoituksella. Yksi tärkeä varoitus on se mahdollisuus, että animaation koko kehyssarja ei mahdu muistiin riippuen käytetystä laitteistosta. Jos näin on, kehykset on ladattava lennossa ja renderöitävä sitä mukaa kuin ne ladataan. Toinen varoitus on, että sekä img_load_file() että img_load() (molemmat viitataan yllä olevassa linkissä) lataavat vain ensimmäisen kehyksen. Pysäytyskuvalle tämä riittää, mutta ei animaatiolle. Näiden toimintojen käyttäminen silmukassa lukemiseen jokaisessa kehyksessä ei myöskään toimi, koska noudettavaa kehysnumeroa ei voi määrittää. Se palauttaa aina ensimmäisen ruudun.

Sen sijaan molempien varoitusten huomioimiseksi koodi lataa ja purkaa kehyksen ja kirjoittaa sitten takaisinkutsujen purkussa animaatiokehyksen Screen-alijärjestelmän puskuriin. Funktio img_decode_frame() mahdollistaa takaisinkutsujen määrittämisen ja se on nimenomaan frame_f()-backbackissa (katso tätä), että koodi, jolla kuva ladataan puskuriin, tulee laittaa.

Tietojen lataamisen vaiheet ovat seuraavat: Pura renderöintikohde (tässä tapauksessa näyttö), joka välitetään tietoparametrina (tämä on kirjoitettava uintptr_t:stä ​​screen_window_t:ksi). Sitten puskurin SCREEN_PROPERTY_POINTER ja SCREEN_PROPERTY_STRIDE (katso tätä) tulee asettaa kuvan dataksi ja askeleeksi (takaisinkutsun parametri img_t). Viimeinen vaihe on käyttää screen_post_window()-toimintoa (koska renderöintikohde on ikkuna) äskettäin ladatun kuvan renderöimiseksi näytölle.

Työskentely QNX-tapahtumajärjestelmän kanssa

Lopuksi, koska käynnistysnäyttö on pohjimmiltaan ääretön silmukka, joka voi näyttää animaation yhä uudelleen ja uudelleen, käynnistysnäytön on tiedettävä, milloin se lopetetaan. Tässä yhteydessä kontekstityypin asettaminen SCREEN_WINDOW_MANAGER_CONTEXT tulee tärkeäksi. QNX:ssä on Tapahtumajärjestelmä missä tapahtumia luodaan, jos uusia ikkunoita luodaan, tuhotaan, kohdistetaan jne. Täydellinen luettelo tapahtumista on tätä. SCREEN_WINDOW_MANAGER_CONTEXT avulla käynnistysnäyttö voi kuunnella muiden sovellusten luomia ikkunoiden luonti- ja tarkennustapahtumia.

Kaksi tärkeää käynnistysnäytön tapahtumaa ovat SCREEN_EVENT_CREATE ja SCREEN_EVENT_PROPERTY-tapahtumat. SCREEN_EVENT_CREATE-tapahtumaa käytetään kuuntelemaan milloin pääsovellus (joka näyttäisi laitteen pääkäyttöliittymän) luo ikkunan ja näin ollen milloin käynnistysnäytön pitäisi aloittaa sammutusjaksonsa. Lisää ominaisuuksia voidaan kysellä tästä tapahtumasta käyttämällä funktiosarjaa screen_get_event_property_X(). X:llä tarkoitetaan kysytyn ominaisuuden tyyppiä. Jos pääsovellus määrittää ryhmän SCREEN_PROPERTY_GROUP, sitä voidaan tiedustella, jotta saadaan selville, käynnistikö tietty sovellus tapahtuman.

Tapahtumaa SCREEN_EVENT_PROPERTY voidaan käyttää yhdessä ominaisuuden SCREEN_PROPERTY_FOCUS kanssa, joka asetetaan, kun eri ikkuna keskittyy (lue lisätietoja tätä). Tapahtumajärjestelmän käyttäminen X sekuntia pitkän animaation sijaan (jossa X on laitteen käynnistysprosessin pituus) tarkoittaa, että animaatio voidaan silmukalla, jos pääsovellusta ei ole vielä käynnistetty. Tämä mahdollistaa paljon paremman siirrettävyyden eri laitteistojen välillä, koska ajoitukset ovat todennäköisesti erilaiset.

Ajoituksen osalta, koska tapahtumia ei voida kuunnella jatkuvasti (jos ne olisivat, se lukitsisi pääsäikeen, jolloin animaatio ei näytä myöhempiä kehyksiä), on käytettävä erilaista taktiikkaa. Jos käynnistysnäyttö on pysäytyskehys, tämä ei ole ongelma. Animaation pituudesta riippuen näitä tapahtumia voidaan kuitenkin joutua kuuntelemaan noin neljänneskehysten välein. Toisin sanoen joka kerta, kun neljännes animaation kehyksistä ladataan, ennen kuin seuraava neljännes alkaa latautua, tarkista mahdolliset tapahtumat.

Yhteenveto

Lopuksi, tämä blogi selittää, miksi käynnistysnäytöt ovat tärkeitä, antaa tietoja lääketieteellisten laitteiden käynnistysnäytön määrittämisestä QNX:lle ja tarjoaa varoituksia ja suunnitteluehdotuksia, jotka voivat olla hyödyllisiä. Jokaisen laitteen käynnistysnäytöllä on kuitenkin erilaiset vaatimukset. Tämän seurauksena tämä blogi tarjoaa ehdotuksia vaiheittaisen prosessin sijaan. Näiden ehdotusten ja yksityiskohtien avulla kehittäjät voivat kuitenkin määrittää lääketieteellisen laitteen QNX-käynnistysnäytön, joka vastaa heidän erityistarpeitaan.

Dendy Addison on a Software Engineer Starfish Medicalissa, joka auttaa asiakkaita kehittämään turvallisia, tehokkaita ja tehokkaita lääketieteellisten laitteiden ohjelmistoja. Hänellä on intohimo muuttaa ihmisten elämää kehittämillään ohjelmistoilla. Dendy nauttii työskentelystä lääkinnällisten laitteiden kaikilla osa-alueilla laiteohjelmistosta käyttöliittymään.

 

Jaa tämä…

spot_img

Uusin älykkyys

spot_img