Initial commit

This commit is contained in:
Markus Birth 2018-10-14 22:23:54 +02:00
commit 90957931f2
Signed by: mbirth
GPG Key ID: A9928D7A098C3A9A
6 changed files with 959 additions and 0 deletions

31
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,31 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File (Integrated Terminal)",
"type": "python",
"request": "launch",
"program": "${file}",
"args": ["D2Delta_300.gcd", "fenix5Plus_510.gcd", "GUPDATE.GCD", "fenix5Plus_510.gcd"],
"console": "integratedTerminal"
},
{
"name": "Python: Attach",
"type": "python",
"request": "attach",
"port": 5678,
"host": "localhost"
},
{
"name": "Python: Current File (External Terminal)",
"type": "python",
"request": "launch",
"program": "${file}",
"args": ["fenix5Plus_510.gcd"],
"console": "externalTerminal"
}
]
}

16
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,16 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Run fenix5Plus_510.gcd",
"type": "shell",
"command": "python3 gcd.py fenix5Plus_510.gcd",
"group": {
"kind": "build",
"isDefault": true
}
}
]
}

2
README.md Normal file
View File

@ -0,0 +1,2 @@
http://www.gpspassion.com/forumsen/topic.asp?TOPIC_ID=115804&whichpage=1
http://www.gpspassion.com/forumsen/topic.asp?TOPIC_ID=137838&whichpage=50

215
gcd.py Normal file
View File

