Skip to content

Commit 09df0b2

Browse files
committed
Add keepkey firmware downloader
1 parent 866ab7d commit 09df0b2

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

hwilib/firmware.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import json
66
import logging
77
import os
8+
import re
89
import requests
910
import sys
1011

@@ -92,6 +93,35 @@ def coldcard_version_formatted(ver_str):
9293

9394
return {'success': True, 'message': 'Coldcard firmware version {} downloaded to {}'.format(version, downloaded_file)}
9495

96+
def keepkey_download(version=None, bitcoinonly=False):
97+
versions = feedparser.parse('https://github.com/keepkey/keepkey-firmware/tags.atom')
98+
releases = versions.entries
99+
100+
def keepkey_id_formatted(id_str):
101+
tag = id_str.split('/')[-1]
102+
p = re.compile(r'^v\d+.\d+.\d$')
103+
return bool(p.match(tag))
104+
105+
releases = [r for r in releases if keepkey_id_formatted(r['id'])]
106+
releases.sort(key=lambda r: r["updated_parsed"], reverse=True)
107+
108+
version_info = {}
109+
if version is None:
110+
version_info = releases[0]
111+
version = version_info['id'].split('/')[-1][1:]
112+
else:
113+
for r in releases:
114+
if r['id'].split('/')[-1][1:] == version:
115+
version_info = r
116+
break
117+
else:
118+
raise BadArgumentError('{} is not available'.format(version))
119+
120+
url = 'https://github.com/keepkey/keepkey-firmware/releases/download/v{}/firmware.keepkey.bin'.format(version)
121+
downloaded_file = _download_file(url)
122+
123+
return {'success': True, 'message': 'Keepkey firmware version {} downloaded to {}'.format(version, downloaded_file)}
124+
95125
def download_firmware(model, version, bitcoinonly=False):
96126
dev_model = model.lower()
97127
func_name = dev_model + '_download'

0 commit comments

Comments
 (0)