Speksit:Firmwaren määrittely

Tänne tulee Firmwaren toiminnasta juttua. Tämä on alustava mielipide ja mitään ei ole päätetty. Korjatkaa jos olen väärässä. (Vuokko)

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.
 * Kieli vaihdetaan englanniksi.

Overview of development
Ruuvitracker software is layered so that any part of system can be changed. MCU, OS, GSM module and so on.

Coding style is 4 spaces indent and K&R. Same as here: Chibios coding style Except indentation.

Development is done by cloning and branching from master tree. As a Quality assurance no-one commits own code.

Chibios is licensed as GPL v3 with exceptions and ruuvitracker software's license is TBD

Multitasking
Luodaan kaksi säiettä valittavaan ympäristöön. Varsinaisesti tätä ei vaadita, mutta helpottaa elämää, kun kaikki data on GSM moduulin tarpeisto on toisessa taskissa. Main task ja Comm task. Comm task huolehtii GSM yhteyden luomisesta ja viestinnästä verkkoon. Comm task on ajossa kun GSM on verkossa tai GPS on käytössä. Eli hoitaa viestinnän GPS/GSM-moduulin kanssa.

Comm task
Säie palaa aina odottamaan viestiä Main taskilta tai keskeytyspalvelulta (UART/ajastin.) Tällöin säikeen tila on keskeytetty ja mikrokontrolleri voi olla virransäästötilassa. Viesti käsitellään ja kun asimerkiksi NMEA viesti laitteelta on luettu valmiiksi laitetaan se puskuriin. Tämän jälkeen nostetaan lippu, että viesti valmis. Mikäli tilakone ei ole kummassakaan tracking tai connecting tilassa, NMEA viesti unohdetaan. Pieni bufferi näille ehkä hyvä? Mikäli viesti tunnistetaan SMS viestiksi informoidaan Main taskia. Viesti voi myös olla komento lähettää tietoa GPS/GSM moduulille esimerkiksi laittaa GPS päivitys. Tällöin moduuli on kytkettävä päälle.

Tilatiedot
Tilatietoja tarvitaan viestien palveluun.
 * Moduuli päällä
 * GPS päällä
 * GSM verkossa
 * Verkko päällä
 * Paluutila

Viestit sisään

 * Aseta GPS päivitysväli
 * Luettu merkki sarjaportista
 * Moduulin tila? LEDien päivitystä varten
 * Nopeutemme?
 * Erilaiset ajastinilmoitukset.
 * Dumppaa tästä nettiin ja näin paljon.
 * Soita

Viestit ulos

 * Pyyntö onnistui/epäonnistui
 * Laitteen tila
 * NMEA viesti
 * SMS viesti
 * Puhelu

Tilakone
Hyvin suurpiirteinen tilakone. Lisäämällä tiloja ja miettimällä mitä tapahtuu ohjelmassa jokka tilassa, voidaan tilamuuttujat poistaa yms. Kuitenkin viestien käsittely tarkoittaa, että tilakonemalli ei toimi helposti täydellisesti. Ensin tähän sitten tuonne. Oho, käyttäjä haluaa valmiin veroilmoituksen ja tilani on keitä kahvia. Tästä puuttuu mm. tilanne, että päivitysväli on puoli tuntia joten turha silloin pitää yhteyttä yllä.
 * start
 * Sammutetaan moduuli ja siirrytään module off tilaan.
 * Module off
 * Ajastimesta herätään. Kytketään moduuliin virta ja siirrytään connecting GSM tilaan
 * Viestistä herätään. Kytketään moduuliin virta ja kytketään GSM päälle. Paluutila laitetaan joko Module off tai Connect network Siirrytään tilaan connecting GSM.
 * Viestistä herätään. Kytketään virta virta ja GPS päälle. Siirrytään off-line trackingiin.
 * Connecting GSM
 * Poistutaan connected GSM tilaan kun yhteys on päällä asetetaan myös tilatiedot.
 * Ajastimella kysytään tilaa ihan oikeasti moduulilta ja informoidaan Main taskia ehkä? Vai pitäisikö palata takaisin module-offiin?
 * Connected GSM
 * Siirrytään suoraan connect network tilaan tai odotetaan ajastimelta lupaa säästää virtaa ja poistua valmiustilasta ja mennä paluutilaan. Tämä on lähinnä SMS-viestien odottamista.
 * Off-line tracking
 * smankaltainen tila kuin Module off. Käydään välillä GSM-verkossa odottamassa viestejä. GPS on kuitenkin päällä ja jokainen luettu ja parsittu NMEA heitetään viestinä Main taskille, joka saa sitten tunkea sitten johonkin puskuriin tai tiedostoon.
 * Connecting network
 * Datayhteys päälle ja On-line trackingiin. Miten aikakatkaisu? Jos tiputaan GSM verkosta connecting GSM tilaan paluutilaksi On-line tracking
 * On-line tracking
 * ajastimesta päivitys verkkoon. Luetut viestit haetaan Main taskilta ja jos kiihtyvyys/kompassin tiedot on yhdistetty dataan lähetetään verkkoon. Parsittu NMEA Main taskille.

Main task
Main taskin tarvitsisi osata jotain tämän kaltaista.
 * Lukea ja kirjoittaa SD korttia. Sen puuttuessa bufferoida EEPROMille.
 * Hallita kiihtyvyysanturia.
 * Ihmetellä kun ladataan akkua (se vois vaikka logittaa sitä tiedostoon SD kortille.)
 * Lisätä parsittuihin NMEA lauseisiin kiihtyvyys ja suunta.
 * Erilaiset triggeröinnit. nopeus nolla, nopeus ei nolla, kiihtyvyyttä tai ei kiihtyvyyttä.
 * Nukkua.