The getenv operation executed via RATP is processed in the following way: * The client sends a 'getenv' packet to barebox specifying the name of the variable to read. * Barebox replies with a 'getenv_result' packet including the value of the variable read. We now consolidate this process using the request and response packet flags, and making them part of the same 'getenv' packet type. Signed-off-by: Aleksander Morgado <aleksander@xxxxxxxxxxxxx> --- common/ratp.c | 10 ++++++---- scripts/remote/controller.py | 13 ++++++++----- scripts/remote/messages.py | 19 ++++++++++--------- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/common/ratp.c b/common/ratp.c index 222bf624a..2423c0651 100644 --- a/common/ratp.c +++ b/common/ratp.c @@ -33,8 +33,7 @@ #define BB_RATP_TYPE_CONSOLE 1 #define BB_RATP_TYPE_PING 2 -#define BB_RATP_TYPE_GETENV 6 -#define BB_RATP_TYPE_GETENV_RETURN 7 +#define BB_RATP_TYPE_GETENV 3 #define BB_RATP_TYPE_FS 8 #define BB_RATP_TYPE_FS_RETURN 9 @@ -192,7 +191,8 @@ static int ratp_bb_send_getenv_return(struct ratp_ctx *ctx, const char *val) rbb = buf; strcpy(rbb->data, val); - rbb->type = cpu_to_be16(BB_RATP_TYPE_GETENV_RETURN); + rbb->type = cpu_to_be16(BB_RATP_TYPE_GETENV); + rbb->flags = cpu_to_be16(BB_RATP_FLAG_RESPONSE); ret = ratp_send(&ctx->ratp, buf, len); @@ -239,8 +239,10 @@ static int ratp_bb_dispatch(struct ratp_ctx *ctx, const void *buf, int len) break; case BB_RATP_TYPE_GETENV: - varname = xmemdup_add_zero(&rbb->data, dlen); + if (flags & BB_RATP_FLAG_RESPONSE) + break; + varname = xmemdup_add_zero(&rbb->data, dlen); ret = ratp_bb_send_getenv_return(ctx, getenv(varname)); break; diff --git a/scripts/remote/controller.py b/scripts/remote/controller.py index 518973038..29aa42ad9 100644 --- a/scripts/remote/controller.py +++ b/scripts/remote/controller.py @@ -37,9 +37,12 @@ def unpack(data): return BBPacketPingResponse(raw=data) logging.debug("received: ping") return BBPacketPingRequest(raw=data) - elif p_type == BBType.getenv_return: - logging.debug("received: getenv_return") - return BBPacketGetenvReturn(raw=data) + elif p_type == BBType.getenv: + if p_flag & BBFlag.response: + logging.debug("received: getenv response") + return BBPacketGetenvResponse(raw=data) + logging.debug("received: getenv") + return BBPacketGetenvRequest(raw=data) elif p_type == BBType.fs: logging.debug("received: fs") return BBPacketFS(raw=data) @@ -108,8 +111,8 @@ class Controller(Thread): return r.exit_code def getenv(self, varname): - self._send(BBPacketGetenv(varname=varname)) - r = self._expect(BBPacketGetenvReturn) + self._send(BBPacketGetenvRequest(varname=varname)) + r = self._expect(BBPacketGetenvResponse) return r.text def close(self): diff --git a/scripts/remote/messages.py b/scripts/remote/messages.py index 6c5601d78..88841f4f6 100644 --- a/scripts/remote/messages.py +++ b/scripts/remote/messages.py @@ -14,8 +14,7 @@ class BBFlag(object): class BBType(object): console = 1 ping = 2 - getenv = 6 - getenv_return = 7 + getenv = 3 fs = 8 fs_return = 9 @@ -116,13 +115,14 @@ class BBPacketPingResponse(BBPacket): return "BBPacketPingResponse()" -class BBPacketGetenv(BBPacket): +class BBPacketGetenvRequest(BBPacket): def __init__(self, raw=None, varname=None): self.varname = varname - super(BBPacketGetenv, self).__init__(BBType.getenv, raw=raw) + super(BBPacketGetenvRequest, self).__init__(BBType.getenv, + raw=raw) def __repr__(self): - return "BBPacketGetenv(varname=%r)" % self.varname + return "BBPacketGetenvRequest(varname=%r)" % self.varname def _unpack_payload(self, payload): self.varname = payload @@ -131,14 +131,15 @@ class BBPacketGetenv(BBPacket): return self.varname -class BBPacketGetenvReturn(BBPacket): +class BBPacketGetenvResponse(BBPacket): def __init__(self, raw=None, text=None): self.text = text - super(BBPacketGetenvReturn, self).__init__(BBType.getenv_return, - raw=raw) + super(BBPacketGetenvResponse, self).__init__(BBType.getenv, + BBFlag.response, + raw=raw) def __repr__(self): - return "BBPacketGetenvReturn(varvalue=%s)" % self.text + return "BBPacketGetenvResponse(varvalue=%s)" % self.text def _unpack_payload(self, payload): self.text = payload -- 2.15.1 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox