xref: /dflybsd-src/contrib/file/magic/Magdir/map (revision 7b80531f545c7d3c51c1660130c71d01f6bccbe0)
182c5fa3eSPeter Avalos
282c5fa3eSPeter Avalos
382c5fa3eSPeter Avalos#------------------------------------------------------------------------------
4*614728caSSascha Wildner# $File: map,v 1.9 2021/04/26 15:56:00 christos Exp $
582c5fa3eSPeter Avalos# map:  file(1) magic for Map data
682c5fa3eSPeter Avalos#
782c5fa3eSPeter Avalos
86fca56fbSSascha Wildner# Garmin .FIT files https://pub.ks-and-ks.ne.jp/cycling/edge500_fit.shtml
982c5fa3eSPeter Avalos8	string	.FIT		FIT Map data
1082c5fa3eSPeter Avalos>15	byte	0
1182c5fa3eSPeter Avalos>>35	belong	x		\b, unit id %d
1282c5fa3eSPeter Avalos>>39	lelong	x		\b, serial %u
136fca56fbSSascha Wildner# https://pub.ks-and-ks.ne.jp/cycling/edge500_fit.shtml
14c30bd091SSascha Wildner# 20 years after unix epoch
15c30bd091SSascha Wildner# TZ=GMT date -d '1989-12-31 0:00' +%s
16c30bd091SSascha Wildner>>43	leldate+631065600	x	\b, %s
1782c5fa3eSPeter Avalos
1882c5fa3eSPeter Avalos>>47	leshort x		\b, manufacturer %d
1982c5fa3eSPeter Avalos>>47	leshort	1		\b (garmin)
2082c5fa3eSPeter Avalos>>49	leshort x		\b, product %d
2182c5fa3eSPeter Avalos>>53	byte	x		\b, type %d
2282c5fa3eSPeter Avalos>>53	byte	1		\b (Device)
2382c5fa3eSPeter Avalos>>53	byte	2		\b (Settings)
2482c5fa3eSPeter Avalos>>53	byte	3		\b (Sports/Cycling)
2582c5fa3eSPeter Avalos>>53	byte	4		\b (Activity)
2682c5fa3eSPeter Avalos>>53	byte	8		\b (Elevations)
2782c5fa3eSPeter Avalos>>53	byte	10		\b (Totals)
28c30bd091SSascha Wildner
296fca56fbSSascha Wildner# Summary: Garmin map
306fca56fbSSascha Wildner# From:	Joerg Jenderek
316fca56fbSSascha Wildner# URL: https://en.wikipedia.org/wiki/Garmin_.img
326fca56fbSSascha Wildner# Reference: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/IMG_File_Format
336fca56fbSSascha Wildner# sourceforge.net/projects/garmin-img/files/IMG%20File%20Format/1.0/imgformat-1.0.pdf
346fca56fbSSascha Wildner# GRR: similar to MBR boot sector handled by ./filesystems
356fca56fbSSascha Wildner0x1FE	leshort		=0xAA55
366fca56fbSSascha Wildner# look for valid map signature
376fca56fbSSascha Wildner>0x13	string		=IMG\0
386fca56fbSSascha Wildner>>0	use		garmin-map
396fca56fbSSascha Wildner0	name				garmin-map
406fca56fbSSascha Wildner>0	ubyte		x		Garmin
416fca56fbSSascha Wildner!:mime	application/x-garmin-map
426fca56fbSSascha Wildner# If non-zero, every byte of the entire .img file is to be XORed with this value
43*614728caSSascha Wildner>0	ubyte		!0		\b, %#x XORed
446fca56fbSSascha Wildner# goto block before FAT
456fca56fbSSascha Wildner>(0x40.b*512)	ubyte	x
466fca56fbSSascha Wildner# 1st fat name "DLLINFO TXT" only found for vpm
476fca56fbSSascha Wildner>>&512 		string	=DLLINFO\ TXT 	map (Voice Processing)
486fca56fbSSascha Wildner# there exist 2 other Garmin VPM formats; see ./audio
496fca56fbSSascha Wildner!:ext	vpm
506fca56fbSSascha Wildner# Deutsch__Yannick_D4481-00_0210.vpm
516fca56fbSSascha Wildner#>>>512	search/0x0116da60/s	RIFF	\b; with
526fca56fbSSascha Wildner# determine type voice type by ./riff
536fca56fbSSascha Wildner#>>>>&0	indirect	x	\b
546fca56fbSSascha Wildner>>&512 		string	!DLLINFO\ TXT 	map
556fca56fbSSascha Wildner!:ext	img
566fca56fbSSascha Wildner# 9 zeros
57*614728caSSascha Wildner>1 	ubelong		!0 		\b, zeroes %#x
586fca56fbSSascha Wildner# Map's version major
596fca56fbSSascha Wildner>8	ubyte		x		v%u
606fca56fbSSascha Wildner# Map's version minor
616fca56fbSSascha Wildner>9	ubyte		x		\b.%.2u
626fca56fbSSascha Wildner# Map description[20], 0x20 padded
636fca56fbSSascha Wildner>0x49	string		x		%.20s
646fca56fbSSascha Wildner# Map name, continued (0x20 padded, \0 terminated)
656fca56fbSSascha Wildner>0x65	string		>\ 		\b%.31s
666fca56fbSSascha Wildner# Update year (+1900 for val >= 0x63, +2000 for val <= 0x62)
676fca56fbSSascha Wildner>0xB	ubyte		x		\b, updated
686fca56fbSSascha Wildner>>0xB	ubyte		>0x62
696fca56fbSSascha Wildner>>>0xB	ubyte-100	x		20%.2u
706fca56fbSSascha Wildner>>0xB	ubyte		<0x63
716fca56fbSSascha Wildner>>>0xB	ubyte		x		20%.2u
726fca56fbSSascha Wildner# Update month (0-11)
736fca56fbSSascha Wildner>0xA	ubyte		x		\b-%.2u
746fca56fbSSascha Wildner# All zeroes
75*614728caSSascha Wildner>0xc 	uleshort	!0 		\b, zeroes %#x
766fca56fbSSascha Wildner# Mapsource flag, 1 - file created by Mapsource, 0 - Garmin map visible in Basecamp and Homeport
77*614728caSSascha Wildner#>0xE	ubyte		!0		\b, Mapsource flag %#x
786fca56fbSSascha Wildner>0xE	ubyte		1		\b, Mapsource
796fca56fbSSascha Wildner# Checksum, sum of all bytes modulo 256 should be 0
80*614728caSSascha Wildner#>0xF	ubyte		x		\b, Checksum %#x
816fca56fbSSascha Wildner# Signature: DSKIMG 0x00 or DSDIMG 0x00 for demo map
826fca56fbSSascha Wildner>0x10	string		!DSKIMG		\b, signature "%.7s"
836fca56fbSSascha Wildner>0x39	use		garmin-date
846fca56fbSSascha Wildner# Map file identifier like GARMIN\0
856fca56fbSSascha Wildner>0x41	string		!GARMIN		\b, id "%.7s"
866fca56fbSSascha Wildner# Block size exponent, E1; appears to always be 0x09; minimum block size 512 bytes
876fca56fbSSascha Wildner>0x61	ubyte		!0x09		\b, E1=%u
886fca56fbSSascha Wildner# Block size exponent, E2 ; file blocksize=2**(E1+E2)
896fca56fbSSascha Wildner>>0x62	ubyte		x		\b, E2=%u
906fca56fbSSascha Wildner>0x61	ubyte		=0x09		\b, blocksize
916fca56fbSSascha Wildner>>0x62	ubyte		0		512
926fca56fbSSascha Wildner>>0x62	ubyte		1		1024
936fca56fbSSascha Wildner>>0x62	ubyte		2		2048
946fca56fbSSascha Wildner>>0x62	ubyte		3		4096
956fca56fbSSascha Wildner>>0x62	ubyte		4		8192
966fca56fbSSascha Wildner>>0x62	ubyte		5		16384
976fca56fbSSascha Wildner>>0x62	default		x
986fca56fbSSascha Wildner>>>0x62	ubyte		x		E2=%u
996fca56fbSSascha Wildner# MBR signature
1006fca56fbSSascha Wildner>0x1FE	leshort		!0xAA55		\b, invalid MBR
1016fca56fbSSascha Wildner# 512 zeros
102*614728caSSascha Wildner>0x200 	uquad		!0		\b, zeroes %#llx
1036fca56fbSSascha Wildner# First sub-file offset (absolute); sometimes NO/UNKNOWN sub file!
104*614728caSSascha Wildner>0x40C	ulelong		>0		\b, at %#x
1056fca56fbSSascha Wildner# sub-file Header length
106*614728caSSascha Wildner#>>(0x40C.l)	uleshort	x	\b, header len %#x
1076fca56fbSSascha Wildner>>(0x40C.l)	uleshort	x	%u bytes
1086fca56fbSSascha Wildner# sub-file Type[10] like "GARMIN RGN" "GARMIN TRE", "GARMIN TYP", etc.
1096fca56fbSSascha Wildner>>(0x40C.l+2)	ubyte	>0x1F
1106fca56fbSSascha Wildner>>>(0x40C.l+2)	ubyte	<0xFF
1116fca56fbSSascha Wildner>>>>(0x40C.l+2)	string	x		"%.10s"
1126fca56fbSSascha Wildner# 0x00 for most maps, 0x80 for locked maps (City Nav, City Select, etc.)
113*614728caSSascha Wildner>>>>(0x40C.l+13)	ubyte	>0		\b, locked %#x
1146fca56fbSSascha Wildner# Block sequence numbers like 0000 0100 0200 ... FFFF
115*614728caSSascha Wildner# >0x420	ubequad		>0	\b, seq. %#16.16llx
1166fca56fbSSascha Wildner# >>0x428	ubequad		>0	\b%16.16llx
1176fca56fbSSascha Wildner# >>>0x430	ubequad	>0	\b%16.16llx
1186fca56fbSSascha Wildner# >>>>0x438	ubequad	>0	\b%16.16llx
1196fca56fbSSascha Wildner# >>>>>0x440	ubequad	>0	\b%16.16llx
1206fca56fbSSascha Wildner# >>>>>>0x448	ubequad	>0	\b%16.16llx
1216fca56fbSSascha Wildner# >>>>>>>0x450	ubequad	>0	\b%16.16llx
1226fca56fbSSascha Wildner# >>>>>>>>0x458	ubequad	>0	\b%16.16llx
1236fca56fbSSascha Wildner# >>>>>>>>>0x460	ubequad	>0	\b%16.16llx
1246fca56fbSSascha Wildner# >>>>>>>>>>0x468	ubequad	>0	\b%16.16llx
1256fca56fbSSascha Wildner# >>>>>>>>>>>0x470	ubequad	>0	\b%16.16llx
1266fca56fbSSascha Wildner# >>>>>>>>>>>>0x478	ubequad	>0	\b%16.16llx
1276fca56fbSSascha Wildner# >>>>>>>>>>>>>0x480	ubequad	>0	\b%16.16llx
1286fca56fbSSascha Wildner# >>>>>>>>>>>>>>0x488	ubequad	>0	\b%16.16llx
1296fca56fbSSascha Wildner# >>>>>>>>>>>>>>>0x490	ubequad	>0	\b%16.16llx
1306fca56fbSSascha Wildner# >>>>>>>>>>>>>>>>0x498	ubequad	>0	\b%16.16llx
1316fca56fbSSascha Wildner# >>>>>>>>>>>>>>>>>0x4A0	ubequad	>0	\b%16.16llx
1326fca56fbSSascha Wildner# >>>>>>>>>>>>>>>>>>0x4A8	ubequad	>0	\b%16.16llx
1336fca56fbSSascha Wildner# look for end of FAT
1346fca56fbSSascha Wildner#>>0x420	search/512/s	\xff\xff	FAT END
1356fca56fbSSascha Wildner# Physical block number of FAT header
1366fca56fbSSascha Wildner#>0x40	ubyte		x		\b, FAT at phy. block %u
1376fca56fbSSascha Wildner>0x40	ubyte		x
1386fca56fbSSascha Wildner>>(0x40.b*512)	ubyte	x
1396fca56fbSSascha Wildner# 1st FAT block
1406fca56fbSSascha Wildner>>>&511 	use	garmin-fat
1416fca56fbSSascha Wildner# 2nd FAT block
1426fca56fbSSascha Wildner>>>&1023 	use	garmin-fat
1436fca56fbSSascha Wildner# 3th FAT block
1446fca56fbSSascha Wildner>>>&1535 	use	garmin-fat
1456fca56fbSSascha Wildner# 4th FAT block
1466fca56fbSSascha Wildner>>>&2047 	use	garmin-fat
1476fca56fbSSascha Wildner# ... xth FAT block
1486fca56fbSSascha Wildner#
1496fca56fbSSascha Wildner# 314 zeros but not in vpm and also gmaptz.img
150*614728caSSascha Wildner>0x84 	uquad		!0		\b, at 0x84 %#llx
1516fca56fbSSascha Wildner# display FileAllocationTable block entry in garmin map
1526fca56fbSSascha Wildner0	name				garmin-fat
1536fca56fbSSascha Wildner>0	ubyte		x		\b;
1546fca56fbSSascha Wildner# sub file part; 0x0003 seems to be garbage
155*614728caSSascha Wildner>0x10	uleshort	!0		next %#4.4x
1566fca56fbSSascha Wildner>0x10	uleshort	=0
1576fca56fbSSascha Wildner# fat flag 0~dummy block 1~true sub file
1586fca56fbSSascha Wildner>>0	ubyte		!1		flag %u
1596fca56fbSSascha Wildner>>0	ubyte		=1
1606fca56fbSSascha Wildner# sub-file name like MAKEGMAP 12345678
1616fca56fbSSascha Wildner>>>0x1	string		x		%.8s
1626fca56fbSSascha Wildner# sub-file typ like RGN TRE MDR LBL
1636fca56fbSSascha Wildner>>>0x9	string		x		\b.%.3s
1646fca56fbSSascha Wildner# size of sub file
1656fca56fbSSascha Wildner>>>0xC	ulelong		x		\b, %u bytes
1666fca56fbSSascha Wildner# 32-bit block sequence numbers
167*614728caSSascha Wildner#>>>0x20	ubequad		x		\b, seq. %#16.16llx
1686fca56fbSSascha Wildner
1696fca56fbSSascha Wildner#	display date stored inside Garmin maps like yyyy-mm-dd h:mm:ss
1706fca56fbSSascha Wildner0	name				garmin-date
1716fca56fbSSascha Wildner# year like 2018
1726fca56fbSSascha Wildner>0 	uleshort	x 		\b, created %u
1736fca56fbSSascha Wildner# month (0-11)
1746fca56fbSSascha Wildner>2	ubyte		x		\b-%.2u
1756fca56fbSSascha Wildner# day (1-31)
1766fca56fbSSascha Wildner>3	ubyte		x		\b-%.2u
1776fca56fbSSascha Wildner# hour (0-23)
1786fca56fbSSascha Wildner>4	ubyte		x		%u
1796fca56fbSSascha Wildner# minute (0-59)
1806fca56fbSSascha Wildner>5	ubyte		x		\b:%.2u
1816fca56fbSSascha Wildner# second (0-59)
1826fca56fbSSascha Wildner>6	ubyte		x		\b:%.2u
1836fca56fbSSascha Wildner
1846fca56fbSSascha Wildner# Summary: Garmin Map subfiles
1856fca56fbSSascha Wildner# From:	Joerg Jenderek
1866fca56fbSSascha Wildner# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/IMG_File_Format
1876fca56fbSSascha Wildner# Garmin Common Header
1886fca56fbSSascha Wildner2	string	GARMIN\
1896fca56fbSSascha Wildner# skip ASCII text by checking for low header length
1906fca56fbSSascha Wildner>0	uleshort <0x1000	Garmin map,
1916fca56fbSSascha Wildner# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/GMP_Subfile_Format
1926fca56fbSSascha Wildner>>9	string	GMP				subtile
1936fca56fbSSascha Wildner!:mime			application/x-garmin-gpm
1946fca56fbSSascha Wildner!:ext			gmp
1956fca56fbSSascha Wildner# copyright message
1966fca56fbSSascha Wildner>>>(0.s)		string		x	%s
1976fca56fbSSascha Wildner>>>0x0E 		use		garmin-date
1986fca56fbSSascha Wildner# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/MDR_Subfile_Format
1996fca56fbSSascha Wildner# This contains the searchable address table used for finding routing destinations
2006fca56fbSSascha Wildner>>9	string	MDR				address table
2016fca56fbSSascha Wildner!:mime			application/x-garmin-mdr
2026fca56fbSSascha Wildner!:ext			mdr
2036fca56fbSSascha Wildner# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/NOD_Subfile_Format
2046fca56fbSSascha Wildner# http://svn.parabola.me.uk/display/trunk/doc/nod.txt
2056fca56fbSSascha Wildner# This contains the routing information
2066fca56fbSSascha Wildner>>9	string	NOD				routing
2076fca56fbSSascha Wildner!:mime			application/x-garmin-nod
2086fca56fbSSascha Wildner!:ext			nod
2096fca56fbSSascha Wildner>>>0x0E 		use		garmin-date
210*614728caSSascha Wildner#>>>0x15			ulelong		x	\b, at %#x
211*614728caSSascha Wildner#>>>0x19			ulelong		x	%#x bytes NOD1
212*614728caSSascha Wildner#>>>0x25			ulelong		x	\b, at %#x
213*614728caSSascha Wildner#>>>0x29			ulelong		x	%#x bytes NOD2
214*614728caSSascha Wildner#>>>0x31			ulelong		x	\b, at %#x
215*614728caSSascha Wildner#>>>0x35			ulelong		x	%#x bytes NOD3
2166fca56fbSSascha Wildner# URL: http://www.pinns.co.uk/osm/net.html
2176fca56fbSSascha Wildner# routable highways (length, direction, allowed speed,house address information)
2186fca56fbSSascha Wildner>>9	string	NET				highways
2196fca56fbSSascha Wildner!:mime			application/x-garmin-net
2206fca56fbSSascha Wildner!:ext			net
221*614728caSSascha Wildner#>>>0x15			ulelong		x	\b, at %#x
222*614728caSSascha Wildner#>>>0x19			ulelong		x	%#x bytes NET1
2236fca56fbSSascha Wildner#>>>0x22			ulelong		>0
224*614728caSSascha Wildner#>>>>0x1E		ulelong		x	\b, at %#x
225*614728caSSascha Wildner#>>>>0x22		ulelong		x	%#x bytes NET2
2266fca56fbSSascha Wildner#>>>0x2B			ulelong		>0
227*614728caSSascha Wildner#>>>>0x27		ulelong		x	\b, at %#x
228*614728caSSascha Wildner#>>>>0x2B		ulelong		x	%#x bytes NET3
2296fca56fbSSascha Wildner# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/LBL_Subfile_Format
2306fca56fbSSascha Wildner>>9	string	LBL				labels
2316fca56fbSSascha Wildner!:mime			application/x-garmin-lbl
2326fca56fbSSascha Wildner!:ext			lbl
2336fca56fbSSascha Wildner>>>(0.s)		string	x	%s
2346fca56fbSSascha Wildner# Label coding type 6h 9h and ah
235*614728caSSascha Wildner>>>0x1E			ubyte		x	\b, coding type %#x
236*614728caSSascha Wildner#>>>0x15			ulelong		x	\b, at %#x
237*614728caSSascha Wildner#>>>0x19			ulelong		x	%#x bytes LBL1
238*614728caSSascha Wildner#>>>0x1F			ulelong		x	\b, at %#x
239*614728caSSascha Wildner#>>>0x23			ulelong		x	%#x bytes LBL2
240*614728caSSascha Wildner#>>>0x2D			ulelong		x	\b, at %#x
241*614728caSSascha Wildner#>>>0x31			ulelong		x	%#x bytes LBL3
2426fca56fbSSascha Wildner# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/SRT_Subfile_Format
2436fca56fbSSascha Wildner# A lookup table of the chars in the map's codepage, and their collating sequence
2446fca56fbSSascha Wildner>>9	string	SRT				sort table
2456fca56fbSSascha Wildner!:mime			application/x-garmin-srt
2466fca56fbSSascha Wildner!:ext			srt
2476fca56fbSSascha Wildner>>>0x0E 		use		garmin-date
2486fca56fbSSascha Wildner# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/TRE_Subfile_Format
2496fca56fbSSascha Wildner>>9	string	TRE				tree
2506fca56fbSSascha Wildner!:mime			application/x-garmin-tre
2516fca56fbSSascha Wildner!:ext			tre
2526fca56fbSSascha Wildner# title like City Nav Europe NTU 2019.2 Basemap
2536fca56fbSSascha Wildner# or OSM Street map
2546fca56fbSSascha Wildner>>>(0.s)		string		x	%s
2556fca56fbSSascha Wildner# 2nd title like Copyright 1995-2018 by GARMIN Corporation.
2566fca56fbSSascha Wildner# or http://www.openstreetmap.org/
2576fca56fbSSascha Wildner>>>>&1			string		x	%s
2586fca56fbSSascha Wildner>>>0x0E 		use		garmin-date
259*614728caSSascha Wildner#>>>0x21			ulelong		x	\b, at %#x
260*614728caSSascha Wildner#>>>0x25			ulelong		x	%#x bytes TRE1
261*614728caSSascha Wildner#>>>0x29			ulelong		x	\b, at %#x
262*614728caSSascha Wildner#>>>0x2D			ulelong		x	%#x bytes TRE2
263*614728caSSascha Wildner#>>>0x31			ulelong		x	\b, at %#x
264*614728caSSascha Wildner#>>>0x35			ulelong		x	%#x bytes TRE3
2656fca56fbSSascha Wildner# Copyright record size
2666fca56fbSSascha Wildner#>>>0x39			uleshort	x	\b, copyright record size %u
2676fca56fbSSascha Wildner# Map ID
268*614728caSSascha Wildner>>>0x74			ulelong		x	\b, ID %#x
2696fca56fbSSascha Wildner# URL: https://www.gpspower.net/garmin-tutorials/353310-basecamp-installing-free-desktop-map.html
2706fca56fbSSascha Wildner# For road traffic information service (RDS/TMS/TMC). Commonly seen in City Navigator maps
2716fca56fbSSascha Wildner>>9	string	TRF				traffic,
2726fca56fbSSascha Wildner!:mime			application/x-garmin-trf
2736fca56fbSSascha Wildner!:ext			trf
2746fca56fbSSascha Wildner# city/region like Preitenegg
2756fca56fbSSascha Wildner>>>(0.s+1) 		string		x	1st %s
2766fca56fbSSascha Wildner# highway part like L606/L148
2776fca56fbSSascha Wildner>>>>&1			string		x	%s
2786fca56fbSSascha Wildner# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/Format
2796fca56fbSSascha Wildner# Reference: http://www.pinns.co.uk/osm/typformat.html
2806fca56fbSSascha Wildner# customize the appearance of objects. For GPS and MapSource/Qlandkarte better looking maps
2816fca56fbSSascha Wildner>>9	string	TYP				types
2826fca56fbSSascha Wildner!:mime			application/x-garmin-typ
2836fca56fbSSascha Wildner!:ext			typ
2846fca56fbSSascha Wildner>>>0x0E 		use		garmin-date
2856fca56fbSSascha Wildner# character set 1252 65001~UTF8
2866fca56fbSSascha Wildner>>>0x15			uleshort	x	\b, code page %u
2876fca56fbSSascha Wildner# POIs
288*614728caSSascha Wildner#>>>0x17			ulelong		x	\b, at %#x
289*614728caSSascha Wildner#>>>0x1B			ulelong		x	%#x bytes TYP1
2906fca56fbSSascha Wildner# extra pois
291*614728caSSascha Wildner#>>>0x5B			ulelong		x	\b, at %#x
292*614728caSSascha Wildner#>>>0x5F			ulelong		x	%#x bytes TYP8
2936fca56fbSSascha Wildner# URL: https://wiki.openstreetmap.org/wiki/OSM_Map_On_Garmin/RGN_Subfile_Format
2946fca56fbSSascha Wildner# http://www.pinns.co.uk/osm/RGN.html
2956fca56fbSSascha Wildner# region data used by the Garmin software
2966fca56fbSSascha Wildner>>9	string	RGN				region
2976fca56fbSSascha Wildner!:mime			application/x-garmin-rgn
2986fca56fbSSascha Wildner!:ext			rgn
2996fca56fbSSascha Wildner# POIs,Indexed POIs,Polylines or Polygons or first map level
300*614728caSSascha Wildner#>>>0x15			ulelong	       x	\b, at %#x
301*614728caSSascha Wildner#>>>0x19			ulelong	       x	%#x bytes RGN1
3026fca56fbSSascha Wildner# polygons with extended types
3036fca56fbSSascha Wildner#>>>0x21			ulelong	       >0
304*614728caSSascha Wildner#>>>>0x1D		ulelong	       x	\b, at %#x
305*614728caSSascha Wildner#>>>>0x21		ulelong	       x	%#x bytes RGN2
3066fca56fbSSascha Wildner# polylines with extended types
3076fca56fbSSascha Wildner#>>>0x3D			ulelong	       >0
308*614728caSSascha Wildner#>>>>0x39		ulelong	       x	\b, at %#x
309*614728caSSascha Wildner#>>>>0x3D		ulelong	       x	%#x bytes RGN3
3106fca56fbSSascha Wildner# extended POIs
3116fca56fbSSascha Wildner#>>>0x59			ulelong	       >0
312*614728caSSascha Wildner#>>>>0x55		ulelong	       x	\b, at %#x
313*614728caSSascha Wildner#>>>>0x59		ulelong	       x	%#x bytes RGN3
3146fca56fbSSascha Wildner#>>9	default		x		unknown map type
3156fca56fbSSascha Wildner# Header length; GMP:31h 35h 3Dh,MDR:11Eh 238h 2C4h 310h,NOD:3Fh 7Fh,NET:64h,
3166fca56fbSSascha Wildner# LBL:2A9h,SRT:1Dh 25h 27h,TRE:CFh 135h,TRF:5Ah,TYP:5Bh 6Eh 7Ch AEh,RGN:7Dh
317*614728caSSascha Wildner>>0	uleshort	x		\b, header length %#x
3186fca56fbSSascha Wildner
3196fca56fbSSascha Wildner# URL:		https://www.memotech.franken.de/FileFormats/
3206fca56fbSSascha Wildner# Reference:	https://www.memotech.franken.de/FileFormats/Garmin_RGN_Format.pdf
3216fca56fbSSascha Wildner# From:		Joerg Jenderek
3226fca56fbSSascha Wildner0	string		KpGr		Garmin update
3236fca56fbSSascha Wildner# format version like: 0064h~1.0
3246fca56fbSSascha Wildner>0x4	uleshort	!0x0064
3256fca56fbSSascha Wildner>>4	uleshort/100	x		\b, version %u
3266fca56fbSSascha Wildner>>4	uleshort%100	x		\b.%u
3276fca56fbSSascha Wildner# 1st Garmin entry
3286fca56fbSSascha Wildner>6	use	garmin-entry
3296fca56fbSSascha Wildner# 2nd Garmin entry
3306fca56fbSSascha Wildner>(0x6.l+10)	ubyte		x
3316fca56fbSSascha Wildner>>&0		use		garmin-entry
3326fca56fbSSascha Wildner# 3rd entry
3336fca56fbSSascha Wildner>(0x6.l+10)	ubyte		x
3346fca56fbSSascha Wildner>>&(&0.l+4)	ubyte		x
3356fca56fbSSascha Wildner>>>&0		use		garmin-entry
3366fca56fbSSascha Wildner# look again at version to use default clause
3376fca56fbSSascha Wildner>0x4	uleshort	x
3386fca56fbSSascha Wildner# test for region content by looking for
3396fca56fbSSascha Wildner# Garmin *.srf by ./images with normal builder name "SQA" or longer "hales"
3406fca56fbSSascha Wildner# 1 space after equal sign
3416fca56fbSSascha Wildner>>0x3a	search/5/s	GARMIN\ BITMAP	\b=
3426fca56fbSSascha Wildner!:mime	image/x-garmin-exe
3436fca56fbSSascha Wildner!:ext	exe
3446fca56fbSSascha Wildner>>>&0	indirect	x
3456fca56fbSSascha Wildner# if not bitmap *.srf then region; 1 space after equal sign
3466fca56fbSSascha Wildner>>0x3a	default		x		\b=
3476fca56fbSSascha Wildner!:mime	application/x-garmin-rgn
3486fca56fbSSascha Wildner!:ext	rgn
3496fca56fbSSascha Wildner# recursiv embedded
3506fca56fbSSascha Wildner>>>0x3a	search/5/s	KpGrd
3516fca56fbSSascha Wildner>>>>&0	indirect	x
3526fca56fbSSascha Wildner# look for ZIP or JAR archive by ./archive and ./zip
3536fca56fbSSascha Wildner>>>0x3a	search/5/s	PK\003\004
3546fca56fbSSascha Wildner>>>>&0	indirect	x
3556fca56fbSSascha Wildner# TODO: other garmin RGN record content like foo
3566fca56fbSSascha Wildner#>>0x3a	search/5/s	bar		BAR
3576fca56fbSSascha Wildner#		display information of Garmin RGN record
3586fca56fbSSascha Wildner0	name	garmin-entry
3596fca56fbSSascha Wildner# record length: 2 for Data, for Application often 1Bh sometimes 1Dh, "big" for Region
360*614728caSSascha Wildner#>0	ulelong		x		\b, length %#x
3616fca56fbSSascha Wildner# data record (ID='D') with version content like 0064h~1.0
3626fca56fbSSascha Wildner>4	ubyte		=0x44
3636fca56fbSSascha Wildner>>5	uleshort	!0x0064		\b; Data
3646fca56fbSSascha Wildner>>>5	uleshort/100	x		\b, version %u
3656fca56fbSSascha Wildner>>>5	uleshort%100	x		\b.%u
3666fca56fbSSascha Wildner# Application Record (ID='A')
3676fca56fbSSascha Wildner>4	ubyte		=0x41		\b; App
3686fca56fbSSascha Wildner# version content like 00c8h~2.0
3696fca56fbSSascha Wildner>>5	uleshort	!0x00C8
3706fca56fbSSascha Wildner>>>5	uleshort/100	x		\b, version %u
3716fca56fbSSascha Wildner>>>5	uleshort%100	x		\b.%u
3726fca56fbSSascha Wildner# builder name like: SQA sqa build hales
3736fca56fbSSascha Wildner>>7	string		x		\b, build by %s
3746fca56fbSSascha Wildner# build date like: Oct 25 1999, Oct 1 2008, Feb 23 2009, Dec 15 2009
3756fca56fbSSascha Wildner>>>&1	string		x		%s
3766fca56fbSSascha Wildner# build time like: 11:26:12, 11:45:54, 14:16:13, 18:23:01
3776fca56fbSSascha Wildner>>>>&1	string		x		%s
3786fca56fbSSascha Wildner# region record (ID='R')
3796fca56fbSSascha Wildner>4	ubyte		=0x52		\b; Region
3806fca56fbSSascha Wildner# region ID:14~fw_all.bin: 78~ZIP, RGN or SRF bitmap; 148~ZIP or JAR; 249~display firmware; 251~WiFi or GCD firmware; 255~ZIP
3816fca56fbSSascha Wildner>>5	uleshort	x		ID=%u
3826fca56fbSSascha Wildner# delay in ms: like 0, 500
3836fca56fbSSascha Wildner>>7	ulelong		!0		\b, %u ms
3846fca56fbSSascha Wildner# region size (is record length - 10)
385*614728caSSascha Wildner#>>11	ulelong		x		\b, length %#x
3866fca56fbSSascha Wildner# region content like:
3876fca56fbSSascha Wildner# "KpGr"~recursiv embedded,"GARMIN BITMAP"~Garmin Bitmap *.srf, "PK"~ZIP archive
3886fca56fbSSascha Wildner#>>15	string		x		\b, content "%s"
389*614728caSSascha Wildner>>15	ubequad		x		\b, content %#llx...
3906fca56fbSSascha Wildner# This does NOT WORK!
3916fca56fbSSascha Wildner#>>15	indirect	x		\b; contains
3926fca56fbSSascha Wildner>4	default		x		\b; other
3936fca56fbSSascha Wildner# garmin Record ID Identifies the record content like: D A R
3946fca56fbSSascha Wildner>>4	ubyte		x		ID '%c'
3956fca56fbSSascha Wildner
396c30bd091SSascha Wildner# TOM TOM GPS watches ttbin files:
3976fca56fbSSascha Wildner# https://github.com/ryanbinns/ttwatch/tree/master/ttbin
398c30bd091SSascha Wildner# From: Daniel Lenski
399c30bd091SSascha Wildner0	byte	0x20
400c30bd091SSascha Wildner>1	leshort	0x0007
401c30bd091SSascha Wildner>>0x76	byte	0x20
402c30bd091SSascha Wildner>>>0x77	leshort	0x0075		TomTom activity file, v7
403c30bd091SSascha Wildner>>>>8	leldate	x		(%s,
404c30bd091SSascha Wildner>>>>3	byte    x		device firmware %d.
405c30bd091SSascha Wildner>>>>4	byte	x		\b%d.
406c30bd091SSascha Wildner>>>>5	byte	x		\b%d,
407c30bd091SSascha Wildner>>>>6	leshort	x		product ID %04d)
408c30bd091SSascha Wildner
409