@ -0,0 +1,215 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
GCD_SIG = b"GARMINd\00"
from binascii import hexlify
from struct import unpack
import sys
FILE = sys.argv[1]
TLV_TYPES = {
0x0001: "Checksum remainder",
0x0002: "Skip?",
0x0003: "Part number",
0x0005: "Copyright notice",
0x0006: "Block Type 7 format definition",
0x0007: "Binary descriptor",
0x0008: "Binary Region 0C (boot.bin)",
0x0401: "Binary Component Firmware (SensorHub, ANT_BLE_BT, GPS, WiFi)",
0x0505: "Binary Region 05",
0x0555: "Binary Region 55",
0x0557: "Binary Region 57",
0x02bd: "Binary Region 0E (fw_all.bin)",
0xffff: "EOF marker",
}
DEV_TYPES = {
1551: "fenix/D2/tactix",
2900: "fenix 5 Plus",
3196: "D2 Delta",
}
running_cksum = 0
all_cksum_ok = True
last_type6_format = ""
last_type6_fields = []
def add_to_cksum(payload):
global running_cksum
for c in payload:
running_cksum += c
running_cksum &= 0xff
def get_tlv_comment(ttype):
if ttype in TLV_TYPES:
return TLV_TYPES[ttype]
else:
return "Type {:04x} / {:d}".format(ttype, ttype)
def get_device(hwid):
if hwid in DEV_TYPES:
return DEV_TYPES[hwid]
else:
return "Unknown"
print("Opening {}".format(FILE))
def parseTLVheader(hdr):
(ttype, tlen) = unpack("<HH", hdr)
return (ttype, tlen)
def parseTLV1(payload):
global running_cksum, all_cksum_ok
if len(payload) != 1:
print(" ! Checksum has invalid length!")
all_cksum_ok = False
expected = ( 0x100 - running_cksum ) & 0xFF
payload = unpack("B", payload)[0]
state = "INVALID!"
if expected == payload:
state = "valid."
else:
all_cksum_ok = False
print(" - Checksum expected: {:02x} / found: {:02x} - {}".format(expected, payload, state))
def parseTLV3(payload):
# Part number?
# 10 d4 5c 13 04 45 0d 14 41 - fenix5Plus_SensorHub_220
# 10 d4 5c 13 04 45 0d 14 41 - fenix_D2_tactix_500
# 10 d4 5c 13 04 45 0d 14 41 - fenix5_1100
# 10 d4 5c 13 04 45 0d 14 41 - fenix5Plus_420_rollback
# 10 d4 5c 13 04 45 0d 14 41 - fenix5Plus_420
# 10 d4 5c 13 04 45 0d 14 41 - fenix5Plus_510
# 10 d4 5c 13 04 45 0d 14 41 - D2Delta_300
print(" > " + " ".join("{:02x}".format(c) for c in payload))
#print(hexlify(payload).decode("utf-8"))
print(" > " + repr(payload))
def parseTLV6(payload):
global last_type6_format, last_type6_fields
# Describes following TLV7:
# http://www.gpspassion.com/forumsen/topic.asp?TOPIC_ID=137838&whichpage=12
# First nibble might be data type: 0 = B, 1 = H, 2 = L
FIELD_TYPES = {
0x000a: ["B", "XOR flag/value"],
0x000b: ["B", "Reboot/Downgrade flag"],
0x1009: ["H", "Device hw_id"],
0x100a: ["H", "Block type"],
0x1014: ["H", "Field 1014"],
0x1015: ["H", "Field 1015"],
0x1016: ["H", "Field 1016 (WiFi fw)"],
0x2015: ["L", "Block size"],
0x5003: ["", "End of definition marker"],
}
# 0a 10 15 20 09 10 0d 10 03 50 - 10 - fenix_D2_tactix_500 (before 0008)
# 0b 00 0a 00 0a 10 15 20 09 10 0d 10 03 50 - 14 - fenix_D2_tactix_500 (before 0555)
# 0b 00 0a 00 0a 10 15 20 09 10 0d 10 03 50 - 14 - fenix_D2_tactix_500 (before 0557)
# 0b 00 0a 00 0a 10 15 20 03 50 - 10 - fenix5Plus_SensorHub_220
# 0b 00 0a 00 0a 10 15 20 03 50 - 10 - fenix5Plus_ANT_BLE_300
# 0b 00 0a 00 0a 10 15 20 16 10 03 50 - 12 - fenix5Plus_WiFi_250
# 0b 00 0a 00 0a 10 15 20 09 10 14 10 15 10 0d 10 03 50 - 18 - fenix5_1100 (before 0505)
# 0b 00 0a 00 0a 10 15 20 09 10 14 10 15 10 0d 10 03 50 - 18 - fenix5_1100 (before 02BD)
# 0b 00 0a 00 0a 10 15 20 09 10 14 10 15 10 0d 10 03 50 - 18 - fenix5Plus_420_rollback.gcd (has only 1 Type 02BD)
# 0b 00 0a 00 0a 10 15 20 09 10 14 10 15 10 0d 10 03 50 - 18 - fenix5Plus_420.gcd (before Type 0505)
# 0b 00 0a 00 0a 10 15 20 09 10 14 10 15 10 0d 10 03 50 - 18 - fenix5Plus_420.gcd (before Type 02BD)
# 0b 00 0a 00 0a 10 15 20 09 10 14 10 15 10 0d 10 03 50 - 18 - fenix5Plus_510.gcd (before Type 0505)
# 0b 00 0a 00 0a 10 15 20 09 10 14 10 15 10 0d 10 03 50 - 18 - fenix5Plus_510.gcd (before Type 02BD)
# 0b 00 0a 00 0a 10 15 20 09 10 14 10 15 10 0d 10 03 50 - 18 - D2Delta_300 (before 0505)
# 0b 00 0a 00 0a 10 15 20 09 10 14 10 15 10 0d 10 03 50 - 18 - D2Delta_300 (before 02BD)
print(" > " + " ".join("{:02x}".format(c) for c in payload))
#print(hexlify(payload).decode("utf-8"))
print(" > " + repr(payload))
def parseTLV7(payload):
# fenix/D2/tactix: hwid 060f
# fenix 5 Plus: hwid 0b54
# D2 Delta: hwid 0c7c
# 08 00 00 a2 04 00 0f 06 f4 01 - 10 - fenix_D2_tactix_500 (before 0008)
# 00 00 55 05 00 c0 01 00 0f 06 f4 01 - 12 - fenix_D2_tactix_500 (before 0555)
# 00 00 57 05 00 90 01 00 0f 06 f4 01 - 12 - fenix_D2_tactix_500 (before 0557)
# 00 00 05 05 00 94 00 00 89 0a c8 00 4e 00 4c 04 - 16 - fenix5_1100 (before 0505)
# 00 00 bd 02 00 46 3b 00 89 0a c8 00 4e 00 4c 04 - 16 - fenix5_1100 (before 02BD)
# 01 00 01 04 0c 0e 06 00 - 8 - fenix5Plus_SensorHub_220 (before 0401)
# 01 00 01 04 f7 0f 02 00 - 8 - fenix5Plus_ANT_BLE_300 (before 0401)
# 00 00 01 04 e4 4f 06 00 40 33 - 10 - fenix5Plus_WiFi_250
# 01 00 bd 02 00 2a 8d 00 54 0b c8 00 3b 00 a4 01 - 16 - fenix5Plus_420_rollback.gcd (has only 02BD)
# 00 00 05 05 00 ce 00 00 54 0b c8 00 3b 00 a4 01 - 16 - fenix5Plus_420.gcd (before Type 0505)
# 00 00 bd 02 00 2a 8d 00 54 0b c8 00 3b 00 a4 01 - 16 - fenix5Plus_420.gcd (before Type 02BD)
# 00 00 05 05 00 ce 00 00 54 0b c8 00 3b 00 fe 01 - 16 - fenix5Plus_510.gcd (before Type 0505)
# 00 00 bd 02 00 fa 93 00 54 0b c8 00 3b 00 fe 01 - 16 - fenix5Plus_510.gcd (before Type 02BD)
# 00 00 05 05 00 ce 00 00 7c 0c c8 00 01 00 2c 01 - 16 - D2Delta_300.gcd (before Type 0505)
# 00 00 bd 02 00 99 94 00 7c 0c c8 00 01 00 2c 01 - 16 - D2Delta_300.gcd (before Type 02BD)
# ^^ ^^ ^___^ ^_________^ ^___^ ^___^
# E X btype blength HWID FwVer
erase = None
xor = None
hwid = None
nn6 = None
nn7 = None
fwver = None
if len(payload) == 16:
(erase, xor, btype, blen, hwid, nn6, nn7, fwver) = unpack("<BBHLHHHH", payload)
elif len(payload) == 12:
(erase, xor, btype, blen, hwid, fwver) = unpack("<BBHLHH", payload)
elif len(payload) == 10:
(btype, blen, hwid, fwver) = unpack("<HLHH", payload)
if btype == 0x0:
# other format
print(" ! First try to parse didn't make sense. Trying other format.")
hwid = None # reset
fwver = None # reset
(erase, xor, btype, blen, nn6) = unpack("<BBHLH", payload)
elif len(payload) == 8:
(erase, xor, btype, blen) = unpack("<BBHL", payload)
else:
print("Type 7 not an expected length. ({} Bytes)".format(len(payload)))
return
if erase is not None: print(" - Reset/Downgrade flag?: {}".format(erase))
if xor is not None: print(" - XOR flag?: {}".format(xor))
print(" - Block type: {:04x}".format(btype))
print(" - Block length: {:d} Bytes".format(blen))
if hwid is not None: print(" - Device hw_id: 0x{:04x} / {:d} ({})".format(hwid, hwid, get_device(hwid)))
if nn6 is not None: print(" - Unknown: {:04x} / {:d}".format(nn6, nn6))
if nn7 is not None: print(" - Unknown: {:04x} / {:d}".format(nn7, nn7))
if fwver is not None: print(" - Firmware version: {:d}".format(fwver))
with open(FILE, "rb") as f:
sig = f.read(8)
add_to_cksum(sig)
if sig == GCD_SIG:
print("Signature ok.")
else:
raise Exception("Signature mismatch ({}, should be {})!".format(repr(sig), repr(GCD_SIG)))
i = 0
while True:
hdr = f.read(4)
add_to_cksum(hdr)
(ttype, tlen) = parseTLVheader(hdr)
print("#{:04} TLV type {:04x} (offset 0x{:x}, length {} Bytes) - {}".format(i, ttype, f.tell(), tlen, get_tlv_comment(ttype)))
if ttype == 0xFFFF:
print("End of file reached.")
break
payload = f.read(tlen)
if ttype == 0x01:
parseTLV1(payload)
elif ttype == 0x06:
parseTLV6(payload)
elif ttype == 0x07:
parseTLV7(payload)
else:
payloadshort = payload[:64]
#print(" > " + " ".join("{:02x}".format(c) for c in payloadshort))
#print(hexlify(payload).decode("utf-8"))
#print(" > " + repr(payloadshort))
add_to_cksum(payload)
if ttype in [0x0505]:
with open("fw_{:04x}.bin".format(ttype), "ab") as of:
of.write(payload)
i = i + 1
if not all_cksum_ok:
print("There were problems with at least one checksum!")

