Skip to content

Commit 866ab7d

Browse files
committed
Add coldcard downloader
1 parent 81dcf11 commit 866ab7d

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

hwilib/firmware.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Firmware download things
22

3+
import datetime
4+
import feedparser
35
import json
46
import logging
57
import os
@@ -59,6 +61,37 @@ def trezor_1_download(version=None, bitcoinonly=False):
5961
def trezor_t_download(version=None, bitcoinonly=False):
6062
return _trezor_download(version, bitcoinonly, 2)
6163

64+
def coldcard_download(version=None, bitcoinonly=False):
65+
versions = feedparser.parse('https://github.com/Coldcard/firmware/tags.atom')
66+
releases = versions.entries
67+
68+
def coldcard_version_formatted(ver_str):
69+
try:
70+
return bool(datetime.datetime.strptime(ver_str[:15], '%Y-%m-%dT%H%M'))
71+
except:
72+
return False
73+
74+
releases = [r for r in releases if coldcard_version_formatted(r['title'])]
75+
releases.sort(key=lambda r: r["updated_parsed"], reverse=True)
76+
77+
version_info = {}
78+
if version is None:
79+
version_info = releases[0]
80+
version = version_info['title'][17:]
81+
else:
82+
for r in releases:
83+
if r['title'][15:] == '-v{}'.format(version):
84+
version_info = r
85+
break
86+
else:
87+
raise BadArgumentError('{} is not available'.format(version))
88+
89+
filename = '{}-coldcard.dfu'.format(version_info['title'])
90+
url = 'https://github.com/Coldcard/firmware/blob/master/releases/{}?raw=true'.format(filename)
91+
downloaded_file = _download_file(url)
92+
93+
return {'success': True, 'message': 'Coldcard firmware version {} downloaded to {}'.format(version, downloaded_file)}
94+
6295
def download_firmware(model, version, bitcoinonly=False):
6396
dev_model = model.lower()
6497
func_name = dev_model + '_download'

0 commit comments

Comments
 (0)