OpenBCM V1.07b12 (Linux)

Packet Radio Mailbox

DB0FHN

[JN59NK Nuernberg]

 Login: GUEST





  
G0FTD  > GPS      12.09.04 02:02l 161 Lines 4680 Bytes #999 (0) @ WW
BID : 216870G0FTD
Read: GUEST
Subj: M1BYT source code Mavin GPS
Path: DB0FHN<DB0FOR<DB0SIF<DB0EA<DB0RES<ON0AR<IK1ZNW<GB7CRV<GB7CIP<GB7SXE
Sent: 040911/2138Z @:GB7SXE.#38.GBR.EU #:4772 [Hastings] FBB7.00i $:216870G0FTD
From: G0FTD@GB7SXE.#38.GBR.EU
To  : GPS@WW


1 CLS : COL = 16: DIM A(100)
ON ERROR GOTO 990
REM The following work around, to enable use of 8 bit even parity
REM in BASIC, by Roger G4IDE.....
REM *** Adjust "2" on next line as necessary, to use com 1 or 2  ***
c$ = "2"
o% = 2 * (VAL(c$) - 1)
DEF SEG = 0
p% = PEEK(&H400 + o%) + 256 * PEEK(&H400 + o% + 1)
DEF SEG
OPEN "COM" + c$ + ":9600,N,8,1,DS,CS" FOR RANDOM AS #1
IF (p% >= &H2E0 AND p% <= &H2F8) OR (p% >= &H3E0 AND p% <= &H3F8) THEN
    OUT p% + 3, &H1B
END IF

