» »

NMEA checksum

NMEA checksum

boss-tech ::

Naredil sem metodov javi, ki vneseni string pregleda(XOR), in potem dobljeni rezultat spremenim v hex. Če primerjam z http://nmeachecksum.eqth.net/ dobim enak rezultat.

String c; 
        int checksum=0;        
 
	        	 for (int i = 0; i < command.length(); i++) {
	        			// if it is first value for the checksum
	    				if (i == 0)
	    				{	    			    				  					
	    					checksum = (byte)command.charAt(i);	
 
	    				}
	    				else
	    				{
	    					checksum = checksum ^ (byte)command.charAt(i);
 
	    				}
 
	        	 }


Če vnesem: GSC,011412000010789,M2(P3=500)

dobim:
checksum: 114
Integer.toHexString(checksum): 72

Sedaj pa je problem ker se rezultat ne ujema z rezultati v manualu. Dobil naj bi 35. Sem pa podrobno prebral navodila :


the checksum value is derived by the same method of NMEA standard. its calculated by XOR the 8 bits of each character before in the sentence excluding *.
The HEX value of the most significant and least significant 4 bits of the result are converted to 2 ASCII characters.


Mislim da je problem s temi 4 bolj in manj pomembnimi biti rezultata... kako naj jih dobim?
http://tovornik.info
  • spremenil: Primoz ()

fiction ::

Tale tvoj if (i == 0) je dokaj neoptimalen. Ponavadi noces, da se nekaj preverja vsak obhod zanke, ce
ves da to rabis samo prvic. Kot resitev bi lahko zanka tekla od 1 naprej tisto za 0 bi pa ze prej
naredil. Ampak tukaj se izkaze, da je se lazje. 0 XOR X je kar X. Torej checksum inicializiras na 0
(tako kot to ze imas), potem pa delas samo checksum ^= (byte)command.charAt(i) za vsak znak.

The HEX value of the most significant and least significant 4 bits of the result are converted to 2 ASCII characters.
To je tocno opis toHexString na enem bajtu (vecje vrednosti od 255 pa glede na xor bajtov itak ne mores dobiti). Ce gledas hexadecimalno recimo 0xfe so zgornji 4 biti 0xf, spodnji 4 biti pa 0xe. (0xfe = 254 = 11111110)
Kar hoce standard je da zdaj zapises znaka 'f' in 'e'. Vse skupaj je tako napisano samo zaradi jasnosti, da ne bi kdo za checksum dodajal kaksnih cudnih znakov ali kaj podobnega.

Mislim da je problem s temi 4 bolj in manj pomembnimi biti rezultata... kako naj jih dobim?
Z uporabo logicnega IN nad biti in malo shiftanja. Ce hoces zgornje 4 bite je nekaj ala (x & 0xf0) >> 4, za spodnje pa (x & 0x0f), ampak tega po vsej verjetnosti ne rabis.

Sedaj pa je problem ker se rezultat ne ujema z rezultati v manualu. Dobil naj bi 35.
Ce je tisti prvi G od GSC prevec (in ga v manualu niso racunali) ali pa ce je na koncu se en G pa si ga ti spustil bi dobil 35. Sicer pa ni nujno, da je tisto prav. Ce z locenim kalkulatorjem dobis isto vrednost, potem je tisto kar izracunas najbrz prav.

Zgodovina sprememb…

  • spremenil: fiction ()

boss-tech ::

Hvala ti za izčrpno analizo. Moja metoda je bila vredu napisana, prav tako ok dela kalkulator. V priročniku so naredili napako in pri vnosu niso dali zraven G pre GSS in tako sem poskusil vse primere in je potem delalo ok. Hvala
http://tovornik.info

Zgodovina sprememb…

boss-tech ::

Zanima me če se je kdo ubadal s pošiljanjem podatkov na neko napravo preko serijskega oz USB porta... imam metodo:

     public void run ()
        {
        	System.out.println("vnesi: ");
                          
        	  try {                 
                  serialPort.notifyOnOutputEmpty(true);

               } catch (Exception e) {
                  System.out.println("Error setting event notification");
                  System.out.println(e.toString());                 
               }
                               
               System.out.println("pisem \""+messageString+"\" na "+serialPort.getName());
               try {
         
                  out.write(messageString.getBytes());
                  out.close();
                
               } catch (IOException e) {}    
        }


Zdaj pa ne vem zakaj ne dobim nič nazaj? A mi še kaj manjka? Pošiljam pa komande, ki jih naprava dobi in vrne nek rezultat...
http://tovornik.info

Zgodovina sprememb…

  • spremenil: Senitel ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java] Prevajanje in šumniki v ubuntu

Oddelek: Programiranje
202330 (1947) mmaestro
»

[JAVA] String problem!

Oddelek: Programiranje
151573 (1270) Sergio
»

Java-Izdelek-Nujno

Oddelek: Programiranje
71452 (1224) iggy
»

osnove v Javi - zvezdice

Oddelek: Programiranje
403399 (2621) Tutankhamun
»

[NALOGA][Java] Branje vsebine datoteke vzvratno

Oddelek: Programiranje
71535 (1477) SkIDiver

Več podobnih tem