You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently, some remote methods are unrepresentable, e.g. apps_std.mkdir(in string, in int). This method uses a variable-length input buffer, with the
length stored as the first 32-bit word in the primary input buffer. The current struct fastrpc_function_def_interp2 has no information about the arrangement
of parameters. It assumes that all direct input words (such as ints, longs, or
structs) go before all lengths in the primary input buffer.
It also can't represent remotectl.set_param(in int, in sequence<int>). This
method has a variable-length input buffer. The number of elements is stored in
the primary input buffer, but each element is 4 bytes. Currently, an assumption
is made that each element in a variable-length input buffer is 1 byte.
A new method definition could accommodate these remote methods:
// A 32-bit word in a primary buffer
#define HEXAGONRPC_WORD 0
// A delimiter between the inputs and outputs
#define HEXAGONRPC_DELIMITER 0xFFFFFFFF
struct hrpc_method_def_interp3 {
uint32_t msg_id;
bool has_prim_out;
size_t n_args;
const uint32_t *args;
};
Here, the elements of args each represent the byte size of each element in a
variable-length buffer. For a sequence of octets, it is 1. A value of 0 denotes
a 32-bit word which is a direct parameter to the remote method.
This still doesn't perfectly accommodate apps_std.readdir(in long, rout struct, rout int), which outputs a 260-byte struct. While this remote method can still be
represented, calling the method is tedious:
Currently, some remote methods are unrepresentable, e.g.
apps_std.mkdir(in string, in int)
. This method uses a variable-length input buffer, with thelength stored as the first 32-bit word in the primary input buffer. The current
struct fastrpc_function_def_interp2
has no information about the arrangementof parameters. It assumes that all direct input words (such as ints, longs, or
structs) go before all lengths in the primary input buffer.
It also can't represent
remotectl.set_param(in int, in sequence<int>)
. Thismethod has a variable-length input buffer. The number of elements is stored in
the primary input buffer, but each element is 4 bytes. Currently, an assumption
is made that each element in a variable-length input buffer is 1 byte.
A new method definition could accommodate these remote methods:
Here, the elements of
args
each represent the byte size of each element in avariable-length buffer. For a sequence of octets, it is 1. A value of 0 denotes
a 32-bit word which is a direct parameter to the remote method.
This still doesn't perfectly accommodate
apps_std.readdir(in long, rout struct, rout int)
, which outputs a 260-byte struct. While this remote method can still berepresented, calling the method is tedious:
The text was updated successfully, but these errors were encountered: