summaryrefslogtreecommitdiffstats
path: root/samloader/request.py
blob: bb95e78169f805b88d5fe5798e2fb12df364a9dd (plain) (blame)
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
# SPDX-License-Identifier: GPL-3.0+
# Copyright (C) 2020 nlscc

# Build FUS XML requests.

import xml.etree.ElementTree as ET

def getlogiccheck(inp, nonce):
    out = ""
    for c in nonce:
        out += inp[ord(c) & 0xf]
    return out

def binaryinform(fw, region, model, nonce):
    fusmsg = ET.Element("FUSMsg")
    fushdr = ET.SubElement(fusmsg, "FUSHdr")
    ET.SubElement(fushdr, "ProtoVer").text = "1.0"
    fusbody = ET.SubElement(fusmsg, "FUSBody")
    fput = ET.SubElement(fusbody, "Put")
    ET.SubElement(ET.SubElement(fput, "ACCESS_MODE"), "Data").text = "2"
    ET.SubElement(ET.SubElement(fput, "BINARY_NATURE"), "Data").text = "1"
    ET.SubElement(ET.SubElement(fput, "CLIENT_PRODUCT"), "Data").text = "Smart Switch"
    ET.SubElement(ET.SubElement(fput, "DEVICE_FW_VERSION"), "Data").text = fw
    ET.SubElement(ET.SubElement(fput, "DEVICE_LOCAL_CODE"), "Data").text = region
    ET.SubElement(ET.SubElement(fput, "DEVICE_MODEL_NAME"), "Data").text = model
    ET.SubElement(ET.SubElement(fput, "LOGIC_CHECK"), "Data").text = getlogiccheck(fw, nonce)
    return ET.tostring(fusmsg)

def binaryinit(filename, nonce):
    fusmsg = ET.Element("FUSMsg")
    fushdr = ET.SubElement(fusmsg, "FUSHdr")
    ET.SubElement(fushdr, "ProtoVer").text = "1.0"
    fusbody = ET.SubElement(fusmsg, "FUSBody")
    fput = ET.SubElement(fusbody, "Put")
    ET.SubElement(ET.SubElement(fput, "BINARY_FILE_NAME"), "Data").text = filename
    checkinp = filename.split(".")[0][-16:]
    ET.SubElement(ET.SubElement(fput, "LOGIC_CHECK"), "Data").text = getlogiccheck(checkinp, nonce)
    return ET.tostring(fusmsg)