Speksit:Vaatimusmäärittely

Tämä vaatimusmäärittelydokumentti elää vielä. Sivua päivitetään, jos määrittelyihin tulee muutoksia.

Noudatettava formaatti:
 * Varmaksi päätetyt asiat kirjoitetaan lihavoituina.
 * Jollain tapaa lopulliseksi miellettävät tai päätetyt asiat kirjoitetaan normaalilla leipätekstillä.
 * Ehdotukset kirjoitetaan kursiivilla.

Idea
Tavoitteena on suunnitella ja toteuttaa paikannusjärjestelmä, jonka ensisijainen käyttöskenaario on reaaliaikaisen paikkatiedon välitys päätelaitteelle. Toimiessaan valmis paikannusjärjestelmä toteuttaa esimerkiksi metsästyskäyttöön suunniteltujen kaupallisten tuotteiden toiminnallisuuden vähintään yhtä hyvin, mutta kymmenesosahinnalla. Laitteistolla voi olla myös muita käyttökohteita, jonka takia HW-osan suunnittelussa kiinnitetään erityistä huomiota laajennettavuuteen ja lisäominaisuuksien lisäysmahdollisuuteen.

Ominaisuudet
Paikannusjärjestelmä koostuu HW- ja SW-osista. HW-osa suunnitellaan mahdollisimman pienikokoiseksi ja kevyksi. SW-osalla tarkoitetaan mm. päätelaiteohjelmistoa, josta voidaan toteuttaa eri versioita eri laitteille (Android, iOS, PC jne.) tai vaihtoehtoisesti yksi kaikilla järjestelmillä toimiva ohjelmisto (web-pohjainen). SW-osaan kuuluu myös palvelinohjelmisto, joka voi olla joko keskitetty tai paikallinen (käyttäjän oma palvelin) sekä etälaitteen mikrokontrollerin firmware, joka hoitaa mm. kommunikointia palvelimen kanssa.

HW

 * GSM/GPRS/GPS-moduuli
 * GSM-antenni
 * GPS-antenni
 * SIM-korttipaikka
 * Mikrokontrolleri
 * Kompassi- ja kiihtyvyysanturi
 * Muistikorttipaikka loggerikäyttöä varten
 * LiPo- tai Li-ion-akku
 * Akun latausmahdollisuus tavallisella Micro-USB-laturilla
 * Eri kapasiteeteilla varustettujen akkujen saumaton vaihto (ei muutostarpeita rautaan eikä ohjelmistoon)
 * Mikrofonit haukkumisen tunnistukseen (ei ensimmäiseen protoon) ja äänipuheluun vastaamiseen
 * Merkkivalot (LED) laitteen eri toimintatilojen näyttämiseen
 * Power On (bootattu onnistuneesti)
 * GPS Fix OK
 * Akun lataus käynnissä / valmis
 * Akun varaus vähissä
 * Matkapuhelinverkon kuuluvuus
 * GPRS-yhteys palvelimeen OK
 * Sarjaportti (TTL-UART tai virtuaalinen USB:n kautta)
 * Sarjaportti ohjelmiston flashaamista ja debuggidatan tulostusta varten. Voidaan käyttää myös paikkatiedon tulostamiseen esim. tietokoneelle. Voi olla sama portti kuin yllä mainittu sarjaportti.
 * JTAG-portti ohjelmistokehitystä varten
 * I2C- ja SPI-väylien sekä IO-pinnien tuonti pienelle piikkirimalle (mahdollistaa lisäantureiden käytön)

SW
Softien nimeäminen muotoa [Prefix][Nimi], eli tyyliin
 * RuuviTrackerFirmware (Laitteen firmis)
 * RuuviTrackerAPI (APIn toteuttava palvelin-ohjelma)
 * RuuviTrackerWeb (Web-käyttöliittymä ylläpitoon ja normaalikäyttöön (kartta jne), kartassa tuki ainakin moderneille kosketusnäytöllisille mobiililaitteille (iOS, Android 2.2+))
 * RuuviTrackerAndroid (mahdollinen natiivi Android-käyttöliittymä)

Palvelinohjelmisto/API

 * Toteutetaan RESTful web API:na, paluudata kyselykohtaisesti valitussa strukturoidussa formaatissa esim. joko JSON tai XML sekä firmwarella helposti parsittavassa muodossa (täsmentäkää FW-miehet)
 * Kaikki käyttöliittymät (View) käyttävät samaa API:a (Model-Controller), eli mahdollinen toiminnallisuus ja rajapinnat ovat samat käyttöliittymän toteutustavasta riippumatta.
 * Ottaa sisälle paikannuslaitteiston GPRS:llä lähettämää sijaintitietoa, hoitaa kaikki tietokantayhteydet/autentikoinnit, tarjoaa dataa käyttöliittymille

Webkäyttöliittymä/Päätelaiteohjelmistot
(Ensimmäinen versio voisi olla Androidille tai ainoastaan web-pohjainen)
 * Käyttävät kaikki samaa RESTful rajapintaa kaikkiin toimintoihinsa. Ei ole erillistä "adminpuolta", sama api. On käyttöliittymästä kiinni mitä ominaisuuksia se toteuttaa.
 * Myöhemmin websocketit apiin mukaan, jolloin saadaan oikeaa reaaliaikaisuutta käyttöliittymiin
 * Karttanäyttö, jossa näkyy reaaliajassa ryhmään kuuluvien paikannulaitteiden sijainti (+ryhmään kuuluvat mobiilipäätelaitteet)
 * Karttamateriaali ilmaisista lähteistä (esim. Maanmittauslaitoksen 1.5.2012 ilmaiseen levitykseen julkistettavat kartat)
 * Web-käyttöliittymässä pohjakartan valinta käyttötarpeen mukaan (OpenStreetMap/Google/MML)
 * Haukkuilmaisin (esim. vilkkuva markkeri tai teksti HAU!)
 * Paikannuslaitteen matalan jännitetason hälytys

Paikannuslaitteen mikrokontrollerin firmware

 * Kommunikointi GSM/GPS-moduulin kanssa
 * Keskustelu palvelinohjelmiston kanssa
 * Paikka- ja anturitietojen luku ja välitys GPRS:n avulla palvelimelle
 * Muistikortille kirjoitus loggerikäytössä
 * Merkkiledien ajo
 * Akun jännitetason seuraaminen ja matalan varaustason hälytys
 * Suunniteltava alusta lähtien helposti laajennettavaksi (esim. lisäanturitietojen luku ja lähetys)