示例#1
0
def build_parsers(parsers, msg_to_id, all_param_types):
    pcode = []
    for msgname, msg in parsers:
        msgid = msg_to_id[msg]
        if msgname is None:
            parser = msgproto.OutputFormat(msgid, msg)
        else:
            parser = msgproto.MessageFormat(msgid, msg)
        parsercode = build_parser(parser, 0, all_param_types)
        pcode.append("{%s\n}, " % (parsercode, ))
    fmt = """
const struct command_encoder command_encoders[] PROGMEM = {
%s
};
"""
    return fmt % ("".join(pcode).strip(), )
示例#2
0
def build_encoders(encoders, msg_to_id, all_param_types):
    encoder_defs = []
    output_code = []
    encoder_code = []
    did_output = {}
    for msgname, msg in encoders:
        msgid = msg_to_id[msg]
        if msgid in did_output:
            continue
        s = msg
        if s == '#empty':
            s = ''
        did_output[msgid] = True
        code = ('    if (__builtin_strcmp(str, "%s") == 0)\n'
                '        return &command_encoder_%s;\n' % (s, msgid))
        if msgname is None:
            parser = msgproto.OutputFormat(msgid, msg)
            output_code.append(code)
        else:
            parser = msgproto.MessageFormat(msgid, msg)
            encoder_code.append(code)
        parsercode = build_parser(parser, 0, all_param_types)
        encoder_defs.append(
            "const struct command_encoder command_encoder_%s PROGMEM = {"
            "    %s\n};\n" % (msgid, parsercode))
    fmt = """
%s

const __always_inline struct command_encoder *
ctr_lookup_encoder(const char *str)
{
    %s
    return NULL;
}

const __always_inline struct command_encoder *
ctr_lookup_output(const char *str)
{
    %s
    return NULL;
}
"""
    return fmt % ("".join(encoder_defs).strip(), "".join(encoder_code).strip(),
                  "".join(output_code).strip())