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(), )
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())