diff options
author | Jan Luebbe <jlu@pengutronix.de> | 2015-06-05 09:18:56 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2016-01-18 09:25:50 +0100 |
commit | be6c6e653683e86d4c7aeb2b67c62ec0895befa3 (patch) | |
tree | 16de4d407994470101aed97834a4b6249f4952cd /scripts/remote/messages.py | |
parent | 06fc3557c94c2b9d43bcfab72f4a024c7860be64 (diff) | |
download | barebox-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.py | 154 |
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 |