ASN1C компиляция

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

———————ФАЙЛ ASN1 ——————————

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 работают. Любая помощь будет оценена.

0

Решение

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]