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