|
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
| |