]> git.saurik.com Git - apple/xnu.git/blobdiff - tools/lldbmacros/usertaskdebugging/rsprotocol.py
xnu-3789.1.32.tar.gz
[apple/xnu.git] / tools / lldbmacros / usertaskdebugging / rsprotocol.py
diff --git a/tools/lldbmacros/usertaskdebugging/rsprotocol.py b/tools/lldbmacros/usertaskdebugging/rsprotocol.py
new file mode 100644 (file)
index 0000000..fa4fc7a
--- /dev/null
@@ -0,0 +1,62 @@
+import logging
+
+
+class Message(object):
+    """represents a message of Remote serial protocol"""
+    def __init__(self, data):
+        super(Message, self).__init__()
+        self.data = data
+
+    def __str__(self):
+        return "Message: %s" % (self.data)
+
+    def getData(self):
+        #TODO need to parse data and unescape
+        return self.data
+    
+    def getRSPByteData(self):
+        retval = ''.join(['$',self.data,'#'])
+        checksum = 0
+        for i in self.data:
+            checksum += ord(i)
+        checksum = checksum % 0x100
+        checksum_str = "{:02x}".format(checksum)
+        retval += checksum_str
+        return retval
+
+    @classmethod
+    def fromRSPByteData(cls, bytedata):
+        data_begin = 0
+        data_end = 0
+        try:
+            data_begin = bytedata.index('$')
+            data_end = bytedata.index('#')
+        except ValueError, e:
+            logging.error('Invalid bytedata considered as message %s' % bytedata)
+            return None
+                
+        #validate the data
+        if data_begin + 1 >= data_end:
+            logging.debug("empty message %s"%bytedata)
+            data_begin -= 1
+
+        data_begin += 1
+        logging.debug("Creating message from data %s" % bytedata[data_begin:data_end])
+        ret_obj = cls(bytedata[data_begin:data_end])
+        return ret_obj
+
+class ProtocolAcknowledgement(Message):
+    """Ack Messages"""
+    def __init__(self, ack_str):
+        super(ProtocolAcknowledgement, self).__init__(ack_str)
+        self.data = ack_str
+    
+    def getRSPByteData(self):
+        return self.data
+
+
+OKMessage = Message('OK')
+
+AckMessage = ProtocolAcknowledgement('+')
+NAckMessage = ProtocolAcknowledgement('-')
+UnSupportedMessage = Message('')