-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathinstall_uartremote.py
More file actions
43 lines (35 loc) · 9.82 KB
/
install_uartremote.py
File metadata and controls
43 lines (35 loc) · 9.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import ubinascii, uos, machine,uhashlib
from ubinascii import hexlify
b64="""TQYAH4EwJSAuLi91YXJ0cmVtb3RlLnB5AA8Mc3RydWN0AAZzeXMAgRGBZwpsaW51eAAKZXNwMzIADmVzcDgyNjYAFE9wZW5NVjMtTTcADGRhcndpbgAMTWFpeFB5ABBwbGF0Zm9ybQAeVWFydFJlbW90ZUVycm9yAAhVQVJUAA5tYWNoaW5lAAZQaW4AEHNsZWVwX21zAAp1dGltZQAOZHVwdGVybQAGdW9zAARJTgAGaXJxAA50cmlnZ2VyABZJUlFfRkFMTElORwAOaGFuZGxlcgAKYnVzaW8ACmJvYXJkAApzbGVlcAAIdGltZQAUVUFSVERldmljZQAkcHlicmlja3MuaW9kZXZpY2VzAAhQb3J0ACZweWJyaWNrcy5wYXJhbWV0ZXJzAARmbQAaZnBpb2FfbWFuYWdlcgAGaHViAAxzZXJpYWwAFFVhcnRSZW1vdGUAGmVzcF9pbnRlcnJ1cHQADk5pZ2h0bHkAAwRvawCCBQxub3Qgb2sAIyRsb2NhbF9yZXBsX2VuYWJsZWQAGHJlYWRzX3Blcl9tcwAIcG9ydAAKREVCVUcAIHVucHJvY2Vzc2VkX2RhdGEADnRpbWVvdXQAEGJhdWRyYXRlAARTMQAIdWFydAAmZW5hYmxlX3JlcGxfbG9jYWxseQASbG1zX2VzcDMyAA52ZXJzaW9uAARnYwAQbWVtX2ZyZWUABHJ4AAR0eAAEVFgABFJYABByZWdpc3RlcgAKZnBpb2EAEFVBUlQyX1JYAApmb3JjZQAQVUFSVDJfVFgAClVBUlQyABhyZWFkX2J1Zl9sZW4AEmh1Yi5wb3J0LgAIbW9kZQAIYmF1ZAAMU2VyaWFsABZhZGRfY29tbWFuZAAIbmFtZQAoZGlzYWJsZV9yZXBsX2xvY2FsbHkACGVjaG8AEHJhd19lY2hvABByYXcgZWNobwAMbW9kdWxlACBnZXRfbnVtX2NvbW1hbmRzAB5nZXRfbnRoX2NvbW1hbmQAFmdldF92ZXJzaW9uABh0aW1lb3V0X2NoYXIACnJ4YnVmAIIjCRBjb21tYW5kcwAeY29tbWFuZF9mb3JtYXRzABpjb21tYW5kX2FycmF5AHkMZW5jb2RlAAZyYXcACHBhY2sAgkMMZGVjb2RlAAIoAAIuAIIPDHVucGFjawASYXZhaWxhYmxlAIF7DndhaXRpbmcAEmluV2FpdGluZwB3CmZsdXNoABRpbl93YWl0aW5nABByZWFkX2FsbAAUZm9yY2VfcmVhZAAecmVjZWl2ZV9jb21tYW5kAIEpBmVycgAQRGVsaW0ge30AGHNlbmRfY29tbWFuZACCSQhjYWxsABpyZXBseV9jb21tYW5kAA5hY2tfZXJyAA5jb21tYW5kAIJFDGFja19vawAGZm10AAZhY2sAGHByb2Nlc3NfdWFydAAIbG9vcAAacmVwbF9hY3RpdmF0ZQAQcmVwbF9ydW4AAgQAgjEOaW1wb3J0IAAYYWRkX2NvbW1hbmRzABRhZGRfbW9kdWxlAAYlZHMAJmdldF9yZW1vdGVfY29tbWFuZHMAAkIAFDIwMjQwNjIzMDAAEnBsYXRmb3JtcwASX3BsYXRmb3JtAEkiaW50ZXJydXB0X3ByZXNzZWQACmdwaW8wAAZhcmcALy01AnAAgXcEbXMAgikLghMObWVzc2FnZQCCNQpkZWJ1ZwAMcnhfcGluAAx0eF9waW4Agj2CL4EhAnMAIGNvbW1hbmRfZnVuY3Rpb24ABmNtZACBBYFXgT2BWRRfX2ltcG9ydF9fAAhzaXplAII7CnJlcGx5ABJyYXdfcGFzdGUAEm1vZF9ieXRlcwCBIwJuAAUSRXNwcmVzc2lmIEVTUDMyLVMyAAULT3Blbk1WNFAtSDcABRhMRUdPIExlYXJuaW5nIFN5c3RlbSBIdWIABSFBbiBlcnJvciBvY2N1cmVkIHdpdGggcmVtb3RlIHVhcnQABRFJbnRlcnJ1cHQgUHJlc3NlZAAGAAAIAzAuNQU9dXNhZ2UgcHl0aG9uMyA+Pj5VYXJ0UmVtb3RlKHBvcnQ9Ii9kZXYvdHR5LkxFR09IdWJTcGlrZUh1YjIiKQAFC2VuYWJsZSByZXBsAAUMZGlzYWJsZSByZXBsAAYEA3JhdwAGBQRyZXByAAYCAXoABgNyYXcABgRyZXByAAYBAAAFC0ZsdXNoZWQ6ICVyAAUhV2FpdGluZyBmb3IgZGF0YSBpbiBmb3JjZSByZWFkLi4uAAYBPAAFJTwgZGVsaW0gbm90IGZvdW5kIGFmdGVyIHRpbWVvdXQgb2Yge30ABgE+AAoCBQNlcnIABRE+IGRlbGltIG5vdCBmb3VuZAAFEkNvbW1hbmQgZmFpbGVkOiB7fQAFG1Jlc3BvbnNl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
"""
def calc_hash(b):
return hexlify(uhashlib.sha256(b).digest()).decode()
# this is the hash of the compiled uartremote.mpy
hash_gen='965ccc80fe50af678c024b0d8624421487b46ff7f46ba2c59a8b098841565a54'
uartremote=ubinascii.a2b_base64(b64)
hash_initial=calc_hash(uartremote)
try: # remove any old versions of uartremote library
uos.remove('/projects/uartremote.py')
uos.remove('/projects/uartremote.mpy')
except OSError:
pass
print('writing uartremote.mpy to folder /projects')
with open('/projects/uartremote.mpy','wb') as f:
f.write(uartremote)
print('Finished writing uartremote.mpy.')
print('Checking hash.')
uartremote_check=open('/projects/uartremote.mpy','rb').read()
hash_check=calc_hash(uartremote_check)
print('Hash generated: ',hash_gen)
error=False
if hash_initial != hash_gen:
print('Failed hash of base64 input : '+hash_initial)
error=True
if hash_check != hash_gen:
print('Failed hash of .mpy on SPIKE: '+hash_check)
error=True
if not error:
print('Uartremote library written succesfully. Resetting....')
machine.reset()
else:
print('Failure in Uartremote library!')