Bedž za beogradski Hackaday
Hakerski časopis i blog HACKADAY će 9. aprila održati svoju prvu hakersku konferenciju u Evropi, a čast da bude domaćin pripala je Beogradu. Po dobrom hakerskom običaju, ulaznica za konferenciju je interaktivni bedž, koji će biti hakovan na jednoj od radionica. Bacimo pogled na taj projekat…
Konferencija će biti održana u velikoj sali Doma Omladine, u kojoj ima mesta za oko 250 gostiju. Već su prodate gotovo sve ulaznice i prijavljen veliki broj govornika, pa će organizator imati opsežan posao selekcije tema i autora. Gosti su velikom većinom iz zapadnoevropskih zemalja i Sjedinjenih Država, a mnogi od njih su isplanirali boravak u Beogradu i po nedelju dana posle konferencije.
Poseban značaj konferenciji daju velika imena hakerske scene, prijavljeni kao govornici ili autori radionica. Tu su Majk Harison (Mike Harrison), Kris Gemel (Chris Gammell), Majk Stiš (Mike Szczys), kao i dve uticajne dame iz hakerske zajednice: Sofi Kravic (Sophie Kravitz) i Feniks Peri (Phoenix Perry). Pored takvih govornika, teško je ne osetiti uzbuđenje, ali i odgovornost da se pokažemo kao dobri domaćini. Kao jednom od domaćina, ali i autora tekstova i projekata bloga i štampanog omnibusa Hackaday, pripala mi je čast da projektujem bedž koji će služiti kao ulaznica za konferenciju i objekat hakovanja na jednoj od radionica.
Kako osmisliti bedž?
Nije lako pronaći dobar kompromis između brojnih zahteva za ovakav projekat. Da bi bio zadovoljen specifičan hakerski ukus, to mora da bude asketski koncipiran uređaj, bez ukrasa i luksuznih dodataka, što je dobro i za snižavanje troškova proizvodnje, jer se bedž daje kao poklon svakom posetiocu. Dimenzije treba da budu takve da može da se nosi na vrpci oko vrata, napajanje mora da bude baterijsko, a fleksibilnost hardverske koncepcije takva da pokriva različite funkcije u zavisnosti od softvera, jer se hakovanje u radionici svodi na izradu originalnog softvera od strane posetioca. Poželjno je, takođe, da ima neku atraktivnu funkciju koja se lako percipira (žargonski rečeno da „štipa za oči“), kako bi dopunio pozitivnu atmosferu konferencije.
Izbor je pao na monohromatsku LED matricu 8×16 dioda, napravljenu od dva bloka rezolucije 8×8. Moglo se ići i na višu rezoluciju i veći broj boja, ali bi onda rezultat bio sličan smartfonu koji već svako nosi u džepu, i koji, pošto smo već navikli da ga tretiramo kao standardnu kućnu ili salonku tehniku, ne deluje nimalo hakerski. Osim toga, sada ceo hakerski svet idolopoklonički obožava retro‑projekte, bez novih tehnologija, pa ovakav izbor treba opravdati i mainstream tendencijama.
Na bedžu postoji ukupno šest tastera, od kojih su četiri postavljena kao kursori, jedan je za Reset, a poslednji ima funkciju Uključeno‑Pauza‑Isključeno. Prvi prototip je sadržao tastere manjih dimenzija, a povrh svega je imao jedan taster manje, zbog čega primerak na slici izgleda nešto drugačije od finalne varijante prikazane na crtežu, a koja je još uvek u proizvodnji.
Bedž poseduje i infracrveni komunikacioni kanal, koji omogućava prenos podataka u okviru jedne prostorije. Hakerima će biti posebno zanimljivo to što je ovaj kanal povezan sa asinhronim serijskim portom, tako da će komunikacija biti veoma jednostavna za implementaciju. Pošto je noseća učestanost infracrvenog zraka 40 kHz, brzina prenosa podataka je svega 600 bauda (što na kraju rezultira sa 500 bita u sekundu), ali to ne bi trebalo da bude značajan nedostatak, jer se od mikrokontrolerskog uređaja ne očekuje da prenosi velike fajlove, nego kratke poruke i komande.
Softver
Bilo bi previše očekivati od svakog posetioca da ima i svoj programator za PIC mikrokontrolere, pa je u bedž ugrađen USB interfejs i inicijalni firmver – bootloader. Ovaj firmver ostaje stalno u jednom delu programske memorije, gde zauzima 4 kilobajta, a služi za to da program koji dobije preko USB porta upiše u programsku memoriju mikrokontrolera. Tako mikrokontroler programira samog sebe, čime se ostvaruje velika fleksibilnost sistema, a zadržavaju se sve prednosti koje pruža hardversko programiranje. Od posetioca se očekuje da ima svoj prenosni računar sa bilo kojim operativnim sistemom i jedan USB micro‑B kabl.
Još nije precizno definisano šta će sve pored bootloader‑a biti u startu upisano u programsku memoriju mikrokontrolera, ali je verovatno da će to biti stara dobra igra Tetris, kao i neki manji uslužni programi, recimo TV‑B‑Gone. Posebna poslastica biće pokretni tekst koji ostavlja mogućnost da svaki posetilac sa nekog desktop‑a, koji će se nalaziti negde u prostoru konferencije, upiše tekst koji želi (svoje ime ili neku drugu poruku), naravno preko infracrvenog serijskog porta, pa treba očekivati da će prostor izgledati vrlo živahno sa stotinama svetlećih pokretnih tekstova. Tu će svakako biti još jedan program koji će predstavljati zagonetku za posetioce – neka kriptografska „glavolomka“ ili zadatak za inverzni inženjering. Jedan od bedževa će biti istaknut negde u radionici i dozvoliće se svakom posetiocu da ga „hakuje“ preko infracrvenog porta, ne bi li isprovocirao pojavljivanje pobedničke poruke. Onoga ko to prvi uradi čeka nagrada, a isto važi i za najbolji originalni softver napisan tokom trajanja radionice.
Kada se aktivira bootloader i novi program se preko USB‑a upiše u programsku memoriju mikrokontrolera, svi prethodno upisani programi se brišu, ali bootloader ostaje, kako bi bio spreman za nove upise. Ovaj program zna kako da zaštiti samog sebe, pa će ignorisati sve delove novog programa koji zadiru u njegovu „teritoriju“, koja je na adreso 0x0000‑0x1000 (0x je standardni prefiks za heksadecimalni kod).
Majk Stiš (Mike Szczys), glavni urednik Hackaday‑a, već je napravio softverski emulator bedža i on će uskoro biti postavljen na sajt www.hackaday.com, tako da će budući posetioci moći da se upoznaju sa arhitekturom bedža i da isprobaju svoje ideje za hakersku radionicu. On je pripremio platformu sa bibliotekama u jeziku C, a ja sam za ljubitelje asemblera napisao kernel sa osnovnim funkcijama, koji podržava multipleks displeja, servis se debouncer‑om za tastere i podršku za taster Uključeno‑Pauza‑Isključeno. Tako će sve što se upiše u Frame Buffer (jedan deo memorije koji se sastoji od 16 bajtova RAM‑a) biti odmah vidljivo na displeju, a funkcija petog tastera automatski podržana. Postoji još jedan isti takav bafer, koji sadrži bitmapu koja se prikazuje u statusu pauze, što je zgodno za prikazivanje broja osvojenih poena u igri. Ceo kernel se izvršava u interrupt‑u tajmera, pa će tako i mikrokontroler „spavati“ u istom interupt‑u, a „redovan“ sklop programa, nezavisan od interrupt‑a, ostaje u celosti na raspolaganju programeru. U sleep modu potrošnja iznosi svega nekoliko mikroampera, čime se izbegava potreba za prekidačem napajanja.
To što će postojati dve osnovne grupe programa, u C‑u i asembleru, ne znači da njihova kombinacija nije moguća. Razvojno okruženje omogućava jednostavno linkovanje ovih programa u zajedničku celinu.
Šema veza
Mikrokontroler je Microchip‑ov 8‑bitni PIC18LF25K50, sa niskom potrošnjom struje i sa brojnim periferijskim dodacima, od kojih je ovde najvažniji USB port. Radni takt je 48 MHz, što znači da procesorska snaga iznosi 12 MIPS. Ovaj 28‑pinski mikrokontroler poseduje 32 kilobajta programske memorije (od kojih bootloader zauzima 4 KB) i dva kilobajta RAM‑a.
Pored mikrokontrolera, bedž sadrži još jedan čip (U2), koji radi kao 16‑bitni pomerački (shift) registar i regulator konstantne struje, pa je, umesto 16 otpornika koji regulišu struju za katode diodne matrice, potreban samo jedan spoljni otpornik (na šemi je to R9). Anode matrice se napajaju preko osam P‑gate MOSFET‑ova, i to je sve što čini podršku displeja. U šemi veza nema nikakvih trikova ni neregularnog korišćenja resursa, što ostavlja mogućnost hakerima da maksimalno „isprljaju“ sistem svojim trikovima. Ovo će oni dobro razumeti i umeti da cene, jer bi bilo rizično i komplikovano hakovati sistem koji već sadrži neregularne i nedokumentovane postupke u projektovanju.
Sklop za infracrvenu komunikaciju čini jedna infracrvena dioda (D1) koja emituje svetlost na 940 nm i selektivni infracrveni prijemnik (U3) koji primljenu informaciju filtrira na dva načina: spektralnom karakteristikom infracrvene fotodiode, koja ima vrh osetljivosti takođe na 940 nm, i demodulatorom koji prepoznaje noseću učestanost od 40 kHz. Obično se ovakvi primopredajni parovi koriste za PCM komunikaciju, ali je ovde direktno iskorišćen UART, kako bi se olakšala primopredaja gotovih paketa bajtova. UART, inače, nema mogućnost modulisanja predajnog signala, zbog čega je ovde upotrebljen interni periferijski OC (Output Compare) registar mikrokontrolera. On je programiran tako da na nožici 12 (CCP2) neprekidno emituje noseću učestanost 40 kHz, što preko diode D3 moduliše serijski predajni signal. Tako se komunikacija odvija automatski i pod punom kontrolom hardvera, pa programu ostaje samo da upiše predajni bajt u registar TXREG mikrokontrolera, ili da primljeni bajt pročita iz registra RXREG.
Za razliku od mikrokontrolera U1, kola U2 i U3 nemaju mogućnost prelaska u sleep režim, pa se zato napajaju preko MOSFET‑a T9, koji je pod kontrolom programa. Tak će. pre nego što „zaspi“, mikrokontroler najpre „pogasiti“ sve MOSFET‑ove koji napajaju anode matrice displeja, spustiti sve svoje izlazne portove na nizak logički nivo, isključiti T9 i preći u sleep mode. Potrošnja celog bedža u ovom modu je tako niska, da mu omogućava više godina „spavanja“ bez značajnog trošenja baterije.
Kritike hakerske zajednice
Lako je praviti projekte za svoje potrebe ili komercijalne projekte čija tehnička dokumentacija nije dostupna drugim hakerima. Ali, probajte samo da napravite neki javni projekat, pa ćete biti pod takvom paljbom kritičara da vam neće biti mira dok ne polomite koplja sa svima koji „to znaju bolje“. Ovo je još izrazitije ako je u pitanju relativno jednostavan projekat koji svako može da razume bez puno napora, pa će se odmah osetiti pozvanim da začini čorbu svojim primedbama.
Ni čitaoci Hackaday‑a, naravno, nisu izuzetak, pa sam bio „na tapetu“ za horsku kritiku. Neke primedbe sam usvojio i zahvalio se predlagačima, ali sam od mnogih morao da se branim kako znam. Zanimljivo je sa koliko upornosti i tvrdoglavosti se ljudi vežu za svoje ideje i procene – ovo ne zameram samo mojim oponentima, nego i sebi. Mnoge odluke koje se donose prilikom osmišljavanja projekta zasnivaju se na prvom utisku, slobodnoj proceni i subjektivnim preferencijalima. To je prokletstvo koga se nikada nećemo osloboditi, ali je u isto vreme i prednost, jer tako svaki projekat nosi lični pečat svog autora. Treba, ipak, reći da su ovakvi verbalni okršaji dobri, pod uslovom da nisu destruktivni nego konstruktivni, jer svako iz ovakve diskusije izlazi pametniji nego što je bio.
Bilo kako bilo, sada je projekat kod proizvođača, negde u Kini, i treba se nadati da će stići na vreme da ulepša ovu konferenciju i da omogući hakerima da pokažu šta umeju. Svako ko je zainteresovan da prisustvuje i da upozna naše goste, od kojih su neki zaista sjajni svetski hakeri, treba da požuri i da obezbedi sebi ulaznice. Sajt preko koga je moguće rezervisati karte je na adresi www.eventbrite.com/e/hackaday‑belgrade‑tickets‑21409115240, a moguće ih je kupiti i preko Bilet servisa. Nažalost, kasno je za cenu u predprodaji, sa popustom od 30%, koja je važila do 21. februara.
Događaj traje samo jedan dan, 9. aprila od 10 pre podne do 2 sata posle ponoći. U planu su razne radionice, kao i koncert za posetioce. Mnogi posetioci iz inostranstva su rezervisali avionske karte za nekoliko dana boravka u Beogradu, dobrim delom zato što žele da posete i Resonate Festival, koji se održava od 12. do 16. aprila u Beogradu. Naša gošća Feniks Peri (Phoenix Perry), koju smo već naveli kao posetioca Hackaday Konferencije, održaće svoju radionicu i na ovom festivalu.