17.11.2012 Views

Lokasjons- og kontekstbaserte tjenester - Department of Computer ...

Lokasjons- og kontekstbaserte tjenester - Department of Computer ...

Lokasjons- og kontekstbaserte tjenester - Department of Computer ...

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!