From 90957931f2f55d341d39adc09414cafb57b1f9e4 Mon Sep 17 00:00:00 2001 From: Markus Birth Date: Sun, 14 Oct 2018 22:23:54 +0200 Subject: [PATCH] Initial commit --- .vscode/launch.json | 31 ++ .vscode/tasks.json | 16 ++ README.md | 2 + gcd.py | 215 ++++++++++++++ gcksum.py | 24 ++ hwids.txt | 671 ++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 959 insertions(+) create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json create mode 100644 README.md create mode 100644 gcd.py create mode 100644 gcksum.py create mode 100644 hwids.txt diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..e58fb03 --- /dev/null +++ b/.vscode/launch.json @@ -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" + } + ] +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..e95dbe7 --- /dev/null +++ b/.vscode/tasks.json @@ -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 + } + } + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..7103d74 --- /dev/null +++ b/README.md @@ -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 diff --git a/gcd.py b/gcd.py new file mode 100644 index 0000000..f9cce7e --- /dev/null +++ b/gcd.py @@ -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(" " + " ".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(" " + " ".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!") diff --git a/gcksum.py b/gcksum.py new file mode 100644 index 0000000..b8c2528 --- /dev/null +++ b/gcksum.py @@ -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)) diff --git a/hwids.txt b/hwids.txt new file mode 100644 index 0000000..b8bee77 --- /dev/null +++ b/hwids.txt @@ -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 \ No newline at end of file