diff --git a/bacnet-stack/bacapp.c b/bacnet-stack/bacapp.c index bbef53f4..7ea39b0c 100644 --- a/bacnet-stack/bacapp.c +++ b/bacnet-stack/bacapp.c @@ -48,48 +48,66 @@ int bacapp_encode_application_data(uint8_t * apdu, { int apdu_len = 0; /* total length of the apdu, return value */ - if (apdu) { - if (value->tag == BACNET_APPLICATION_TAG_NULL) - apdu[apdu_len++] = value->tag; - else if (value->tag == BACNET_APPLICATION_TAG_BOOLEAN) - apdu_len += encode_tagged_boolean(&apdu[apdu_len], - value->type.Boolean); - else if (value->tag == BACNET_APPLICATION_TAG_UNSIGNED_INT) - apdu_len += encode_tagged_unsigned(&apdu[apdu_len], - value->type.Unsigned_Int); - else if (value->tag == BACNET_APPLICATION_TAG_SIGNED_INT) - apdu_len += encode_tagged_signed(&apdu[apdu_len], - value->type.Signed_Int); - else if (value->tag == BACNET_APPLICATION_TAG_REAL) - apdu_len += encode_tagged_real(&apdu[apdu_len], - value->type.Real); -#if 0 - else if (value->tag == BACNET_APPLICATION_TAG_DOUBLE) - apdu_len += encode_tagged_double(&apdu[apdu_len], - value->type.Double); -#endif - else if (value->tag == BACNET_APPLICATION_TAG_OCTET_STRING) - apdu_len += encode_tagged_octet_string(&apdu[apdu_len], - &value->type.Octet_String); - else if (value->tag == BACNET_APPLICATION_TAG_CHARACTER_STRING) - apdu_len += encode_tagged_character_string(&apdu[apdu_len], - &value->type.Character_String); - else if (value->tag == BACNET_APPLICATION_TAG_BIT_STRING) - apdu_len += encode_tagged_bitstring(&apdu[apdu_len], - &value->type.Bit_String); - else if (value->tag == BACNET_APPLICATION_TAG_ENUMERATED) - apdu_len += encode_tagged_enumerated(&apdu[apdu_len], - value->type.Enumerated); - else if (value->tag == BACNET_APPLICATION_TAG_DATE) - apdu_len += encode_tagged_date(&apdu[apdu_len], - &value->type.Date); - else if (value->tag == BACNET_APPLICATION_TAG_TIME) - apdu_len += encode_tagged_time(&apdu[apdu_len], - &value->type.Time); - else if (value->tag == BACNET_APPLICATION_TAG_OBJECT_ID) - apdu_len += encode_tagged_object_id(&apdu[apdu_len], - value->type.Object_Id.type, - value->type.Object_Id.instance); + if (value && apdu) + { + switch (value->tag) { + case BACNET_APPLICATION_TAG_NULL: + apdu[0] = value->tag; + apdu_len++; + break; + case BACNET_APPLICATION_TAG_BOOLEAN: + apdu_len = encode_tagged_boolean(&apdu[0], + value->type.Boolean); + break; + case BACNET_APPLICATION_TAG_UNSIGNED_INT: + apdu_len = encode_tagged_unsigned(&apdu[0], + value->type.Unsigned_Int); + break; + case BACNET_APPLICATION_TAG_SIGNED_INT: + apdu_len = encode_tagged_signed(&apdu[0], + value->type.Signed_Int); + break; + case BACNET_APPLICATION_TAG_REAL: + apdu_len = encode_tagged_real(&apdu[0], + value->type.Real); + break; + case BACNET_APPLICATION_TAG_ENUMERATED: + apdu_len = encode_tagged_enumerated(&apdu[0], + value->type.Enumerated); + break; + case BACNET_APPLICATION_TAG_DATE: + apdu_len = encode_tagged_date(&apdu[0], + &value->type.Date); + break; + case BACNET_APPLICATION_TAG_TIME: + apdu_len = encode_tagged_time(&apdu[0], + &value->type.Time); + break; + case BACNET_APPLICATION_TAG_OBJECT_ID: + apdu_len = encode_tagged_object_id(&apdu[0], + value->type.Object_Id.type, + value->type.Object_Id.instance); + break; + case BACNET_APPLICATION_TAG_OCTET_STRING: + apdu_len = encode_tagged_octet_string(&apdu[0], + &value->type.Octet_String); + break; + case BACNET_APPLICATION_TAG_CHARACTER_STRING: + apdu_len = encode_tagged_character_string(&apdu[0], + &value->type.Character_String); + break; + case BACNET_APPLICATION_TAG_BIT_STRING: + apdu_len = encode_tagged_bitstring(&apdu[0], + &value->type.Bit_String); + break; + case BACNET_APPLICATION_TAG_DOUBLE: + /* FIXME: double is not implemented yet. + apdu_len = encode_tagged_double(&apdu[0], + value->type.Double); + */ + default: + break; + } } return apdu_len; diff --git a/bacnet-stack/bacapp.ide b/bacnet-stack/bacapp.ide index d83f57c6..e79ca367 100644 Binary files a/bacnet-stack/bacapp.ide and b/bacnet-stack/bacapp.ide differ