command: Simplify sendf() switch

Commit f28eb902 reworked the switch to fix int16 encoding.  However,
at least one version of avr gcc doesn't like that switch layout (it
uses a jump table).  Reorg the switch to avoid that issue.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2017-03-26 21:51:58 -04:00
parent 6de85d02ae
commit d67f962a38
1 changed files with 10 additions and 9 deletions

View File

@ -139,17 +139,18 @@ _sendf(uint8_t parserid, ...)
param_types++;
uint32_t v;
switch (t) {
case PT_byte:
case PT_uint16:
v = va_arg(args, unsigned int);
goto encode_int;
case PT_int16:
v = (int32_t)va_arg(args, int);
goto encode_int;
case PT_uint32:
case PT_int32:
v = va_arg(args, uint32_t);
encode_int:
case PT_uint16:
case PT_int16:
case PT_byte:
if (t >= PT_uint16)
if (t == PT_int16)
v = (int32_t)va_arg(args, int);
else
v = va_arg(args, unsigned int);
else
v = va_arg(args, uint32_t);
p = encode_int(p, v);
break;
case PT_string: {