From c69c47be6dbe7df68f689090b2cda4ffb387a5e3 Mon Sep 17 00:00:00 2001
From: chenxinyuanchen <chenxinyuanchen@xiaomi.com>
Date: Thu, 9 Feb 2023 15:03:01 +0800
Subject: [PATCH 1/2] edlclient: get hwid and pkhash only when programmer not
 specified

Also add exception catch when formatting serial num. so it will not
break the next stage.

Signed-off-by: chenxinyuanchen <chenxinyuanchen@xiaomi.com>
---
 edlclient/Library/firehose.py | 14 ++++++++++++--
 edlclient/Library/sahara.py   |  6 ++++--
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/edlclient/Library/firehose.py b/edlclient/Library/firehose.py
index 488c48a..2e41a11 100755
--- a/edlclient/Library/firehose.py
+++ b/edlclient/Library/firehose.py
@@ -5,6 +5,7 @@
 import binascii
 import io
 import platform
+import re
 import time
 import json
 from struct import unpack
@@ -1106,8 +1107,17 @@ class firehose(metaclass=LogBase):
                         self.serial = int(serial, 16)
                     except Exception as err:  # pylint: disable=broad-except
                         self.debug(str(err))
-                        serial = line.split(": ")[2]
-                        self.serial = int(serial.split(" ")[0])
+                        try:
+                            serial = line.split(": ")[2]
+                            self.serial = int(serial.split(" ")[0])
+                        except Exception as err1:
+                            self.debug(str(err1))
+                            try:
+                                # Firehose return format: "Chip serial num (0x%lx) Chip ID (0x%x)"
+                                serial_re = re.findall("Chip serial num \\(0x(.*?)\\)", line)
+                                self.serial = int(serial_re[0], 16)
+                            except Exception as err2:
+                                self.error(err2)
                 if supfunc and "end of supported functions" not in line.lower():
                     rs = line.replace("\n", "")
                     if rs != "":
diff --git a/edlclient/Library/sahara.py b/edlclient/Library/sahara.py
index d2d86a2..a8c39c7 100755
--- a/edlclient/Library/sahara.py
+++ b/edlclient/Library/sahara.py
@@ -212,10 +212,12 @@ class sahara(metaclass=LogBase):
         if self.enter_command_mode():
             self.serial = self.cmdexec_get_serial_num()
             self.serials = "{:08x}".format(self.serial)
-            self.hwid = self.cmdexec_get_msm_hwid()
-            self.pkhash = self.cmdexec_get_pkhash()
             # if self.version>=2.4:
             #    self.sblversion = "{:08x}".format(self.cmdexec_get_sbl_version())
+            if self.programmer == "":
+                self.hwid = self.cmdexec_get_msm_hwid()
+                self.pkhash = self.cmdexec_get_pkhash()
+
             if self.hwid is not None:
                 self.hwidstr = "{:016x}".format(self.hwid)
                 self.msm_id = int(self.hwidstr[2:8], 16)

From 4f7275119bafaf45761ce338b93ae1d469f4f0e6 Mon Sep 17 00:00:00 2001
From: chenxinyuanchen <chenxinyuanchen@xiaomi.com>
Date: Thu, 9 Feb 2023 16:33:44 +0800
Subject: [PATCH 2/2] qc_diag: should get 'id' instead of 'image_id'

Signed-off-by: chenxinyuanchen <chenxinyuanchen@xiaomi.com>
---
 edlclient/Tools/qc_diag.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/edlclient/Tools/qc_diag.py b/edlclient/Tools/qc_diag.py
index 0229fc8..605516a 100755
--- a/edlclient/Tools/qc_diag.py
+++ b/edlclient/Tools/qc_diag.py
@@ -337,7 +337,7 @@ class qcdiag(metaclass=LogBase):
         e = ElementTree.parse(nvxml).getroot()
         for atype in e.findall("nv"):
             name = atype.get("name")
-            identifier = int(atype.get("image_id"))
+            identifier = int(atype.get("id"))
             self.nvlist[identifier] = name
 
     def prettyprint(self, data):