summaryrefslogtreecommitdiffstats
path: root/scripts/remote/messages.py
diff options
context:
space:
mode:
authorJan Luebbe <jlu@pengutronix.de>2015-06-05 09:18:56 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2016-01-18 09:25:50 +0100
commitbe6c6e653683e86d4c7aeb2b67c62ec0895befa3 (patch)
tree16de4d407994470101aed97834a4b6249f4952cd /scripts/remote/messages.py
parent06fc3557c94c2b9d43bcfab72f4a024c7860be64 (diff)
downloadbarebox-be6c6e653683e86d4c7aeb2b67c62ec0895befa3.tar.gz
barebox-be6c6e653683e86d4c7aeb2b67c62ec0895befa3.tar.xz
host side for barebox remote control
This contains the host tool for barebox remote control. It is written in Phython with its own implementation of the RATP protocol. Currently this is a very simple tool which needs more work, but the code can also be used as a library. Example output: console: '. ' console: '.. ' console: 'dev ' console: 'env ' console: 'mnt ' console: '\n' Result: BBPacketCommandReturn(exit_code=0) Signed-off-by: Jan Lübbe <j.luebbe@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Tested-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Diffstat (limited to 'scripts/remote/messages.py')
-rw-r--r--scripts/remote/messages.py154
1 files changed, 154 insertions, 0 deletions
diff --git a/scripts/remote/messages.py b/scripts/remote/messages.py
new file mode 100644
index 0000000000..8e8495b12e
--- /dev/null
+++ b/scripts/remote/messages.py
@@ -0,0 +1,154 @@
+#!/usr/bin/env python2
+# -*- coding: utf-8 -*-
+
+from __future__ import absolute_import, division, print_function
+
+import struct
+
+
+class BBType(object):
+ command = 1
+ command_return = 2
+ consolemsg = 3
+ ping = 4
+ pong = 5
+ getenv = 6
+ getenv_return = 7
+ fs = 8
+ fs_return = 9
+
+
+class BBPacket(object):
+ def __init__(self, p_type=0, p_flags=0, payload="", raw=None):
+ self.p_type = p_type
+ self.p_flags = p_flags
+ if raw is not None:
+ self.unpack(raw)
+ else:
+ self.payload = payload
+
+ def __repr__(self):
+ return "BBPacket(%i, %i)" % (self.p_type, self.p_flags)
+
+ def _unpack_payload(self, data):
+ self.payload = data
+
+ def _pack_payload(self):
+ return self.payload
+
+ def unpack(self, data):
+ self.p_type, self.p_flags = struct.unpack("!HH", data[:4])
+ self._unpack_payload(data[4:])
+
+ def pack(self):
+ return struct.pack("!HH", self.p_type, self.p_flags) + \
+ self._pack_payload()
+
+
+class BBPacketCommand(BBPacket):
+ def __init__(self, raw=None, cmd=None):
+ self.cmd = cmd
+ super(BBPacketCommand, self).__init__(BBType.command, raw=raw)
+
+ def __repr__(self):
+ return "BBPacketCommand(cmd=%r)" % self.cmd
+
+ def _unpack_payload(self, payload):
+ self.cmd = payload
+
+ def _pack_payload(self):
+ return self.cmd
+
+
+class BBPacketCommandReturn(BBPacket):
+ def __init__(self, raw=None, exit_code=None):
+ self.exit_code = exit_code
+ super(BBPacketCommandReturn, self).__init__(BBType.command_return,
+ raw=raw)
+
+ def __repr__(self):
+ return "BBPacketCommandReturn(exit_code=%i)" % self.exit_code
+
+ def _unpack_payload(self, data):
+ self.exit_code, = struct.unpack("!L", data[:4])
+
+ def _pack_payload(self):
+ return struct.pack("!L", self.exit_code)
+
+
+class BBPacketConsoleMsg(BBPacket):
+ def __init__(self, raw=None, text=None):
+ self.text = text
+ super(BBPacketConsoleMsg, self).__init__(BBType.consolemsg, raw=raw)
+
+ def __repr__(self):
+ return "BBPacketConsoleMsg(text=%r)" % self.text
+
+ def _unpack_payload(self, payload):
+ self.text = payload
+
+ def _pack_payload(self):
+ return self.text
+
+
+class BBPacketPing(BBPacket):
+ def __init__(self, raw=None):
+ super(BBPacketPing, self).__init__(BBType.ping, raw=raw)
+
+ def __repr__(self):
+ return "BBPacketPing()"
+
+
+class BBPacketPong(BBPacket):
+ def __init__(self, raw=None):
+ super(BBPacketPong, self).__init__(BBType.pong, raw=raw)
+
+ def __repr__(self):
+ return "BBPacketPong()"
+
+
+class BBPacketGetenv(BBPacket):
+ def __init__(self, raw=None, varname=None):
+ self.varname = varname
+ super(BBPacketGetenv, self).__init__(BBType.getenv, raw=raw)
+
+ def __repr__(self):
+ return "BBPacketGetenv(varname=%r)" % self.varname
+
+ def _unpack_payload(self, payload):
+ self.varname = payload
+
+ def _pack_payload(self):
+ return self.varname
+
+
+class BBPacketGetenvReturn(BBPacket):
+ def __init__(self, raw=None, text=None):
+ self.text = text
+ super(BBPacketGetenvReturn, self).__init__(BBType.getenv_return,
+ raw=raw)
+
+ def __repr__(self):
+ return "BBPacketGetenvReturn(varvalue=%s)" % self.text
+
+ def _unpack_payload(self, payload):
+ self.text = payload
+
+ def _pack_payload(self):
+ return self.text
+
+
+class BBPacketFS(BBPacket):
+ def __init__(self, raw=None, payload=None):
+ super(BBPacketFS, self).__init__(BBType.fs, payload=payload, raw=raw)
+
+ def __repr__(self):
+ return "BBPacketFS(payload=%r)" % self.payload
+
+
+class BBPacketFSReturn(BBPacket):
+ def __init__(self, raw=None, payload=None):
+ super(BBPacketFSReturn, self).__init__(BBType.fs_return, payload=payload, raw=raw)
+
+ def __repr__(self):
+ return "BBPacketFSReturn(payload=%r)" % self.payload