ASN1C компиляция

0

У меня есть небольшой код asn1:

---------------------ASN1 FILE------------------------------

RectangleModule1 DEFINITIONS ::= 
BEGIN
Rectangle ::= SEQUENCE (SIZE(1..10)) OF SEQUENCE {

 item CHOICE    {

  height INTEGER,

  width  IA5String

 } --# UNTAGGED
}

END

Когда я скомпилирую его с помощью asn1c, он дает мне файлы Rectangle.c и Rectangle.h. Вывод Rectangle выглядит следующим образом:

-----------------------Rectangle. h------------------------------

/* Dependencies */

typedef enum item_PR {
  item_PR_NOTHING,    /* No components present */
item_PR_height,
item_PR_width
  } item_PR;

/* Rectangle */
typedef struct Rectangle {
  A_SEQUENCE_OF(struct Member {
    struct item {
        item_PR present;
        union item_u {
            long     height;
            IA5String_t  width;
        } choice;

        /* Context for parsing across buffer boundaries */
        asn_struct_ctx_t _asn_ctx;
    } item;

    /* Context for parsing across buffer boundaries */
    asn_struct_ctx_t _asn_ctx;
  } ) list;

  /* Context for parsing across buffer boundaries */
  asn_struct_ctx_t _asn_ctx;
 } Rectangle_t;

но я хотел, чтобы мой результат выглядел так:

  /* Dependencies */
  typedef enum item_PR_sl {
  item_PR_NOTHING_sl,    /* No components present */
  item_PR_height_sl,
  item_PR_width_sl
  } item_PR_sl;

  /* Rectangle */
  typedef struct Rectangle {
  A_SEQUENCE_OF(struct Member {
        struct item_sl {
        item_PR_sl present;
        union item_u_sl {
            long     height;
            IA5String_t  width;
        } choice;

        /* Context for parsing across buffer boundaries */
        asn_struct_ctx_t _asn_ctx;
    } item;

    /* Context for parsing across buffer boundaries */
    asn_struct_ctx_t _asn_ctx;
} ) list;

/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
  } Rectangle_t;

т.е. _sl объединяется в поля элемента. Я не смог сделать это, изменив файл asn. Я не знаю, как constr_CHOICE и constr_SEQUENCE. Любая помощь будет оценена по достоинству.

Теги:
encoding
asn.1

1 ответ

2
Лучший ответ

Проведя несколько часов, я понял, что это невозможно сделать, изменив файл asn. Это можно сделать только путем редактирования файлов .h и .c, сгенерированных путем компиляции asn файла.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню