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:
parent
849096d5f3
commit
c1bd628ce5
|
@ -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)
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue