/* BACnetTimeStamp ::= CHOICE { time  Time, sequenceNumber  Unsigned (0..65535), dateTime  BACnetDateTime }  */
static guint fTimeStamp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, const gchar *label)
/* BACnetTimeStamp ::= CHOICE { time  Time, sequenceNumber  Unsigned (0..65535), dateTime  BACnetDateTime }  */
static guint fTimeStamp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offset, const gchar *label)
{
    guint8  tag_no = 0, tag_info = 0;
    guint32 lvt    = 0;
    if (tvb_reported_length_remaining(tvb, offset) > 0) {
        switch (fTagNo(tvb, offset)) {
        case 0:
            offset = fTime(tvb, pinfo, tree, offset, label?label:"time: ");
            break;
        case 1:
            offset = fUnsignedTag(tvb, pinfo, tree, offset,
                label?label:"sequence number: ");
            break;
        case 2:
            offset += fTagHeaderTree(tvb, pinfo, tree, offset, &tag_no, &tag_info, &lvt);
            offset  = fDateTime(tvb, pinfo, tree, offset, label?label:"date time: ");
            offset += fTagHeaderTree(tvb, pinfo, tree, offset, &tag_no, &tag_info, &lvt);
            break;
        default:
            return offset;
        }
    }
    return offset;
}