24
gcksum.py Normal file
View File

@ -0,0 +1,24 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from binascii import hexlify
from struct import unpack
import sys
FILE = sys.argv[1]
print("Opening {}".format(FILE))
csum = 0
with open(FILE, "rb") as f:
while True:
block = f.read(1024)
for c in block:
csum += c
csum &= 0xff
if len(block) < 1024:
print("End reached.")
break
print("Sum of all bytes: {}".format(csum))

671
hwids.txt Normal file
View File

@ -0,0 +1,671 @@
111=eMap
126=GPSMAP 168 Sounder
128=GPSMAP 295
130=eTrex
136=GPSMAP 176
141=eTrex Summit
144=GPSMAP 176C
145=GPSMAP 196
151=StreetPilot III
154=eTrex Venture/Mariner
155=GPS V
156=eTrex Camo/Euro
168=NavTalk GSM
169=eTrex Vista rev A
173=GPS 76 Rev A
177=GPSMAP 76 Rev. A
179=eTrex Legend Rev A
194=GPSMAP 76S Rev. A
197=Rino 110
209=Rino 120
210=StreetPilot 26xx
231=Quest
247=GPS 72 Rev A
248=Geko 201
256=Geko 301
260=GPSMAP 296
264=Rino 130/120/110
273=GPS 18
282=Forerunner 201
283=Forerunner 301
285=GPSMAP 276C
289=GPS 60
291=GPSMAP 60C/60CS/76C/76CS
292=GPSMAP 60Cx/60CSx/76Cx/76CSx
295=eTrex Camo
308=GPSMAP 60
314=Foretrex 101/201
315=eTrex Legend C/Vista C
364=GPSMAP 96
365=GPSMAP 96C
381=Rino 520/530
382=StreetPilot c320/c330
402=GPSMAP 396
404=StreetPilot 27xx
406=GPSMAP 376C
410=GPSMAP 276C Plus
411=eTrex Legend Rev B
412=StreetPilot 7200/7500
418=GPSMAP 76CS Plus
420=eTrex Vista rev B
421=eTrex Legend Cx/Vista Cx/Venture Cx
426=Firmware Update for GXM30 Receiver
429=StreetPilot i3
430=GPS 72 Rev B
439=GPSMAP 76 Rev. B
444=GPS 76 Rev B
450=Edge 205/305
463=Quest 2
476=nuvi 300/350
478=GPS Chipset Type G
480=GPS 60
481=StreetPilot c340
484=Forerunner 205/305
497=StreetPilot c310/c320/c330
505=StreetPilot i3/i5
520=StreetPilot 2820
530=Marine Network Minimum
532=StreetPilot i2
537=Chartplotters
539=StreetPilot c5xx
553=Firmware Update for c550 Bluetooth Module
557=GPSMAP 378
558=GPSMAP 478
566=nuvi 310/360/370
570=Astro 220
574=Geko 201/301
577=Rino 520HCx/530HCx
580=zumo 4xx/5xx
583=Firmware Update for STP2820 / BMW Navigator III Bluetooth Module
584=GPSMAP 76S Rev. B
585=GPSMAP 278
595=GPSMAP 496
596=nuvi 6xx
600=Where2 c550
601=StreetPilot c5xx Smart
602=StreetPilot c5xx Mopar
603=StreetPilot c5xx Mercedes
609=Rino 520 Australia
617=GPS Chipset Type G2
625=Edge 605/705
660=nuvi 2xx
661=Colorado
672=nuvi 350 Toyota DIO
673=nuvi 360 MINI
675=nuvi 360 BMW3
680=GPS Chipset Type B
681=nuvi 350 Honda Access
682=nuvi 360 Honda Access
683=nuvi 350 Toyota PIO
689=DC20/DC30/DC40
694=eTrex Legend HCx/Vista HCx
695=eTrex Summit HC/Venture HC
696=eTrex H
697=BMW Motorrad Navigator III plus
698=Zumo BMW
711=Zumo Honda
717=Forerunner 405
723=nuvi 5xx
726=nuvi 8xx
732=StreetPilot c5xx Mercedes Phase2
733=GPS Chipset Type M
737=nuvi 2xxW
739=GPS Chipset Type M2
743=Nuvi 5000
745=GPSMAP 695/696
754=nuvi 7xx
775=GPS Chipset Type B
781=GPS 17x HVS
786=eTrex Venture HC/Summit HC
788=nuvi 7x0 Mercedes/Smart
795=Oregon
796=GPS 15x|15xH/xL|16x|18x OEM
811=GPS 18x USB/GPS 20x USB
814=nuvi 900T
827=nuvi 2x5W
832=GPSMAP 6x0
834=nuvi 2xx
835=nuvi 2xxW
836=nuvi 760 TWN
851=nuvi 2x5
853=StreetPilot C5XX Cendant-Avis Australia
855=nuvi 300/350 MLC
856=nuvi 310/360/370 MLC
861=GolfLogix Black
862=GXM40 Software
865=GPS 18x 5Hz
870=nuvi 7x5
887=GPSMAP 495
896=Oregon x50
897=Colorado TWN
901=Firmware Update for GTMxx Traffic Receiver Type 3
913=Aera GPS Software
924=BMW Motorrad Navigator IV/zumo 660
930=nuvi 255W SG
932=nuvi 2x5W TWN
943=nuvi 465T
956=Honda Navi Gen3
960=Dakota
969=Firmware Update for FMI Cables with Traffic
970=Mount Software
971=nuvi 12xx
972=nuvi 13xx and 14xx
977=Firmware Update for Bluetooth
978=nuvi 7x5 DSP Software
979=GPS Chipset Type M3
983=Oregon TWN
988=FR60
1005=Approach G5
1007=nuvi 765 TWN
1018=Forerunner 310XT
1020=Foretrex 301/401
1033=zumo 66x Echo Cancellation Software
1036=Edge 500
1039=Forerunner 405CX
1046=nuvi 16xx NA
1058=Nuvi 5xx TWN
1059=GPS Chipset Type M3
1063=aera 5xx
1073=Firmware Update for ecoRoute HD
1074=nuvi 2x5 MTK
1091=nuvi 2x5W MTK
1095=GPS 72H
1101=nuvi 37xx
1103=Nuvi 13xx TWN
1104=nuvi 13xx and 14xx MTK
1106=nuvi 12xx MTK
1113=GPSMAP 62/78
1118=KNA-G600
1120=Oregon x50 TWN
1124=Forerunner 110
1128=Aera DSP Software
1132=nuvi 16xx EU
1136=Approach G3
1137=Nuvi 1480 TWN
1138=zumo 2x0
1142=Oregon 550 Thai
1147=zumo 665
1156=nuvi 16xx AU
1157=nuvi 16xx CA
1161=Nuvi 16xx TWN
1169=Edge 800
1186=nuvi 22xx
1187=nuvi 23xx
1188=nuLink 1695
1196=nuvi 1490TV
1201=GTU 10 US
1204=Dakota TWN
1209=Oregon 550 Korea
1211=Firmware Update for Touchscreen Module - Nuvi 37xx
1213=Edge 500 JPN
1247=Rino 6xx
1250=Forerunner 410
1252=Oregon 450tc Japan
1254=nuLink 23xx
1258=nuvi 35xx
1259=Nuvi 37xx, Taiwan
1264=Forerunner 210
1266=Nuvi 2585 TWN
1269=dezl 560
1271=Approach S1
1273=nuvi 24xx
1275=Montana
1301=GPSMAP 62SJ Japan
1304=eTrex 10
1305=eTrex 20/30
1318=GPSMAP Series with SDCard
1325=Edge 200
1327=Nuvi 24x5 Taiwan
1328=Forerunner 910XT
1331=GTU 10 EU
1334=Edge 800 JPN
1339=Astro 320
1340=GPSMAP 62sc/62stc
1343=GDL 39
1344=GTU 10 CA
1345=Forerunner 610
1349=nuvi 30
1350=nuvi 40 and 50
1352=Nuvi 25x5 Taiwan
1353=GPSMAP 62S Korea
1354=GPSMAP 62S/78S Thai & Indonesia
1364=aera 7xx
1371=nuvi 24x5 and 25x5
1376=nuvi 34xx
1379=GPS Chipset Type M3
1381=Vector
1389=Nuvi 2585LT EU
1392=GPS 19x HVS
1400=DC20/DC30/DC40
1405=Approach G10
1420=Chrysler RHB15 v4/RHB17 v2/RHB17 v4/RHB18 v1
1422=Edge 500 Korea
1425=Chrysler CTP16 v3/CTP17 v4/CTP18 v1
1429=Montana 650t Taiwan
1431=Montana Korea
1441=nuvi 3595,JPN
1443=Nuvi 40/50 China
1445=nuvi 2495 LT GLONASS
1446=Forerunner 310XT
1452=Approach G6
1461=UAT 163
1463=Nuvi 2585 Russia
1468=FujiMY16 v1/Fuji MY17
1469=Approach S3
1471=eTrex 20/30 JPN
1472=eTrex 10 JPN
1473=zumo 3x0
1475=fleet 590 U.S.
1482=Forerunner 10
1484=GPS Chipset Type M4
1485=GPS Chipset Type M4
1490=GLO
1497=Edge 800 Korea
1498=eTrex 20/30 SEA
1499=Garmin Swim
1504=eTrex 10 SEA
1506=Nordic Rino650
1510=Nuvi 40/50 Taiwan
1516=dezl 760
1517=nuvi 27x7 and 27x8
1521=Nuvi 35xx Taiwan
1522=Nuvi 2460 India
1525=Oregon 550 China
1532=GPSMAP 62sc China
1533=GPSMAP 62sc Japan
1535=Nuvi 2580 South America
1536=Oregon 550tc Japan
1537=Forerunner 910XT China
1541=BMW Motorrad Navigator V
1545=TT10
1546=Firmware Update for GTMxx Digital Radio Type S
1548=Yushan
1550=Zumo 660 Taiwan
1551=Fenix/D2/tactix
1556=eTrex 20/30 China
1561=Edge 510
1562=Alpha 100
1563=Nuvi 3595 Taiwan
1566=Garmin Swim Strings
1567=Edge 810
1582=nuvi 2xx7 and 2xx8
1587=Rino 6xx China
1593=Nuvi 2568 India
1594=eTrex 20/30 Taiwan
1595=nuvi 140/150
1597=Approach S3 APAC
1599=GPSmap 62stc Taiwan
1600=ForeAthlete 910XTJ Japan
1603=nuvi 35x7 and 35x8
1613=nuvi x2 and x4
1617=Nuvi c155/c165/c175 China
1619=GPS Chipset Type M5
1620=GPS Chipset Type M5
1621=GPS Chipset Type M5
1623=Forerunner 620
1624=GPS Chipset Type M426
1628=Garmin HUD
1630=Forerunner 620/920, Wi-Fi
1632=Forerunner 220
1635=Montana 650t China
1649=Approach S2
1651=Oregon 6x0
1664=Forerunner 910XT, Korea
1676=Fenix China
1677=Fenix Japan
1678=Fenix Korea
1679=Fenix Taiwan
1681=Nuvi 2795 Japan
1688=ForeAthlete 10J
1689=GPS Chipset Type M426
1692=quatix
1696=DC 50
1697=nuvi 53/55/56
1708=fleet 590 EU
1711=Nuvi 2795 South America
1712=Nuvi 42/52 SGMY
1714=Nuvi 42/52 Taiwan
1716=Monterra
1719=GPSMAP 62sc SEA
1721=Edge 810, Japan
1722=Nuvi 24x7/25x7 Taiwan
1723=Nuvi 3590 CHN
1724=Nuvi 3592 SGMY
1725=Nuvi 3592 THAI
1726=Monterra Outdoor Software
1730=RV and Camper 760
1731=Nuvi 3590 TWN
1735=VIRB China
1736=Edge Touring
1739=GPSMAP 629sc CHN
1740=Nuvi 1690 lite Taiwan
1741=eTrex 20S SG
1742=Edge 510, Japan
1749=nuvi 65/66
1758=nuvi 25x9
1765=Forerunner 920XT
1766=Nuvi 42/52 India
1769=SIRIUS/XM Weather Support File
1772=nuvi 26x9
1786=GPS 15x|15xH/xL|16x|18x OEM/5Hz 1786
1796=zumo 590
1811=Approach S4
1815=Carmax 310A/310V
1817=UAT-1817
1820=eTrex 209/309 China
1821=Edge 510 China & Taiwan
1822=Edge 810 China
1823=Edge 810, Taiwan
1836=Edge 1000
1837=vivofit
1842=Approach G7
1843=Oregon 6xx System, SEA
1850=Forerunner 620/220 Display
1851=Forerunner 620/220 ANT
1857=Oregon 6xx System, JPN
1859=GPSMAP 64
1876=Rino 6xx Korea
1878=GPSMAP 7x08
1879=GPSMAP 7x10/7x12
1884=Nuvi 2798
1885=vivoki
1891=Approach S2 JPN
1895=Monterra, GPS/BeiDou CHN
1903=Forerunner 15
1907=vivoactive
1908=vivoactive Display
1909=VivoActive, Fenix3 ANT | ANT / BLE N4
1917=Approach G8
1918=Edge 510, Korea
1925=Approach S6 Display
1928=ForeAthlete 620J
1929=Forerunner 620 China
1930=ForeAthlete 220J
1931=Forerunner 220 China
1932=nuvi 27x9
1936=Approach S6
1939=Virb CHN
1940=Virb System ASIA
1942=Forerunner 920XT Display
1947=nuvi 25x9 C4
1948=nuvi 26x9 C4
1955=vivosmart ANT
1956=VivoSmart
1958=nuvi C255 China
1959=nuvi C265 China
1966=Nuvi 55TV Brazil
1967=Fenix 2
1969=Forerunner 15, ANT
1982=MWNavV Japan
1987=Epix Display
1988=Epix
1999=Approach S2 APAC
2002=dezl 770
2003=dezl 570
2005=vivosmart, PSOC
2024=Quatix China
2030=HAC 2CT
2032=T 5, TT 15
2035=Approach S4 APAC
2043=nuviCam
2044=nuviCam Camera Firmware
2047=ANT/BLE N1 Firmware
2050=fenix 3/tactix Bravo/quatix 3
2051=fenix 3/tactix Bravo/quatix 3, Display
2052=Edge 1000, Taiwan
2053=Edge 1000, Japan
2054=Fenix 2 China
2061=ForeAthlete 15J
2062=Fleet 660 GPS
2063=Fleet 670 GPS
2067=Edge 520
2068=SW,HondaPH
2070=Edge 1000, China
2077=nuvi 2xx7/2xx8 C4
2079=Vector S
2081=GPSMAP 7x07
2087=nuvi 57/58
2088=nuvi 67/68
2094=Fenix 2 Japan
2100=Edge 1000, Korea
2108=fenix 3/tactix Bravo/quatix 3, Wi-Fi
2112=Firmware Update for the BC30 RX
2123=GPSMAP 64S, SEA
2124=GPSMAP 64SJ, Japan
2130=Forerunner 920XT Taiwan
2131=Forerunner 920XT China
2132=Forerunner 920XT Japan
2134=VIRB X
2135=VivoSmart APAC
2140=eTrex Touch 25/35
2141=dezlCam
2147=Edge 25
2148=Forerunner 25
2150=vivofit2
2151=Forerunner 225, OHR
2153=Forerunner 225
2156=Forerunner 630
2157=Forerunner 230
2158=Forerunner 735XT
2159=Forerunner Display A1 Firmware
2160=vivoactive APAC
2161=Vector 2
2162=Vector 2S
2172=VIRB XE
2173=Forerunner 620 Taiwan
2175=TruSwing
2182=Approach S5
2188=fenix 3, K65, China
2189=fenix 3, Taiwan
2190=T5/TT15 Mini
2192=Varia Headlight
2194=Approach S6 APAC
2196=Wi-Fi A1 Firmware
2197=Forerunner 630 Touchscreen
2198=Dash Cam 30
2199=Dash Cam 35
2201=GPS 12H
2204=Edge Explore 1000
2219=Forerunner 225 Asia
2220=ForeAthlete 225J
2225=Varia Radar Tail Light
2226=Varia Radar Display Unit
2228=Forerunner 225 Display
2231=Oregon 650TCJ2, JPN
2232=SW,Captain
2235=SW,Storm
2237=Camper/RV 660
2238=Edge 20
2250=eTrex 20x/30x
2260=Edge 520 Asia
2261=Edge 520 Japan
2262=D2 Bravo
2266=Approach S20
2267=Drive and DriveSmart 40/50
2268=Drive, DriveSmart 60/70 and DriveTrack 70
2269=DriveLuxe 50
2270=DriveAssist 50
2273=ANT/BLE N2 Firmware
2274=Edge 1000, Thai
2281=GPSMAP 64s, KOR
2285=GPSMAP 64st, TWN
2288=Edge 25 Asia
2289=Edge 25 Japan
2290=Edge 20 Asia
2292=Approach X40
2293=fenix 3, K65, Japan
2296=nuviCam APAC
2297=nuvi 57, APAC
2298=nuvi 67, APAC
2299=Montana 610/680
2302=eTrex 20x/30x China OPM & TWN
2310=Forerunner 630 APAC
2311=ForeAthlete 630J
2313=ForeAthlete 230J
2316=eTrex 20x/30x JPN
2317=eTrex 20x/30x SEA
2325=UAT-B2325-00
2329=VIRBXE APAC System
2332=Epix JPN
2337=vivoactive HR
2338=vivoactive HR Sensor Hub
2340=vivoactive HR Display
2347=vivosmart HR plus
2348=vivosmart HR
2361=vivosmart HR APAC
2362=vivosmart HR plus APAC
2368=Vivomove
2369=Forerunner 235 Sensor Hub
2379=Varia Tail Light
2392=fenix Chronos, Display
2393=fenix Chronos, Sensor Hub
2396=Forerunner 235 APAC
2397=ForeAthlete 235J
2398=Varia Vision
2400=aera 660
2405=Approach X40 BLE Firmware
2406=vivofit3
2407=fenix 3, K65, Korea
2408=fenix 3, K65, SEA
2413=fenix 3 HR
2414=fenix 3 HR, Display
2415=fenix 3 HR, Sensor Hub
2417=Virb Ultra 30
2423=ANT/BLE N3 Firmware
2429=Index Smart Scale
2431=Forerunner 235
2432=fenix Chronos
2435=Zumo 3x5
2436=Zumo 595
2440=GDR E350/C300
2442=Astro 430/Alpha 50
2444=Rino 7xx
2449=PRO Control 2 RR
2450=Delta Smart
2467=D2 Bravo, K65, China
2470=GDR C530
2471=Varia Vision, APAC
2473=fenix 3 HR, K26, CHN
2478=zumo 590, APAC
2479=GPSMAP 276cx
2485=GDR E350 Japan
2495=DriveAssist 50 Camera FW
2496=Garmin Nautix
2497=vivoactive HR APAC
2503=Forerunner 35
2510=Forerunner 735XT, Sensor Hub
2512=Oregon 7xx
2517=zumo 590 JPN
2530=Edge 820
2531=Edge Explore 820
2533=Forerunner 735XT APAC
2534=ForeAthlete 735XTJ
2544=fenix 5S
2545=Dash Cam 30
2546=Dash Cam 35
2547=D2 Bravo Titanium
2559=Approach S20 APAC
2560=D2 Bravo Titanium, Sensor Hub
2561=DriveSmart 50 APAC
2563=eTrex Touch 35 APAC
2569=fleet 660 8G, GPS
2570=fleet 670 8G, GPS
2576=eTrex Venture Mariner
2583=Delta Smart nRF51
2584=BMW Motorrad Navigator VI
2586=Drive and DriveSmart 51
2587=Drive 61
2588=DriveSmart 61
2589=DriveLuxe 51
2590=DriveAssist 51
2596=DriveAssist 50, APAC
2599=Edge 820 China
2600=Edge 820 Japan
2604=fenix 5X
2606=vivofit jr
2614=GPSMAP 64sc
2622=vivosmart 3
2623=vivosport
2624=fenix 3 HR APAC, Sensor Hub
2628=Edge 820 Taiwan
2629=Edge 820 Korea
2630=Edge 820 SEA
2639=vivosmart HR plus Israel
2641=Xero A1(i)
2650=Forerunner 35 Israel
2652=Approach G30
2653=FR235, NFC CIB
2655=FR235 Sensor Hub
2656=Approach S60
2667=Forerunner 35 APAC
2668=Forerunner 35 JPN
2675=fenix CHRONOS APAC
2681=Oregon 7xx APAC
2684=RV/Camper 770
2691=Forerunner 935
2697=fenix 5
2700=vivoactive 3
2705=Avtex Tourer One Plus
2713=Edge 1030
2725=aera 79x China
2726=aera 660 China
2727=Forerunner 35 SEA
2733=FR235, NFC, ExpressPay
2763=GPSMAP 64sc JPN
2764=GPSMAP 64sc SEA
2769=Foretrex 601/701
2771=Impact
2772=vivomove HR
2777=Rino 700
2796=Fenix 5 APAC
2797=Fenix 5S APAC
2798=Fenix 5X APAC
2803=Drive and DriveSmart 51, APAC
2807=echoMAP Plus 4x
2808=echoMAP Plus 6x
2809=echoMAP Plus 7x/9x
2810=echoMAP Plus 63
2814=Forerunner 35 KOR
2819=D2 Charlie
2826=UAT-2826
2831=Vivosmart 3, APAC
2832=Vivosport, APAC
2833=Forerunner 935 APAC
2859=Descent Mk1
2886=Forerunner 645
2888=Forerunner 645 Music
2891=Forerunner 30
2893=Atemos 50
2894=Atemos 100
2907=Approach S60, Host, APAC
2924=Edge 1030 APAC
2927=vivosmart 4
2945=vivomove HR, APAC
2956=Alpha 50 CHN
2962=Approach X10
2976=vivoactive 3, APAC
2977=Forerunner 30 APAC
2991=Descent APAC
2994=D2 Charlie, APAC
2996=DriveSmart 61, APAC
2997=eTrex 302 CHN
3003=Forerunner 645 APAC
3004=Forerunner 645M APAC
3028=GPSMAP 66
3049=Approach S10
3089=Fenix 5 Plus APAC
3092=Edge 130 APAC
3095=Edge 1030 Bontrager
3109=DriveAssist 51, APAC
3112=Edge 520 Plus
3115=GPSMAP 64sc SiteSurvey
3134=Fenix 5S Plus APAC
3135=Fenix 5X Plus APAC
3139=zumo 396, APAC
3142=Edge 520 Plus, APAC
3144=Forerunner 235 Lite APAC
3163=vivoactive 3M, WiFi, APAC
3196=D2 Delta
3197=D2 Delta S
3198=D2 Delta PX
3218=Vivosmart 4, APAC