vi er her !!!

02120

DifferentielGPS
home

GPSNet

Modtagelse af data fra det internetbaserede GPSNet sker med GPSNet klassen. Til denne klasse hører en indstillingsklasse GPSNetSettings, samt en GUI til at ændre indstillingerne GPSNetSettingsGUI.

GPSNet.java

For at modtage data, skal en forbindelse oprettes med en Socket. Dette gøres ud fra en given host (adressen på maskinen) og port. Til at læse headeren, som man modtager først, har vi lavet en lille tilstandsmaskine med 6 tilstande. Den første tilstand, 0, repræsenterer, at headeren læses. Herfra skifter vi til tilstand 1, når et "carrige return" modtages. Vi ser bort fra "new line". Når næste "carrige return" modtages skiftes der fra tilstand 1 til 2. Fra tilstand 2 skiftes tilbage til tilstand 1 medmindre "new line modtages", i hvilket tilfælde der skiftes til tilstand 3 og så videre. Maskinen er afbilledet på følgende figur.

Transitionsmaskine

Den første linje af headeren skal være "ICY 200 OK", hvilket vi undersøger. Derfor gemmer vi headeren, når tilstandsmaskinen er i tilstand 0, så vi kan se, at den rigtige header er modtaget. Vi ser ikke på hvilken fejlkode man får, hvis den ikke er "ICY 200 OK". Hvis vi skulle læse hele fejlkodelinjen, ville det kræve, at vi oversætter de modtagne bytes til ASCII tegn og gemmer dem i det variabelt array. Dette har vi vurderet er unødvendigt. Vi læser således kun bytene ind i et array og undersøger om de har de rigtige talværdier. Hvis flere end 11 tegn (10 for teksten plus 1 for linjeskifttegnet) modtages, kan det ikke være den rigtige header og vi gør ikke mere med headeren.

Når den korrekte header er modtaget, kommer RTCM korrektionerne. De læses med readLoop metoden fra InputDevice. Her konverteres de til GPSWords, hvorefter den samlede data gemmen i Èn enkel integer. Herved er det en indbygget datatype, som skal læses af værtsklassen. GPSWord klassen kan igen konvertere integerværdien til bytes uden at udføre endnu et paritetstjekket

GPSNetSettings

Indeholder indstillinger til GPSNet enheden. Følgende indstillinger gemmes for hver enhed:

  • host - adressen på den computer, der udsender korrektionerne
  • port - den port man forbinder igennem (eks 9000)
  • gpsnet station - navnet på den station der modtages fra, eksempelvis TaarnbyDPGS
  • brugernavn
  • kodeord
  • enhedsnavn - det brugervalgte enhedsnavn, som bruges til at identificere enheden i databasen.
Da klassen kun er en opbevarelses klasse, er alle variable på nær kodeordet offentligt tilgængelige. Kodeordet og brugernavnet skal samles i én streng konverteret til base64 format. Derfor har vi en metode setPassword, som sætter kodeordet for enheden og konverterer det til base64 sammen med brugernavnet.
Vi har også lavet metoden saveSettings, som gemmer indstillingerne i en Properties klasse og den statiske metode loadSettings som henter indstillinger fra en Properties klasse. Af sikkerhedshensyn gemmes kodeordet ikke. I nuværende version understøtter kun, at man gemmer én standard indstilling til GPSNet. Så for nemheds skyld har vi lavet constructor metode, som laver en ny GPSNetSettings med samme indstillinger som en anden, der modtages som argument. Den vigtigste grund til, at vi har valgt at have en standardinstilling er, at indstillingerne kræves, når man skal hente en stationstabel, som beskrevet nedenfor.

Stationstabel

En anden ting, som vi har bygget ind i GPSNet er muligheden for at finde de stationer, som serveren udbyder. En liste med alle tilgængelige stationer fås med metoden getStations.
Når man ikke angiver noget kilde i logonet, vil man modtage en stationstabel. Vi har ikke set en specifikation af hvordan tabellen, man henter, er opbygget, men har gættet os frem. Et eksempel på hvordan en stationstabel ser ud er vedlagt i BILAG A. I lighed med når der modtages data starter tabellen med en header, som sluttes med dobbelt linjeskift. Den første linje af headeren skal være "SOURCETABLE 200 OK". Efter headeren kommer der en række linjer med forskelligt indhold. En linje kan se således ud:
STR;TaarnbyDGPS;TaarnbyDGPS;RTCM 2.3;1(1), 23(11), 24(11);0;GPS;GPSnet.dk;DNK;55.62;12.65;0;0;GPSNet;none;B;Y;1500;
Denne linje angiver stationen TaarnbyDGPS to gange. Indholdet er adskilt af semikolon. Generelt start alle linjer, som angiver stationsnavne, med "STR". Indtil der er en angivelse af hvilket RTCM version, der bruges, er der efter "STR" angivelse af stationer. Versionen angives med "RTCM 2.X".
Listen kommer til at indeholde alle de angivne stationer. Der undersøges ikke, om der er dobbelt angivelse af stationerne ligesom det er tilfældet i eksemplet ovenfor. Dette må sorteres andet steds.

GPSNetSettingsGUI.java

Dette er en GUI, hvor brugeren kan indtaste indstillingerne til en GPSNet forbindelse. Den består af en række labels med tilhørende editeringsfelt svarende til indstillingerne i GPSNetSettings samt en Ok- og Annullerknap. Når den bliver vist kan brugeren ændre indstillingerne.
Der er en enkelt editerbar ComboBox, som indeholder stationen, som skal modtages fra. Hvis brugeren har valgt det, bliver samtlige tilgængelige stationer hentet og lagt ind i denne. Dette gøres med addSource metoden, som kun indsætter stationer, der ikke allerede er i ComboBoxens liste. Vi bruger funktionen isInComboBox til at undersøge om den tilføjede station allerede er i listen. Metoden er omtalt under SERVER.JAVA.
Klassen holder en GPSNetSettings, som opdateres med brugerens valg. Hvis brugeren trykker Okknappen køres metoden updateSettings, som opdaterer indstillingerne til brugerens valg. Hvis der trykkes på Annuller køres metoden cancelSettings, som ændrer værdierne af editeringsfelter tilbage til deres oprindelige værdi.


home