command: Directly call command_sendf() for ack/nak messages

Don't use the sendf() macro for ack and nak messages - directly call
the command_sendf() code instead.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2017-06-20 12:09:55 -04:00
parent 849096d5f3
commit c1bd628ce5
2 changed files with 8 additions and 11 deletions

View File

@ -29,9 +29,6 @@ def error(msg):
###################################################################### ######################################################################
def build_parser(parser, iscmd, all_param_types): def build_parser(parser, iscmd, all_param_types):
if parser.name == "#empty":
return "\n // Empty message\n .max_size=%d," % (
msgproto.MESSAGE_MIN,)
if parser.name == "#output": if parser.name == "#output":
comment = "Output: " + parser.msgformat comment = "Output: " + parser.msgformat
else: else:
@ -71,8 +68,6 @@ def build_encoders(encoders, msg_to_id, all_param_types):
if msgid in did_output: if msgid in did_output:
continue continue
s = msg s = msg
if s == '#empty':
s = ''
did_output[msgid] = True did_output[msgid] = True
code = (' if (__builtin_strcmp(str, "%s") == 0)\n' code = (' if (__builtin_strcmp(str, "%s") == 0)\n'
' return &command_encoder_%s;\n' % (s, msgid)) ' return &command_encoder_%s;\n' % (s, msgid))
@ -308,10 +303,7 @@ def main():
error("Conflicting definition for command '%s'" % msgname) error("Conflicting definition for command '%s'" % msgname)
messages_by_name[msgname] = msg messages_by_name[msgname] = msg
elif cmd == '_DECL_ENCODER': elif cmd == '_DECL_ENCODER':
if len(parts) == 1: msgname = parts[1]
msgname = msg = "#empty"
else:
msgname = parts[1]
m = messages_by_name.get(msgname) m = messages_by_name.get(msgname)
if m is not None and m != msg: if m is not None and m != msg:
error("Conflicting definition for message '%s'" % msgname) error("Conflicting definition for message '%s'" % msgname)

View File

@ -222,6 +222,11 @@ command_lookup_parser(uint8_t cmdid)
return &command_index[cmdid]; return &command_index[cmdid];
} }
// Empty message (for ack/nak transmission)
const struct command_encoder encode_acknak PROGMEM = {
.max_size = MESSAGE_MIN,
};
enum { CF_NEED_SYNC=1<<0, CF_NEED_VALID=1<<1 }; enum { CF_NEED_SYNC=1<<0, CF_NEED_VALID=1<<1 };
// Find the next complete message. // Find the next complete message.
@ -256,7 +261,7 @@ command_find_block(char *buf, uint8_t buf_len, uint8_t *pop_count)
goto nak; goto nak;
} }
next_sequence = ((msgseq + 1) & MESSAGE_SEQ_MASK) | MESSAGE_DEST; next_sequence = ((msgseq + 1) & MESSAGE_SEQ_MASK) | MESSAGE_DEST;
sendf(""); // An empty message with a new sequence number is an ack command_sendf(&encode_acknak);
return 1; return 1;
need_more_data: need_more_data:
@ -282,7 +287,7 @@ need_sync: ;
return -1; return -1;
sync_state |= CF_NEED_VALID; sync_state |= CF_NEED_VALID;
nak: nak:
sendf(""); // An empty message with a duplicate sequence number is a nak command_sendf(&encode_acknak);
return -1; return -1;
} }