From eaa72c7a912a63d7bba67d6624bc68bc0868edf8 Mon Sep 17 00:00:00 2001 From: Hector Martin Date: Wed, 10 Nov 2021 16:36:12 +0900 Subject: [PATCH] m1n1.fw.smc: Improve and add more functions Signed-off-by: Hector Martin --- proxyclient/m1n1/fw/smc.py | 50 +++++++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 6 deletions(-) diff --git a/proxyclient/m1n1/fw/smc.py b/proxyclient/m1n1/fw/smc.py index cc3a7a9f..9aa235b5 100644 --- a/proxyclient/m1n1/fw/smc.py +++ b/proxyclient/m1n1/fw/smc.py @@ -42,6 +42,9 @@ class SMCResult(Register64): SIZE = 31, 16 VALUE = 63, 32 +class SMCError(Exception): + pass + class SMCEndpoint(ASCBaseEndpoint): BASE_MESSAGE = SMCMessage SHORT = "smcep" @@ -51,9 +54,11 @@ class SMCEndpoint(ASCBaseEndpoint): self.shmem = None self.msgid = 0 self.outstanding = set() + self.ret = {} def start(self): self.send(SMCInitialize(ID = 0)) + self.msgid += 1 # important! while self.shmem is None: self.asc.work() @@ -64,14 +69,48 @@ class SMCEndpoint(ASCBaseEndpoint): self.outstanding.add(mid) return mid - def write_key(self, key, data): - print(self.shmem, key, data, len(data)) + def write(self, key, data): + key = int.from_bytes(key.encode("ascii"), byteorder="big") self.asc.iface.writemem(self.shmem, data) ID = self.new_msgid() self.send(SMCWriteKey(ID = ID, KEY = key, SIZE = len(data))) while ID in self.outstanding: self.asc.work() - return True + ret = self.ret[ID] + if ret.RESULT != 0: + raise SMCError(f"SMC error {ret}", ret) + + def write32(self, key, data): + self.write(key, struct.pack("