add ffasn1c example for RSPRO
This can help us for debugging using an independent decoder compared to asn1c
Change-Id: I15293014cddb75190e7f848fff6d07a3401461ff
diff --git a/ffasn1c/Makefile b/ffasn1c/Makefile
new file mode 100644
index 0000000..66959a2
--- /dev/null
+++ b/ffasn1c/Makefile
@@ -0,0 +1,17 @@
+FFASN1C_LIBS = -L/usr/local/lib -lffasn1 -lffasn1_runtime_stdc
+FFASN1C_CFLAGS = -I/usr/local/include/ffasn1c
+
+CFLAGS+=-Wall $(FFASN1C_CFLAGS)
+LIBS+=$(FFASN1C_LIBS)
+
+main: main.o rspro.o
+ $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
+
+%.o: %.c
+ $(CC) $(CFLAGS) -o $@ -c $^
+
+rspro.c: ../asn1/RSPRO.asn
+ ffasn1c -o $@ $^
+
+clean:
+ @rm -f *.o main
diff --git a/ffasn1c/main.c b/ffasn1c/main.c
new file mode 100644
index 0000000..62730f5
--- /dev/null
+++ b/ffasn1c/main.c
@@ -0,0 +1,39 @@
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include <asn1defs.h>
+
+#include "rspro.h"
+
+
+static void transcode(const uint8_t *buf, unsigned int len)
+{
+ ASN1Error err;
+ struct RsproPDU *pdu;
+ int rc;
+ char *gserbuf;
+
+ rc = asn1_ber_decode((void **)&pdu, asn1_type_RsproPDU, buf, len, &err);
+ printf("rc=%d\n", rc);
+
+ rc = asn1_gser_encode((uint8_t **) &gserbuf, asn1_type_RsproPDU, pdu);
+ printf("rc=%d\n", rc);
+ printf("%s\n", gserbuf);
+}
+
+int main(int argc, char **argv)
+{
+ uint8_t buf[2048];
+ int fd, rc;
+
+ fd = open(argv[1], O_RDONLY);
+ if (fd < 0)
+ exit(1);
+ rc = read(fd, buf, sizeof(buf));
+ close(fd);
+
+ transcode(buf, rc);
+}
diff --git a/ffasn1c/rspro.c b/ffasn1c/rspro.c
new file mode 100644
index 0000000..aed2f04
--- /dev/null
+++ b/ffasn1c/rspro.c
@@ -0,0 +1,722 @@
+/* Automatically generated file - do not edit */
+
+#include "asn1defs.h"
+#include "rspro.h"
+
+const ASN1CType asn1_type_OperationTag[] = {
+ (ASN1_CTYPE_INTEGER << ASN1_CTYPE_SHIFT) | 0x5800000 | 0x100001,
+ 0x0,
+ 0x7fffffff,
+ (intptr_t)"OperationTag",
+};
+
+const ASN1CType asn1_type_BankId[] = {
+ (ASN1_CTYPE_INTEGER << ASN1_CTYPE_SHIFT) | 0x5800000 | 0x2,
+ 0x0,
+ 0x3ff,
+ (intptr_t)"BankId",
+};
+
+const ASN1CType asn1_type_ClientId[] = {
+ (ASN1_CTYPE_INTEGER << ASN1_CTYPE_SHIFT) | 0x5800000 | 0x2,
+ 0x0,
+ 0x3ff,
+ (intptr_t)"ClientId",
+};
+
+const ASN1CType asn1_type_ComponentType[] = {
+ (ASN1_CTYPE_ENUMERATED << ASN1_CTYPE_SHIFT) | 0x4000000 | 0xa,
+ 3,
+ (intptr_t)"remsimClient",
+ (intptr_t)"remsimServer",
+ (intptr_t)"remsimBankd",
+ (intptr_t)"ComponentType",
+};
+
+const ASN1CType asn1_type_ComponentName[] = {
+ (ASN1_CTYPE_CHAR_STRING << ASN1_CTYPE_SHIFT) | 0x5800000 | 0x16,
+ ASN1_CSTR_IA5String,
+ 0x1,
+ 0x20,
+ 1,
+ 0x0,
+ 0x7f,
+ (intptr_t)"ComponentName",
+};
+
+static const ASN1CType asn1_type__local_0[] = {
+ (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+ (intptr_t)asn1_type_ComponentName,
+};
+
+static const ASN1CType asn1_type__local_1[] = {
+ (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+ (intptr_t)asn1_type_ComponentName,
+};
+
+static const ASN1CType asn1_type__local_2[] = {
+ (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100002,
+ (intptr_t)asn1_type_ComponentName,
+};
+
+static const ASN1CType asn1_type__local_3[] = {
+ (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100003,
+ (intptr_t)asn1_type_ComponentName,
+};
+
+static const ASN1CType asn1_type__local_4[] = {
+ (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100004,
+ (intptr_t)asn1_type_ComponentName,
+};
+
+static const ASN1CType asn1_type__local_5[] = {
+ (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100005,
+ (intptr_t)asn1_type_ComponentName,
+};
+
+static const ASN1CType asn1_type__local_6[] = {
+ (ASN1_CTYPE_TAGGED << ASN1_CTYPE_SHIFT) | 0x0 | 0x100006,
+ (intptr_t)asn1_type_ComponentName,
+};
+
+const ASN1CType asn1_type_ComponentIdentity[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10,
+ 9,
+ sizeof(ComponentIdentity),
+
+ offsetof(ComponentIdentity, type) | 0x0,
+ (intptr_t)asn1_type_ComponentType,
+ 0,
+ (intptr_t)"type",
+
+ offsetof(ComponentIdentity, name) | 0x0,
+ (intptr_t)asn1_type_ComponentName,
+ 0,
+ (intptr_t)"name",
+
+ offsetof(ComponentIdentity, software) | 0x0,
+ (intptr_t)asn1_type__local_0,
+ 0,
+ (intptr_t)"software",
+
+ offsetof(ComponentIdentity, swVersion) | 0x0,
+ (intptr_t)asn1_type__local_1,
+ 0,
+ (intptr_t)"swVersion",
+
+ offsetof(ComponentIdentity, hwManufacturer) | 0x8000000,
+ (intptr_t)asn1_type__local_2,
+ offsetof(ComponentIdentity, hwManufacturer_option),
+ (intptr_t)"hwManufacturer",
+
+ offsetof(ComponentIdentity, hwModel) | 0x8000000,
+ (intptr_t)asn1_type__local_3,
+ offsetof(ComponentIdentity, hwModel_option),
+ (intptr_t)"hwModel",
+
+ offsetof(ComponentIdentity, hwSerialNr) | 0x8000000,
+ (intptr_t)asn1_type__local_4,
+ offsetof(ComponentIdentity, hwSerialNr_option),
+ (intptr_t)"hwSerialNr",
+
+ offsetof(ComponentIdentity, hwVersion) | 0x8000000,
+ (intptr_t)asn1_type__local_5,
+ offsetof(ComponentIdentity, hwVersion_option),
+ (intptr_t)"hwVersion",
+
+ offsetof(ComponentIdentity, fwVersion) | 0x8000000,
+ (intptr_t)asn1_type__local_6,
+ offsetof(ComponentIdentity, fwVersion_option),
+ (intptr_t)"fwVersion",
+
+ (intptr_t)"ComponentIdentity",
+};
+
+const ASN1CType asn1_type_Ipv4Address[] = {
+ (ASN1_CTYPE_OCTET_STRING << ASN1_CTYPE_SHIFT) | 0x5800000 | 0x100000,
+ 0x4,
+ 0x4,
+ (intptr_t)"Ipv4Address",
+};
+
+const ASN1CType asn1_type_Ipv6Address[] = {
+ (ASN1_CTYPE_OCTET_STRING << ASN1_CTYPE_SHIFT) | 0x5800000 | 0x100001,
+ 0x10,
+ 0x10,
+ (intptr_t)"Ipv6Address",
+};
+
+const ASN1CType asn1_type_IpAddress[] = {
+ (ASN1_CTYPE_CHOICE << ASN1_CTYPE_SHIFT) | 0x4000000 | 0x0,
+ 2,
+ sizeof(IpAddress),
+ offsetof(IpAddress, choice),
+ offsetof(IpAddress, u),
+ (intptr_t)asn1_type_Ipv4Address,
+ (intptr_t)"ipv4",
+ (intptr_t)asn1_type_Ipv6Address,
+ (intptr_t)"ipv6",
+ (intptr_t)"IpAddress",
+};
+
+const ASN1CType asn1_type_PortNumber[] = {
+ (ASN1_CTYPE_INTEGER << ASN1_CTYPE_SHIFT) | 0x5800000 | 0x2,
+ 0x0,
+ 0xffff,
+ (intptr_t)"PortNumber",
+};
+
+const ASN1CType asn1_type_IpPort[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x4000000 | 0x10,
+ 2,
+ sizeof(IpPort),
+
+ offsetof(IpPort, ip) | 0x0,
+ (intptr_t)asn1_type_IpAddress,
+ 0,
+ (intptr_t)"ip",
+
+ offsetof(IpPort, port) | 0x0,
+ (intptr_t)asn1_type_PortNumber,
+ 0,
+ (intptr_t)"port",
+
+ (intptr_t)"IpPort",
+};
+
+const ASN1CType asn1_type_ResultCode[] = {
+ (ASN1_CTYPE_ENUMERATED << ASN1_CTYPE_SHIFT) | 0x6000000 | 0xa,
+ 7,
+ 0,
+ (intptr_t)"ok",
+ (intptr_t)"illegalClientId",
+ (intptr_t)"illegalBankId",
+ (intptr_t)"illegalSlotId",
+ (intptr_t)"cardNotPresent",
+ (intptr_t)"cardUnresponsive",
+ (intptr_t)"cardTransmissionError",
+ (intptr_t)"ResultCode",
+};
+
+const ASN1CType asn1_type_SlotNumber[] = {
+ (ASN1_CTYPE_INTEGER << ASN1_CTYPE_SHIFT) | 0x5800000 | 0x2,
+ 0x0,
+ 0x3ff,
+ (intptr_t)"SlotNumber",
+};
+
+const ASN1CType asn1_type_ClientSlot[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10,
+ 2,
+ sizeof(ClientSlot),
+
+ offsetof(ClientSlot, clientId) | 0x0,
+ (intptr_t)asn1_type_ClientId,
+ 0,
+ (intptr_t)"clientId",
+
+ offsetof(ClientSlot, slotNr) | 0x0,
+ (intptr_t)asn1_type_SlotNumber,
+ 0,
+ (intptr_t)"slotNr",
+
+ (intptr_t)"ClientSlot",
+};
+
+const ASN1CType asn1_type_BankSlot[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10,
+ 2,
+ sizeof(BankSlot),
+
+ offsetof(BankSlot, bankId) | 0x0,
+ (intptr_t)asn1_type_BankId,
+ 0,
+ (intptr_t)"bankId",
+
+ offsetof(BankSlot, slotNr) | 0x0,
+ (intptr_t)asn1_type_SlotNumber,
+ 0,
+ (intptr_t)"slotNr",
+
+ (intptr_t)"BankSlot",
+};
+
+const ASN1CType asn1_type_ATR[] = {
+ (ASN1_CTYPE_OCTET_STRING << ASN1_CTYPE_SHIFT) | 0x5800000 | 0x4,
+ 0x1,
+ 0x37,
+ (intptr_t)"ATR",
+};
+
+static const ASN1CType asn1_type__local_7[] = {
+ (ASN1_CTYPE_BOOLEAN << ASN1_CTYPE_SHIFT) | 0x0 | 0x1,
+};
+
+static const ASN1CType asn1_type__local_8[] = {
+ (ASN1_CTYPE_BOOLEAN << ASN1_CTYPE_SHIFT) | 0x0 | 0x1,
+};
+
+static const ASN1CType asn1_type__local_9[] = {
+ (ASN1_CTYPE_BOOLEAN << ASN1_CTYPE_SHIFT) | 0x0 | 0x1,
+};
+
+static const ASN1CType asn1_type__local_10[] = {
+ (ASN1_CTYPE_BOOLEAN << ASN1_CTYPE_SHIFT) | 0x0 | 0x1,
+};
+
+const ASN1CType asn1_type_TpduFlags[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10,
+ 4,
+ sizeof(TpduFlags),
+
+ offsetof(TpduFlags, tpduHeaderPresent) | 0x0,
+ (intptr_t)asn1_type__local_7,
+ 0,
+ (intptr_t)"tpduHeaderPresent",
+
+ offsetof(TpduFlags, finalPart) | 0x0,
+ (intptr_t)asn1_type__local_8,
+ 0,
+ (intptr_t)"finalPart",
+
+ offsetof(TpduFlags, procByteContinueTx) | 0x0,
+ (intptr_t)asn1_type__local_9,
+ 0,
+ (intptr_t)"procByteContinueTx",
+
+ offsetof(TpduFlags, procByteContinueRx) | 0x0,
+ (intptr_t)asn1_type__local_10,
+ 0,
+ (intptr_t)"procByteContinueRx",
+
+ (intptr_t)"TpduFlags",
+};
+
+static const ASN1CType asn1_type__local_11[] = {
+ (ASN1_CTYPE_BOOLEAN << ASN1_CTYPE_SHIFT) | 0x0 | 0x100000,
+};
+
+static const ASN1CType asn1_type__local_12[] = {
+ (ASN1_CTYPE_BOOLEAN << ASN1_CTYPE_SHIFT) | 0x0 | 0x100001,
+};
+
+static const ASN1CType asn1_type__local_13[] = {
+ (ASN1_CTYPE_BOOLEAN << ASN1_CTYPE_SHIFT) | 0x0 | 0x100002,
+};
+
+static const ASN1CType asn1_type__local_14[] = {
+ (ASN1_CTYPE_BOOLEAN << ASN1_CTYPE_SHIFT) | 0x0 | 0x100003,
+};
+
+const ASN1CType asn1_type_SlotPhysStatus[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10,
+ 4,
+ sizeof(SlotPhysStatus),
+
+ offsetof(SlotPhysStatus, resetActive) | 0x0,
+ (intptr_t)asn1_type__local_11,
+ 0,
+ (intptr_t)"resetActive",
+
+ offsetof(SlotPhysStatus, vccPresent) | 0x8000000,
+ (intptr_t)asn1_type__local_12,
+ offsetof(SlotPhysStatus, vccPresent_option),
+ (intptr_t)"vccPresent",
+
+ offsetof(SlotPhysStatus, clkActive) | 0x8000000,
+ (intptr_t)asn1_type__local_13,
+ offsetof(SlotPhysStatus, clkActive_option),
+ (intptr_t)"clkActive",
+
+ offsetof(SlotPhysStatus, cardPresent) | 0x8000000,
+ (intptr_t)asn1_type__local_14,
+ offsetof(SlotPhysStatus, cardPresent_option),
+ (intptr_t)"cardPresent",
+
+ (intptr_t)"SlotPhysStatus",
+};
+
+const ASN1CType asn1_type_ConnectBankReq[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x100000,
+ 3,
+ sizeof(ConnectBankReq),
+
+ offsetof(ConnectBankReq, identity) | 0x0,
+ (intptr_t)asn1_type_ComponentIdentity,
+ 0,
+ (intptr_t)"identity",
+
+ offsetof(ConnectBankReq, bankId) | 0x0,
+ (intptr_t)asn1_type_BankId,
+ 0,
+ (intptr_t)"bankId",
+
+ offsetof(ConnectBankReq, numberOfSlots) | 0x0,
+ (intptr_t)asn1_type_SlotNumber,
+ 0,
+ (intptr_t)"numberOfSlots",
+
+ (intptr_t)"ConnectBankReq",
+};
+
+const ASN1CType asn1_type_ConnectBankRes[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x100001,
+ 2,
+ sizeof(ConnectBankRes),
+
+ offsetof(ConnectBankRes, identity) | 0x0,
+ (intptr_t)asn1_type_ComponentIdentity,
+ 0,
+ (intptr_t)"identity",
+
+ offsetof(ConnectBankRes, result) | 0x0,
+ (intptr_t)asn1_type_ResultCode,
+ 0,
+ (intptr_t)"result",
+
+ (intptr_t)"ConnectBankRes",
+};
+
+const ASN1CType asn1_type_ConnectClientReq[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x100002,
+ 2,
+ sizeof(ConnectClientReq),
+
+ offsetof(ConnectClientReq, identity) | 0x0,
+ (intptr_t)asn1_type_ComponentIdentity,
+ 0,
+ (intptr_t)"identity",
+
+ offsetof(ConnectClientReq, clientSlot) | 0x8000000,
+ (intptr_t)asn1_type_ClientSlot,
+ offsetof(ConnectClientReq, clientSlot_option),
+ (intptr_t)"clientSlot",
+
+ (intptr_t)"ConnectClientReq",
+};
+
+const ASN1CType asn1_type_ConnectClientRes[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x100003,
+ 2,
+ sizeof(ConnectClientRes),
+
+ offsetof(ConnectClientRes, identity) | 0x0,
+ (intptr_t)asn1_type_ComponentIdentity,
+ 0,
+ (intptr_t)"identity",
+
+ offsetof(ConnectClientRes, result) | 0x0,
+ (intptr_t)asn1_type_ResultCode,
+ 0,
+ (intptr_t)"result",
+
+ (intptr_t)"ConnectClientRes",
+};
+
+const ASN1CType asn1_type_CreateMappingReq[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x100004,
+ 2,
+ sizeof(CreateMappingReq),
+
+ offsetof(CreateMappingReq, client) | 0x0,
+ (intptr_t)asn1_type_ClientSlot,
+ 0,
+ (intptr_t)"client",
+
+ offsetof(CreateMappingReq, bank) | 0x0,
+ (intptr_t)asn1_type_BankSlot,
+ 0,
+ (intptr_t)"bank",
+
+ (intptr_t)"CreateMappingReq",
+};
+
+const ASN1CType asn1_type_CreateMappingRes[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x100005,
+ 1,
+ sizeof(CreateMappingRes),
+
+ offsetof(CreateMappingRes, result) | 0x0,
+ (intptr_t)asn1_type_ResultCode,
+ 0,
+ (intptr_t)"result",
+
+ (intptr_t)"CreateMappingRes",
+};
+
+const ASN1CType asn1_type_RemoveMappingReq[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x100006,
+ 2,
+ sizeof(RemoveMappingReq),
+
+ offsetof(RemoveMappingReq, client) | 0x0,
+ (intptr_t)asn1_type_ClientSlot,
+ 0,
+ (intptr_t)"client",
+
+ offsetof(RemoveMappingReq, bank) | 0x0,
+ (intptr_t)asn1_type_BankSlot,
+ 0,
+ (intptr_t)"bank",
+
+ (intptr_t)"RemoveMappingReq",
+};
+
+const ASN1CType asn1_type_RemoveMappingRes[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x100007,
+ 1,
+ sizeof(RemoveMappingRes),
+
+ offsetof(RemoveMappingRes, result) | 0x0,
+ (intptr_t)asn1_type_ResultCode,
+ 0,
+ (intptr_t)"result",
+
+ (intptr_t)"RemoveMappingRes",
+};
+
+const ASN1CType asn1_type_ConfigClientReq[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x100008,
+ 2,
+ sizeof(ConfigClientReq),
+
+ offsetof(ConfigClientReq, clientSlot) | 0x0,
+ (intptr_t)asn1_type_ClientSlot,
+ 0,
+ (intptr_t)"clientSlot",
+
+ offsetof(ConfigClientReq, bankd) | 0x0,
+ (intptr_t)asn1_type_IpPort,
+ 0,
+ (intptr_t)"bankd",
+
+ (intptr_t)"ConfigClientReq",
+};
+
+const ASN1CType asn1_type_ConfigClientRes[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x100009,
+ 1,
+ sizeof(ConfigClientRes),
+
+ offsetof(ConfigClientRes, result) | 0x0,
+ (intptr_t)asn1_type_ResultCode,
+ 0,
+ (intptr_t)"result",
+
+ (intptr_t)"ConfigClientRes",
+};
+
+const ASN1CType asn1_type_SetAtrReq[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10000a,
+ 2,
+ sizeof(SetAtrReq),
+
+ offsetof(SetAtrReq, slot) | 0x0,
+ (intptr_t)asn1_type_ClientSlot,
+ 0,
+ (intptr_t)"slot",
+
+ offsetof(SetAtrReq, atr) | 0x0,
+ (intptr_t)asn1_type_ATR,
+ 0,
+ (intptr_t)"atr",
+
+ (intptr_t)"SetAtrReq",
+};
+
+const ASN1CType asn1_type_SetAtrRes[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10000b,
+ 1,
+ sizeof(SetAtrRes),
+
+ offsetof(SetAtrRes, result) | 0x0,
+ (intptr_t)asn1_type_ResultCode,
+ 0,
+ (intptr_t)"result",
+
+ (intptr_t)"SetAtrRes",
+};
+
+static const ASN1CType asn1_type__local_15[] = {
+ (ASN1_CTYPE_OCTET_STRING << ASN1_CTYPE_SHIFT) | 0x1000000 | 0x4,
+ 0x0,
+};
+
+const ASN1CType asn1_type_TpduModemToCard[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10000c,
+ 4,
+ sizeof(TpduModemToCard),
+
+ offsetof(TpduModemToCard, fromClientSlot) | 0x0,
+ (intptr_t)asn1_type_ClientSlot,
+ 0,
+ (intptr_t)"fromClientSlot",
+
+ offsetof(TpduModemToCard, toBankSlot) | 0x0,
+ (intptr_t)asn1_type_BankSlot,
+ 0,
+ (intptr_t)"toBankSlot",
+
+ offsetof(TpduModemToCard, flags) | 0x0,
+ (intptr_t)asn1_type_TpduFlags,
+ 0,
+ (intptr_t)"flags",
+
+ offsetof(TpduModemToCard, data) | 0x0,
+ (intptr_t)asn1_type__local_15,
+ 0,
+ (intptr_t)"data",
+
+ (intptr_t)"TpduModemToCard",
+};
+
+static const ASN1CType asn1_type__local_16[] = {
+ (ASN1_CTYPE_OCTET_STRING << ASN1_CTYPE_SHIFT) | 0x1000000 | 0x4,
+ 0x0,
+};
+
+const ASN1CType asn1_type_TpduCardToModem[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10000d,
+ 4,
+ sizeof(TpduCardToModem),
+
+ offsetof(TpduCardToModem, fromBankSlot) | 0x0,
+ (intptr_t)asn1_type_BankSlot,
+ 0,
+ (intptr_t)"fromBankSlot",
+
+ offsetof(TpduCardToModem, toClientSlot) | 0x0,
+ (intptr_t)asn1_type_ClientSlot,
+ 0,
+ (intptr_t)"toClientSlot",
+
+ offsetof(TpduCardToModem, flags) | 0x0,
+ (intptr_t)asn1_type_TpduFlags,
+ 0,
+ (intptr_t)"flags",
+
+ offsetof(TpduCardToModem, data) | 0x0,
+ (intptr_t)asn1_type__local_16,
+ 0,
+ (intptr_t)"data",
+
+ (intptr_t)"TpduCardToModem",
+};
+
+const ASN1CType asn1_type_ClientSlotStatusInd[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10000e,
+ 3,
+ sizeof(ClientSlotStatusInd),
+
+ offsetof(ClientSlotStatusInd, fromClientSlot) | 0x0,
+ (intptr_t)asn1_type_ClientSlot,
+ 0,
+ (intptr_t)"fromClientSlot",
+
+ offsetof(ClientSlotStatusInd, toBankSlot) | 0x0,
+ (intptr_t)asn1_type_BankSlot,
+ 0,
+ (intptr_t)"toBankSlot",
+
+ offsetof(ClientSlotStatusInd, slotPhysStatus) | 0x0,
+ (intptr_t)asn1_type_SlotPhysStatus,
+ 0,
+ (intptr_t)"slotPhysStatus",
+
+ (intptr_t)"ClientSlotStatusInd",
+};
+
+const ASN1CType asn1_type_BankSlotStatusInd[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x10000f,
+ 3,
+ sizeof(BankSlotStatusInd),
+
+ offsetof(BankSlotStatusInd, fromBankSlot) | 0x0,
+ (intptr_t)asn1_type_BankSlot,
+ 0,
+ (intptr_t)"fromBankSlot",
+
+ offsetof(BankSlotStatusInd, toClientSlot) | 0x0,
+ (intptr_t)asn1_type_ClientSlot,
+ 0,
+ (intptr_t)"toClientSlot",
+
+ offsetof(BankSlotStatusInd, slotPhysStatus) | 0x0,
+ (intptr_t)asn1_type_SlotPhysStatus,
+ 0,
+ (intptr_t)"slotPhysStatus",
+
+ (intptr_t)"BankSlotStatusInd",
+};
+
+const ASN1CType asn1_type_RsproPDUchoice[] = {
+ (ASN1_CTYPE_CHOICE << ASN1_CTYPE_SHIFT) | 0x6000000 | 0x100002,
+ 16,
+ 0,
+ sizeof(RsproPDUchoice),
+ offsetof(RsproPDUchoice, choice),
+ offsetof(RsproPDUchoice, u),
+ (intptr_t)asn1_type_ConnectBankReq,
+ (intptr_t)"connectBankReq",
+ (intptr_t)asn1_type_ConnectBankRes,
+ (intptr_t)"connectBankRes",
+ (intptr_t)asn1_type_ConnectClientReq,
+ (intptr_t)"connectClientReq",
+ (intptr_t)asn1_type_ConnectClientRes,
+ (intptr_t)"connectClientRes",
+ (intptr_t)asn1_type_CreateMappingReq,
+ (intptr_t)"createMappingReq",
+ (intptr_t)asn1_type_CreateMappingRes,
+ (intptr_t)"createMappingRes",
+ (intptr_t)asn1_type_RemoveMappingReq,
+ (intptr_t)"removeMappingReq",
+ (intptr_t)asn1_type_RemoveMappingRes,
+ (intptr_t)"removeMappingRes",
+ (intptr_t)asn1_type_ConfigClientReq,
+ (intptr_t)"configClientReq",
+ (intptr_t)asn1_type_ConfigClientRes,
+ (intptr_t)"configClientRes",
+ (intptr_t)asn1_type_SetAtrReq,
+ (intptr_t)"setAtrReq",
+ (intptr_t)asn1_type_SetAtrRes,
+ (intptr_t)"setAtrRes",
+ (intptr_t)asn1_type_TpduModemToCard,
+ (intptr_t)"tpduModemToCard",
+ (intptr_t)asn1_type_TpduCardToModem,
+ (intptr_t)"tpduCardToModem",
+ (intptr_t)asn1_type_ClientSlotStatusInd,
+ (intptr_t)"clientSlotStatusInd",
+ (intptr_t)asn1_type_BankSlotStatusInd,
+ (intptr_t)"bankSlotStatusInd",
+ (intptr_t)"RsproPDUchoice",
+};
+
+static const ASN1CType asn1_type__local_17[] = {
+ (ASN1_CTYPE_INTEGER << ASN1_CTYPE_SHIFT) | 0x1800000 | 0x100000,
+ 0x0,
+ 0x20,
+};
+
+const ASN1CType asn1_type_RsproPDU[] = {
+ (ASN1_CTYPE_SEQUENCE << ASN1_CTYPE_SHIFT) | 0x4000000 | 0x10,
+ 3,
+ sizeof(RsproPDU),
+
+ offsetof(RsproPDU, version) | 0x0,
+ (intptr_t)asn1_type__local_17,
+ 0,
+ (intptr_t)"version",
+
+ offsetof(RsproPDU, tag) | 0x0,
+ (intptr_t)asn1_type_OperationTag,
+ 0,
+ (intptr_t)"tag",
+
+ offsetof(RsproPDU, msg) | 0x0,
+ (intptr_t)asn1_type_RsproPDUchoice,
+ 0,
+ (intptr_t)"msg",
+
+ (intptr_t)"RsproPDU",
+};
+
diff --git a/ffasn1c/rspro.h b/ffasn1c/rspro.h
new file mode 100644
index 0000000..a11d775
--- /dev/null
+++ b/ffasn1c/rspro.h
@@ -0,0 +1,337 @@
+/* Automatically generated file - do not edit */
+#ifndef _FFASN1_RSPRO_H
+#define _FFASN1_RSPRO_H
+
+#include "asn1defs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef int OperationTag;
+
+extern const ASN1CType asn1_type_OperationTag[];
+
+typedef int BankId;
+
+extern const ASN1CType asn1_type_BankId[];
+
+typedef int ClientId;
+
+extern const ASN1CType asn1_type_ClientId[];
+
+typedef enum ComponentType {
+ ComponentType_remsimClient,
+ ComponentType_remsimServer,
+ ComponentType_remsimBankd,
+} ComponentType;
+
+extern const ASN1CType asn1_type_ComponentType[];
+
+typedef ASN1String ComponentName;
+
+extern const ASN1CType asn1_type_ComponentName[];
+
+typedef struct ComponentIdentity {
+ ComponentType type;
+ ComponentName name;
+ ComponentName software;
+ ComponentName swVersion;
+ BOOL hwManufacturer_option;
+ ComponentName hwManufacturer;
+ BOOL hwModel_option;
+ ComponentName hwModel;
+ BOOL hwSerialNr_option;
+ ComponentName hwSerialNr;
+ BOOL hwVersion_option;
+ ComponentName hwVersion;
+ BOOL fwVersion_option;
+ ComponentName fwVersion;
+} ComponentIdentity;
+
+
+extern const ASN1CType asn1_type_ComponentIdentity[];
+
+typedef ASN1String Ipv4Address;
+
+extern const ASN1CType asn1_type_Ipv4Address[];
+
+typedef ASN1String Ipv6Address;
+
+extern const ASN1CType asn1_type_Ipv6Address[];
+
+typedef enum {
+ IpAddress_ipv4,
+ IpAddress_ipv6,
+} IpAddress_choice;
+
+typedef struct IpAddress {
+ IpAddress_choice choice;
+ union {
+ Ipv4Address ipv4;
+ Ipv6Address ipv6;
+ } u;
+} IpAddress;
+
+extern const ASN1CType asn1_type_IpAddress[];
+
+typedef int PortNumber;
+
+extern const ASN1CType asn1_type_PortNumber[];
+
+typedef struct IpPort {
+ IpAddress ip;
+ PortNumber port;
+} IpPort;
+
+
+extern const ASN1CType asn1_type_IpPort[];
+
+typedef enum ResultCode {
+ ResultCode_ok,
+ ResultCode_illegalClientId,
+ ResultCode_illegalBankId,
+ ResultCode_illegalSlotId,
+ ResultCode_cardNotPresent,
+ ResultCode_cardUnresponsive,
+ ResultCode_cardTransmissionError,
+} ResultCode;
+
+extern const ASN1CType asn1_type_ResultCode[];
+
+typedef int SlotNumber;
+
+extern const ASN1CType asn1_type_SlotNumber[];
+
+typedef struct ClientSlot {
+ ClientId clientId;
+ SlotNumber slotNr;
+} ClientSlot;
+
+
+extern const ASN1CType asn1_type_ClientSlot[];
+
+typedef struct BankSlot {
+ BankId bankId;
+ SlotNumber slotNr;
+} BankSlot;
+
+
+extern const ASN1CType asn1_type_BankSlot[];
+
+typedef ASN1String ATR;
+
+extern const ASN1CType asn1_type_ATR[];
+
+typedef struct TpduFlags {
+ BOOL tpduHeaderPresent;
+ BOOL finalPart;
+ BOOL procByteContinueTx;
+ BOOL procByteContinueRx;
+} TpduFlags;
+
+
+extern const ASN1CType asn1_type_TpduFlags[];
+
+typedef struct SlotPhysStatus {
+ BOOL resetActive;
+ BOOL vccPresent_option;
+ BOOL vccPresent;
+ BOOL clkActive_option;
+ BOOL clkActive;
+ BOOL cardPresent_option;
+ BOOL cardPresent;
+} SlotPhysStatus;
+
+
+extern const ASN1CType asn1_type_SlotPhysStatus[];
+
+typedef struct ConnectBankReq {
+ ComponentIdentity identity;
+ BankId bankId;
+ SlotNumber numberOfSlots;
+} ConnectBankReq;
+
+
+extern const ASN1CType asn1_type_ConnectBankReq[];
+
+typedef struct ConnectBankRes {
+ ComponentIdentity identity;
+ ResultCode result;
+} ConnectBankRes;
+
+
+extern const ASN1CType asn1_type_ConnectBankRes[];
+
+typedef struct ConnectClientReq {
+ ComponentIdentity identity;
+ BOOL clientSlot_option;
+ ClientSlot clientSlot;
+} ConnectClientReq;
+
+
+extern const ASN1CType asn1_type_ConnectClientReq[];
+
+typedef struct ConnectClientRes {
+ ComponentIdentity identity;
+ ResultCode result;
+} ConnectClientRes;
+
+
+extern const ASN1CType asn1_type_ConnectClientRes[];
+
+typedef struct CreateMappingReq {
+ ClientSlot client;
+ BankSlot bank;
+} CreateMappingReq;
+
+
+extern const ASN1CType asn1_type_CreateMappingReq[];
+
+typedef struct CreateMappingRes {
+ ResultCode result;
+} CreateMappingRes;
+
+
+extern const ASN1CType asn1_type_CreateMappingRes[];
+
+typedef struct RemoveMappingReq {
+ ClientSlot client;
+ BankSlot bank;
+} RemoveMappingReq;
+
+
+extern const ASN1CType asn1_type_RemoveMappingReq[];
+
+typedef struct RemoveMappingRes {
+ ResultCode result;
+} RemoveMappingRes;
+
+
+extern const ASN1CType asn1_type_RemoveMappingRes[];
+
+typedef struct ConfigClientReq {
+ ClientSlot clientSlot;
+ IpPort bankd;
+} ConfigClientReq;
+
+
+extern const ASN1CType asn1_type_ConfigClientReq[];
+
+typedef struct ConfigClientRes {
+ ResultCode result;
+} ConfigClientRes;
+
+
+extern const ASN1CType asn1_type_ConfigClientRes[];
+
+typedef struct SetAtrReq {
+ ClientSlot slot;
+ ATR atr;
+} SetAtrReq;
+
+
+extern const ASN1CType asn1_type_SetAtrReq[];
+
+typedef struct SetAtrRes {
+ ResultCode result;
+} SetAtrRes;
+
+
+extern const ASN1CType asn1_type_SetAtrRes[];
+
+typedef struct TpduModemToCard {
+ ClientSlot fromClientSlot;
+ BankSlot toBankSlot;
+ TpduFlags flags;
+ ASN1String data;
+} TpduModemToCard;
+
+
+extern const ASN1CType asn1_type_TpduModemToCard[];
+
+typedef struct TpduCardToModem {
+ BankSlot fromBankSlot;
+ ClientSlot toClientSlot;
+ TpduFlags flags;
+ ASN1String data;
+} TpduCardToModem;
+
+
+extern const ASN1CType asn1_type_TpduCardToModem[];
+
+typedef struct ClientSlotStatusInd {
+ ClientSlot fromClientSlot;
+ BankSlot toBankSlot;
+ SlotPhysStatus slotPhysStatus;
+} ClientSlotStatusInd;
+
+
+extern const ASN1CType asn1_type_ClientSlotStatusInd[];
+
+typedef struct BankSlotStatusInd {
+ BankSlot fromBankSlot;
+ ClientSlot toClientSlot;
+ SlotPhysStatus slotPhysStatus;
+} BankSlotStatusInd;
+
+
+extern const ASN1CType asn1_type_BankSlotStatusInd[];
+
+typedef enum {
+ RsproPDUchoice_connectBankReq,
+ RsproPDUchoice_connectBankRes,
+ RsproPDUchoice_connectClientReq,
+ RsproPDUchoice_connectClientRes,
+ RsproPDUchoice_createMappingReq,
+ RsproPDUchoice_createMappingRes,
+ RsproPDUchoice_removeMappingReq,
+ RsproPDUchoice_removeMappingRes,
+ RsproPDUchoice_configClientReq,
+ RsproPDUchoice_configClientRes,
+ RsproPDUchoice_setAtrReq,
+ RsproPDUchoice_setAtrRes,
+ RsproPDUchoice_tpduModemToCard,
+ RsproPDUchoice_tpduCardToModem,
+ RsproPDUchoice_clientSlotStatusInd,
+ RsproPDUchoice_bankSlotStatusInd,
+} RsproPDUchoice_choice;
+
+typedef struct RsproPDUchoice {
+ RsproPDUchoice_choice choice;
+ union {
+ ConnectBankReq connectBankReq;
+ ConnectBankRes connectBankRes;
+ ConnectClientReq connectClientReq;
+ ConnectClientRes connectClientRes;
+ CreateMappingReq createMappingReq;
+ CreateMappingRes createMappingRes;
+ RemoveMappingReq removeMappingReq;
+ RemoveMappingRes removeMappingRes;
+ ConfigClientReq configClientReq;
+ ConfigClientRes configClientRes;
+ SetAtrReq setAtrReq;
+ SetAtrRes setAtrRes;
+ TpduModemToCard tpduModemToCard;
+ TpduCardToModem tpduCardToModem;
+ ClientSlotStatusInd clientSlotStatusInd;
+ BankSlotStatusInd bankSlotStatusInd;
+ } u;
+} RsproPDUchoice;
+
+extern const ASN1CType asn1_type_RsproPDUchoice[];
+
+typedef struct RsproPDU {
+ int version;
+ OperationTag tag;
+ RsproPDUchoice msg;
+} RsproPDU;
+
+
+extern const ASN1CType asn1_type_RsproPDU[];
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FFASN1_RSPRO_H */