10 A(1) = ASC(INPUT$(1, #1)):
IF A(1) = &HCA AND OLD = &HD THEN GOSUB 100
OLD = A(1)
IF INKEY$ <> "" THEN 999
GOTO 10

100 FOR I = 2 TO 45
101 A(I) = ASC(INPUT$(1, #1))
NEXT I

REM GOTO 300
LOCATE 1, 1
IF A(30) / 2 = INT(A(30) / 2) THEN A$ = CHR$(232) ELSE A$ = " "
PRINT TAB(25); A$; "  M1BYT's $20 GPS DECODER  "; A$

PRINT TAB(28); "_______________________"
PRINT "                                                          "


IF A(3) = 0 THEN F$ = "0  "
IF A(3) = 1 THEN F$ = "1  "
IF A(3) = 2 THEN F$ = "2  "
IF A(3) = 3 THEN F$ = "2D "
IF A(3) = 4 THEN F$ = "3D "
IF A(3) = 19 THEN F$ = "2D*"
IF A(3) = 20 THEN F$ = "3D*"

PRINT "Total GPS Sat's in operation "; A(33); "      Type of sat fix- "; F$
LAT = (A(7) / 256 + A(6) + 256 * A(5) + 65536 * A(4)) / 3600
LAT1 = FIX(LAT): LAT2 = ((LAT - LAT1) / 100) * 60
head = (A(17) + (A(16) * 256)) / 100
PRINT "Heading deg "; USING "###.##"; head;
PRINT TAB(22); "HDOP metres "; USING "##.#"; A(31) / 5;
PRINT TAB(40); "Error Elipse 1 metres "; USING "###"; A(14) * 2
spd = (A(20) + (A(19) * 256)) / 100
mph = spd / 1.6093
PRINT "Speed Mph   "; USING "###.##"; mph;
PRINT TAB(22); "VDOP metres "; USING "##.#"; A(32) / 5;
PRINT TAB(40); "Error Elipse 2 metres "; USING "###"; A(15) * 2
PRINT "Speed Kph   "; USING "###.##"; spd;
LNG = -4660.337778# + (A(11) / 256 + A(10) + 256 * A(9) + 65536 * A(8)) /
3600
LNG1 = FIX(LNG): LNG2 = ((LNG - LNG1) / 100) * 60
IF LNG2 < 0 THEN LNG2 = (LNG2 - LNG2) - LNG2
IF LAT2 < 0 THEN LAT2 = (LAT2 - LAT2) - LAT2
alt = ((A(12) * 256) + A(13)) / 2
IF A(12) > &HF0 THEN alt = 32768 - alt

PRINT TAB(22); "Altitude ="; USING "####.#"; alt;
PRINT " metres ASL"
PRINT
PRINT TAB(0); "Lat  = "; USING "###.######"; LAT;
PRINT TAB(22); "Deg.min."; USING "###"; LAT1; : PRINT "."; USING
"##.######"; LAT2 * 100;
PRINT TAB(50); "Date: "; HEX$(A(27)); "/"; HEX$(A(26)); "/"; HEX$(A(25))
PRINT TAB(0); "Lng  = "; USING "###.######"; LNG;
PRINT TAB(22); "Deg.min."; USING "###"; LNG1; : PRINT "."; USING
"##.######"; LNG2 * 100;

PRINT TAB(50); "Time: "; HEX$(A(28)); ":"; HEX$(A(29)); ":"; HEX$(A(30)); "
UTC  "


REM decode which sat's being watched..
LOCATE 13, 1
PRINT TAB(8); "GPS channel, sat watched, condition, individual signal level"
PRINT "   1         2         3         4         5         6         7     
   8"
sat = 32: y = 1
FOR byte = 34 TO 37
FOR bin = 7 TO 0 STEP -1
IF (A(byte) AND 2 ^ bin) > 0 THEN IF sat > 0 THEN LOCATE 15, y + 2: PRINT
sat; : y = y + 10
sat = sat - 1
NEXT bin
NEXT byte
PRINT

REM Now pull out the sat condition, then signal Rx level...
FOR byte = 38 TO 41
bin = ((A(byte)) AND 12): GOSUB 200
bin = (((INT(A(byte))) / 16) AND 12): GOSUB 200
NEXT byte

avsig = 0: FOR byte = 38 TO 41
bin = ((A(byte)) AND 3): GOSUB 250
bin = (((INT(A(byte))) / 3) AND 3): GOSUB 250
NEXT byte


GOTO 280

200
IF bin = 12 THEN PRINT "dec/fix   ";
IF bin = 8 THEN PRINT "  dec     ";
IF bin = 4 THEN PRINT " track    ";
IF bin = 0 THEN PRINT "*search*  ";
RETURN

250
IF bin = 3 THEN PRINT "  "; CHR$(254); CHR$(254); CHR$(254); "     ";
IF bin = 2 THEN PRINT "   "; CHR$(254); CHR$(254); "     ";
IF bin = 1 THEN PRINT "   "; CHR$(254); "      ";
IF bin = 0 THEN PRINT "  NIL     ";
avsig = avsig + bin
RETURN

280 PRINT "Overall Signal Level} "; : FOR l = 1 TO avsig: PRINT CHR$(254); :
NEXT l
FOR l = avsig TO 50: PRINT " "; : NEXT l: PRINT "{"

300 LOCATE 20, 1: PRINT TAB(30); "GPS Raw HEX data"
PRINT TAB(5 * 3); "05"; TAB(10 * 3); "10"; TAB(15 * 3); "15";
PRINT TAB(20 * 3); "20"; TAB(25 * 3); "25"

FOR n = 1 TO 25
PRINT TAB(n * 3);
IF A(n) < 16 THEN PRINT "0";
PRINT HEX$(A(n));
NEXT n
PRINT

FOR n = 1 TO 19
PRINT TAB(n * 3);
IF A(n + 25) < 16 THEN PRINT "0";
PRINT HEX$(A(n + 25));
NEXT n
PRINT

RETURN
990 CLOSE #1: GOTO 1
999 END

                          ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
                          ³     73 - Andy      ³     
                          ³       G0FTD        ³    
                          ³  Whitstable, Kent  ³    
                          ³22:09 on 2004-Sep-11³     
                          ³  ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ¿   ³    
                          ³  ³ Û           ³   ³    
                          ÀÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÙ     


Read previous mail | Read next mail


 11.08.2025 10:48:50lGo back Go up