Lokasjons- og kontekstbaserte tjenester - Department of Computer ...
Lokasjons- og kontekstbaserte tjenester - Department of Computer ...
Lokasjons- og kontekstbaserte tjenester - Department of Computer ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
14 F FUNKSJONER<br />
F Funksjoner<br />
Under følger en teknisk beskrivelse av de viktigste funksjonene i Fumble:<br />
F.1 Viktige funksjoner i lokasjonsdel<br />
Prototypen er utviklet etter den generelle trelags strukturen som best˚ar av lagene:<br />
Presentasjons-lag, l<strong>og</strong>ikk-lag <strong>og</strong> database-lag. Dette er gjort for enkelt ˚a kunne<br />
bytte ut databasen med hvilken som helst JET kompatibel database hvis ønskelig<br />
<strong>og</strong> for ˚a skille koden som oppdaterer brukergrensesnittet fra beregningene som blir<br />
gjort kontinuerlig. L<strong>og</strong>ikklaget er det laget der alle beregninger utføres, <strong>og</strong> her er<br />
det tre funksjoner som er viktige: AddLocation, ReInforceLocation <strong>og</strong> Inference.<br />
Et annet valg som ble gjort er ˚a dele inn pr<strong>og</strong>rammet i tr˚ader (threads). Grunnen<br />
er at inference algoritmen er avhengig av ˚a kjøre kontinuerlig. Uten tr˚ader ville<br />
dette ha “l˚ast” brukergrensesnittet da algoritmen ville lagt beslag p˚a prosessoren.<br />
Det viste seg at bruken av tr˚ader førte til et responsivt pr<strong>og</strong>ram, selv om det<br />
foreg˚ar til tider tunge beregninger i bakgrunnen.<br />
Public Sub AddLocation<br />
(ByVal Name As String, ByVal Room As String)<br />
Funksjonen tar inn argumentene “Name” <strong>og</strong> “Room”. Name er en beskrivende<br />
tekst for dette punktet, feks. “Oasen”, <strong>og</strong> Room er hvilket romnummer klienten<br />
befinner seg i, feks. “200”. For ˚a kunne legge inn en ny lokasjon henter funksjonen<br />
inn høyeste Fingerprint ID <strong>og</strong> legger til 1, <strong>og</strong> fyller inn fingerprint tabellen med<br />
Fingerprint ID, Name, <strong>og</strong> Room. Siste steg er ˚a fylle inn AP tabellen med den<br />
sample som p˚a dette tidspunkt ligger klar, da StartSampling() har blitt kjørt som<br />
en egen tr˚ad imellomtiden. Tabellen AP har kolonnene MAC, Signal, Noise, SNR,<br />
Fingerprint ID <strong>og</strong> Sample ID. MAC, Signal <strong>og</strong> Noise kommer fra StartSampling()<br />
som er en funksjon som leser signalet fra databasen som oppdateres kontinuerlig.<br />
SNR (Signal to Noise ratio) er beregnet fra Signal <strong>og</strong> Noise, <strong>og</strong> det er denne<br />
verdien som brukes i inference algoritmen. 40 Det brukes samme Fingerprint ID<br />
som for Fingerprint tabellen <strong>og</strong> Sample ID er alltid 1 da dette vil være den første<br />
sample’en for gjeldene lokasjon.<br />
Public Sub ReInforceLocation<br />
(ByVal ID As String)<br />
Denne funksjonen er svært lik AddLocation, med unntak av to deler. Funksjonen<br />
oppdaterer kun AP tabellen med nye samples, <strong>og</strong> den finner høyeste Sample ID<br />
for gjeldene Fingerprint <strong>og</strong> legger til 1. P˚a denne m˚aten sikrer pr<strong>og</strong>rammet at det<br />
kan eksistere flere samples for et fingerprint.<br />
Public Function Inference() As Integer() Dette er funksjonen som gjør prototypen<br />
i stand til ˚a lokalisere seg selv. Den kjøres, p˚a samme m˚ate som Start-<br />
Sampling(), i en egen tr˚ad <strong>og</strong> kan derfor sl˚as av eller p˚a hvis brukeren ønsker<br />
40 I gjeldene implementasjon er det RSS som benyttes for inference