From fd1c1bfc93363d6ace3d35d53af454d05488197a Mon Sep 17 00:00:00 2001 From: Michael Stegen Date: Fri, 21 Jul 2023 00:23:50 +0200 Subject: [PATCH] First ExiDecoded handshake message received --- include/ipv6.h | 10 + include/main.h | 29 +- include/tcp.h | 1 + platformio.ini | 2 + src/ipv6.cpp | 428 + src/main.cpp | 648 +- src/src/exi/BitInputStream.c | 105 + src/src/exi/BitInputStream.h | 67 + src/src/exi/BitOutputStream.c | 124 + src/src/exi/BitOutputStream.h | 85 + src/src/exi/ByteStream.c | 88 + src/src/exi/ByteStream.h | 75 + src/src/exi/DecoderChannel.c | 1068 ++ src/src/exi/DecoderChannel.h | 441 + src/src/exi/EXIConfig.h | 106 + src/src/exi/EXIHeaderDecoder.c | 68 + src/src/exi/EXIHeaderDecoder.h | 60 + src/src/exi/EXIHeaderEncoder.c | 50 + src/src/exi/EXIHeaderEncoder.h | 61 + src/src/exi/EXIOptions.h | 93 + src/src/exi/EXITypes.h | 591 + src/src/exi/EncoderChannel.c | 704 + src/src/exi/EncoderChannel.h | 423 + src/src/exi/ErrorCodes.h | 120 + src/src/exi/MethodsBag.c | 117 + src/src/exi/MethodsBag.h | 70 + src/src/exi/appHandEXIDatatypes.c | 64 + src/src/exi/appHandEXIDatatypes.h | 133 + src/src/exi/appHandEXIDatatypesDecoder.c | 896 ++ src/src/exi/appHandEXIDatatypesDecoder.h | 57 + src/src/exi/appHandEXIDatatypesEncoder.c | 671 + src/src/exi/appHandEXIDatatypesEncoder.h | 58 + src/src/exi/dinEXIDatatypes.c | 969 ++ src/src/exi/dinEXIDatatypes.h | 2934 ++++ src/src/exi/dinEXIDatatypesDecoder.c | 17105 +++++++++++++++++++++ src/src/exi/dinEXIDatatypesDecoder.h | 65 + src/src/exi/dinEXIDatatypesEncoder.c | 12826 +++++++++++++++ src/src/exi/dinEXIDatatypesEncoder.h | 68 + src/src/exi/projectExiConnector.c | 146 + src/src/exi/projectExiConnector.h | 107 + src/tcp.cpp | 312 + 41 files changed, 41765 insertions(+), 280 deletions(-) create mode 100644 include/ipv6.h create mode 100644 include/tcp.h create mode 100644 src/ipv6.cpp create mode 100644 src/src/exi/BitInputStream.c create mode 100644 src/src/exi/BitInputStream.h create mode 100644 src/src/exi/BitOutputStream.c create mode 100644 src/src/exi/BitOutputStream.h create mode 100644 src/src/exi/ByteStream.c create mode 100644 src/src/exi/ByteStream.h create mode 100644 src/src/exi/DecoderChannel.c create mode 100644 src/src/exi/DecoderChannel.h create mode 100644 src/src/exi/EXIConfig.h create mode 100644 src/src/exi/EXIHeaderDecoder.c create mode 100644 src/src/exi/EXIHeaderDecoder.h create mode 100644 src/src/exi/EXIHeaderEncoder.c create mode 100644 src/src/exi/EXIHeaderEncoder.h create mode 100644 src/src/exi/EXIOptions.h create mode 100644 src/src/exi/EXITypes.h create mode 100644 src/src/exi/EncoderChannel.c create mode 100644 src/src/exi/EncoderChannel.h create mode 100644 src/src/exi/ErrorCodes.h create mode 100644 src/src/exi/MethodsBag.c create mode 100644 src/src/exi/MethodsBag.h create mode 100644 src/src/exi/appHandEXIDatatypes.c create mode 100644 src/src/exi/appHandEXIDatatypes.h create mode 100644 src/src/exi/appHandEXIDatatypesDecoder.c create mode 100644 src/src/exi/appHandEXIDatatypesDecoder.h create mode 100644 src/src/exi/appHandEXIDatatypesEncoder.c create mode 100644 src/src/exi/appHandEXIDatatypesEncoder.h create mode 100644 src/src/exi/dinEXIDatatypes.c create mode 100644 src/src/exi/dinEXIDatatypes.h create mode 100644 src/src/exi/dinEXIDatatypesDecoder.c create mode 100644 src/src/exi/dinEXIDatatypesDecoder.h create mode 100644 src/src/exi/dinEXIDatatypesEncoder.c create mode 100644 src/src/exi/dinEXIDatatypesEncoder.h create mode 100644 src/src/exi/projectExiConnector.c create mode 100644 src/src/exi/projectExiConnector.h create mode 100644 src/tcp.cpp diff --git a/include/ipv6.h b/include/ipv6.h new file mode 100644 index 0000000..7ac1f10 --- /dev/null +++ b/include/ipv6.h @@ -0,0 +1,10 @@ + +extern uint16_t evccPort; +extern uint16_t seccPort; +extern uint16_t evccTcpPort; +extern uint8_t SeccIp[]; +extern uint8_t EvccIp[]; + +void setSeccIp(); +void IPv6Manager(uint16_t rxbytes); +uint16_t calculateUdpAndTcpChecksumForIPv6(uint8_t *UdpOrTcpframe, uint16_t UdpOrTcpframeLen, const uint8_t *ipv6source, const uint8_t *ipv6dest, uint8_t nxt); diff --git a/include/main.h b/include/main.h index d70dc39..e03e0fc 100644 --- a/include/main.h +++ b/include/main.h @@ -26,6 +26,7 @@ #define SPI_REG_ACTION_CTRL 0x1B00 #define QCASPI_GOOD_SIGNATURE 0xAA55 +#define QCA7K_BUFFER_SIZE 3163 #define SPI_INT_WRBUF_BELOW_WM (1 << 10) #define SPI_INT_CPU_ON (1 << 6) @@ -34,6 +35,10 @@ #define SPI_INT_RDBUF_ERR (1 << 1) #define SPI_INT_PKT_AVLBL (1 << 0) +/*====================================================================* + * States + *--------------------------------------------------------------------*/ + #define MODEM_POWERUP 0 #define MODEM_WRITESPACE 1 #define MODEM_CM_SET_KEY_REQ 2 @@ -45,6 +50,14 @@ #define ATTEN_CHAR_RSP 50 #define SLAC_MATCH_REQ 60 +#define MODEM_GET_SW_REQ 100 +#define MODEM_WAIT_SW 110 +#define MODEM_LINK_READY 120 + + +/*====================================================================* + * SLAC commands + *--------------------------------------------------------------------*/ #define CM_SET_KEY 0x6008 #define CM_GET_KEY 0x600C @@ -77,4 +90,18 @@ #define MMTYPE_REQ 0x0000 // request #define MMTYPE_CNF 0x0001 // confirmation = +1 #define MMTYPE_IND 0x0002 -#define MMTYPE_RSP 0x0003 \ No newline at end of file +#define MMTYPE_RSP 0x0003 + +// Frametypes + +#define FRAME_IPV6 0x86DD +#define FRAME_HOMEPLUG 0x88E1 + +/* V2GTP */ +#define V2GTP_HEADER_SIZE 8 /* header has 8 bytes */ + +extern uint8_t txbuffer[], rxbuffer[]; +extern uint8_t myMac[]; +extern uint8_t pevMac[]; +void qcaspi_write_burst(uint8_t *src, uint32_t len); +void setMacAt(uint8_t *mac, uint16_t offset); \ No newline at end of file diff --git a/include/tcp.h b/include/tcp.h new file mode 100644 index 0000000..67a1aab --- /dev/null +++ b/include/tcp.h @@ -0,0 +1 @@ +void evaluateTcpPacket(void); \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index 70d318a..f58bb07 100644 --- a/platformio.ini +++ b/platformio.ini @@ -18,6 +18,8 @@ framework = arduino upload_port = COM5 monitor_port = COM5 +monitor_filters = esp32_exception_decoder + build_flags = -DARDUINO_USB_MODE=1 -DARDUINO_USB_CDC_ON_BOOT=1 diff --git a/src/ipv6.cpp b/src/ipv6.cpp new file mode 100644 index 0000000..9376ec1 --- /dev/null +++ b/src/ipv6.cpp @@ -0,0 +1,428 @@ +#include +#include "main.h" +#include "tcp.h" + +const uint8_t broadcastIPv6[16] = { 0xff, 0x02, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; +/* our link-local IPv6 address. Based on myMac, but with 0xFFFE in the middle, and bit 1 of MSB inverted */ +uint8_t SeccIp[16]; +uint8_t EvccIp[16]; +uint16_t evccTcpPort; /* the TCP port number of the car */ +uint8_t sourceIp[16]; +uint16_t evccPort; +uint16_t seccPort; +uint16_t sourceport; +uint16_t destinationport; +uint16_t udplen; +uint16_t udpsum; +uint8_t NeighborsMac[6]; +uint8_t NeighborsIp[16]; +uint8_t DiscoveryReqSecurity; +uint8_t DiscoveryReqTransportProtocol; + + + +#define NEXT_UDP 0x11 /* next protocol is UDP */ +#define NEXT_ICMPv6 0x3a /* next protocol is ICMPv6 */ + +#define UDP_PAYLOAD_LEN 100 +uint8_t udpPayload[UDP_PAYLOAD_LEN]; +uint16_t udpPayloadLen; + +#define V2G_FRAME_LEN 100 +uint8_t v2gFrameLen; +uint8_t V2GFrame[V2G_FRAME_LEN]; + +#define UDP_RESPONSE_LEN 100 +uint8_t UdpResponseLen; +uint8_t UdpResponse[UDP_RESPONSE_LEN]; + +#define IP_RESPONSE_LEN 100 +uint8_t IpResponseLen; +uint8_t IpResponse[IP_RESPONSE_LEN]; + +#define PSEUDO_HEADER_LEN 40 +uint8_t pseudoHeader[PSEUDO_HEADER_LEN]; + +void setSeccIp() { + // Create a link-local Ipv6 address based on myMac (the MAC of the ESP32). + memset(SeccIp, 0, 16); + SeccIp[0] = 0xfe; // Link-local address + SeccIp[1] = 0x80; + // byte 2-7 are zero; + SeccIp[8] = myMac[0] ^ 2; // invert bit 1 of MSB + SeccIp[9] = myMac[1]; + SeccIp[10] = myMac[2]; + SeccIp[11] = 0xff; + SeccIp[12] = 0xfe; + SeccIp[13] = myMac[3]; + SeccIp[14] = myMac[4]; + SeccIp[15] = myMac[5]; +} + + +uint16_t calculateUdpAndTcpChecksumForIPv6(uint8_t *UdpOrTcpframe, uint16_t UdpOrTcpframeLen, const uint8_t *ipv6source, const uint8_t *ipv6dest, uint8_t nxt) { + uint16_t evenFrameLen, i, value16, checksum; + uint32_t totalSum; + // Parameters: + // UdpOrTcpframe: the udp frame or tcp frame, including udp/tcp header and udp/tcp payload + // ipv6source: the 16 byte IPv6 source address. Must be the same, which is used later for the transmission. + // ipv6source: the 16 byte IPv6 destination address. Must be the same, which is used later for the transmission. + // nxt: The next-protocol. 0x11 for UDP, ... for TCP. + // + // Goal: construct an array, consisting of a 40-byte-pseudo-ipv6-header, and the udp frame (consisting of udp header and udppayload). + // For memory efficienty reason, we do NOT copy the pseudoheader and the udp frame together into one new array. Instead, we are using + // a dedicated pseudo-header-array, and the original udp buffer. + evenFrameLen = UdpOrTcpframeLen; + if ((evenFrameLen & 1)!=0) { + /* if we have an odd buffer length, we need to add a padding byte in the end, because the sum calculation + will need 16-bit-aligned data. */ + evenFrameLen++; + UdpOrTcpframe[evenFrameLen-1] = 0; /* Fill the padding byte with zero. */ + } + memset(pseudoHeader, 0, PSEUDO_HEADER_LEN); + /* fill the pseudo-ipv6-header */ + for (i=0; i<16; i++) { /* copy 16 bytes IPv6 addresses */ + pseudoHeader[i] = ipv6source[i]; /* IPv6 source address */ + pseudoHeader[16+i] = ipv6dest[i]; /* IPv6 destination address */ + } + pseudoHeader[32] = 0; // # high byte of the FOUR byte length is always 0 + pseudoHeader[33] = 0; // # 2nd byte of the FOUR byte length is always 0 + pseudoHeader[34] = UdpOrTcpframeLen >> 8; // # 3rd + pseudoHeader[35] = UdpOrTcpframeLen & 0xFF; // # low byte of the FOUR byte length + pseudoHeader[36] = 0; // # 3 padding bytes with 0x00 + pseudoHeader[37] = 0; + pseudoHeader[38] = 0; + pseudoHeader[39] = nxt; // # the nxt is at the end of the pseudo header + // pseudo-ipv6-header finished. + // Run the checksum over the concatenation of the pseudoheader and the buffer. + + + totalSum = 0; + for (i=0; i=65536) { // On each addition, if a carry-out (17th bit) is produced, + totalSum-=65536; // swing that 17th carry bit around + totalSum+=1; // and add it to the least significant bit of the running total. + } + } + for (i=0; i=65536) { // On each addition, if a carry-out (17th bit) is produced, + totalSum-=65536; // swing that 17th carry bit around + totalSum+=1; // and add it to the least significant bit of the running total. + } + } + // Finally, the sum is then one's complemented to yield the value of the UDP checksum field. + checksum = (uint16_t) (totalSum ^ 0xffff); + + return checksum; +} + +void packResponseIntoEthernet() { + // packs the IP packet into an ethernet packet + uint8_t i; + uint16_t EthTxFrameLen; + + EthTxFrameLen = IpResponseLen + 6 + 6 + 2; // Ethernet header needs 14 bytes: + // 6 bytes destination MAC + // 6 bytes source MAC + // 2 bytes EtherType + for (i=0; i<6; i++) { // fill the destination MAC with the source MAC of the received package + txbuffer[i] = rxbuffer[6+i]; + } + setMacAt(myMac,6); // bytes 6 to 11 are the source MAC + txbuffer[12] = 0x86; // 86dd is IPv6 + txbuffer[13] = 0xdd; + for (i=0; i> 8; + IpResponse[5] = plen & 0xFF; + IpResponse[6] = 0x11; // next level protocol, 0x11 = UDP in this case + IpResponse[7] = 0x0A; // hop limit + for (i=0; i<16; i++) { + IpResponse[8+i] = SeccIp[i]; // source IP address + IpResponse[24+i] = EvccIp[i]; // destination IP address + } + for (i=0; i> 8; + UdpResponse[1] = 15118 & 0xFF; + UdpResponse[2] = evccPort >> 8; + UdpResponse[3] = evccPort & 0xFF; + + lenInclChecksum = UdpResponseLen; + UdpResponse[4] = lenInclChecksum >> 8; + UdpResponse[5] = lenInclChecksum & 0xFF; + // checksum will be calculated afterwards + UdpResponse[6] = 0; + UdpResponse[7] = 0; + memcpy(UdpResponse+8, V2GFrame, v2gFrameLen); + // The content of buffer is ready. We can calculate the checksum. see https://en.wikipedia.org/wiki/User_Datagram_Protocol + checksum =calculateUdpAndTcpChecksumForIPv6(UdpResponse, UdpResponseLen, SeccIp, EvccIp, NEXT_UDP); + UdpResponse[6] = checksum >> 8; + UdpResponse[7] = checksum & 0xFF; + packResponseIntoIp(); +} + + +// SECC Discovery Response. +// The response from the charger to the EV, which transfers the IPv6 address of the charger to the car. +void sendSdpResponse() { + uint8_t i, lenSdp; + uint8_t SdpPayload[20]; // SDP response has 20 bytes + + memcpy(SdpPayload, SeccIp, 16); // 16 bytes IPv6 address of the charger. + // This IP address is based on the MAC of the ESP32, with 0xfffe in the middle. + // Here the charger decides, on which port he will listen for the TCP communication. + // We use port 15118, same as for the SDP. But also dynamically assigned port would be ok. + // The alpitronics seems to use different ports on different chargers, e.g. 0xC7A7 and 0xC7A6. + // The ABB Triple and ABB HPC are reporting port 0xD121, but in fact (also?) listening + // to the port 15118. + seccPort = 15118; + SdpPayload[16] = seccPort >> 8; // SECC port high byte. + SdpPayload[17] = seccPort & 0xff; // SECC port low byte. + SdpPayload[18] = 0x10; // security. We only support "no transport layer security, 0x10". + SdpPayload[19] = 0x00; // transport protocol. We only support "TCP, 0x00". + + // add the SDP header + lenSdp = sizeof(SdpPayload); + V2GFrame[0] = 0x01; // version + V2GFrame[1] = 0xfe; // version inverted + V2GFrame[2] = 0x90; // payload type. 0x9001 is the SDP response message + V2GFrame[3] = 0x01; // + V2GFrame[4] = (lenSdp >> 24) & 0xff; // 4 byte payload length + V2GFrame[5] = (lenSdp >> 16) & 0xff; + V2GFrame[6] = (lenSdp >> 8) & 0xff; + V2GFrame[7] = lenSdp & 0xff; + memcpy(V2GFrame+8, SdpPayload, lenSdp); + v2gFrameLen = lenSdp + 8; + packResponseIntoUdp(); +} + + +void evaluateUdpPayload(void) { + uint16_t v2gptPayloadType; + uint32_t v2gptPayloadLen; + uint8_t i; + + if (destinationport == 15118) { // port for the SECC + if ((udpPayload[0] == 0x01) && (udpPayload[1] == 0xFE)) { //# protocol version 1 and inverted + // we are the charger, and it is a message from car to charger, lets save the cars IP and port for later use. + memcpy(EvccIp, sourceIp, 16); + evccPort = sourceport; + //addressManager.setPevIp(EvccIp); + + // it is a V2GTP message + // payload is usually: 01 fe 90 00 00 00 00 02 10 00 + v2gptPayloadType = udpPayload[2]*256 + udpPayload[3]; + // 0x8001 EXI encoded V2G message (Will NOT come with UDP. Will come with TCP.) + // 0x9000 SDP request message (SECC Discovery) + // 0x9001 SDP response message (SECC response to the EVCC) + if (v2gptPayloadType == 0x9000) { + // it is a SDP request from the car to the charger + Serial.printf("it is a SDP request from the car to the charger\n"); + v2gptPayloadLen = (((uint32_t)udpPayload[4])<<24) + + (((uint32_t)udpPayload[5])<<16) + + (((uint32_t)udpPayload[6])<<8) + + udpPayload[7]; + if (v2gptPayloadLen == 2) { + //# 2 is the only valid length for a SDP request. + DiscoveryReqSecurity = udpPayload[8]; // normally 0x10 for "no transport layer security". Or 0x00 for "TLS". + DiscoveryReqTransportProtocol = udpPayload[9]; // normally 0x00 for TCP + if (DiscoveryReqSecurity != 0x10) { + Serial.printf("DiscoveryReqSecurity %u is not supported\n", DiscoveryReqSecurity); + } else if (DiscoveryReqTransportProtocol != 0x00) { + Serial.printf("DiscoveryReqTransportProtocol %u is not supported\n", DiscoveryReqTransportProtocol); + } else { + // This was a valid SDP request. Let's respond, if we are the charger. + Serial.printf("Ok, this was a valid SDP request. We are the SECC. Sending SDP response.\n"); + sendSdpResponse(); + } + } else { + Serial.printf("v2gptPayloadLen on SDP request is %u not supported\n", v2gptPayloadLen); + } + } else { + Serial.printf("v2gptPayloadType %04x not supported\n", v2gptPayloadType); + } + } + } +} + +void evaluateNeighborSolicitation(void) { + uint16_t checksum; + uint8_t i; + /* The neighbor discovery protocol is used by the charger to find out the + relation between MAC and IP. */ + + /* We could extract the necessary information from the NeighborSolicitation, + means the chargers IP and MAC address. But this is not fully necessary: + - The chargers MAC was already discovered in the SLAC. So we do not need to extract + it here again. But if we have not done the SLAC, because the modems are already paired, + then it makes sense to extract the chargers MAC from the Neighbor Solicitation message. + - For the chargers IPv6, there are two possible cases: + (A) The charger made the SDP without NeighborDiscovery. This works, if + we use the pyPlc.py as charger. It does not care for NeighborDiscovery, + because the SDP is implemented independent of the address resolution of + the operating system. + In this case, we know the chargers IP already from the SDP. + (B) The charger insists of doing NeighborSolitcitation in the middle of + SDP. This behavior was observed on Alpitronics. Means, we have the + following sequence: + 1. car sends SDP request + 2. charger sends NeighborSolicitation + 3. car sends NeighborAdvertisement + 4. charger sends SDP response + In this case, we need to extract the chargers IP from the NeighborSolicitation, + otherwise we have to chance to send the correct NeighborAdvertisement. + We can do this always, because this does not hurt for case A, address + is (hopefully) not changing. */ + /* More general approach: In the network there may be more participants than only the charger, + e.g. a notebook for sniffing. Eeach of it may send a NeighborSolicitation, and we should NOT use the addresses from the + NeighborSolicitation as addresses of the charger. The chargers address is only determined + by the SDP. */ + + /* save the requesters IP. The requesters IP is the source IP on IPv6 level, at byte 22. */ + memcpy(NeighborsIp, rxbuffer+22, 16); + /* save the requesters MAC. The requesters MAC is the source MAC on Eth level, at byte 6. */ + memcpy(NeighborsMac, rxbuffer+6, 6); + + /* send a NeighborAdvertisement as response. */ + // destination MAC = neighbors MAC + setMacAt(NeighborsMac, 0); // bytes 0 to 5 are the destination MAC + // source MAC = my MAC + setMacAt(myMac, 6); // bytes 6 to 11 are the source MAC + // Ethertype 86DD + txbuffer[12] = 0x86; // # 86dd is IPv6 + txbuffer[13] = 0xdd; + txbuffer[14] = 0x60; // # traffic class, flow + txbuffer[15] = 0; + txbuffer[16] = 0; + txbuffer[17] = 0; + // plen + #define ICMP_LEN 32 /* bytes in the ICMPv6 */ + txbuffer[18] = 0; + txbuffer[19] = ICMP_LEN; + txbuffer[20] = NEXT_ICMPv6; + txbuffer[21] = 0xff; + // We are the EVSE. So the SeccIp is our own link-local IP address. + memcpy(txbuffer+22, SeccIp, 16); // source IP address + memcpy(txbuffer+38, NeighborsIp, 16); // destination IP address + /* here starts the ICMPv6 */ + txbuffer[54] = 0x88; /* Neighbor Advertisement */ + txbuffer[55] = 0; + txbuffer[56] = 0; /* checksum (filled later) */ + txbuffer[57] = 0; + + /* Flags */ + txbuffer[58] = 0x60; /* Solicited, override */ + txbuffer[59] = 0; + txbuffer[60] = 0; + txbuffer[61] = 0; + + memcpy(txbuffer+62, SeccIp, 16); /* The own IP address */ + txbuffer[78] = 2; /* Type 2, Link Layer Address */ + txbuffer[79] = 1; /* Length 1, means 8 byte (?) */ + memcpy(txbuffer+80, myMac, 6); /* The own Link Layer (MAC) address */ + + checksum = calculateUdpAndTcpChecksumForIPv6(txbuffer+54, ICMP_LEN, SeccIp, NeighborsIp, NEXT_ICMPv6); + txbuffer[56] = checksum >> 8; + txbuffer[57] = checksum & 0xFF; + + Serial.printf("transmitting Neighbor Advertisement\n"); + /* Length of the NeighborAdvertisement = 86*/ + qcaspi_write_burst(txbuffer, 86); +} + + +void IPv6Manager(uint16_t rxbytes) { + uint16_t x; + uint16_t nextheader; + uint8_t icmpv6type; + + Serial.printf("[RX] "); + for (x=0; x 60) { + //# extract the source ipv6 address + memcpy(sourceIp, rxbuffer+22, 16); + nextheader = rxbuffer[20]; + if (nextheader == 0x11) { // it is an UDP frame + Serial.printf("Its a UDP.\n"); + sourceport = rxbuffer[54]*256 + rxbuffer[55]; + destinationport = rxbuffer[56]*256 + rxbuffer[57]; + udplen = rxbuffer[58]*256 + rxbuffer[59]; + udpsum = rxbuffer[60]*256 + rxbuffer[61]; + + //# udplen is including 8 bytes header at the begin + if (udplen>UDP_PAYLOAD_LEN) { + /* ignore long UDP */ + Serial.printf("Ignoring too long UDP\n"); + return; + } + if (udplen>8) { + udpPayloadLen = udplen-8; + for (x=0; x #include #include "main.h" +#include "ipv6.h" -uint8_t buffer[3164], rxbuffer[3164]; +uint8_t txbuffer[3164], rxbuffer[3164]; uint8_t modem_state; -uint8_t myMac[6] = {0x55, 0x56, 0x57, 0xAA, 0xAA, 0xAA}; // a default evse MAC. Will be overwritten later. -uint8_t pevMac[6] = {0xDC, 0x0E, 0xA1, 0x11, 0x67, 0x08}; //a default pev MAC. Will be overwritten later. -uint8_t pevRunId[8] = {0xDC, 0x0E, 0xA1, 0xDE, 0xAD, 0xBE, 0xEF, 0x55}; //a default pev RunId. Will be overwritten later. +uint8_t myMac[6]; // the MAC of the EVSE (derived from the ESP32's MAC). +uint8_t pevMac[6]; // the MAC of the PEV. +uint8_t myModemMac[6]; // our own modem's MAC (this is different from myMAC !). Unused. +uint8_t pevModemMac[6]; // the MAC of the PEV's modem (obtained with GetSwReq). Could this be used to identify the EV? +uint8_t pevRunId[8]; // pev RunId. Received from the PEV in the CM_SLAC_PARAM.REQ message. uint16_t AvgACVar[58]; // Average AC Variable Field. (used in CM_ATTEN_PROFILE.IND) -uint8_t NMK[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; // a default network key. Will be overwritten later. -uint8_t NMK_EVSE[] = {0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77}; // In EvseMode, we use this key. -uint8_t NID[] = {1, 2, 3, 4, 5, 6, 7}; // a default network ID +uint8_t NMK[16]; // Network Key. Will be initialized with a random key on each session. +uint8_t NID[] = {1, 2, 3, 4, 5, 6, 7}; // a default network ID. MSB bits 6 and 7 need to be 0. unsigned long SoundsTimer = 0; +unsigned long ModemSearchTimer = 0; +uint8_t ModemsFound = 0; uint8_t ReceivedSounds = 0; -void SPI_InterruptHandler() { + +void SPI_InterruptHandler() { // Interrupt handler is currently unused volatile uint16_t rx_data; @@ -75,8 +83,6 @@ void SPI_InterruptHandler() { } - - uint16_t qcaspi_read_register16(uint16_t reg) { uint16_t tx_data; uint16_t rx_data; @@ -121,8 +127,9 @@ void qcaspi_write_burst(uint8_t *src, uint32_t len) { qcaspi_write_register(SPI_REG_BFR_SIZE, total_len); //Serial.printf("Write buffer bytes sent: %u\n", total_len); - for(int x=0; x< len; x++) Serial.printf("%02x ",src[x]); - Serial.printf("\n"); +// Serial.print("[TX] "); +// for(int x=0; x< len; x++) Serial.printf("%02x ",src[x]); +// Serial.printf("\n"); digitalWrite(PIN_QCA700X_CS, LOW); SPI.transfer16(QCA7K_SPI_WRITE | QCA7K_SPI_EXTERNAL); // Write External @@ -137,175 +144,197 @@ uint32_t qcaspi_read_burst(uint8_t *dst) { available = qcaspi_read_register16(SPI_REG_RDBUF_BYTE_AVA); - if (available) { - // Write nr of bytes to read to SPI_REG_BFR_SIZE - qcaspi_write_register(SPI_REG_BFR_SIZE, available); - - digitalWrite(PIN_QCA700X_CS, LOW); - SPI.transfer16(QCA7K_SPI_READ | QCA7K_SPI_EXTERNAL); - SPI.transfer(dst, available); - digitalWrite(PIN_QCA700X_CS, HIGH); + if (available && available <= QCA7K_BUFFER_SIZE) { // prevent buffer overflow + // Write nr of bytes to read to SPI_REG_BFR_SIZE + qcaspi_write_register(SPI_REG_BFR_SIZE, available); + + digitalWrite(PIN_QCA700X_CS, LOW); + SPI.transfer16(QCA7K_SPI_READ | QCA7K_SPI_EXTERNAL); + SPI.transfer(dst, available); + digitalWrite(PIN_QCA700X_CS, HIGH); - return available; // return nr of bytes in the rxbuffer + return available; // return nr of bytes in the rxbuffer } return 0; } +void randomizeNmk() { + // randomize the Network Membership Key (NMK) + for (uint8_t i=0; i<16; i++) NMK[i] = random(256); // NMK +} void setNmkAt(uint16_t index) { // sets the Network Membership Key (NMK) at a certain position in the transmit buffer - for (uint8_t i=0; i<16; i++) buffer[index+i] = NMK_EVSE[i]; // NMK + for (uint8_t i=0; i<16; i++) txbuffer[index+i] = NMK[i]; // NMK } void setNidAt(uint16_t index) { // copies the network ID (NID, 7 bytes) into the wished position in the transmit buffer - for (uint8_t i=0; i<7; i++) buffer[index+i] = NID[i]; + for (uint8_t i=0; i<7; i++) txbuffer[index+i] = NID[i]; } void setMacAt(uint8_t *mac, uint16_t offset) { // at offset 0 in the ethernet frame, we have the destination MAC // at offset 6 in the ethernet frame, we have the source MAC - for (uint8_t i=0; i<6; i++) buffer[offset+i]=mac[i]; + for (uint8_t i=0; i<6; i++) txbuffer[offset+i]=mac[i]; } void setRunId(uint16_t offset) { // at the given offset in the transmit buffer, fill the 8-bytes-RunId. - for (uint8_t i=0; i<8; i++) buffer[offset+i]=pevRunId[i]; + for (uint8_t i=0; i<8; i++) txbuffer[offset+i]=pevRunId[i]; } void setACVarField(uint16_t offset) { - for (uint8_t i=0; i<58; i++) buffer[offset+i]=AvgACVar[i]; + for (uint8_t i=0; i<58; i++) txbuffer[offset+i]=AvgACVar[i]; } uint16_t getManagementMessageType() { // calculates the MMTYPE (base value + lower two bits), see Table 11-2 of homeplug spec - return (rxbuffer[16]<<8) + rxbuffer[15]; + return rxbuffer[16]*256 + rxbuffer[15]; +} + +uint16_t getFrameType() { + // returns the Ethernet Frame type + // 88E1 = HomeplugAV + // 86DD = IPv6 + return rxbuffer[12]*256 + rxbuffer[13]; +} + + + +void ModemReset() { + uint16_t reg16; + Serial.printf("Reset QCA700X Modem. "); + reg16 = qcaspi_read_register16(SPI_REG_SPI_CONFIG); + reg16 = reg16 | SPI_INT_CPU_ON; // Reset QCA700X + qcaspi_write_register(SPI_REG_SPI_CONFIG, reg16); } void composeSetKey() { - memset(buffer,0x00,60); // clear buffer - // Destination MAC - buffer[0]=0x00; - buffer[1]=0xB0; - buffer[2]=0x52; - buffer[3]=0x00; - buffer[4]=0x00; - buffer[5]=0x01; - // Source MAC - buffer[6]=0x02; // fixed MAC for now - buffer[7]=0x25; // we should receive the actual MAC of the module in the CM_SET_KEY.CNF - buffer[8]=0xd7; - buffer[9]=0x68; - buffer[10]=0xee; - buffer[11]=0x55; - // Protocol - buffer[12]=0x88; // Protocol HomeplugAV - buffer[13]=0xE1; - buffer[14]=0x01; // version - buffer[15]=0x08; // CM_SET_KEY.REQ - buffer[16]=0x60; - buffer[17]=0x00; // frag_index - buffer[18]=0x00; // frag_seqnum - buffer[19]=0x01; // 0 key info type - - buffer[20]=0xaa; // 1 my nonce (0x00 in spec!) - buffer[21]=0xaa; // 2 - buffer[22]=0xaa; // 3 - buffer[23]=0xaa; // 4 - - buffer[24]=0x00; // 5 your nonce - buffer[25]=0x00; // 6 - buffer[26]=0x00; // 7 - buffer[27]=0x00; // 8 + memset(txbuffer, 0x00, 60); // clear buffer + txbuffer[0]=0x00; // Destination MAC + txbuffer[1]=0xB0; + txbuffer[2]=0x52; + txbuffer[3]=0x00; + txbuffer[4]=0x00; + txbuffer[5]=0x01; + setMacAt(myMac, 6); // Source MAC + txbuffer[12]=0x88; // Protocol HomeplugAV + txbuffer[13]=0xE1; + txbuffer[14]=0x01; // version + txbuffer[15]=0x08; // CM_SET_KEY.REQ + txbuffer[16]=0x60; + txbuffer[17]=0x00; // frag_index + txbuffer[18]=0x00; // frag_seqnum + txbuffer[19]=0x01; // 0 key info type + // 20-23 my nonce (0x00 in spec!) + // 24-27 your nonce + txbuffer[28]=0x04; // 9 nw info pid - buffer[28]=0x04; // 9 nw info pid - - buffer[29]=0x00; // 10 info prn - buffer[30]=0x00; // 11 - buffer[31]=0x00; // 12 pmn - buffer[32]=0x00; // 13 CCo capability - setNidAt(33); - // 14-20 nid 7 bytes from 33 to 39 - // Network ID to be associated with the key distributed herein. - // The 54 LSBs of this field contain the NID (refer to Section 3.4.3.1). The - // two MSBs shall be set to 0b00. - buffer[40]=0x01;// peks (payload encryption key select) Table 11-83. 01 is NMK. We had 02 here, why??? - // with 0x0F we could choose "no key, payload is sent in the clear" + txbuffer[29]=0x00; // 10 info prn + txbuffer[30]=0x00; // 11 + txbuffer[31]=0x00; // 12 pmn + txbuffer[32]=0x00; // 13 CCo capability + setNidAt(33); // 14-20 nid 7 bytes from 33 to 39 + // Network ID to be associated with the key distributed herein. + // The 54 LSBs of this field contain the NID (refer to Section 3.4.3.1). The + // two MSBs shall be set to 0b00. + txbuffer[40]=0x01; // NewEKS. Table A.8 01 is NMK. setNmkAt(41); } +void composeGetSwReq() { + // GET_SW.REQ request + memset(txbuffer, 0x00, 60); // clear buffer + txbuffer[0]=0xff; // Destination MAC Broadcast + txbuffer[1]=0xff; + txbuffer[2]=0xff; + txbuffer[3]=0xff; + txbuffer[4]=0xff; + txbuffer[5]=0xff; + setMacAt(myMac, 6); // Source MAC + txbuffer[12]=0x88; // Protocol HomeplugAV + txbuffer[13]=0xE1; + txbuffer[14]=0x00; // version + txbuffer[15]=0x00; // GET_SW.REQ + txbuffer[16]=0xA0; + txbuffer[17]=0x00; // Vendor OUI + txbuffer[18]=0xB0; + txbuffer[19]=0x52; +} + void composeSlacParamCnf() { - memset(buffer,0x00,60); // clear buffer + memset(txbuffer, 0x00, 60); // clear txbuffer setMacAt(pevMac, 0); // Destination MAC setMacAt(myMac, 6); // Source MAC - buffer[12]=0x88; // Protocol HomeplugAV - buffer[13]=0xE1; - buffer[14]=0x01; // version - buffer[15]=0x65; // SLAC_PARAM.CNF - buffer[16]=0x60; // - buffer[17]=0x00; // 2 bytes fragmentation information. 0000 means: unfragmented. - buffer[18]=0x00; // - buffer[19]=0xff; // 19-24 sound target - buffer[20]=0xff; - buffer[21]=0xff; - buffer[22]=0xff; - buffer[23]=0xff; - buffer[24]=0xff; - buffer[25]=0x0A; // sound count - buffer[26]=0x06; // timeout - buffer[27]=0x01; // resptype + txbuffer[12]=0x88; // Protocol HomeplugAV + txbuffer[13]=0xE1; + txbuffer[14]=0x01; // version + txbuffer[15]=0x65; // SLAC_PARAM.CNF + txbuffer[16]=0x60; // + txbuffer[17]=0x00; // 2 bytes fragmentation information. 0000 means: unfragmented. + txbuffer[18]=0x00; // + txbuffer[19]=0xff; // 19-24 sound target + txbuffer[20]=0xff; + txbuffer[21]=0xff; + txbuffer[22]=0xff; + txbuffer[23]=0xff; + txbuffer[24]=0xff; + txbuffer[25]=0x0A; // sound count + txbuffer[26]=0x06; // timeout + txbuffer[27]=0x01; // resptype setMacAt(pevMac, 28); // forwarding_sta, same as PEV MAC, plus 2 bytes 00 00 - buffer[34]=0x00; // - buffer[35]=0x00; // + txbuffer[34]=0x00; // + txbuffer[35]=0x00; // setRunId(36); // 36 to 43 runid 8 bytes // rest is 00 } void composeAttenCharInd() { - memset(buffer,0x00,130); // clear buffer + memset(txbuffer, 0x00, 130); // clear txbuffer setMacAt(pevMac, 0); // Destination MAC setMacAt(myMac, 6); // Source MAC - buffer[12]=0x88; // Protocol HomeplugAV - buffer[13]=0xE1; - buffer[14]=0x01; // version - buffer[15]=0x6E; // ATTEN_CHAR.IND - buffer[16]=0x60; - buffer[17]=0x00; // 2 bytes fragmentation information. 0000 means: unfragmented. - buffer[18]=0x00; // - buffer[19]=0x00; // apptype - buffer[20]=0x00; // security + txbuffer[12]=0x88; // Protocol HomeplugAV + txbuffer[13]=0xE1; + txbuffer[14]=0x01; // version + txbuffer[15]=0x6E; // ATTEN_CHAR.IND + txbuffer[16]=0x60; + txbuffer[17]=0x00; // 2 bytes fragmentation information. 0000 means: unfragmented. + txbuffer[18]=0x00; // + txbuffer[19]=0x00; // apptype + txbuffer[20]=0x00; // security setMacAt(pevMac, 21); // Mac address of the EV Host which initiates the SLAC process setRunId(27); // RunId 8 bytes - buffer[35]=0x00; // 35 - 51 source_id, 17 bytes 0x00 (defined in ISO15118-3 table A.4) + txbuffer[35]=0x00; // 35 - 51 source_id, 17 bytes 0x00 (defined in ISO15118-3 table A.4) - buffer[52]=0x00; // 52 - 68 response_id, 17 bytes 0x00. (defined in ISO15118-3 table A.4) + txbuffer[52]=0x00; // 52 - 68 response_id, 17 bytes 0x00. (defined in ISO15118-3 table A.4) - buffer[69]=ReceivedSounds; // Number of sounds. 10 in normal case. - buffer[70]=0x3A; // Number of groups = 58. (defined in ISO15118-3 table A.4) + txbuffer[69]=ReceivedSounds; // Number of sounds. 10 in normal case. + txbuffer[70]=0x3A; // Number of groups = 58. (defined in ISO15118-3 table A.4) setACVarField(71); // 71 to 128: The group attenuation for the 58 announced groups. } void composeSlacMatchCnf() { - memset(buffer,0x00,109); // clear buffer + memset(txbuffer, 0x00, 109); // clear txbuffer setMacAt(pevMac, 0); // Destination MAC setMacAt(myMac, 6); // Source MAC - buffer[12]=0x88; // Protocol HomeplugAV - buffer[13]=0xE1; - buffer[14]=0x01; // version - buffer[15]=0x7D; // SLAC_MATCH.CNF - buffer[16]=0x60; // - buffer[17]=0x00; // 2 bytes fragmentation information. 0000 means: unfragmented. - buffer[18]=0x00; // - buffer[19]=0x00; // apptype - buffer[20]=0x00; // security - buffer[21]=0x56; // length 2 byte - buffer[22]=0x00; + txbuffer[12]=0x88; // Protocol HomeplugAV + txbuffer[13]=0xE1; + txbuffer[14]=0x01; // version + txbuffer[15]=0x7D; // SLAC_MATCH.CNF + txbuffer[16]=0x60; // + txbuffer[17]=0x00; // 2 bytes fragmentation information. 0000 means: unfragmented. + txbuffer[18]=0x00; // + txbuffer[19]=0x00; // apptype + txbuffer[20]=0x00; // security + txbuffer[21]=0x56; // length 2 byte + txbuffer[22]=0x00; // 23 - 39: pev_id 17 bytes. All zero. setMacAt(pevMac, 40); // Pev Mac address // 46 - 62: evse_id 17 bytes. All zero. @@ -317,168 +346,225 @@ void composeSlacMatchCnf() { setNmkAt(93); // 93 to 108 NMK. We can freely choose this. Normally we should use a random number. } +void composeFactoryDefaults() { + + memset(txbuffer, 0x00, 60); // clear buffer + txbuffer[0]=0x00; // Destination MAC + txbuffer[1]=0xB0; + txbuffer[2]=0x52; + txbuffer[3]=0x00; + txbuffer[4]=0x00; + txbuffer[5]=0x01; + setMacAt(myMac, 6); // Source MAC + txbuffer[12]=0x88; // Protocol HomeplugAV + txbuffer[13]=0xE1; + txbuffer[14]=0x00; // version + txbuffer[15]=0x7C; // Load modem Factory Defaults (same as holding GPIO3 low for 15 secs) + txbuffer[16]=0xA0; + txbuffer[17]=0x00; + txbuffer[18]=0xB0; + txbuffer[19]=0x52; +} +// Received SLAC messages from the PEV are handled here +void SlacManager(uint16_t rxbytes) { + uint16_t reg16, mnt, x; -// Task -// -// called every 20ms -// -void Timer20ms(void * parameter) { - - uint16_t reg16, rxbytes, mnt, x; + mnt = getManagementMessageType(); - - while(1) // infinite loop - { - switch(modem_state) { + // Serial.print("[RX] "); + // for (x=0; x= 60) { - // now remove the header, and footer. - memcpy(rxbuffer, rxbuffer+12, reg16-14); - //Serial.printf("available: %u rxbuffer bytes: %u\n",reg16, rxbytes); - - mnt = getManagementMessageType(); - - for (x=0; x= 74) { - reg16 = reg16-rxbytes-14; - // move data forward. - memcpy(rxbuffer, rxbuffer+2+rxbytes, reg16); - } else reg16 = 0; - - } - - } // while(reg16) - break; - - default: - break; - } - // Did the Sound timer expire? - if (modem_state == MNBC_SOUND && (SoundsTimer + 600) < millis() ) { - Serial.printf("SOUND timer expired\n"); - // Send CM_ATTEN_CHAR_IND, even if no Sounds were received. - composeAttenCharInd(); - // Send data to modem - qcaspi_write_burst(buffer, 129); - modem_state = ATTEN_CHAR_IND; - Serial.printf("transmitting CM_ATTEN_CHAR.IND\n"); + } else if (mnt == (CM_ATTEN_CHAR + MMTYPE_RSP) && modem_state == ATTEN_CHAR_IND) { + Serial.printf("received CM_ATTEN_CHAR.RSP\n"); + // verify pevMac, RunID, and succesful Slac fields + if (memcmp(pevMac, rxbuffer+21, 6) == 0 && memcmp(pevRunId, rxbuffer+27, 8) == 0 && rxbuffer[69] == 0) { + Serial.printf("Successful SLAC process\n"); + modem_state = ATTEN_CHAR_RSP; + } else modem_state = MODEM_CONFIGURED; // probably not correct, should ignore data, and retransmit CM_ATTEN_CHAR.IND + + } else if (mnt == (CM_SLAC_MATCH + MMTYPE_REQ) && modem_state == ATTEN_CHAR_RSP) { + Serial.printf("received CM_SLAC_MATCH.REQ\n"); + // Verify pevMac, RunID and MVFLength fields + if (memcmp(pevMac, rxbuffer+40, 6) == 0 && memcmp(pevRunId, rxbuffer+69, 8) == 0 && rxbuffer[21] == 0x3e) { + composeSlacMatchCnf(); + qcaspi_write_burst(txbuffer, 109); // Send data to modem + Serial.printf("transmitting CM_SLAC_MATCH.CNF\n"); + modem_state = MODEM_GET_SW_REQ; + } + + } else if (mnt == (CM_GET_SW + MMTYPE_CNF) && modem_state == MODEM_WAIT_SW) { + // Both the local and Pev modem will send their software version. + // check if the MAC of the modem is the same as our local modem. + if (memcmp(rxbuffer+6, myModemMac, 6) != 0) { + // Store the Pev modem MAC, as long as it is not random, we can use it for identifying the EV (Autocharge / Plug N Charge) + memcpy(pevModemMac, rxbuffer+6, 6); + } + Serial.printf("received GET_SW.CNF\n"); + ModemsFound++; } +} - // Pause the task for 20ms - vTaskDelay(20 / portTICK_PERIOD_MS); - } // while(1) + +// Task +// +// called every 20ms +// +void Timer20ms(void * parameter) { + + uint16_t reg16, rxbytes, mnt, x; + uint16_t FrameType; + + while(1) // infinite loop + { + switch(modem_state) { + + case MODEM_POWERUP: + Serial.printf("Searching for local modem.. "); + reg16 = qcaspi_read_register16(SPI_REG_SIGNATURE); + if (reg16 == QCASPI_GOOD_SIGNATURE) { + Serial.printf("QCA700X modem found\n"); + modem_state = MODEM_WRITESPACE; + } + break; + + case MODEM_WRITESPACE: + reg16 = qcaspi_read_register16(SPI_REG_WRBUF_SPC_AVA); + if (reg16 == QCA7K_BUFFER_SIZE) { + Serial.printf("QCA700X write space ok\n"); + modem_state = MODEM_CM_SET_KEY_REQ; + } + break; + + case MODEM_CM_SET_KEY_REQ: + randomizeNmk(); // randomize Nmk, so we start with a new key. + composeSetKey(); // set up buffer with CM_SET_KEY.REQ request data + qcaspi_write_burst(txbuffer, 60); // write minimal 60 bytes according to an4_rev5.pdf + Serial.printf("transmitting SET_KEY.REQ, to configure the EVSE modem with random NMK\n"); + modem_state = MODEM_CM_SET_KEY_CNF; + break; + + case MODEM_GET_SW_REQ: + composeGetSwReq(); + qcaspi_write_burst(txbuffer, 60); // Send data to modem + Serial.printf("Modem Search..\n"); + ModemsFound = 0; + ModemSearchTimer = millis(); // start timer + modem_state = MODEM_WAIT_SW; + break; + + default: + // poll modem for data + reg16 = qcaspi_read_burst(rxbuffer); + + while (reg16) { + // we received data, read the length of the first packet. + rxbytes = rxbuffer[8] + (rxbuffer[9] << 8); + + // check if the header exists and a minimum of 60 bytes are available + if (rxbuffer[4] == 0xaa && rxbuffer[5] == 0xaa && rxbuffer[6] == 0xaa && rxbuffer[7] == 0xaa && rxbytes >= 60) { + // now remove the header, and footer. + memcpy(rxbuffer, rxbuffer+12, reg16-14); + //Serial.printf("available: %u rxbuffer bytes: %u\n",reg16, rxbytes); + + FrameType = getFrameType(); + if (FrameType == FRAME_HOMEPLUG) SlacManager(rxbytes); + else if (FrameType == FRAME_IPV6) IPv6Manager(rxbytes); + + // there might be more data still in the buffer. Check if there is another packet. + if ((int16_t)reg16-rxbytes-14 >= 74) { + reg16 = reg16-rxbytes-14; + // move data forward. + memcpy(rxbuffer, rxbuffer+2+rxbytes, reg16); + } else reg16 = 0; + + } else { + Serial.printf("Invalid data!\n"); + ModemReset(); + modem_state = MODEM_POWERUP; + } + } + break; + } + + // Did the Sound timer expire? + if (modem_state == MNBC_SOUND && (SoundsTimer + 600) < millis() ) { + Serial.printf("SOUND timer expired\n"); + // Send CM_ATTEN_CHAR_IND, even if no Sounds were received. + composeAttenCharInd(); + qcaspi_write_burst(txbuffer, 129); // Send data to modem + modem_state = ATTEN_CHAR_IND; + Serial.printf("transmitting CM_ATTEN_CHAR.IND\n"); + } + + if (modem_state == MODEM_WAIT_SW && (ModemSearchTimer + 1000) < millis() ) { + Serial.printf("MODEM timer expired. "); + if (ModemsFound >= 2) { + Serial.printf("Found %u modems. Private network between EVSE and PEV established\n", ModemsFound); + + Serial.printf("PEV MAC: "); + for(x=0; x<6 ;x++) Serial.printf("%02x", pevMac[x]); + Serial.printf(" PEV modem MAC: "); + for(x=0; x<6 ;x++) Serial.printf("%02x", pevModemMac[x]); + Serial.printf("\n"); + + modem_state = MODEM_LINK_READY; + } else { + Serial.printf("(re)transmitting MODEM_GET_SW.REQ\n"); + modem_state = MODEM_GET_SW_REQ; + } + } + + + // Pause the task for 20ms + vTaskDelay(20 / portTICK_PERIOD_MS); + + } // while(1) } @@ -511,17 +597,21 @@ void setup() { NULL // Task handle ); + + esp_read_mac(myMac, ESP_MAC_ETH); // select the Ethernet MAC + setSeccIp(); // use myMac to create link-local IPv6 address. + modem_state = MODEM_POWERUP; + } void loop() { - // Serial.printf("Total heap: %d\n", ESP.getHeapSize()); - // Serial.printf("Free heap: %d\n", ESP.getFreeHeap()); - // Serial.printf("Flash Size: %d\n", ESP.getFlashChipSize()); - // Serial.printf("Total PSRAM: %d\n", ESP.getPsramSize()); - // Serial.printf("Free PSRAM: %d\n", ESP.getFreePsram()); + // Serial.printf("Total heap: %u\n", ESP.getHeapSize()); + // Serial.printf("Free heap: %u\n", ESP.getFreeHeap()); + // Serial.printf("Flash Size: %u\n", ESP.getFlashChipSize()); + // Serial.printf("Total PSRAM: %u\n", ESP.getPsramSize()); + // Serial.printf("Free PSRAM: %u\n", ESP.getFreePsram()); delay(1000); - } \ No newline at end of file diff --git a/src/src/exi/BitInputStream.c b/src/src/exi/BitInputStream.c new file mode 100644 index 0000000..bf4ea60 --- /dev/null +++ b/src/src/exi/BitInputStream.c @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +#include "BitInputStream.h" +#include "EXIConfig.h" +#include "EXITypes.h" +#include "ErrorCodes.h" + +#ifndef BIT_INPUT_STREAM_C +#define BIT_INPUT_STREAM_C + +/* internal method to (re)fill buffer */ +static int readBuffer(bitstream_t* stream) +{ + int errn = 0; + if(stream->capacity==0) + { +#if EXI_STREAM == BYTE_ARRAY + if ( (*stream->pos) < stream->size ) { + stream->buffer = stream->data[(*stream->pos)++]; + stream->capacity = BITS_IN_BYTE; + } else { + errn = EXI_ERROR_INPUT_STREAM_EOF; + } +#endif +#if EXI_STREAM == FILE_STREAM + stream->buffer = (uint8_t)(getc(stream->file)); + /* EOF cannot be used, 0xFF valid value */ + if ( feof(stream->file) || ferror(stream->file) ) { + errn = EXI_ERROR_INPUT_STREAM_EOF; + } else { + stream->capacity = BITS_IN_BYTE; + } +#endif + } + return errn; +} + +int readBits(bitstream_t* stream, size_t num_bits, uint32_t* b) +{ + int errn = readBuffer(stream); + if (errn == 0) { + /* read the bits in one step */ + if(num_bits <= stream->capacity) { + stream->capacity = (uint8_t)(stream->capacity - num_bits); + *b = (uint32_t)((stream->buffer >> stream->capacity) & (0xff >> (BITS_IN_BYTE - num_bits))); + } else { + /* read bits as much as possible */ + *b = (uint32_t)(stream->buffer & (0xff >> (BITS_IN_BYTE - stream->capacity))); + num_bits = (num_bits - stream->capacity); + stream->capacity = 0; + + /* read whole bytes */ + while(errn == 0 && num_bits >= 8) + { + errn = readBuffer(stream); + *b = ((*b) << BITS_IN_BYTE) | stream->buffer; + num_bits = (num_bits - BITS_IN_BYTE); + stream->capacity = 0; + } + + /* read the spare bits in the buffer */ + if(errn == 0 && num_bits > 0) + { + errn = readBuffer(stream); + if (errn == 0) { + *b = ( (*b) << num_bits) | (uint8_t)(stream->buffer >> (BITS_IN_BYTE - num_bits)) ; + stream->capacity = (uint8_t)(BITS_IN_BYTE - num_bits); + } + } + } + } + + return errn; +} + +#endif diff --git a/src/src/exi/BitInputStream.h b/src/src/exi/BitInputStream.h new file mode 100644 index 0000000..a503565 --- /dev/null +++ b/src/src/exi/BitInputStream.h @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file BitInputStream.h + * \brief Bit Input Stream + * + * Read bits and bytes from an underlying input stream. + * + */ + +#ifndef BIT_INPUT_STREAM_H +#define BIT_INPUT_STREAM_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "EXITypes.h" + +/** + * \brief Read bits + * + * Read the next num_bits bits and returns result an integer. + * + * \param stream Input Stream + * \param num_bits Number of bits + * \param b Integer value (out) + * \return Error-Code <> 0 + * + */ +int readBits(bitstream_t* stream, size_t num_bits, uint32_t* b); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/src/exi/BitOutputStream.c b/src/src/exi/BitOutputStream.c new file mode 100644 index 0000000..f5cc1a6 --- /dev/null +++ b/src/src/exi/BitOutputStream.c @@ -0,0 +1,124 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +#include "BitOutputStream.h" +#include "EXIConfig.h" +#include "EXITypes.h" +#include "ErrorCodes.h" + +#ifndef BIT_OUTPUT_STREAM_C +#define BIT_OUTPUT_STREAM_C + +int writeBits(bitstream_t* stream, size_t nbits, uint32_t val) { + int errn = 0; + /* is there enough space in the buffer */ + if (nbits <= stream->capacity) { + /* all bits fit into the current buffer */ + stream->buffer = (uint8_t)(stream->buffer << (nbits)) | (uint8_t)(val & (uint32_t)(0xff >> (uint32_t)(BITS_IN_BYTE - nbits))); + stream->capacity = (uint8_t)(stream->capacity - nbits); + /* if the buffer is full write byte */ + if (stream->capacity == 0) { +#if EXI_STREAM == BYTE_ARRAY + if ((*stream->pos) >= stream->size) { + errn = EXI_ERROR_OUTPUT_STREAM_EOF; + } else { + stream->data[(*stream->pos)++] = stream->buffer; + } +#endif +#if EXI_STREAM == FILE_STREAM + if ( putc(stream->buffer, stream->file) == EOF ) { + errn = EXI_ERROR_OUTPUT_STREAM_EOF; + } +#endif + stream->capacity = BITS_IN_BYTE; + stream->buffer = 0; + } + } else { + /* the buffer is not enough + * fill the buffer */ + stream->buffer = (uint8_t)(stream->buffer << stream->capacity) | + ( (uint8_t)(val >> (nbits - stream->capacity)) & (uint8_t)(0xff >> (BITS_IN_BYTE - stream->capacity)) ); + + nbits = (nbits - stream->capacity); +#if EXI_STREAM == BYTE_ARRAY + if ((*stream->pos) >= stream->size) { + errn = EXI_ERROR_OUTPUT_STREAM_EOF; + } else { + stream->data[(*stream->pos)++] = stream->buffer; + } +#endif +#if EXI_STREAM == FILE_STREAM + if ( putc(stream->buffer, stream->file) == EOF ) { + errn = EXI_ERROR_OUTPUT_STREAM_EOF; + } +#endif + stream->buffer = 0; + + /* write whole bytes */ + while (errn == 0 && nbits >= BITS_IN_BYTE) { + nbits = (nbits - BITS_IN_BYTE); +#if EXI_STREAM == BYTE_ARRAY + if ((*stream->pos) >= stream->size) { + errn = EXI_ERROR_OUTPUT_STREAM_EOF; + } else { + stream->data[(*stream->pos)++] = (uint8_t)(val >> (nbits)); + } +#endif +#if EXI_STREAM == FILE_STREAM + if ( putc((int)(val >> (nbits)), stream->file) == EOF ) { + errn = EXI_ERROR_OUTPUT_STREAM_EOF; + } +#endif + } + + /* spared bits are kept in the buffer */ + stream->buffer = (uint8_t)val; /* Note: the high bits will be shifted out during further filling */ + stream->capacity = (uint8_t)(BITS_IN_BYTE - (nbits)); + } + + return errn; +} + +/** + * Flush output + */ +int flush(bitstream_t* stream) { + int errn = 0; + if (stream->capacity == BITS_IN_BYTE) { + /* nothing to do, no bits in buffer */ + } else { + errn = writeBits(stream, stream->capacity, 0); + } + return errn; +} + +#endif + diff --git a/src/src/exi/BitOutputStream.h b/src/src/exi/BitOutputStream.h new file mode 100644 index 0000000..186d73a --- /dev/null +++ b/src/src/exi/BitOutputStream.h @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file BitOutputStream.h + * \brief Bit Output Stream + * + * Write bits and bytes to an underlying output stream. + * + */ + +#ifndef BIT_OUTPUT_STREAM_H +#define BIT_OUTPUT_STREAM_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#include "EXITypes.h" + +/** + * \brief Write bits + * + * Write the n least significant bits of parameter b starting + * with the most significant, i.e. from left to right. + * + * \param stream Output Stream + * \param nbits Number of bits + * \param bits value + * \return Error-Code <> 0 + * + */ +int writeBits(bitstream_t* stream, size_t nbits, uint32_t bits); + + +/** + * \brief Flush output + * + * If there are some unwritten bits, pad them if necessary and + * write them out. Note that this method does flush the + * underlying stream. + * + * \param stream Output Stream + * \return Error-Code <> 0 + * + */ +int flush(bitstream_t* stream); + + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/src/src/exi/ByteStream.c b/src/src/exi/ByteStream.c new file mode 100644 index 0000000..8ce8729 --- /dev/null +++ b/src/src/exi/ByteStream.c @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +/* Avoid VS warning, put before your included header files */ +/* warning C4996: �fopen�: This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. */ +#define _CRT_SECURE_NO_DEPRECATE + +#include + +#include "EXITypes.h" +#include "ErrorCodes.h" + +#ifndef BYTE_STREAM_C +#define BYTE_STREAM_C + +int readBytesFromFile(const char * filename, uint8_t* data, size_t size, size_t* pos) { + FILE* f; + int character; + int errn = 0; + + f = fopen(filename, "rb"); + + if (f == NULL) { + errn = EXI_ERROR_INPUT_FILE_HANDLE; + } else { + /* read bytes */ + while (errn == 0 && (character = getc(f)) != EOF) { + if (*pos >= size) { + errn = EXI_ERROR_OUT_OF_BYTE_BUFFER; + } else { + data[(*pos)++] = (uint8_t) character; + } + } + fclose(f); + } + + return errn; +} + +int writeBytesToFile(uint8_t* data, size_t len, const char * filename) { + size_t rlen; + FILE* f = fopen(filename, "wb+"); + + if (f == NULL) { + return -1; + } else { + rlen = fwrite(data, sizeof(uint8_t), len, f); + fflush(f); + fclose(f); + if(rlen == len) { + return 0; + } else { + return EXI_ERROR_OUTPUT_FILE; + } + } +} + + +#endif /* BYTE_STREAM_C */ + diff --git a/src/src/exi/ByteStream.h b/src/src/exi/ByteStream.h new file mode 100644 index 0000000..c8fe9a0 --- /dev/null +++ b/src/src/exi/ByteStream.h @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file ByteStream.h + * \brief Byte Stream utilities + * + */ + +#ifndef BYTE_STREAM_H +#define BYTE_STREAM_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "EXITypes.h" + +/** + * \brief Write bytes to file + * + * \param data byte array + * \param len length + * \param filename File name + * \return Error-Code <> 0 + * + */ +int writeBytesToFile(uint8_t* data, size_t len, const char * filename); + + +/** + * \brief Read bytes from file + * + * \param filename File name + * \param data byte array + * \param size byte array size + * \param pos byte array position + * \return Error-Code <> 0 + * + */ +int readBytesFromFile(const char * filename, uint8_t* data, size_t size, size_t* pos); + +#ifdef __cplusplus +} +#endif + +#endif /* BYTE_STREAM_H */ diff --git a/src/src/exi/DecoderChannel.c b/src/src/exi/DecoderChannel.c new file mode 100644 index 0000000..2f11945 --- /dev/null +++ b/src/src/exi/DecoderChannel.c @@ -0,0 +1,1068 @@ +/* + * Copyright (C) 2007-2022 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2022-03-08 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +#include "DecoderChannel.h" + +#include "EXIConfig.h" +#include "EXIOptions.h" +#include "BitInputStream.h" +#include "EXITypes.h" +#include "MethodsBag.h" +/*#include "v2gEXICoder.h"*/ +#include "ErrorCodes.h" + +#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION +#include "DynamicMemory.h" +#endif /* DYNAMIC_ALLOCATION */ + +#ifndef DECODER_CHANNEL_C +#define DECODER_CHANNEL_C + +/* unsigned long == 64 bits, 10 * 7bits = 70 bits */ +#define MAX_OCTETS_FOR_UNSIGNED_INTEGER_64 10 +/* unsigned int == 32 bits, 5 * 7bits = 35 bits */ +#define MAX_OCTETS_FOR_UNSIGNED_INTEGER_32 5 + +/* buffer for reading (arbitrary) large integer values */ +static uint8_t maskedOctets[MAX_OCTETS_FOR_UNSIGNED_INTEGER_64]; + + +static int _decodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv, int negative) { + int errn = 0; + int i = 0; + uint8_t b; + int k; + + do { + /* Read the next octet */ + errn = decode(stream, &b); + if (errn == 0) { + if(i < MAX_OCTETS_FOR_UNSIGNED_INTEGER_64) { + /* the 7 least significant bits hold the actual value */ + maskedOctets[i++] = (b & 127); + } else { + errn = EXI_UNSUPPORTED_INTEGER_VALUE; + } + } + } while( errn == 0 && b >= 128 ); /* no more octets ? */ + + if ( errn == 0 ) { + /* For negative values, the Unsigned Integer holds the + * magnitude of the value minus 1 */ + + switch(i) { + case 1: /* 7 bits */ + if (negative) { + iv->val.int8 = (int8_t)(-( b + 1)); + iv->type = EXI_INTEGER_8; + } else { + iv->val.uint8 = b; + iv->type = EXI_UNSIGNED_INTEGER_8; + } + break; + case 2: /* 14 bits */ + iv->val.uint16 = 0; + for (k = i-1; k >= 0 ; k--) { + iv->val.uint16 = (uint16_t)((iv->val.uint16 << 7) | maskedOctets[k]); + } + if (negative) { + iv->val.int16 = (int16_t)( -( iv->val.uint16 + 1 )); + iv->type = EXI_INTEGER_16; + } else { + iv->type = EXI_UNSIGNED_INTEGER_16; + } + break; + case 3: /* 21 bits */ + case 4: /* 28 bits */ + iv->val.uint32 = 0; + for (k = i-1; k >= 0 ; k--) { + iv->val.uint32 = (iv->val.uint32 << 7) | maskedOctets[k]; + } + if (negative) { + iv->val.int32 = (-(int32_t)(iv->val.uint32 + 1)); + if (iv->val.int32 <= INT16_MAX && iv->val.int32 >= INT16_MIN ) { + iv->type = EXI_INTEGER_16; + } else { + iv->type = EXI_INTEGER_32; + } + } else { + if (iv->val.uint32 <= UINT16_MAX) { + iv->type = EXI_UNSIGNED_INTEGER_16; + } else { + iv->type = EXI_UNSIGNED_INTEGER_32; + } + } + break; + case 5: /* 35 bits */ + case 6: /* 42 bits */ + case 7: /* 49 bits */ + case 8: /* 56 bits */ + case 9: /* 63 bits */ + case 10: /* 70 bits */ + iv->val.uint64 = 0; + for (k = i-1; k >= 0 ; k--) { + iv->val.uint64 = (iv->val.uint64 << 7) | maskedOctets[k]; + } + if (negative) { + if (i > 9) { + /* too large */ + return EXI_UNSUPPORTED_INTEGER_VALUE; + } + iv->val.int64 = (-(int64_t)(iv->val.uint64 + 1)); + if (iv->val.int64 <= INT32_MAX && iv->val.int64 >= INT32_MIN ) { + iv->type = EXI_INTEGER_32; + } else { + iv->type = EXI_INTEGER_64; + } + } else { + if (iv->val.uint64 <= UINT32_MAX) { + iv->type = EXI_UNSIGNED_INTEGER_32; + /* iv->val.uint32 = iv->val.uint64;*/ + } else { + iv->type = EXI_UNSIGNED_INTEGER_64; + } + } + break; + default: + errn = EXI_UNSUPPORTED_INTEGER_VALUE; + break; + } + } + + return errn; +} + +int decodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv) { + return _decodeUnsignedInteger(stream, iv, 0); +} + +int decodeUnsignedInteger16(bitstream_t* stream, uint16_t* uint16) { + unsigned int mShift = 0; + int errn = 0; + uint8_t b = 0; + *uint16 = 0; + + do { + /* 1. Read the next octet */ + errn = decode(stream, &b); + /* 2. Multiply the value of the unsigned number represented by the 7 + * least significant + * bits of the octet by the current multiplier and add the result to + * the current value */ + *uint16 = (uint16_t)(*uint16 + ((b & 127) << mShift)); + /* 3. Multiply the multiplier by 128 */ + mShift += 7; + /* 4. If the most significant bit of the octet was 1, go back to step 1 */ + } while (errn == 0 && (b >> 7) == 1); + + return errn; +} + +int decodeUnsignedInteger32(bitstream_t* stream, uint32_t* uint32) { + /* 0XXXXXXX ... 1XXXXXXX 1XXXXXXX */ + unsigned int mShift = 0; + int errn = 0; + uint8_t b = 0; + *uint32 = 0; + + do { + /* 1. Read the next octet */ + errn = decode(stream, &b); + /* 2. Multiply the value of the unsigned number represented by the 7 + * least significant + * bits of the octet by the current multiplier and add the result to + * the current value */ + *uint32 += (uint32_t)((b & 127) << mShift); + /* 3. Multiply the multiplier by 128 */ + mShift += 7; + /* 4. If the most significant bit of the octet was 1, go back to step 1 */ + } while (errn == 0 && (b >> 7) == 1); + + return errn; +} + +int decodeUnsignedIntegerSizeT(bitstream_t* stream, size_t* sizeT) { + int errn = 0; + + /* TODO is there a better way to detect the actual size of size_t */ + if(SIZE_MAX == UINT16_MAX) { + /* 16bit */ + uint16_t uint16; + errn = decodeUnsignedInteger16(stream, &uint16); + if(errn == 0) { + *sizeT = (size_t)uint16; + } + } else if(SIZE_MAX == UINT32_MAX) { + /* 32bit */ + uint32_t uint32; + errn = decodeUnsignedInteger32(stream, &uint32); + if(errn == 0) { + *sizeT = (size_t)uint32; + } + } else { + /* 64bit */ + uint64_t uint64; + errn = decodeUnsignedInteger64(stream, &uint64); + if(errn == 0) { + *sizeT = (size_t)uint64; + } + } + + return errn; +} + + + +/** + * Decode an arbitrary precision non negative integer using a sequence of + * octets. The most significant bit of the last octet is set to zero to + * indicate sequence termination. Only seven bits per octet are used to + * store the integer's value. + */ +int decodeUnsignedInteger64(bitstream_t* stream, uint64_t* uint64) { + unsigned int mShift = 0; + int errn = 0; + uint8_t b; + *uint64 = 0L; + + do { + errn = decode(stream, &b); + *uint64 += ((uint64_t) (b & 127)) << mShift; + mShift += 7; + } while (errn == 0 && (b >> 7) == 1); + + return errn; +} + + +void _reverseArray(uint8_t *array, int number) { + int x, t; + number--; + + for(x = 0; x < number; x ++, number --) { + t = array[x]; + array[x] = array[number]; + array[number] = t; + } +} + +/** + * Decode an arbitrary precision non negative integer using a sequence of + * octets. The most significant bit of the last octet is set to zero to + * indicate sequence termination. Only seven bits per octet are used to + * store the integer's value. + */ +int decodeUnsignedIntegerBig(bitstream_t* stream, size_t size, uint8_t* data, size_t* len) { + int errn = 0; + uint8_t b = 0; + unsigned int mShift1 = 0; + unsigned int mShift2 = 0; + unsigned int mShift3 = 0; + unsigned int mShift4 = 0; + unsigned int nBytesRead = 0; + unsigned int nBitsAvailable = 0; + uint64_t uint64_1 = 0; + uint64_t uint64_2 = 0; + uint64_t uint64_3 = 0; + uint64_t uint64_4 = 0; + + *len = 0; + + do { + errn = decode(stream, &b); + nBytesRead++; + nBitsAvailable += 7; + + if(nBytesRead <= 8) { + uint64_1 += ((uint64_t) (b & 127)) << mShift1; + mShift1 += 7; + } else if(nBytesRead <= 16) { + uint64_2 += ((uint64_t) (b & 127)) << mShift2; + mShift2 += 7; + } else if(nBytesRead <= 24) { + uint64_3 += ((uint64_t) (b & 127)) << mShift3; + mShift3 += 7; + } else if(nBytesRead <= 32) { + uint64_4 += ((uint64_t) (b & 127)) << mShift4; + mShift4 += 7; + } else { + return -1; /* too large */ + } + } while (errn == 0 && (b >> 7) == 1); + + /* shift actual data into array */ + if(uint64_4 != 0) { + /* 7 octets for uint64_1 */ + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 1 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 2 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 3 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 4 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 5 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 6 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 7 */ + + /* 7 octets for uint64_2 */ + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); /* 1 */ + uint64_2 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); /* 2 */ + uint64_2 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); /* 3 */ + uint64_2 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); /* 4 */ + uint64_2 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); /* 5 */ + uint64_2 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); /* 6 */ + uint64_2 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); /* 7 */ + + /* 7 octets for uint64_3 */ + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_3 & 0xFF); /* 1 */ + uint64_3 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_3 & 0xFF); /* 2 */ + uint64_3 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_3 & 0xFF); /* 3 */ + uint64_3 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_3 & 0xFF); /* 4 */ + uint64_3 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_3 & 0xFF); /* 5 */ + uint64_3 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_3 & 0xFF); /* 6 */ + uint64_3 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_3 & 0xFF); /* 7 */ + + /* remaining octets of uint64_4 */ + while (uint64_4 != 0 && errn == 0) { + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = uint64_4 & 0xFF; + uint64_4 >>= 8; + } + } else if(uint64_3 != 0) { + /* 7 octets for uint64_1 */ + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 1 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 2 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 3 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 4 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 5 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 6 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 7 */ + + /* 7 octets for uint64_2 */ + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); /* 1 */ + uint64_2 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); /* 2 */ + uint64_2 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); /* 3 */ + uint64_2 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); /* 4 */ + uint64_2 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); /* 5 */ + uint64_2 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); /* 6 */ + uint64_2 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_2 & 0xFF); /* 7 */ + + /* remaining octets of uint64_3 */ + while (uint64_3 != 0 && errn == 0) { + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = uint64_3 & 0xFF; + uint64_3 >>= 8; + } + + } else if(uint64_2 != 0) { + /* 7 octets for uint64_1 */ + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 1 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 2 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 3 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 4 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 5 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 6 */ + uint64_1 >>= 8; + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = (uint8_t)(uint64_1 & 0xFF); /* 7 */ + /* remaining octets of uint64_2 */ + while (uint64_2 != 0 && errn == 0) { + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = uint64_2 & 0xFF; + uint64_2 >>= 8; + } + } else if(uint64_1 != 0) { + while (uint64_1 != 0 && errn == 0) { + if(*len >= size) { + return EXI_ERROR_OUT_OF_BOUNDS; + } + data[(*len)++] = uint64_1 & 0xFF; + uint64_1 >>= 8; + } + } + + _reverseArray(data, *len); + + return errn; +} + +int decodeInteger(bitstream_t* stream, exi_integer_t* iv) { + int b; + int errn = decodeBoolean(stream, &b); + if (errn == 0) { + errn = _decodeUnsignedInteger(stream, iv, b); + } + + return errn; +} + + +/** + * Decode an arbitrary precision integer using a sign bit followed by a + * sequence of octets. The most significant bit of the last octet is set to + * zero to indicate sequence termination. Only seven bits per octet are used + * to store the integer's value. + */ +int decodeInteger16(bitstream_t* stream, int16_t* int16) { + int b; + uint16_t uint16; + int errn = decodeBoolean(stream, &b); + + if (errn == 0) { + if (b) { + /* For negative values, the Unsigned Integer holds the + * magnitude of the value minus 1 */ + errn = decodeUnsignedInteger16(stream, &uint16); + *int16 = (int16_t)(-(uint16 + 1)); + } else { + /* positive */ + errn = decodeUnsignedInteger16(stream, &uint16); + *int16 = (int16_t)(uint16); + } + } + + return errn; +} + +/** + * Decode an arbitrary precision integer using a sign bit followed by a + * sequence of octets. The most significant bit of the last octet is set to + * zero to indicate sequence termination. Only seven bits per octet are used + * to store the integer's value. + */ +int decodeInteger32(bitstream_t* stream, int32_t* int32) { + int b; + uint32_t uint32; + int errn = decodeBoolean(stream, &b); + + if (errn == 0) { + if (b) { + /* For negative values, the Unsigned Integer holds the + * magnitude of the value minus 1 */ + errn = decodeUnsignedInteger32(stream, &uint32); + *int32 = (-(int32_t)(uint32 + 1)); + } else { + /* positive */ + errn = decodeUnsignedInteger32(stream, &uint32); + *int32 = (int32_t)(uint32); + } + } + + return errn; +} + +/** + * Decode an arbitrary precision integer using a sign bit followed by a + * sequence of octets. The most significant bit of the last octet is set to + * zero to indicate sequence termination. Only seven bits per octet are used + * to store the integer's value. + */ +int decodeInteger64(bitstream_t* stream, int64_t* int64) { + int b; + uint64_t uint64; + int errn = decodeBoolean(stream, &b); + + if (errn == 0) { + if (b) { + /* For negative values, the Unsigned Integer holds the + * magnitude of the value minus 1 */ + errn = decodeUnsignedInteger64(stream, &uint64); + *int64 = (-(int64_t)(uint64 + 1)); + } else { + /* positive */ + errn = decodeUnsignedInteger64(stream, &uint64); + *int64 = (int64_t)(uint64); + } + } + + return errn; +} + +/** + * Decode an arbitrary precision integer using a sign bit followed by a + * sequence of octets. The most significant bit of the last octet is set to + * zero to indicate sequence termination. Only seven bits per octet are used + * to store the integer's value. + */ +int decodeIntegerBig(bitstream_t* stream, int* negative, size_t size, uint8_t* data, size_t* len) { + int errn = decodeBoolean(stream, negative); + + if (errn == 0) { + if (*negative) { + /* For negative values, the Unsigned Integer holds the + * magnitude of the value minus 1 */ + } else { + /* positive */ + } + errn = decodeUnsignedIntegerBig(stream, size, data, len); + } + + return errn; +} + +/** + * Decode a Float datatype as two consecutive Integers. + * The first Integer represents the mantissa of the floating point + * number and the second Integer represents the base-10 exponent + * of the floating point number. + */ +int decodeFloat(bitstream_t* stream, exi_float_me_t* f) { + int errn = decodeInteger64(stream, &f->mantissa); + if (errn == 0) { + errn = decodeInteger16(stream, &f->exponent); + } + return errn; +} + +/** + * Decode a decimal represented as a Boolean sign followed by two Unsigned + * Integers. A sign value of zero (0) is used to represent positive Decimal + * values and a sign value of one (1) is used to represent negative Decimal + * values The first Integer represents the integral portion of the Decimal + * value. The second positive integer represents the fractional portion of + * the decimal with the digits in reverse order to preserve leading zeros. + */ +int decodeDecimal(bitstream_t* stream, exi_decimal_t* d) { + int errn = decodeBoolean(stream, &d->negative); + if (errn == 0) { + errn = decodeUnsignedInteger(stream, &d->integral); + if (errn == 0) { + errn = decodeUnsignedInteger(stream, &d->reverseFraction); + } + } + + return errn; +} + +/** + * Decode a sequence of characters for a given length. + */ +int decodeStringOnly(bitstream_t* stream, size_t len, exi_string_t* s) { + int errn = 0; + unsigned int extraChar = 0; +#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII + extraChar = 1; /* null terminator */ +#endif /* STRING_REPRESENTATION_ASCII */ + + if ( (len + extraChar) > s->size) { +#if MEMORY_ALLOCATION == STATIC_ALLOCATION + errn = EXI_ERROR_OUT_OF_STRING_BUFFER; +#endif /* STATIC_ALLOCATION */ +#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION + if(s->size > 0) { + errn = exiFreeDynamicStringMemory(s); + if(errn) { + return errn; + } + } + errn = exiAllocateDynamicStringMemory(s, (len + extraChar)); /*s->len*/ +#endif /* DYNAMIC_ALLOCATION */ + } + if(errn == 0) { + errn = decodeCharacters(stream, len, s->characters, s->size); + s->len = len; + } + + return errn; +} + +/** + * Decode a length prefixed sequence of characters. + */ +int decodeString(bitstream_t* stream, exi_string_t* s) { + int errn = decodeUnsignedIntegerSizeT(stream, &s->len); + if (errn == 0) { + errn = decodeStringOnly(stream, s->len, s); + } + return errn; +} + +/** + * Decode a sequence of characters according to a given length. + * Each character is represented by its UCS [ISO/IEC 10646] + * code point encoded as an Unsigned Integer + */ +int decodeCharacters(bitstream_t* stream, size_t len, exi_string_character_t* chars, size_t charsSize) { + unsigned int i; + int errn = 0; + + unsigned int extraChar = 0; +#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII + extraChar = 1; /* null terminator */ +#endif /* STRING_REPRESENTATION_ASCII */ + + if ( (len + extraChar) > charsSize) { + errn = EXI_ERROR_OUT_OF_STRING_BUFFER; + return errn; + } + +#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII + uint8_t b; + for (i = 0; i < len && errn == 0; i++) { + errn = decode(stream, &b); + if(b < 128) { + chars[i] = (exi_string_character_t)b; + } else { + errn = EXI_ERROR_STRINGVALUES_CHARACTER; + } + } + /* null terminator \0 */ + chars[i] = '\0'; + +#endif /* STRING_REPRESENTATION_ASCII */ +#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS + for (i = 0; i < len && errn == 0; i++) { + errn = decodeUnsignedInteger32(stream, &chars[i]); + } +#endif /* STRING_REPRESENTATION_UCS */ + + + + + return errn; +} + +int decodeRCSCharacters(bitstream_t* stream, size_t len, exi_string_character_t* chars, size_t charsSize, size_t rcsCodeLength, size_t rcsSize, const exi_string_character_t rcsSet[]) { + unsigned int i; + int errn = 0; + uint32_t uint32; + unsigned int extraChar = 0; +#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII + uint8_t b; + extraChar = 1; /* null terminator */ +#endif /* STRING_REPRESENTATION_ASCII */ + + if ( (len + extraChar) > charsSize) { + errn = EXI_ERROR_OUT_OF_STRING_BUFFER; + return errn; + } + + + for (i = 0; i < len && errn == 0; i++) { + errn = decodeNBitUnsignedInteger(stream, rcsCodeLength, &uint32); + if(errn == 0) { + if ( uint32 == rcsSize ) { + /* RCS deviation */ +#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII + errn = decode(stream, &b); + if(b < 128) { + chars[i] = (exi_string_character_t)b; + } else { + errn = EXI_ERROR_STRINGVALUES_CHARACTER; + } +#endif /* STRING_REPRESENTATION_ASCII */ +#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS + errn = decodeUnsignedInteger32(stream, &chars[i]); +#endif /* STRING_REPRESENTATION_UCS */ + + } else { + /* RCS match */ +#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII + chars[i] = rcsSet[uint32]; +#endif /* STRING_REPRESENTATION_ASCII */ +#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS + chars[i] = rcsSet[uint32]; +#endif /* STRING_REPRESENTATION_UCS */ + } + } + } + + return errn; +} + + +/** + * Decode a binary value as a length-prefixed sequence of octets. + */ +int decodeBinary(bitstream_t* stream, exi_bytes_t* bytes) { + int errn = decodeUnsignedIntegerSizeT(stream, &bytes->len); + if (errn == 0) { + if (bytes->len > bytes->size) { +#if MEMORY_ALLOCATION == STATIC_ALLOCATION + errn = EXI_ERROR_OUT_OF_BYTE_BUFFER; +#endif /* STATIC_ALLOCATION */ +#if MEMORY_ALLOCATION == DYNAMIC_ALLOCATION + errn = exiFreeDynamicBinaryMemory(bytes); + if(errn == 0) { + errn = exiAllocateDynamicBinaryMemory(bytes, bytes->len); + } +#endif /* DYNAMIC_ALLOCATION */ + } + + errn = decodeBytes(stream, bytes->len, bytes->data); + } + + return errn; +} + + +int decodeBytes(bitstream_t* stream, size_t len, uint8_t* data) { + unsigned int i; + int errn = 0; + uint8_t b = 0; + + for (i = 0; i < len && errn == 0; i++) { + errn = decode(stream, &b); + data[i] = (uint8_t)b; + } + + return errn; +} + +/** + * Decode Date-Time as sequence of values representing the individual + * components of the Date-Time. + */ +int decodeDateTime(bitstream_t* stream, exi_datetime_type_t type, exi_datetime_t* datetime) { + int errn = 0; + + datetime->type = type; + + datetime->year = 0; + datetime->monthDay = 0; + datetime->time = 0; + datetime->presenceFractionalSecs = 0; + datetime->fractionalSecs = 0; + datetime->presenceTimezone = 0; + datetime->timezone = 0; + + switch (type) { + case EXI_DATETIME_GYEAR: /* Year, [Time-Zone] */ + errn = decodeInteger32(stream, &datetime->year); + if (errn == 0) { + datetime->year += DATETIME_YEAR_OFFSET; + } + break; + case EXI_DATETIME_GYEARMONTH: /* Year, MonthDay, [TimeZone] */ + case EXI_DATETIME_DATE: + errn = decodeInteger32(stream, &datetime->year); + if (errn == 0) { + datetime->year += DATETIME_YEAR_OFFSET; + errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, &datetime->monthDay); + } + break; + case EXI_DATETIME_DATETIME: /* Year, MonthDay, Time, [FractionalSecs], [TimeZone] */ + /* e.g. "0001-01-01T00:00:00.111+00:33" */ + errn = decodeInteger32(stream, &datetime->year); + if (errn == 0) { + datetime->year += DATETIME_YEAR_OFFSET; + errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, &datetime->monthDay); + if (errn != 0) { + break; + } + } + /* no break */ + case EXI_DATETIME_TIME: /* Time, [FractionalSecs], [TimeZone] */ + /* e.g. "12:34:56.135" */ + errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIME, &datetime->time); + if (errn == 0) { + errn = decodeBoolean(stream, &datetime->presenceFractionalSecs); + if (errn == 0) { + if (datetime->presenceFractionalSecs) { + errn = decodeUnsignedInteger32(stream, &datetime->fractionalSecs); + } + } + } + break; + case EXI_DATETIME_GMONTH: /* MonthDay, [TimeZone] */ + /* e.g. "--12" */ + case EXI_DATETIME_GMONTHDAY: /* MonthDay, [TimeZone] */ + /* e.g. "--01-28" */ + case EXI_DATETIME_GDAY: /* MonthDay, [TimeZone] */ + /* "---16" */ + errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, &datetime->monthDay ); + break; + default: + errn = EXI_UNSUPPORTED_DATETIME_TYPE; + break; + } + + if(errn == 0) { + errn = decodeBoolean(stream, &datetime->presenceTimezone ); + if (errn == 0 && datetime->presenceTimezone) { + errn = decodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIMEZONE, &datetime->timezone); + datetime->timezone -= DATETIME_TIMEZONE_OFFSET_IN_MINUTES; + } + } + + return errn; +} + + + +int decode(bitstream_t* stream, uint8_t* b) { +#if EXI_OPTION_ALIGNMENT == BIT_PACKED + uint32_t bb; + int errn = readBits(stream, 8, &bb); + if (errn == 0) { + if (bb > 256) { + errn = EXI_ERROR_UNEXPECTED_BYTE_VALUE; + } else { + *b = (uint8_t)bb; + } + } + + return errn; +#endif /* EXI_OPTION_ALIGNMENT == BIT_PACKED */ +#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT + int errn = 0; +#if EXI_STREAM == BYTE_ARRAY + if ( (*stream->pos) < stream->size ) { + *b = stream->data[(*stream->pos)++]; + } else { + errn = EXI_ERROR_INPUT_STREAM_EOF; + } +#endif /* EXI_STREAM == BYTE_ARRAY */ +#if EXI_STREAM == FILE_STREAM + *b = (uint8_t)(getc(stream->file)); + /* EOF cannot be used, 0xFF valid value */ + if ( feof(stream->file) || ferror(stream->file) ) { + errn = EXI_ERROR_INPUT_STREAM_EOF; + } +#endif /* EXI_STREAM == FILE_STREAM */ + + return errn; +#endif /* EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT */ +} + +int decodeBoolean(bitstream_t* stream, int* b) { +#if EXI_OPTION_ALIGNMENT == BIT_PACKED + uint32_t ub; + int errn = readBits(stream, 1, &ub); + *b = (ub == 0) ? 0 : 1; + return errn; +#endif /* EXI_OPTION_ALIGNMENT == BIT_PACKED */ +#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT + uint8_t bb; + int errn = decode(stream, &bb); + *b = (bb == 0) ? 0 : 1; + return errn; +#endif /* EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT */ + +} + +/** + * Decodes and returns an n-bit unsigned integer using the minimum number of + * bytes required for n bits. + */ +int decodeNBitUnsignedInteger(bitstream_t* stream, size_t nbits, uint32_t* uint32) { +#if EXI_OPTION_ALIGNMENT == BIT_PACKED + int errn = 0; + if (nbits == 0) { + *uint32 = 0; + } else { + errn= readBits(stream, nbits, uint32); + } + return errn; +#endif /* EXI_OPTION_ALIGNMENT == BIT_PACKED */ +#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT + size_t bitsRead = 0; + uint8_t b; + int errn = 0; + *uint32 = 0; + + while (errn == 0 && bitsRead < nbits) { + errn = decode(stream, &b); + *uint32 = *uint32 + (uint32_t)(b << bitsRead); + bitsRead = (bitsRead + 8); + } + + return errn; +#endif /* EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT */ +} + + + +#endif + diff --git a/src/src/exi/DecoderChannel.h b/src/src/exi/DecoderChannel.h new file mode 100644 index 0000000..5b43412 --- /dev/null +++ b/src/src/exi/DecoderChannel.h @@ -0,0 +1,441 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file DecoderChannel.h + * \brief EXI Decoder Channel + * + */ + +#ifndef DECODER_CHANNEL_H +#define DECODER_CHANNEL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "EXIOptions.h" +#include "EXITypes.h" + +/** + * \brief Decode byte value + * + * \param stream Input Stream + * \param b byte (out) + * \return Error-Code <> 0 + * + */ +int decode(bitstream_t* stream, uint8_t* b); + + +/** + * \brief Decode boolean + * + * Decode a single boolean value. The value false is + * represented by 0, and the value true is represented by 1. + * + * \param stream Input Stream + * \param b boolean (out) + * \return Error-Code <> 0 + * + */ +int decodeBoolean(bitstream_t* stream, int* b); + + +/** + * \brief Decode n-bit unsigned integer + * + * Decodes and returns an n-bit unsigned integer. + * + * \param stream Input Stream + * \param nbits Number of bits + * \param uint32 Value (out) + * \return Error-Code <> 0 + * + */ +int decodeNBitUnsignedInteger(bitstream_t* stream, size_t nbits, uint32_t* uint32); + + +/** + * \brief Decode unsigned integer + * + * Decode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param iv Unsigned Integer Value (out) + * \return Error-Code <> 0 + * + */ +int decodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv); + + +/** + * \brief Decode unsigned integer + * + * Decode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param uint16 Unsigned Integer Value 16 bits (out) + * \return Error-Code <> 0 + * + */ +int decodeUnsignedInteger16(bitstream_t* stream, uint16_t* uint16); + + +/** + * \brief Decode unsigned integer + * + * Decode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param uint32 Unsigned Integer Value 32 bits (out) + * \return Error-Code <> 0 + * + */ +int decodeUnsignedInteger32(bitstream_t* stream, uint32_t* uint32); + + +/** + * \brief Decode unsigned integer + * + * Decode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param sizeT Unsigned Integer Value (out) + * \return Error-Code <> 0 + * + */ +int decodeUnsignedIntegerSizeT(bitstream_t* stream, size_t* sizeT); + + +/** + * \brief Decode unsigned integer + * + * Decode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param uint64 Unsigned Integer Value 64 bits (out) + * \return Error-Code <> 0 + * + */ +int decodeUnsignedInteger64(bitstream_t* stream, uint64_t* uint64); + +/** + * \brief Decode unsigned integer + * + * Decode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param size size array + * \param data data array + * \param len length array + * \return Error-Code <> 0 + * + */ +int decodeUnsignedIntegerBig(bitstream_t* stream, size_t size, uint8_t* data, size_t* len); + + +/** + * \brief Decode integer + * + * Decode an arbitrary precision integer using a sign bit + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param iv Integer Value 64 bits (out) + * \return Error-Code <> 0 + * + */ +int decodeInteger(bitstream_t* stream, exi_integer_t* iv); + + +/** + * \brief Decode integer + * + * Decode an arbitrary precision integer using a sign bit + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param int16 Integer Value 16 bits (out) + * \return Error-Code <> 0 + * + */ +int decodeInteger16(bitstream_t* stream, int16_t* int16); + + +/** + * \brief Decode integer + * + * Decode an arbitrary precision integer using a sign bit + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param int32 Integer Value 32 bits (out) + * \return Error-Code <> 0 + * + */ +int decodeInteger32(bitstream_t* stream, int32_t* int32); + + +/** + * \brief Decode integer + * + * Decode an arbitrary precision integer using a sign bit + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param int64 Integer Value 64 bits (out) + * \return Error-Code <> 0 + * + */ +int decodeInteger64(bitstream_t* stream, int64_t* int64); + +/** + * \brief Decode integer + * + * Decode an arbitrary precision integer using a sign bit + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Input Stream + * \param negative negative integer + * \param size size array + * \param data data array + * \param len length array + * \return Error-Code <> 0 + * + */ +int decodeIntegerBig(bitstream_t* stream, int* negative, size_t size, uint8_t* data, size_t* len); + +/** + * \brief Decode float + * + * Decode a Float datatype as two consecutive Integers. The + * first Integer represents the mantissa of the floating point + * number and the second Integer represents the base-10 exponent + * of the floating point number. + * + * \param stream Input Stream + * \param f Float Value (out) + * \return Error-Code <> 0 + * + */ +int decodeFloat(bitstream_t* stream, exi_float_me_t* f); + + +/** + * \brief Decode decimal + * + * Decode a decimal represented as a Boolean sign followed by two + * Unsigned Integers. A sign value of zero (0) is used to represent + * positive Decimal values and a sign value of one (1) is used to + * represent negative Decimal values The first Integer represents + * the integral portion of the Decimal value. The second positive + * integer represents the fractional portion of the decimal with + * the digits in reverse order to preserve leading zeros. + * + * \param stream Input Stream + * \param d Decimal Value (out) + * \return Error-Code <> 0 + * + */ +int decodeDecimal(bitstream_t* stream, exi_decimal_t* d); + + +/** + * \brief Decode String (no length prefix) + * + * Decode a sequence of characters for a given length. + * + * \param stream Input Stream + * \param len Characters length + * \param s String Value (out) + * \return Error-Code <> 0 + * + */ +int decodeStringOnly(bitstream_t* stream, size_t len, exi_string_t* s); + + +/** + * \brief Decode String + * + * Decode a length prefixed sequence of characters. + * + * \param stream Input Stream + * \param s String Value (out) + * \return Error-Code <> 0 + * + */ +int decodeString(bitstream_t* stream, exi_string_t* s); + + + +/** + * \brief Decode String value + * + * Decode a length prefixed sequence of characters in the sense of string tables. + * length == 0: local value partition hit. + * length == 1: global value partition hit. + * length > 1: string literal is encoded as a String with the length incremented by two + * + * \param stream Input Stream + * \param stringTable String Table + * \param qnameID Qualified Name ID + * \param namespaceUriID Qualified Namespace ID + * \param localNameID Qualified LocalName ID + * \param s String Value (out) + * \return Error-Code <> 0 + * + */ +int decodeStringValue(bitstream_t* stream, exi_value_string_table_t* stringTable, size_t namespaceUriID, size_t localNameID, exi_string_value_t* s); + + +/** + * \brief Decode Restricted characters set string value + * + * \param stream Input Stream + * \param stringTable StringTable + * \param namespaceUriID qualified namespace ID + * \param localNameID qualified localName ID + * \param rcs Restricted character set + * \param s String Value (out) + * \return Error-Code <> 0 + * + */ +int decodeRCSStringValue(bitstream_t* stream, exi_value_string_table_t* stringTable, size_t namespaceUriID, size_t localNameID, exi_rcs_t* rcs, exi_string_value_t* s); + + +/** + * \brief Decode characters + * + * Decode a sequence of characters according to a given length. + * + * \param stream Input Stream + * \param len Length + * \param chars Characters (out) + * \param charsSize Size of possible characters + * \return Error-Code <> 0 + * + */ +int decodeCharacters(bitstream_t* stream, size_t len, exi_string_character_t* chars, size_t charsSize); + + +/** + * \brief Decode restricted character set characters + * + * Decode a sequence of characters according to a given length and rcs code-length, size and set. + * + * \param stream Input Stream + * \param len Length + * \param chars Characters (out) + * \param charsSize Size of possible characters + * \param rcsCodeLength RCS code-length + * \param rcsCodeLength RCS size + * \param rcsCodeLength RCS set + * \return Error-Code <> 0 + * + */ +int decodeRCSCharacters(bitstream_t* stream, size_t len, exi_string_character_t* chars, size_t charsSize, size_t rcsCodeLength, size_t rcsSize, const exi_string_character_t rcsSet[]); + + + +/** + * \brief Decode Binary + * + * Decode a binary value as a length-prefixed sequence of octets. + * + * \param stream Input Stream + * \param bytes Bytes (out) + * \return Error-Code <> 0 + * + */ +int decodeBinary(bitstream_t* stream, exi_bytes_t* bytes); + +/** + * \brief Decode Binary data + * + * Decode a sequence of octets. + * + * \param stream Input Stream + * \param len Length + * \param data Bytes (out) + * \return Error-Code <> 0 + * + */ +int decodeBytes(bitstream_t* stream, size_t len, uint8_t* data); + +/** + * \brief Decode DateTime + * + * Decode Date-Time as sequence of values representing the + * individual components of the Date-Time. + * + * \param stream Input Stream + * \param type Datetime type + * \param datetime Datetime (out) + * \return Error-Code <> 0 + * + */ +int decodeDateTime(bitstream_t* stream, exi_datetime_type_t type, exi_datetime_t* datetime); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/src/exi/EXIConfig.h b/src/src/exi/EXIConfig.h new file mode 100644 index 0000000..edbb2dc --- /dev/null +++ b/src/src/exi/EXIConfig.h @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-23 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file EXIConfig.h + * \brief EXI Configurations for the EXI Codec + * + */ + +#ifndef EXI_CONFIG_H +#define EXI_CONFIG_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/** EXI stream - Option Byte Array */ +#define BYTE_ARRAY 1 +/** EXI stream - Option File */ +#define FILE_STREAM 2 +/** \brief EXI stream + * + * Byte array or file + * */ +#define EXI_STREAM BYTE_ARRAY + + + + + +/** Memory allocation - static */ +#define STATIC_ALLOCATION 1 +/** Memory allocation - dynamic */ +#define DYNAMIC_ALLOCATION 2 +/** */ +/** \brief Memory allocation mode + * + * static or dynamic memory allocation + * */ +#define MEMORY_ALLOCATION STATIC_ALLOCATION + + + +/** String representation ASCII */ +#define STRING_REPRESENTATION_ASCII 1 +/** String representation Universal Character Set (UCS) */ +#define STRING_REPRESENTATION_UCS 2 +/** */ +/** \brief String representation mode + * + * ASCII or UCS + * */ +#define STRING_REPRESENTATION STRING_REPRESENTATION_UCS + + +/* in the case of ASCII an extra char (null terminator) for printf and other functions is useful */ +#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII +#define EXTRA_CHAR 1 +#endif /* STRING_REPRESENTATION_ASCII */ +#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS +#define EXTRA_CHAR 0 +#endif /* STRING_REPRESENTATION_UCS */ + + + + + +/** Maximum number of cascading elements, XML tree depth */ +#define EXI_ELEMENT_STACK_SIZE 24 + + +#ifdef __cplusplus +} +#endif + +#endif /* EXI_CONFIG_H */ + diff --git a/src/src/exi/EXIHeaderDecoder.c b/src/src/exi/EXIHeaderDecoder.c new file mode 100644 index 0000000..5d48cb9 --- /dev/null +++ b/src/src/exi/EXIHeaderDecoder.c @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +#include "EXIHeaderDecoder.h" +#include "BitInputStream.h" +#include "DecoderChannel.h" +#include "ErrorCodes.h" + +#ifndef EXI_HEADER_DECODER_C +#define EXI_HEADER_DECODER_C + +int readEXIHeader(bitstream_t* stream) { + int errn; + uint32_t header = 0; + + /* init stream */ + stream->buffer = 0; + stream->capacity = 0; + + errn = readBits(stream, 8, &header); + if (errn == 0) { + if(header == '$') { + /* we do not support "EXI Cookie" */ + errn = EXI_UNSUPPORTED_HEADER_COOKIE; + } else if ( header & 0x20 ) { + /* we do not support "Presence Bit for EXI Options" */ + errn = EXI_UNSUPPORTED_HEADER_OPTIONS; + } else { + /* Yes, a *simple* header */ + errn = 0; + } + } + + return errn; +} + + +#endif + + diff --git a/src/src/exi/EXIHeaderDecoder.h b/src/src/exi/EXIHeaderDecoder.h new file mode 100644 index 0000000..37136d0 --- /dev/null +++ b/src/src/exi/EXIHeaderDecoder.h @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file EXIHeaderDecoder.h + * \brief EXI Header Decoder + * + */ + +#ifndef EXI_HEADER_DECODER_H +#define EXI_HEADER_DECODER_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "EXITypes.h" + +/** + * \brief Reads EXI header + * + * \param stream Input Stream + * \return Error-Code <> 0 + * + */ +int readEXIHeader(bitstream_t* stream); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/src/exi/EXIHeaderEncoder.c b/src/src/exi/EXIHeaderEncoder.c new file mode 100644 index 0000000..36c7851 --- /dev/null +++ b/src/src/exi/EXIHeaderEncoder.c @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +#include "EXIHeaderEncoder.h" +#include "BitOutputStream.h" +#include "EncoderChannel.h" + +#ifndef EXI_HEADER_ENCODER_C +#define EXI_HEADER_ENCODER_C + +int writeEXIHeader(bitstream_t* stream) { + /* init stream */ + stream->buffer = 0; + stream->capacity = 8; + + return writeBits(stream, 8, 128); +} + + +#endif + + diff --git a/src/src/exi/EXIHeaderEncoder.h b/src/src/exi/EXIHeaderEncoder.h new file mode 100644 index 0000000..e7cf0d3 --- /dev/null +++ b/src/src/exi/EXIHeaderEncoder.h @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file EXIHeaderEncoder.h + * \brief EXI Header Encoder + * + */ + +#ifndef EXI_HEADER_ENCODER_H +#define EXI_HEADER_ENCODER_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "EXITypes.h" + + +/** + * \brief Writes EXI header + * + * \param stream Output Stream + * \return Error-Code <> 0 + * + */ +int writeEXIHeader(bitstream_t* stream); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/src/exi/EXIOptions.h b/src/src/exi/EXIOptions.h new file mode 100644 index 0000000..9156746 --- /dev/null +++ b/src/src/exi/EXIOptions.h @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file EXIOptions.h + * \brief EXI Options for the EXI Codec + * + */ + +#ifndef EXI_OPTIONS_H +#define EXI_OPTIONS_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/** EXI alignment - Option bit-packed */ +#define BIT_PACKED 1 +/** EXI alignment - Option byte-packed */ +#define BYTE_ALIGNMENT 2 +/** EXI alignment */ +/** + * \brief EXI Option 'alignment' + * + * The alignment option is used to control the alignment of event codes and content items. + * Default Value: bit-packed + */ +#define EXI_OPTION_ALIGNMENT BIT_PACKED + + + +/** + * \brief EXI Option 'strict' + * + * Strict interpretation of schemas is used to achieve better compactness. + * Default Value: false + */ +#define EXI_OPTION_STRICT 0 + + +/** + * \brief EXI Option 'valueMaxLength' + * + * Specifies the maximum string length of value content items to be + * considered for addition to the string table. + * Default Value: unbounded (-1) + */ +#define EXI_OPTION_VALUE_MAX_LENGTH -1 + + +/** + * \brief EXI Option 'valuePartitionCapacity' + * + * Specifies the total capacity of value partitions in a string table. + * Default Value: unbounded (-1) + */ +#define EXI_OPTION_VALUE_PARTITION_CAPACITY 0 + + +#ifdef __cplusplus +} +#endif + +#endif /* EXI_OPTIONS_H */ diff --git a/src/src/exi/EXITypes.h b/src/src/exi/EXITypes.h new file mode 100644 index 0000000..9b2bdf8 --- /dev/null +++ b/src/src/exi/EXITypes.h @@ -0,0 +1,591 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file EXITypes.h + * \brief Basic type definitions and structs + * + */ + +#ifndef EXI_TYPES_H +#define EXI_TYPES_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include "EXIConfig.h" +#if EXI_STREAM == FILE_STREAM +#include +#endif + + +/** Number of bits for each byte */ +#define BITS_IN_BYTE 8 + +/** EXI Date-Time offset for year */ +#define DATETIME_YEAR_OFFSET 2000 +/** EXI Date-Time number of bits for monthDay */ +#define DATETIME_NUMBER_BITS_MONTHDAY 9 +/** EXI Date-Time number of bits for time */ +#define DATETIME_NUMBER_BITS_TIME 17 +/** EXI Date-Time number of bits for timezone */ +#define DATETIME_NUMBER_BITS_TIMEZONE 11 +/** EXI Date-Time month multiplicator */ +#define DATETIME_MONTH_MULTIPLICATOR 32 +/** EXI Date-Time offset for timzone minutes */ +#define DATETIME_TIMEZONE_OFFSET_IN_MINUTES 896 + +/** Maximum integer value for uint */ +#define UINT_MAX_VALUE 65535 + + +/** EXI Float exponent special values */ +#define FLOAT_EXPONENT_SPECIAL_VALUES -16384 +/** EXI Float mantissa infinity */ +#define FLOAT_MANTISSA_INFINITY 1 +/** EXI Float minus mantissa infinity */ +#define FLOAT_MANTISSA_MINUS_INFINITY -1 +/** EXI Float not a number */ +#define FLOAT_MANTISSA_NOT_A_NUMBER 0 + +/** \brief EXI Events */ +typedef enum { + /** Start Document SD */ + EXI_EVENT_START_DOCUMENT, + /** End Document ED */ + EXI_EVENT_END_DOCUMENT, + /** Start Element SE(qname) */ + EXI_EVENT_START_ELEMENT, + /** Start Element SE(uri:*) */ + EXI_EVENT_START_ELEMENT_NS, + /** Start Element SE(*) generic */ + EXI_EVENT_START_ELEMENT_GENERIC, + /** Start Element SE(*) generic undeclared */ + EXI_EVENT_START_ELEMENT_GENERIC_UNDECLARED, + /** End Element EE */ + EXI_EVENT_END_ELEMENT, + /** End Element EE undeclared*/ + EXI_EVENT_END_ELEMENT_UNDECLARED, + /** Characters CH */ + EXI_EVENT_CHARACTERS, + /** Characters CH generic */ + EXI_EVENT_CHARACTERS_GENERIC, + /** Characters CH generic undeclared */ + EXI_EVENT_CHARACTERS_GENERIC_UNDECLARED, + /** Attribute AT(xsi:type) */ + EXI_EVENT_ATTRIBUTE_XSI_TYPE, + /** Attribute AT(xsi:nil) */ + EXI_EVENT_ATTRIBUTE_XSI_NIL, + /** Attribute AT(qname) */ + EXI_EVENT_ATTRIBUTE, + /** Attribute AT(uri:*) */ + EXI_EVENT_ATTRIBUTE_NS, + /** Attribute AT(*) generic */ + EXI_EVENT_ATTRIBUTE_GENERIC, + /** Attribute AT(*) invalid value */ + EXI_EVENT_ATTRIBUTE_INVALID_VALUE, + /** Attribute AT(*) any invalid value */ + EXI_EVENT_ATTRIBUTE_ANY_INVALID_VALUE, + /** Attribute AT(*) generic undeclared */ + EXI_EVENT_ATTRIBUTE_GENERIC_UNDECLARED, + /* error state */ + EXI_EVENT_ERROR +} exi_event_t; + + +/** + * \brief Bit stream container + * + * Structure for byteArray/file stream. + * + * # General + * .size defines the maximum size of the byte array (see .data) + * + * .data points to the input/output array of bytes (unsigned char*). + * + * .pos has to be set to an pointer to an 32 bit long unsigned integer (uint32_t *) + * as this variable is read/write. + * Therefore it is best practice to declare the variable itself and use the &-operator + * to assign the address. The value of that variable points to the position inside the + * buffer where the stream begins. Which is usually the first (0th) byte but can also be + * another value if there more information transferred in that stream. + * After processing .pos points to the next "available" byte (if any left). + * + * .buffer has to be set to 0 for internal use only (single byte buffer) + * + * # Receiving data (input) + * .capacity is used for addressing single bits in the actual byte (see .buffer) + * and has to be set to 0, which means there are 0 bits read so far and a new + * byte needs to be read from the input stream/data-array to the current byte buffer. + * + * # Sending data (output) + * .capacity is used for addressing single bits in the actual byte (see .buffer) + * and has to be set to 8, which means there are still 8 bits left to fill up + * the current byte buffer before writing the final byte to the output stream/data-array. + * + */ +typedef struct { +#if EXI_STREAM == BYTE_ARRAY + /** byte array size */ + size_t size; + /** byte array data */ + uint8_t* data; + /** byte array next position in array */ + size_t* pos; +#endif +#if EXI_STREAM == FILE_STREAM + /** file pointer */ + FILE *file; +#endif + /** Current byte buffer*/ + uint8_t buffer; + /** Remaining bit capacity in current byte buffer*/ + uint8_t capacity; +} bitstream_t; + + +/** \brief EXI Value Datatypes */ +typedef enum { + /** Binary Base64 */ + EXI_DATATYPE_BINARY_BASE64, + /** Binary Hex */ + EXI_DATATYPE_BINARY_HEX, + /** Boolean */ + EXI_DATATYPE_BOOLEAN, + /** Boolean with Facets */ + EXI_DATATYPE_BOOLEAN_FACET, + /** Decimal */ + EXI_DATATYPE_DECIMAL, + /** Float & Double */ + EXI_DATATYPE_FLOAT, + /** N-Bit Unsigned Integer */ + EXI_DATATYPE_NBIT_UNSIGNED_INTEGER, + /** Unsigned Integer */ + EXI_DATATYPE_UNSIGNED_INTEGER, + /** (Signed) Integer */ + EXI_DATATYPE_INTEGER, + /** Datetime */ + EXI_DATATYPE_DATETIME, + /** String */ + EXI_DATATYPE_STRING, + /** Restricted Character Set String */ + EXI_DATATYPE_RCS_STRING, + /** Enumeration */ + EXI_DATATYPE_ENUMERATION, + /** List */ + EXI_DATATYPE_LIST, + /** QName (e.g. xsi:type) */ + EXI_DATATYPE_QNAME +} exi_datatype_t; + + +/** \brief EXI Integer Value types */ +typedef enum { + /** Unsigned Integer 8 bits */ + EXI_UNSIGNED_INTEGER_8, + /** Unsigned Integer 16 bits */ + EXI_UNSIGNED_INTEGER_16, + /** Unsigned Integer 32 bits */ + EXI_UNSIGNED_INTEGER_32, + /** Unsigned Integer 64 bits */ + EXI_UNSIGNED_INTEGER_64, + /** (Signed) Integer 8 bits */ + EXI_INTEGER_8, + /** (Signed) Integer 16 bits */ + EXI_INTEGER_16, + /** (Signed) Integer 32 bits */ + EXI_INTEGER_32, + /** (Signed) Integer 64 bits */ + EXI_INTEGER_64 +} exi_integer_type_t; + + +/** \brief EXI Datetime types */ +typedef enum { + /** gYear */ + EXI_DATETIME_GYEAR, + /** gYearMonth */ + EXI_DATETIME_GYEARMONTH, + /** date */ + EXI_DATETIME_DATE, + /** datetime */ + EXI_DATETIME_DATETIME, + /** gMonth */ + EXI_DATETIME_GMONTH, + /** gMonthDay */ + EXI_DATETIME_GMONTHDAY, + /** gDay */ + EXI_DATETIME_GDAY, + /** time */ + EXI_DATETIME_TIME +} exi_datetime_type_t; + + +/** \brief String value type */ +typedef enum { + /** value miss */ + EXI_STRING_VALUE_MISS, + /** value local-hit */ + EXI_STRING_VALUE_LOCAL_HIT, + /** value global-hit */ + EXI_STRING_VALUE_GLOBAL_HIT +} exi_string_value_type_t; + +/** \brief EXI string character */ +/* Note: define whether you wan't to support ASCII only or UCS */ +#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII +typedef char exi_string_character_t; +#endif /* STRING_REPRESENTATION_ASCII */ +#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS +typedef uint32_t exi_string_character_t; +#endif /* STRING_REPRESENTATION_UCS */ + + + +/** \brief Universal Character Set (UCS) strings */ +typedef struct { + /** container size */ + size_t size; + /** string character container */ + exi_string_character_t* characters; + /** current string length == number of code-points, (len <= size) */ + size_t len; +} exi_string_t; + + +/** \brief String value */ +typedef struct { + /** value type (e.g., miss, local-hit, global-hit) */ + exi_string_value_type_t type; + /** miss entry */ + exi_string_t miss; + /** (local) hit entry */ + size_t localID; + /** (global) hit entry */ + size_t globalID; +} exi_string_value_t; + + +/** \brief Restricted Characeter Set */ +typedef struct { + /** size */ + size_t size; + /** rcs codepoints */ + exi_string_character_t* characters; + /** character coding length (less than 256 characters) */ + uint8_t codingLength; +} exi_rcs_t; + + +/** \brief Byte value container */ +typedef struct { + /** bytes array size */ + size_t size; + /** bytes array data container */ + uint8_t* data; + /** bytes array length (len <= size) */ + size_t len; +} exi_bytes_t; + + +/** \brief Integer value container */ +typedef struct { + /** type */ + exi_integer_type_t type; + union { + /* (signed) values */ + /** (signed) int 8 bits */ + int8_t int8; + /** (signed) int 16 bits */ + int16_t int16; + /** (signed) int 32 bits */ + int32_t int32; + /** (signed) int 64 bits */ + int64_t int64; + /* unsigned values */ + /** unsigned int 8 bits */ + uint8_t uint8; + /** unsigned int 16 bits */ + uint16_t uint16; + /** unsigned int 32 bits */ + uint32_t uint32; + /** unsigned int 64 bits */ + uint64_t uint64; + } val; +} exi_integer_t; + + +/** \brief Float value container */ +typedef struct { + /** range of the mantissa is -(2^63) to 2^63-1 */ + int64_t mantissa; + /** range of the exponent is - (2^14-1) to 2^14-1 */ + int16_t exponent; /* base-10 */ +} exi_float_me_t; + + +/** \brief Decimal value container */ +typedef struct { + /** a sign value */ + int negative; + /** represents the integral portion of the Decimal */ + exi_integer_t integral; + /** represents the fractional portion of the Decimal with the digits in reverse order to preserve leading zeros */ + exi_integer_t reverseFraction; +} exi_decimal_t; + + +/** \brief Datetime value container */ +typedef struct { + /** datetime type */ + exi_datetime_type_t type; + /** Datetime value for year */ + int32_t year; + /** Datetime value for monthDay */ + uint32_t monthDay; + /** Datetime value for time */ + uint32_t time; + /** Datetime value for presenceFractionalSecs */ + int presenceFractionalSecs; + /** Datetime value for fractionalSecs */ + uint32_t fractionalSecs; + /** Datetime value for presenceTimezone */ + int presenceTimezone; + /** Datetime value for timezone */ + uint32_t timezone; +} exi_datetime_t; + + +/** \brief List value container */ +typedef struct { + /** list item type */ + exi_datatype_t type; + /** number of items */ + size_t len; + /* Special datatype: integer */ + /* exi_integer_type_t intType;*/ + /** Special datatype: datetime */ + exi_datetime_type_t datetimeType; +} exi_list_t; + + +/** \brief Efficient qname */ +typedef struct { + /** namespace URI ID*/ + size_t namespaceURI; + /** local name ID*/ + size_t localPart; +} exi_eqname_t; + + +/** \brief Name entry type */ +typedef enum { + /** As known IDs */ + EXI_NAME_ENTRY_TYPE_ID, + /** As String */ + EXI_NAME_ENTRY_TYPE_STRING_AND_ID +} exi_name_entry_type_t; + + +/** \brief Name entry */ +typedef struct { + /** type */ + exi_name_entry_type_t type; + /** entry ID */ + size_t id; + /** entry string */ + exi_string_t str; +} exi_name_entry_t; + + +/** \brief Qualified name */ +typedef struct { + /** Uri */ + exi_name_entry_t uri; + /** LocalName */ + exi_name_entry_t localName; +} exi_qname_t; + +/*TODO Doxygen Documentation */ + + +/* ==================================== */ +/* URI and LocalName Entries */ +typedef struct exiNameTablePrepopulated { + /* number of namespaces AND length name-partitions array */ + size_t len; + /* number of localName entries divided by URI */ + size_t* localNames; +} exi_name_table_prepopulated_t; + +#define EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_ENTRIES 25 + +typedef enum { + EXI_NAME_PARTITION_URI, EXI_NAME_PARTITION_LOCALNAME +} exi_name_partition_type_t; + +typedef struct { + char* uri; + size_t uriID; +} exi_uri_partition_t; + +typedef struct { + char* localName; + size_t localNameID; + size_t uriID; +} exi_localname_partition_t; + +typedef struct { + exi_name_partition_type_t namePartitionType; + struct { + exi_uri_partition_t uriPartition; + exi_localname_partition_t localNamePartition; + } entry; +} exi_name_partition_t; + +typedef struct exiNameTableRuntime { + /* maximum number of characters in the name partitions entries PLUS null terminators */ + /* char characters[EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_CHARACTERS + EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_ENTRIES]; */ + /* uint16_t numberOfUsedCharacters; *//* initially zero <= EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_CHARACTERS */ + /* maximum number of name partitions entries. Name partitions entries consist in all uri, and local-name partition entries */ + exi_name_partition_t + namePartitionsEntries[EXI_MAXIMUM_NUMBER_OF_NAME_PARTITION_ENTRIES]; + /* uint16_t numberOfUsedNamePartitions; *//* initially zero */ + /* added entries */ + size_t addedUriEntries; /* initially zero */ + size_t addedLocalNameEntries; /* initially zero */ +} exi_name_table_runtime_t; + + +/* StartTagContent grammar initially empty */ +/* ElementContent grammar has EE per default */ +typedef struct { + size_t namespaceUriID; + size_t localNameID; + size_t numberOfProductions; + int hasXsiType; /* StartTagContent only */ + int hasEE; /* ElementContentper default TRUE */ +} exi_runtime_element_t; + +/* Note: We do have twice as many runtime grammars (StartTagContent and ElementContent)*/ +#define MAX_NUMBER_OF_RUNTIME_ELEMENTS 80 + + + +/* ==================================== */ +/* Value string table */ +typedef struct exiValueStringTableEntry { + /** Qualified namespace URI */ + size_t namespaceUriID; + /** Qualified localName */ + size_t localNameID; + /** Local Value ID */ + size_t localValueID; + /** String */ + exi_string_t str; +} exi_value_string_table_entry_t; + +typedef struct exiValueStringTable { + /** maximum number of global string table entry size */ + size_t size; + /** string table entry array container */ + exi_value_string_table_entry_t* strs; + /** current number of string table entries (len <= size) */ + size_t len; +} exi_value_string_table_t; + +/* typedef struct { */ + /** number of global strings */ + /* uint16_t numberOfGlobalStrings; */ + /** size of local-names container */ + /* uint16_t sizeLocalStrings; */ + /** number of local strings container */ + /* uint16_t* numberOfLocalStrings; */ + /** string values */ +/* exi_value_string_table_t* valueStringTable; +} exi_value_table_t;*/ + +typedef struct { + /** stack of grammar states */ + int16_t grammarStack[EXI_ELEMENT_STACK_SIZE]; + /** stack of grammar elements / qnameIDs */ + exi_eqname_t elementStack[EXI_ELEMENT_STACK_SIZE]; + /** stack index for both stacks */ + size_t stackIndex; + + /** event-code */ + uint32_t eventCode; + + /** name table entries, pre-populated */ + exi_name_table_prepopulated_t* nameTablePrepopulated; + /** name table entries, at runtime */ + exi_name_table_runtime_t* nameTableRuntime; + + /** next qname ID */ + size_t nextQNameID; + + /** string table entries */ + exi_value_string_table_t* stringTable; + + /** runtime built-in element grammars - numbers */ + size_t numberOfRuntimeGrammars; + /** runtime built-in element grammars */ + exi_runtime_element_t runtimeGrammars[MAX_NUMBER_OF_RUNTIME_ELEMENTS * 2]; +} exi_state_t; + +typedef struct { + /* type of value */ + exi_datatype_t type; + + /* base types */ + int boolean; + uint32_t enumeration; + + /* complex types: Integers, Bytes, Strings and Lists are not native types anymore */ + exi_integer_t integer; + exi_bytes_t binary; + exi_string_value_t str; + exi_float_me_t float_me; + exi_decimal_t decimal; + exi_datetime_t datetime; + exi_list_t list; + exi_eqname_t eqname; +} exi_value_t; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/src/exi/EncoderChannel.c b/src/src/exi/EncoderChannel.c new file mode 100644 index 0000000..72a66a4 --- /dev/null +++ b/src/src/exi/EncoderChannel.c @@ -0,0 +1,704 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +#include "EncoderChannel.h" +#include "EXIOptions.h" +#include "BitOutputStream.h" +#include "EXITypes.h" +#include "ErrorCodes.h" +#include "MethodsBag.h" +/*#include "v2gEXICoder.h"*/ + +#ifndef ENCODER_CHANNEL_C +#define ENCODER_CHANNEL_C + +int encodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv) { + int errn = 0; + switch (iv->type) { + /* Unsigned Integer */ + case EXI_UNSIGNED_INTEGER_8: + errn = encodeUnsignedInteger32(stream, iv->val.uint8); + break; + case EXI_UNSIGNED_INTEGER_16: + errn = encodeUnsignedInteger32(stream, iv->val.uint16); + break; + case EXI_UNSIGNED_INTEGER_32: + errn = encodeUnsignedInteger32(stream, iv->val.uint32); + break; + case EXI_UNSIGNED_INTEGER_64: + errn = encodeUnsignedInteger64(stream, iv->val.uint64); + break; + /* (Signed) Integer */ + case EXI_INTEGER_8: + if (iv->val.int8 < 0) { + return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE; + } + errn = encodeUnsignedInteger32(stream, (uint32_t)(iv->val.int8)); + break; + case EXI_INTEGER_16: + if (iv->val.int16 < 0) { + return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE; + } + errn = encodeUnsignedInteger32(stream, (uint32_t)(iv->val.int16)); + break; + case EXI_INTEGER_32: + if (iv->val.int32 < 0) { + return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE; + } + errn = encodeUnsignedInteger32(stream, (uint32_t)(iv->val.int32)); + break; + case EXI_INTEGER_64: + if (iv->val.int64 < 0) { + return EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE; + } + errn = encodeUnsignedInteger64(stream, (uint64_t)(iv->val.int64)); + break; + default: + errn = EXI_UNSUPPORTED_INTEGER_VALUE_TYPE; + break; + } + + return errn; +} + +/** + * Encode an arbitrary precision non negative integer using a sequence of + * octets. The most significant bit of the last octet is set to zero to + * indicate sequence termination. Only seven bits per octet are used to + * store the integer's value. + */ +int encodeUnsignedInteger16(bitstream_t* stream, uint16_t n) { + int errn = 0; + if (n < 128) { + /* write byte as is */ + errn = encode(stream, (uint8_t) n); + } else { + uint8_t n7BitBlocks = numberOf7BitBlocksToRepresent(n); + + switch (n7BitBlocks) { + case 3: + errn = encode(stream, (uint8_t) (128 | n)); + n = n >> 7; + if (errn != 0) { + break; + } + /* no break */ + case 2: + errn = encode(stream, (uint8_t) (128 | n)); + n = n >> 7; + if (errn != 0) { + break; + } + /* no break */ + case 1: + /* 0 .. 7 (last byte) */ + errn = encode(stream, (uint8_t) (0 | n)); + /* no break */ + } + } + + return errn; +} + +/** + * Encode an arbitrary precision non negative integer using a sequence of + * octets. The most significant bit of the last octet is set to zero to + * indicate sequence termination. Only seven bits per octet are used to + * store the integer's value. + */ +int encodeUnsignedInteger32(bitstream_t* stream, uint32_t n) { + int errn = 0; + if (n < 128) { + /* write byte as is */ + errn = encode(stream, (uint8_t) n); + } else { + uint8_t n7BitBlocks = numberOf7BitBlocksToRepresent(n); + + switch (n7BitBlocks) { + case 5: + errn = encode(stream, (uint8_t) (128 | n)); + n = n >> 7; + if (errn != 0) { + break; + } + /* no break */ + case 4: + errn = encode(stream, (uint8_t) (128 | n)); + n = n >> 7; + if (errn != 0) { + break; + } + /* no break */ + case 3: + errn = encode(stream, (uint8_t) (128 | n)); + n = n >> 7; + if (errn != 0) { + break; + } + /* no break */ + case 2: + errn = encode(stream, (uint8_t) (128 | n)); + n = n >> 7; + if (errn != 0) { + break; + } + /* no break */ + case 1: + /* 0 .. 7 (last byte) */ + errn = encode(stream, (uint8_t) (0 | n)); + /* no break */ + } + } + + return errn; +} + +/** + * Encode an arbitrary precision non negative integer using a sequence of + * octets. The most significant bit of the last octet is set to zero to + * indicate sequence termination. Only seven bits per octet are used to + * store the integer's value. + */ +int encodeUnsignedInteger64(bitstream_t* stream, uint64_t n) { + int errn = 0; + uint8_t lastEncode = (uint8_t) n; + n >>= 7; + + while (n != 0 && errn == 0) { + errn = encode(stream, lastEncode | 128); + lastEncode = (uint8_t) n; + n >>= 7; + } + + if (errn == 0) { + errn = encode(stream, lastEncode); + } + + return errn; +} + +void _shiftRight7(uint8_t* buf, int len) { + const int shift = 7; + unsigned char tmp = 0x00, tmp2 = 0x00; + for (int k = 0; k <= len; k++) { + if (k == 0) { + tmp = buf[k]; + buf[k] >>= shift; + } else { + tmp2 = buf[k]; + buf[k] >>= shift; + buf[k] |= ((tmp & 0x7F) << (8 - shift)); + + if (k != len) { + tmp = tmp2; + } + } + } +} + +/** + * Encode an arbitrary precision non negative integer using a sequence of + * octets. The most significant bit of the last octet is set to zero to + * indicate sequence termination. Only seven bits per octet are used to + * store the integer's value. + */ +int encodeUnsignedIntegerBig(bitstream_t* stream, size_t size, uint8_t* data, size_t len) { + int errn = 0; + int i; + int lenM1 = len - 1; + const int MAX_BIGINT_ARRAY = 25; + uint8_t lastEncode = 0; + uint8_t bytesToShift[MAX_BIGINT_ARRAY]; // MAXIMUM + size_t bitsToEncode = len * 8; + + if(MAX_BIGINT_ARRAY <= len) { + return -1; + } + + /* init */ + for(i=0; i 7) { + lastEncode = bytesToShift[lenM1]; + lastEncode = lastEncode | 128; + errn = encode(stream, lastEncode); + _shiftRight7(bytesToShift, len); + bitsToEncode -= 7; + } + + if (errn == 0) { + errn = encode(stream, bytesToShift[lenM1]); + } + + return errn; +} + +int encodeInteger(bitstream_t* stream, exi_integer_t* iv) { + int errn = 0; + switch (iv->type) { + /* Unsigned Integer */ + case EXI_UNSIGNED_INTEGER_8: + errn = encodeInteger32(stream, iv->val.uint8); + break; + case EXI_UNSIGNED_INTEGER_16: + errn = encodeInteger32(stream, iv->val.uint16); + break; + case EXI_UNSIGNED_INTEGER_32: + errn = encodeInteger64(stream, iv->val.uint32); + break; + case EXI_UNSIGNED_INTEGER_64: + errn = encodeInteger64(stream, (int64_t)(iv->val.uint64)); + break; + /* (Signed) Integer */ + case EXI_INTEGER_8: + errn = encodeInteger32(stream, iv->val.int8); + break; + case EXI_INTEGER_16: + errn = encodeInteger32(stream, iv->val.int16); + break; + case EXI_INTEGER_32: + errn = encodeInteger32(stream, iv->val.int32); + break; + case EXI_INTEGER_64: + errn = encodeInteger64(stream, iv->val.int64); + break; + default: + errn = EXI_UNSUPPORTED_INTEGER_VALUE_TYPE; + break; + } + + return errn; +} + + +/** + * Encode an arbitrary precision integer using a sign bit followed by a + * sequence of octets. The most significant bit of the last octet is set to + * zero to indicate sequence termination. Only seven bits per octet are used + * to store the integer's value. + */ +int encodeInteger16(bitstream_t* stream, int16_t n) { + int errn; + /* signalize sign */ + if (n < 0) { + errn = encodeBoolean(stream, 1); + /* For negative values, the Unsigned Integer holds the + * magnitude of the value minus 1 */ + n = (int16_t)((-n) - 1); + } else { + errn = encodeBoolean(stream, 0); + } + if (errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)n); + } + return errn; +} + + + +/** + * Encode an arbitrary precision integer using a sign bit followed by a + * sequence of octets. The most significant bit of the last octet is set to + * zero to indicate sequence termination. Only seven bits per octet are used + * to store the integer's value. + */ +int encodeInteger32(bitstream_t* stream, int32_t n) { + int errn; + /* signalize sign */ + if (n < 0) { + errn = encodeBoolean(stream, 1); + /* For negative values, the Unsigned Integer holds the + * magnitude of the value minus 1 */ + n = (-n) - 1; + } else { + errn = encodeBoolean(stream, 0); + } + if (errn == 0) { + errn = encodeUnsignedInteger32(stream, (uint32_t)n); + } + return errn; +} + +/** + * Encode an arbitrary precision integer using a sign bit followed by a + * sequence of octets. The most significant bit of the last octet is set to + * zero to indicate sequence termination. Only seven bits per octet are used + * to store the integer's value. + */ +int encodeInteger64(bitstream_t* stream, int64_t n) { + int errn; + /* signalize sign */ + if (n < 0) { + errn = encodeBoolean(stream, 1); + /* For negative values, the Unsigned Integer holds the + * magnitude of the value minus 1 */ + n = (-n) - 1; + } else { + errn = encodeBoolean(stream, 0); + } + if (errn == 0) { + errn = encodeUnsignedInteger64(stream, (uint64_t)n); + } + return errn; +} + + +/** + * Encode an arbitrary precision integer using a sign bit followed by a + * sequence of octets. The most significant bit of the last octet is set to + * zero to indicate sequence termination. Only seven bits per octet are used + * to store the integer's value. + */ +int encodeIntegerBig(bitstream_t* stream, int negative, size_t size, uint8_t* data, size_t len) { + int errn; + /* signalize sign */ + if (negative) { + errn = encodeBoolean(stream, 1); + /* For negative values, the Unsigned Integer holds the + * magnitude of the value minus 1 */ + /* n = (-n) - 1; */ + } else { + errn = encodeBoolean(stream, 0); + } + if (errn == 0) { + errn = encodeUnsignedIntegerBig(stream, size, data, len); + } + return errn; +} + +/** + * The Float datatype representation is two consecutive Integers. + * The first Integer represents the mantissa of the floating point + * number and the second Integer represents the base-10 exponent + * of the floating point number. + */ +int encodeFloat(bitstream_t* stream, exi_float_me_t* f) { + int errn = encodeInteger64(stream, f->mantissa); + if (errn == 0) { + errn = encodeInteger32(stream, f->exponent); + } + return errn; +} + +/** + * Encode a decimal represented as a Boolean sign followed by two Unsigned + * Integers. A sign value of zero (0) is used to represent positive Decimal + * values and a sign value of one (1) is used to represent negative Decimal + * values The first Integer represents the integral portion of the Decimal + * value. The second positive integer represents the fractional portion of + * the decimal with the digits in reverse order to preserve leading zeros. + */ +int encodeDecimal(bitstream_t* stream, exi_decimal_t* d) { + /* sign, integral, reverse fractional */ + int errn = encodeBoolean(stream, d->negative); + if (errn == 0) { + errn = encodeUnsignedInteger(stream, &d->integral); + if (errn == 0) { + errn = encodeUnsignedInteger(stream, &d->reverseFraction); + } + } + return errn; +} + +/** + * Encode a length prefixed sequence of characters. + */ +int encodeString(bitstream_t* stream, exi_string_t* string) { + int errn = encodeUnsignedInteger32(stream, string->len); + if (errn == 0) { + errn = encodeCharacters(stream, string->characters, string->len); + } + return errn; +} + +/** + * Encode a sequence of characters according to a given length. + * Each character is represented by its UCS [ISO/IEC 10646] + * code point encoded as an Unsigned Integer + */ +int encodeCharacters(bitstream_t* stream, exi_string_character_t* chars, size_t len) { + unsigned int i; + int errn = 0; + for (i = 0; i < len && errn == 0; i++) { +#if STRING_REPRESENTATION == STRING_REPRESENTATION_ASCII + errn = encode(stream, (uint8_t)chars[i]); +#endif /* STRING_REPRESENTATION_ASCII */ +#if STRING_REPRESENTATION == STRING_REPRESENTATION_UCS + errn = encodeUnsignedInteger32(stream, chars[i]); +#endif /* STRING_REPRESENTATION_UCS */ + } + return errn; +} + + +int encodeRCSCharacters(bitstream_t* stream, exi_string_character_t* chars, size_t len, size_t rcsCodeLength, size_t rcsSize, const exi_string_character_t rcsSet[]) { + unsigned int i; + unsigned int k; + int errn = 0; + size_t rcsCode = SIZE_MAX; + + for (i = 0; i < len && errn == 0; i++) { + /* try to find short code */ + rcsCode = SIZE_MAX; + for(k=0; klen); + + if(errn == 0) { + errn = encodeBytes(stream, bytes->data, bytes->len); + } + + return errn; +} + +int encodeBytes(bitstream_t* stream, uint8_t* data, size_t len) { + unsigned int i; + int errn = 0; + + for (i = 0; i < len && errn == 0; i++) { + errn = encode(stream, data[i]); + } + return errn; +} + +/** + * Encode a datetime representation which is a sequence of values + * representing the individual components of the Date-Time + */ +int encodeDateTime(bitstream_t* stream, exi_datetime_t* datetime) { + int errn = 0; + switch (datetime->type) { + case EXI_DATETIME_GYEAR: /* Year, [Time-Zone] */ + errn = encodeInteger32(stream, datetime->year - DATETIME_YEAR_OFFSET); + break; + case EXI_DATETIME_GYEARMONTH: /* Year, MonthDay, [TimeZone] */ + case EXI_DATETIME_DATE: /* Year, MonthDay, [TimeZone] */ + errn = encodeInteger32(stream, datetime->year - DATETIME_YEAR_OFFSET); + if (errn == 0) { + errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, + datetime->monthDay); + } + break; + case EXI_DATETIME_DATETIME: /* Year, MonthDay, Time, [FractionalSecs], [TimeZone] */ + errn = encodeInteger32(stream, datetime->year - DATETIME_YEAR_OFFSET); + if (errn == 0) { + errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, + datetime->monthDay); + if (errn != 0) { + break; + } + } + /* no break */ + case EXI_DATETIME_TIME: /* Time, [FractionalSecs], [TimeZone] */ + errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIME, + datetime->time); + if (errn == 0) { + if (datetime->presenceFractionalSecs) { + errn = encodeBoolean(stream, 1); + if (errn == 0) { + errn = encodeUnsignedInteger32(stream, datetime->fractionalSecs); + } + } else { + errn = encodeBoolean(stream, 0); + } + } + break; + case EXI_DATETIME_GMONTH: /* MonthDay, [TimeZone] */ + case EXI_DATETIME_GMONTHDAY: /* MonthDay, [TimeZone] */ + case EXI_DATETIME_GDAY: /* MonthDay, [TimeZone] */ + errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_MONTHDAY, + datetime->monthDay); + break; + default: + errn = EXI_UNSUPPORTED_DATETIME_TYPE; + break; + } + if (errn == 0) { + /* [TimeZone] */ + if (datetime->presenceTimezone) { + errn = encodeBoolean(stream, 1); + if (errn == 0) { + errn = encodeNBitUnsignedInteger(stream, DATETIME_NUMBER_BITS_TIMEZONE, + datetime->timezone + DATETIME_TIMEZONE_OFFSET_IN_MINUTES); + } + } else { + errn = encodeBoolean(stream, 0); + } + } + + return errn; +} + + + + +int encode(bitstream_t* stream, uint8_t b) { +#if EXI_OPTION_ALIGNMENT == BIT_PACKED + return writeBits(stream, 8, b); +#endif /* EXI_OPTION_ALIGNMENT == BIT_PACKED */ +#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT + int errn = 0; +#if EXI_STREAM == BYTE_ARRAY + if ( (*stream->pos) < stream->size ) { + stream->data[(*stream->pos)++] = b; + } else { + errn = EXI_ERROR_OUTPUT_STREAM_EOF; + } +#endif /* EXI_STREAM == BYTE_ARRAY */ +#if EXI_STREAM == FILE_STREAM + if ( putc(b, stream->file) == EOF ) { + errn = EXI_ERROR_OUTPUT_STREAM_EOF; + } +#endif /* EXI_STREAM == FILE_STREAM */ + return errn; +#endif /* EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT */ +} + +/** + * Encode a single boolean value. A false value is encoded as bit 0 and true + * value is encode as bit 1. + */ +int encodeBoolean(bitstream_t* stream, int b) { +#if EXI_OPTION_ALIGNMENT == BIT_PACKED + uint8_t val = b ? 1 : 0; + return writeBits(stream, 1, val); +#endif /* EXI_OPTION_ALIGNMENT == BIT_PACKED */ +#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT + uint8_t val = b ? 1 : 0; + return encode(stream, val); +#endif /* EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT */ +} + + +/** + * Encode n-bit unsigned integer. The n least significant bits of parameter + * b starting with the most significant, i.e. from left to right. + */ +int encodeNBitUnsignedInteger(bitstream_t* stream, size_t nbits, uint32_t val) { +#if EXI_OPTION_ALIGNMENT == BIT_PACKED + int errn = 0; + if (nbits > 0) { + errn = writeBits(stream, nbits, val); + } + return errn; +#endif /* EXI_OPTION_ALIGNMENT == BIT_PACKED */ +#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT + int errn = 0; + if (nbits > 0) { + if (nbits < 9) { + /* 1 byte */ + errn = encode(stream, val & 0xff); + } else if (nbits < 17) { + /* 2 bytes */ + errn = encode(stream, val & 0x00ff); + if(errn == 0) { + errn = encode(stream, (uint8_t)((val & 0xff00) >> 8)); + } + } else if (nbits < 25) { + /* 3 bytes */ + errn = encode(stream, val & 0x0000ff); + if(errn == 0) { + errn = encode(stream, (uint8_t)((val & 0x00ff00) >> 8)); + if(errn == 0) { + errn = encode(stream, (uint8_t)((val & 0xff0000) >> 16)); + } + } + } else if (nbits < 33) { + /* 4 bytes */ + errn = encode(stream, val & 0x000000ff); + if(errn == 0) { + errn = encode(stream, (uint8_t)((val & 0x0000ff00) >> 8)); + if(errn == 0) { + errn = encode(stream, (uint8_t)((val & 0x00ff0000) >> 16)); + if(errn == 0) { + errn = encode(stream, (uint8_t)((val & 0xff000000) >> 24)); + } + } + } + } else { + /* TODO Currently not more than 4 Bytes allowed for NBitUnsignedInteger */ + errn = EXI_UNSUPPORTED_NBIT_INTEGER_LENGTH; + } + } + return errn; +#endif /* EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT */ +} + +/** + * Flush underlying output stream. + */ +int encodeFinish(bitstream_t* stream) { +#if EXI_OPTION_ALIGNMENT == BIT_PACKED +#endif /* EXI_OPTION_ALIGNMENT == BIT_PACKED */ + return flush(stream); +#if EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT + /* no pending bits in byte-aligned mode */ + return 0; +#endif /* EXI_OPTION_ALIGNMENT == BYTE_ALIGNMENT */ +} + + + +#endif + diff --git a/src/src/exi/EncoderChannel.h b/src/src/exi/EncoderChannel.h new file mode 100644 index 0000000..fdceaff --- /dev/null +++ b/src/src/exi/EncoderChannel.h @@ -0,0 +1,423 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file EncoderChannel.h + * \brief EXI Encoder Channel + * + */ + +#ifndef ENCODER_CHANNEL_H +#define ENCODER_CHANNEL_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "EXITypes.h" + + +/** + * \brief Encode byte value + * + * \param stream Output Stream + * \param b byte + * \return Error-Code <> 0 + * + */ +int encode(bitstream_t* stream, uint8_t b); + + +/** + * \brief Encode a single boolean value + * + * A false value is encoded as 0 and true value is encode as 1. + * + * \param stream Output Stream + * \param b boolean + * \return Error-Code <> 0 + * + */ +int encodeBoolean(bitstream_t* stream, int b); + + +/** + * \brief Encode n-bit unsigned integer + * + * The n least significant bits of parameter b starting with the + * most significant, i.e. from left to right. + * + * \param stream Output Stream + * \param nbits number of bits + * \param val value + * \return Error-Code <> 0 + * + */ +int encodeNBitUnsignedInteger(bitstream_t* stream, size_t nbits, uint32_t val); + + +/** + * \brief Encode unsigned integer + * + * Encode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Output Stream + * \param iv Unsigned integer value + * \return Error-Code <> 0 + * + */ +int encodeUnsignedInteger(bitstream_t* stream, exi_integer_t* iv); + + +/** + * \brief Encode unsigned integer + * + * Encode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Output Stream + * \param n Unsigned integer value 16 bits + * \return Error-Code <> 0 + * + */ +int encodeUnsignedInteger16(bitstream_t* stream, uint16_t n); + + + +/** + * \brief Encode unsigned integer + * + * Encode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Output Stream + * \param n Unsigned integer value 32 bits + * \return Error-Code <> 0 + * + */ +int encodeUnsignedInteger32(bitstream_t* stream, uint32_t n); + + +/** + * \brief Encode unsigned integer + * + * Encode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Output Stream + * \param n Unsigned integer value 64 bits + * \return Error-Code <> 0 + * + */ +int encodeUnsignedInteger64(bitstream_t* stream, uint64_t n); + +/** + * \brief Encode unsigned integer + * + * Encode an arbitrary precision non negative integer using + * a sequence of octets. The most significant bit of the last + * octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Output Stream + * \param size size array + * \param data data array + * \param len length array + * \return Error-Code <> 0 + * + */ +int encodeUnsignedIntegerBig(bitstream_t* stream, size_t size, uint8_t* data, size_t len); + + +/** + * \brief Encode integer + * + * Encode an arbitrary precision integer using a sign boolean + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Output Stream + * \param iv Integer value + * \return Error-Code <> 0 + * + */ +int encodeInteger(bitstream_t* stream, exi_integer_t* iv); + + +/** + * \brief Encode integer + * + * Encode an arbitrary precision integer using a sign boolean + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Output Stream + * \param n Integer value 16 bits + * \return Error-Code <> 0 + * + */ +int encodeInteger16(bitstream_t* stream, int16_t n); + +/** + * \brief Encode integer + * + * Encode an arbitrary precision integer using a sign boolean + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Output Stream + * \param n Integer value 32 bits + * \return Error-Code <> 0 + * + */ +int encodeInteger32(bitstream_t* stream, int32_t n); + + +/** + * \brief Encode integer + * + * Encode an arbitrary precision integer using a sign boolean + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Output Stream + * \param n Integer value 64 bits + * \return Error-Code <> 0 + * + */ +int encodeInteger64(bitstream_t* stream, int64_t n); + +/** + * \brief Encode integer + * + * Encode an arbitrary precision integer using a sign boolean + * followed by a sequence of octets. The most significant bit + * of the last octet is set to zero to indicate sequence termination. + * Only seven bits per octet are used to store the integer's value. + * + * \param stream Output Stream + * \param negative negative integer + * \param size size array + * \param data data array + * \param len length array + * \return Error-Code <> 0 + * + */ +int encodeIntegerBig(bitstream_t* stream, int negative, size_t size, uint8_t* data, size_t len); + +/** + * \brief Encode float + * + * Encode a Float datatype as two consecutive Integers. The first + * Integer represents the mantissa of the floating point number + * and the second Integer represents the base-10 exponent of the + * floating point number. + * + * \param stream Output Stream + * \param f Float value + * \return Error-Code <> 0 + * + */ +int encodeFloat(bitstream_t* stream, exi_float_me_t* f); + + +/** + * \brief Encode decimal + * + * Encode a decimal represented as a Boolean sign followed by two + * Unsigned Integers. A sign value of zero (0) is used to represent + * positive Decimal values and a sign value of one (1) is used to + * represent negative Decimal values The first Integer represents + * the integral portion of the Decimal value. The second positive + * integer represents the fractional portion of the decimal with + * the digits in reverse order to preserve leading zeros. + * + * \param stream Output Stream + * \param d Decimal value + * \return Error-Code <> 0 + * + */ +int encodeDecimal(bitstream_t* stream, exi_decimal_t* d); + + +/** + * \brief Encode string + * + * Encode a length prefixed sequence of characters. + * + * \param stream Output Stream + * \param string String + * \return Error-Code <> 0 + * + */ +int encodeString(bitstream_t* stream, exi_string_t* string); + + +/** + * \brief Encode string value + * + * Encode a length prefixed sequence of characters + * in the sense of string tables + * + * \param stream Output Stream + * \param stringTable String Table + * \param namespaceUriID Qualified Namespace ID + * \param localNameID Qualified LocalName ID + * \param string String value + * \return Error-Code <> 0 + * + */ +int encodeStringValue(bitstream_t* stream, exi_value_string_table_t* stringTable, size_t namespaceUriID, size_t localNameID, + exi_string_value_t* string); + + +/** + * \brief Encode restricted character set value + * + * Encode a length prefixed sequence of characters + * in the sense of string tables + * + * \param stream Output Stream + * \param StringTable StringTable + * \param namespaceUriID Qualified Namespace ID + * \param localNameID Qualified LocalName ID + * \param rcs Restricted character set + * \param string String value + * \return Error-Code <> 0 + * + */ +int encodeRCSStringValue(bitstream_t* stream, exi_value_string_table_t* stringTable, + size_t namespaceUriID, size_t localNameID, exi_rcs_t* rcs, exi_string_value_t* string); + + +/** + * \brief Encode characters + * + * Encode a sequence of characters according to a given length. + * Each character is represented by its UCS [ISO/IEC 10646] + * code point encoded as an Unsigned Integer. + * + * \param stream Output Stream + * \param chars Characters + * \param len Numbr of characters + * \return Error-Code <> 0 + * + */ +int encodeCharacters(bitstream_t* stream, exi_string_character_t* chars, size_t len); + + +/** + * \brief Encode characters + * + * Encode a sequence of characters according to a given length. + * Each character is represented by its UCS [ISO/IEC 10646] + * code point encoded as an Unsigned Integer. + * + * \param stream Output Stream + * \param chars Characters + * \param len Numbr of characters + * \param rcsCodeLength RCS code-length + * \param rcsCodeLength RCS size + * \param rcsCodeLength RCS set + * \return Error-Code <> 0 + * + */ +int encodeRCSCharacters(bitstream_t* stream, exi_string_character_t* chars, size_t len, size_t rcsCodeLength, size_t rcsSize, const exi_string_character_t rcsSet[]); + + + +/** + * \brief Encode binary + * + * Encode a binary value as a length-prefixed sequence of octets. + * + * \param stream Output Stream + * \param bytes Byte values + * \return Error-Code <> 0 + * + */ +int encodeBinary(bitstream_t* stream, exi_bytes_t* bytes); + + +/** + * \brief Encode binary data + * + * Encode a sequence of octets. + * + * \param stream Output Stream + * \param data Byte values + * \param len Length + * \return Error-Code <> 0 + * + */ +int encodeBytes(bitstream_t* stream, uint8_t* data, size_t len); + +/** + * \brief Encode datetime + * + * Encode a datetime representation which is a sequence of values + * representing the individual components of the Date-Time. + * + * \param stream Output Stream + * \param datetime Datetime values + * \return Error-Code <> 0 + * + */ +int encodeDateTime(bitstream_t* stream, exi_datetime_t* datetime); + + +/** + * \brief Flush underlying bit output stream + * + * \param stream Output Stream + * \return Error-Code <> 0 + * + */ +int encodeFinish(bitstream_t* stream); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/src/exi/ErrorCodes.h b/src/src/exi/ErrorCodes.h new file mode 100644 index 0000000..e77855f --- /dev/null +++ b/src/src/exi/ErrorCodes.h @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file ErrorCodes.h + * \brief Error Codes descriptions + * + */ + +#ifndef EXI_ERROR_CODES_H +#define EXI_ERROR_CODES_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define EXI_ERROR_INPUT_STREAM_EOF -10 +#define EXI_ERROR_OUTPUT_STREAM_EOF -11 +#define EXI_ERROR_INPUT_FILE_HANDLE -12 +#define EXI_ERROR_OUTPUT_FILE -13 + +#define EXI_ERROR_OUT_OF_BOUNDS -100 +#define EXI_ERROR_OUT_OF_STRING_BUFFER -101 +/*#define EXI_ERROR_OUT_OF_ASCII_BUFFER -102 */ +#define EXI_ERROR_OUT_OF_BYTE_BUFFER -103 +#define EXI_ERROR_OUT_OF_GRAMMAR_STACK -104 +#define EXI_ERROR_OUT_OF_RUNTIME_GRAMMAR_STACK -105 +#define EXI_ERROR_OUT_OF_QNAMES -106 + +#define EXI_ERROR_UNKOWN_GRAMMAR_ID -108 +#define EXI_ERROR_UNKOWN_EVENT -109 +#define EXI_ERROR_UNKOWN_EVENT_CODE -110 +#define EXI_ERROR_UNEXPECTED_EVENT_LEVEL1 -111 +#define EXI_ERROR_UNEXPECTED_EVENT_LEVEL2 -112 + +#define EXI_ERROR_UNEXPECTED_START_DOCUMENT -113 +#define EXI_ERROR_UNEXPECTED_END_DOCUMENT -114 +#define EXI_ERROR_UNEXPECTED_START_ELEMENT -115 +#define EXI_ERROR_UNEXPECTED_START_ELEMENT_NS -116 +#define EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC -117 +#define EXI_ERROR_UNEXPECTED_START_ELEMENT_GENERIC_UNDECLARED -118 +#define EXI_ERROR_UNEXPECTED_END_ELEMENT -119 +#define EXI_ERROR_UNEXPECTED_CHARACTERS -120 +#define EXI_ERROR_UNEXPECTED_ATTRIBUTE -121 +#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_NS -122 +#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_GENERIC -123 +#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_GENERIC_UNDECLARED -124 +#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_TYPE -125 +#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_XSI_NIL -126 +#define EXI_ERROR_UNEXPECTED_GRAMMAR_ID -127 +#define EXI_ERROR_UNEXPECTED_ATTRIBUTE_MOVE_TO_CONTENT_RULE -128 + +#define EXI_UNSUPPORTED_NBIT_INTEGER_LENGTH -132 +#define EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS -133 +#define EXI_UNSUPPORTED_INTEGER_VALUE -134 +#define EXI_NEGATIVE_UNSIGNED_INTEGER_VALUE -135 +#define EXI_UNSUPPORTED_LIST_VALUE_TYPE -136 +#define EXI_UNSUPPORTED_HEADER_COOKIE -137 +#define EXI_UNSUPPORTED_HEADER_OPTIONS -138 + +#define EXI_UNSUPPORTED_GLOBAL_ATTRIBUTE_VALUE_TYPE -139 +#define EXI_UNSUPPORTED_DATATYPE -140 +#define EXI_UNSUPPORTED_STRING_VALUE_TYPE -141 +#define EXI_UNSUPPORTED_INTEGER_VALUE_TYPE -142 +#define EXI_UNSUPPORTED_DATETIME_TYPE -143 +#define EXI_UNSUPPORTED_FRAGMENT_ELEMENT -144 + +#define EXI_UNSUPPORTED_GRAMMAR_LEARNING_CH -150 + +/* string values */ +#define EXI_ERROR_STRINGVALUES_NOT_SUPPORTED -160 +#define EXI_ERROR_STRINGVALUES_OUT_OF_ENTRIES -161 +#define EXI_ERROR_STRINGVALUES_OUT_OF_MEMORY -162 +#define EXI_ERROR_STRINGVALUES_OUT_OF_BOUND -163 +#define EXI_ERROR_STRINGVALUES_CHARACTER -164 + +#define EXI_ERROR_UNEXPECTED_BYTE_VALUE -200 + + +#define EXI_ERROR_CONVERSION_NO_ASCII_CHARACTERS -300 +#define EXI_ERROR_CONVERSION_TYPE_TO_STRING -301 + + +#define EXI_DEVIANT_SUPPORT_NOT_DEPLOYED -500 + +#ifdef __cplusplus +} +#endif + + +#endif /* EXI_ERROR_CODES_H */ + diff --git a/src/src/exi/MethodsBag.c b/src/src/exi/MethodsBag.c new file mode 100644 index 0000000..11606a5 --- /dev/null +++ b/src/src/exi/MethodsBag.c @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +#ifndef METHODS_BAG_C +#define METHODS_BAG_C + +#include "MethodsBag.h" +#include "ErrorCodes.h" + +static const uint16_t smallLengths[] = { 0, 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, + 4, 4, 4 }; + +int exiGetCodingLength(size_t characteristics, size_t* codingLength) { + /* Note: we could use range expressions in switch statements but those are non-standard */ + /* e.g., case 1 ... 5: */ + int errn = 0; + if (characteristics < 17) { + *codingLength = smallLengths[characteristics]; + } else if (characteristics < 33) { + /* 17 .. 32 */ + *codingLength = 5; + } else if (characteristics < 65) { + /* 33 .. 64 */ + *codingLength = 6; + } else if (characteristics < 129) { + /* 65 .. 128 */ + *codingLength = 7; + } else if (characteristics < 257) { + /* 129 .. 256 */ + *codingLength = 8; + } else if (characteristics < 513) { + /* 257 .. 512 */ + *codingLength = 9; + } else if (characteristics < 1025) { + /* 513 .. 1024 */ + *codingLength = 10; + } else if (characteristics < 2049) { + /* 1025 .. 2048 */ + *codingLength = 11; + } else if (characteristics < 4097) { + /* 2049 .. 4096 */ + *codingLength = 12; + } else if (characteristics < 8193) { + /* 4097 .. 8192 */ + *codingLength = 13; + } else if (characteristics < 16385) { + /* 8193 .. 16384 */ + *codingLength = 14; + } else if (characteristics < 32769) { + /* 16385 .. 32768 */ + *codingLength = 15; + } else { + /* 32769 .. 65536 */ + *codingLength = 16; + } + return errn; +} + + +uint8_t numberOf7BitBlocksToRepresent(uint32_t n) { + /* assert (n >= 0); */ + + /* 7 bits */ + if (n < 128) { + return 1; + } + /* 14 bits */ + else if (n < 16384) { + return 2; + } + /* 21 bits */ + else if (n < 2097152) { + return 3; + } + /* 28 bits */ + else if (n < 268435456) { + return 4; + } + /* 35 bits */ + else { + /* int, 32 bits */ + return 5; + } +} + + + +#endif + diff --git a/src/src/exi/MethodsBag.h b/src/src/exi/MethodsBag.h new file mode 100644 index 0000000..163685c --- /dev/null +++ b/src/src/exi/MethodsBag.h @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 2017-03-02 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +/** +* \file MethodsBag.h +* \brief Method bag for bit and octet functions +* +*/ + +#ifndef METHODS_BAG_H +#define METHODS_BAG_H + + + +#include +#include + +/** + * \brief Returns the number of bits to identify the characteristics. + * + * \param characteristics number of characteristics + * \param codingLength number of bits + * \return Error-Code <> 0 + * + */ +int exiGetCodingLength(size_t characteristics, size_t* codingLength); + + +/** + * \brief Returns the least number of 7 bit-blocks that is needed to represent the passed integer value + * + * Note: Returns 1 if passed parameter is 0. + * + * \param n integer value + * \return Error-Code <> 0 + * + */ +uint8_t numberOf7BitBlocksToRepresent(uint32_t n); + + +#endif + diff --git a/src/src/exi/appHandEXIDatatypes.c b/src/src/exi/appHandEXIDatatypes.c new file mode 100644 index 0000000..35e9fbf --- /dev/null +++ b/src/src/exi/appHandEXIDatatypes.c @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_AppProtocol.xsd

+ * + * + ********************************************************************/ + + + +#include + +#include "appHandEXIDatatypes.h" +#include "EXITypes.h" + + +#ifndef EXI_appHand_DATATYPES_C +#define EXI_appHand_DATATYPES_C + + + +void init_appHandEXIDocument(struct appHandEXIDocument* exiDoc) { + exiDoc->supportedAppProtocolReq_isUsed = 0u; + exiDoc->supportedAppProtocolRes_isUsed = 0u; +} + +void init_appHandAppProtocolType(struct appHandAppProtocolType* appHandAppProtocolType) { +} + +void init_appHandAnonType_supportedAppProtocolReq(struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq) { + appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen = 0u; +} + +void init_appHandAnonType_supportedAppProtocolRes(struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes) { + appHandAnonType_supportedAppProtocolRes->SchemaID_isUsed = 0u; +} + + + + + +#endif + diff --git a/src/src/exi/appHandEXIDatatypes.h b/src/src/exi/appHandEXIDatatypes.h new file mode 100644 index 0000000..26a24c6 --- /dev/null +++ b/src/src/exi/appHandEXIDatatypes.h @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_AppProtocol.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file EXIDatatypes.h + * \brief Datatype definitions and structs for given XML Schema definitions and initialization methods + * + */ + +#ifndef EXI_appHand_DATATYPES_H +#define EXI_appHand_DATATYPES_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include + +#include "EXITypes.h" + + +/* Datatype definitions and structs for given XML Schema definitions */ + +#define UNION_YES 1 +#define UNION_NO 2 +#define SAVE_MEMORY_WITH_UNNAMED_UNION UNION_YES + +/* Complex type name='urn:iso:15118:2:2010:AppProtocol,AppProtocolType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(ProtocolNamespace,VersionNumberMajor,VersionNumberMinor,SchemaID,Priority)', derivedBy='RESTRICTION'. */ +#define appHandAppProtocolType_ProtocolNamespace_CHARACTERS_SIZE 100 /* XML schema facet maxLength for urn:iso:15118:2:2010:AppProtocol,protocolNamespaceType is 100 */ +struct appHandAppProtocolType { + /* element: ProtocolNamespace, urn:iso:15118:2:2010:AppProtocol,protocolNamespaceType */ + struct { + exi_string_character_t characters[appHandAppProtocolType_ProtocolNamespace_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ProtocolNamespace ; + /* element: VersionNumberMajor, http://www.w3.org/2001/XMLSchema,unsignedInt */ + uint32_t VersionNumberMajor ; + /* element: VersionNumberMinor, http://www.w3.org/2001/XMLSchema,unsignedInt */ + uint32_t VersionNumberMinor ; + /* element: SchemaID, urn:iso:15118:2:2010:AppProtocol,idType */ + uint8_t SchemaID ; + /* element: Priority, urn:iso:15118:2:2010:AppProtocol,priorityType */ + uint8_t Priority ; +}; + +typedef enum { + appHandresponseCodeType_OK_SuccessfulNegotiation = 0, + appHandresponseCodeType_OK_SuccessfulNegotiationWithMinorDeviation = 1, + appHandresponseCodeType_Failed_NoNegotiation = 2 +} appHandresponseCodeType; + +/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolRes', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(ResponseCode,SchemaID{0-1})', derivedBy='RESTRICTION'. */ +struct appHandAnonType_supportedAppProtocolRes { + /* element: ResponseCode, urn:iso:15118:2:2010:AppProtocol,responseCodeType */ + appHandresponseCodeType ResponseCode ; + /* element: SchemaID, urn:iso:15118:2:2010:AppProtocol,idType */ + uint8_t SchemaID ; + unsigned int SchemaID_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolReq', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(AppProtocol{1-20})', derivedBy='RESTRICTION'. */ +#define appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE 5 +struct appHandAnonType_supportedAppProtocolReq { + /* element: AppProtocol, Complex type name='urn:iso:15118:2:2010:AppProtocol,AppProtocolType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(ProtocolNamespace,VersionNumberMajor,VersionNumberMinor,SchemaID,Priority)', derivedBy='RESTRICTION'. */ + struct { + struct appHandAppProtocolType array[appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE]; + uint16_t arrayLen; + } AppProtocol; +}; + + + + + +/* Possible root elements of EXI Document */ +struct appHandEXIDocument { +#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES + union { +#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ + struct appHandAnonType_supportedAppProtocolReq supportedAppProtocolReq ; + struct appHandAnonType_supportedAppProtocolRes supportedAppProtocolRes ; +#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES + }; +#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ + unsigned int supportedAppProtocolReq_isUsed:1; + unsigned int supportedAppProtocolRes_isUsed:1; + + + int _warning_; +}; + +/* Initialization methods for structs */ + +void init_appHandEXIDocument(struct appHandEXIDocument* exiDoc); +void init_appHandAppProtocolType(struct appHandAppProtocolType* appHandAppProtocolType); +void init_appHandAnonType_supportedAppProtocolReq(struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq); +void init_appHandAnonType_supportedAppProtocolRes(struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/src/exi/appHandEXIDatatypesDecoder.c b/src/src/exi/appHandEXIDatatypesDecoder.c new file mode 100644 index 0000000..466af7e --- /dev/null +++ b/src/src/exi/appHandEXIDatatypesDecoder.c @@ -0,0 +1,896 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_AppProtocol.xsd

+ * + * + ********************************************************************/ + + + + +#include "appHandEXIDatatypesDecoder.h" + +#include "DecoderChannel.h" +#include "EXIHeaderDecoder.h" + +#include "appHandEXIDatatypes.h" +#include "ErrorCodes.h" + +#ifndef EXI_appHand_DATATYPES_DECODER_C +#define EXI_appHand_DATATYPES_DECODER_C + +/** event-code */ +static uint32_t eventCode; +static int errn; +static uint32_t uint32; + + +/* Forward Declarations */ +static int decode_appHandAppProtocolType(bitstream_t* stream, struct appHandAppProtocolType* appHandAppProtocolType); +static int decode_appHandAnonType_supportedAppProtocolReq(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq); +static int decode_appHandAnonType_supportedAppProtocolRes(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes); + +/* Deviant data decoding (skip functions) */ + + + /* Complex type name='urn:iso:15118:2:2010:AppProtocol,AppProtocolType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(ProtocolNamespace,VersionNumberMajor,VersionNumberMinor,SchemaID,Priority)', derivedBy='RESTRICTION'. */ +static int decode_appHandAppProtocolType(bitstream_t* stream, struct appHandAppProtocolType* appHandAppProtocolType) { + int grammarID = 0; + int done = 0; + + init_appHandAppProtocolType(appHandAppProtocolType); + + while(!done) { + switch(grammarID) { + case 0: + /* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &appHandAppProtocolType->ProtocolNamespace.charactersLen); + if (errn == 0) { + if (appHandAppProtocolType->ProtocolNamespace.charactersLen >= 2) { + appHandAppProtocolType->ProtocolNamespace.charactersLen = (uint16_t)(appHandAppProtocolType->ProtocolNamespace.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, appHandAppProtocolType->ProtocolNamespace.charactersLen, appHandAppProtocolType->ProtocolNamespace.characters, appHandAppProtocolType_ProtocolNamespace_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT(ProtocolNamespace) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 1; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 1: + /* Element[START_ELEMENT(VersionNumberMajor)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &appHandAppProtocolType->VersionNumberMajor); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT(VersionNumberMajor) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 2; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 2: + /* Element[START_ELEMENT(VersionNumberMinor)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &appHandAppProtocolType->VersionNumberMinor); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT(VersionNumberMinor) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 3; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 3: + /* Element[START_ELEMENT(SchemaID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 8, &(uint32)); + appHandAppProtocolType->SchemaID = (uint8_t)(uint32 + 0); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT(SchemaID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[START_ELEMENT(Priority)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &(uint32)); + appHandAppProtocolType->Priority = (uint8_t)(uint32 + 1); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT(Priority) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 5; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 5: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolReq', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(AppProtocol{1-20})', derivedBy='RESTRICTION'. */ +static int decode_appHandAnonType_supportedAppProtocolReq(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq) { + int grammarID = 7; + int done = 0; + + init_appHandAnonType_supportedAppProtocolReq(appHandAnonType_supportedAppProtocolReq); + + while(!done) { + switch(grammarID) { + case 7: + /* FirstStartTag[START_ELEMENT(AppProtocol)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 8; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 8: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 9; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 9: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 10; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 10: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 11; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 11: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 12; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 12: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 13; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 13: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 14; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 14: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 15; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 15: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 16; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 16: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 17; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 17: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 18; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 18: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 19; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 19: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 20; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 20: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 21; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 21: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 22; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 22: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 23; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 23: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 24; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 24: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 25; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 25: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 26; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 26: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen < appHandAnonType_supportedAppProtocolReq_AppProtocol_ARRAY_SIZE) { + errn = decode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array[appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 5; + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 5: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolRes', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(ResponseCode,SchemaID{0-1})', derivedBy='RESTRICTION'. */ +static int decode_appHandAnonType_supportedAppProtocolRes(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes) { + int grammarID = 27; + int done = 0; + + init_appHandAnonType_supportedAppProtocolRes(appHandAnonType_supportedAppProtocolRes); + + while(!done) { + switch(grammarID) { + case 27: + /* FirstStartTag[START_ELEMENT(ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + appHandAnonType_supportedAppProtocolRes->ResponseCode = (appHandresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT(ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 28; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 28: + /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 8, &(uint32)); + appHandAnonType_supportedAppProtocolRes->SchemaID = (uint8_t)(uint32 + 0); + appHandAnonType_supportedAppProtocolRes->SchemaID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT(SchemaID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 5; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 5: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 6; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + + + + +int decode_appHandExiDocument(bitstream_t* stream, struct appHandEXIDocument* exiDoc) { + errn = readEXIHeader(stream); + + if(errn == 0) { + /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */ + init_appHandEXIDocument(exiDoc); + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if(errn == 0) { + switch(eventCode) { + case 0: + /* START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq) */ + errn = decode_appHandAnonType_supportedAppProtocolReq(stream, &exiDoc->supportedAppProtocolReq); + exiDoc->supportedAppProtocolReq_isUsed = 1u; + break; + case 1: + /* START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes) */ + errn = decode_appHandAnonType_supportedAppProtocolRes(stream, &exiDoc->supportedAppProtocolRes); + exiDoc->supportedAppProtocolRes_isUsed = 1u; + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + } + + } + + return errn; +} + + +#endif + diff --git a/src/src/exi/appHandEXIDatatypesDecoder.h b/src/src/exi/appHandEXIDatatypesDecoder.h new file mode 100644 index 0000000..1fd7f48 --- /dev/null +++ b/src/src/exi/appHandEXIDatatypesDecoder.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_AppProtocol.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file EXIDatatypesDecoder.h + * \brief Decoder for datatype definitions + * + */ + +#ifndef EXI_appHand_DATATYPES_DECODER_H +#define EXI_appHand_DATATYPES_DECODER_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include + +#include "EXITypes.h" +#include "appHandEXIDatatypes.h" + +int decode_appHandExiDocument(bitstream_t* stream, struct appHandEXIDocument* exiDoc); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/src/exi/appHandEXIDatatypesEncoder.c b/src/src/exi/appHandEXIDatatypesEncoder.c new file mode 100644 index 0000000..dc62713 --- /dev/null +++ b/src/src/exi/appHandEXIDatatypesEncoder.c @@ -0,0 +1,671 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_AppProtocol.xsd

+ * + * + ********************************************************************/ + + + + +#include "appHandEXIDatatypesEncoder.h" + +#include "EncoderChannel.h" +#include "EXIHeaderEncoder.h" + +#include "appHandEXIDatatypes.h" +#include "ErrorCodes.h" + +#ifndef EXI_appHand_DATATYPES_ENCODER_C +#define EXI_appHand_DATATYPES_ENCODER_C + +static int errn; + +/* Forward Declarations */ +static int encode_appHandAppProtocolType(bitstream_t* stream, struct appHandAppProtocolType* appHandAppProtocolType); +static int encode_appHandAnonType_supportedAppProtocolReq(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq); +static int encode_appHandAnonType_supportedAppProtocolRes(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes); + + + /* Complex type name='urn:iso:15118:2:2010:AppProtocol,AppProtocolType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(ProtocolNamespace,VersionNumberMajor,VersionNumberMinor,SchemaID,Priority)', derivedBy='RESTRICTION'. */ +static int encode_appHandAppProtocolType(bitstream_t* stream, struct appHandAppProtocolType* appHandAppProtocolType) { + int grammarID = 0; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 0: + /* FirstStartTag[START_ELEMENT(ProtocolNamespace)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(appHandAppProtocolType->ProtocolNamespace.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, appHandAppProtocolType->ProtocolNamespace.characters, appHandAppProtocolType->ProtocolNamespace.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 1; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 1: + /* Element[START_ELEMENT(VersionNumberMajor)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, appHandAppProtocolType->VersionNumberMajor); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 2; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 2: + /* Element[START_ELEMENT(VersionNumberMinor)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, appHandAppProtocolType->VersionNumberMinor); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 3; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 3: + /* Element[START_ELEMENT(SchemaID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 8, (uint32_t)(appHandAppProtocolType->SchemaID - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[START_ELEMENT(Priority)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, (uint32_t)(appHandAppProtocolType->Priority - 1)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 5: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolReq', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(AppProtocol{1-20})', derivedBy='RESTRICTION'. */ +static int encode_appHandAnonType_supportedAppProtocolReq(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolReq* appHandAnonType_supportedAppProtocolReq) { + int grammarID = 7; + int done = 0; + + unsigned int appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 7: + /* FirstStartTag[START_ELEMENT(AppProtocol)] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 8; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 8: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 9; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 9: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 10; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 10: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 11; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 11: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 12; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 12: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 13; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 13: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 14; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 14: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 15; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 15: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 16; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 16: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 17; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 17: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 18; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 18: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 19; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 19: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 20; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 20: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 21; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 21: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 22; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 22: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 23; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 23: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 24; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 24: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 25; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 25: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 26; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 26: + /* Element[START_ELEMENT(AppProtocol), END_ELEMENT] */ + if (appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex < appHandAnonType_supportedAppProtocolReq->AppProtocol.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAppProtocolType(stream, &appHandAnonType_supportedAppProtocolReq->AppProtocol.array [appHandAnonType_supportedAppProtocolReq_AppProtocol_currArrayIndex++]); + } + grammarID = 5; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 5: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:AppProtocol,#AnonType_supportedAppProtocolRes', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(ResponseCode,SchemaID{0-1})', derivedBy='RESTRICTION'. */ +static int encode_appHandAnonType_supportedAppProtocolRes(bitstream_t* stream, struct appHandAnonType_supportedAppProtocolRes* appHandAnonType_supportedAppProtocolRes) { + int grammarID = 27; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 27: + /* FirstStartTag[START_ELEMENT(ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 2, appHandAnonType_supportedAppProtocolRes->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 28; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 28: + /* Element[START_ELEMENT(SchemaID), END_ELEMENT] */ + if ( appHandAnonType_supportedAppProtocolRes->SchemaID_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 8, (uint32_t)(appHandAnonType_supportedAppProtocolRes->SchemaID - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 5; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 5: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 6; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + + + +int encode_appHandExiDocument(bitstream_t* stream, struct appHandEXIDocument* exiDoc) { + errn = writeEXIHeader(stream); + + if(errn == 0) { + /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq), START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes), START_ELEMENT_GENERIC] */ + if ( exiDoc->supportedAppProtocolReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolReq) */ + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_appHandAnonType_supportedAppProtocolReq(stream, &exiDoc->supportedAppProtocolReq ); + } + } else if ( exiDoc->supportedAppProtocolRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:AppProtocol}supportedAppProtocolRes) */ + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_appHandAnonType_supportedAppProtocolRes(stream, &exiDoc->supportedAppProtocolRes ); + } + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + + } + + if(errn == 0) { + /* flush any pending bits */ + errn = encodeFinish(stream); + } + + return errn; +} + + +#endif + diff --git a/src/src/exi/appHandEXIDatatypesEncoder.h b/src/src/exi/appHandEXIDatatypesEncoder.h new file mode 100644 index 0000000..af952ac --- /dev/null +++ b/src/src/exi/appHandEXIDatatypesEncoder.h @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_AppProtocol.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file EXIDatatypesEncoder.h + * \brief Encoder for datatype definitions + * + */ + +#ifndef EXI_appHand_DATATYPES_ENCODER_H +#define EXI_appHand_DATATYPES_ENCODER_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +#include "EXITypes.h" +#include "appHandEXIDatatypes.h" + + +int encode_appHandExiDocument(bitstream_t* stream, struct appHandEXIDocument* exiDoc); + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/src/exi/dinEXIDatatypes.c b/src/src/exi/dinEXIDatatypes.c new file mode 100644 index 0000000..fa1fb79 --- /dev/null +++ b/src/src/exi/dinEXIDatatypes.c @@ -0,0 +1,969 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +#include + +#include "dinEXIDatatypes.h" +#include "EXITypes.h" + + +#ifndef EXI_din_DATATYPES_C +#define EXI_din_DATATYPES_C + +#if DEPLOY_DIN_CODEC == SUPPORT_YES + + +void init_dinEXIDocument(struct dinEXIDocument* exiDoc) { + exiDoc->BodyElement_isUsed = 0u; + exiDoc->V2G_Message_isUsed = 0u; + exiDoc->SignatureProperty_isUsed = 0u; + exiDoc->DSAKeyValue_isUsed = 0u; + exiDoc->SignatureProperties_isUsed = 0u; + exiDoc->KeyValue_isUsed = 0u; + exiDoc->Transforms_isUsed = 0u; + exiDoc->DigestMethod_isUsed = 0u; + exiDoc->Signature_isUsed = 0u; + exiDoc->RetrievalMethod_isUsed = 0u; + exiDoc->Manifest_isUsed = 0u; + exiDoc->Reference_isUsed = 0u; + exiDoc->CanonicalizationMethod_isUsed = 0u; + exiDoc->RSAKeyValue_isUsed = 0u; + exiDoc->Transform_isUsed = 0u; + exiDoc->PGPData_isUsed = 0u; + exiDoc->MgmtData_isUsed = 0u; + exiDoc->SignatureMethod_isUsed = 0u; + exiDoc->KeyInfo_isUsed = 0u; + exiDoc->SPKIData_isUsed = 0u; + exiDoc->X509Data_isUsed = 0u; + exiDoc->SignatureValue_isUsed = 0u; + exiDoc->KeyName_isUsed = 0u; + exiDoc->DigestValue_isUsed = 0u; + exiDoc->SignedInfo_isUsed = 0u; + exiDoc->Object_isUsed = 0u; + exiDoc->DC_EVSEStatus_isUsed = 0u; + exiDoc->RelativeTimeInterval_isUsed = 0u; + exiDoc->SalesTariffEntry_isUsed = 0u; + exiDoc->DC_EVPowerDeliveryParameter_isUsed = 0u; + exiDoc->SASchedules_isUsed = 0u; + exiDoc->AC_EVChargeParameter_isUsed = 0u; + exiDoc->SAScheduleList_isUsed = 0u; + exiDoc->DC_EVStatus_isUsed = 0u; + exiDoc->ServiceCharge_isUsed = 0u; + exiDoc->EVStatus_isUsed = 0u; + exiDoc->DC_EVChargeParameter_isUsed = 0u; + exiDoc->DC_EVSEChargeParameter_isUsed = 0u; + exiDoc->EVSEStatus_isUsed = 0u; + exiDoc->TimeInterval_isUsed = 0u; + exiDoc->EVPowerDeliveryParameter_isUsed = 0u; + exiDoc->EVSEChargeParameter_isUsed = 0u; + exiDoc->AC_EVSEStatus_isUsed = 0u; + exiDoc->Entry_isUsed = 0u; + exiDoc->AC_EVSEChargeParameter_isUsed = 0u; + exiDoc->PMaxScheduleEntry_isUsed = 0u; + exiDoc->EVChargeParameter_isUsed = 0u; + exiDoc->ServiceDiscoveryReq_isUsed = 0u; + exiDoc->ServiceDiscoveryRes_isUsed = 0u; + exiDoc->MeteringReceiptReq_isUsed = 0u; + exiDoc->PaymentDetailsReq_isUsed = 0u; + exiDoc->MeteringReceiptRes_isUsed = 0u; + exiDoc->PaymentDetailsRes_isUsed = 0u; + exiDoc->SessionSetupReq_isUsed = 0u; + exiDoc->SessionSetupRes_isUsed = 0u; + exiDoc->CableCheckReq_isUsed = 0u; + exiDoc->CableCheckRes_isUsed = 0u; + exiDoc->ContractAuthenticationReq_isUsed = 0u; + exiDoc->CertificateInstallationReq_isUsed = 0u; + exiDoc->ContractAuthenticationRes_isUsed = 0u; + exiDoc->CertificateInstallationRes_isUsed = 0u; + exiDoc->WeldingDetectionReq_isUsed = 0u; + exiDoc->WeldingDetectionRes_isUsed = 0u; + exiDoc->CertificateUpdateReq_isUsed = 0u; + exiDoc->CertificateUpdateRes_isUsed = 0u; + exiDoc->PowerDeliveryReq_isUsed = 0u; + exiDoc->PowerDeliveryRes_isUsed = 0u; + exiDoc->ChargingStatusReq_isUsed = 0u; + exiDoc->ChargingStatusRes_isUsed = 0u; + exiDoc->CurrentDemandReq_isUsed = 0u; + exiDoc->PreChargeReq_isUsed = 0u; + exiDoc->CurrentDemandRes_isUsed = 0u; + exiDoc->PreChargeRes_isUsed = 0u; + exiDoc->ServicePaymentSelectionReq_isUsed = 0u; + exiDoc->SessionStopReq_isUsed = 0u; + exiDoc->ServicePaymentSelectionRes_isUsed = 0u; + exiDoc->SessionStopRes_isUsed = 0u; + exiDoc->ChargeParameterDiscoveryReq_isUsed = 0u; + exiDoc->ChargeParameterDiscoveryRes_isUsed = 0u; + exiDoc->ServiceDetailReq_isUsed = 0u; + exiDoc->ServiceDetailRes_isUsed = 0u; +} + + +#if DEPLOY_DIN_CODEC_FRAGMENT == SUPPORT_YES +void init_dinEXIFragment(struct dinEXIFragment* exiFrag) { + exiFrag->Unit_isUsed = 0u; + exiFrag->EVSEMaximumCurrentLimit_isUsed = 0u; + exiFrag->EVPowerDeliveryParameter_isUsed = 0u; + exiFrag->ChargingProfileEntryMaxPower_isUsed = 0u; + exiFrag->TMeter_isUsed = 0u; + exiFrag->EVSEPowerLimitAchieved_isUsed = 0u; + exiFrag->duration_isUsed = 0u; + exiFrag->EVMaximumCurrentLimit_isUsed = 0u; + exiFrag->Parameter_isUsed = 0u; + exiFrag->EVSEProcessing_isUsed = 0u; + exiFrag->AC_EVChargeParameter_isUsed = 0u; + exiFrag->EVSEProcessing_isUsed = 0u; + exiFrag->PMaxScheduleEntry_isUsed = 0u; + exiFrag->EVSEProcessing_isUsed = 0u; + exiFrag->EVSEMaximumVoltageLimit_isUsed = 0u; + exiFrag->SelectedService_isUsed = 0u; + exiFrag->Certificate_isUsed = 0u; + exiFrag->Certificate_isUsed = 0u; + exiFrag->EVSEMaximumPowerLimit_isUsed = 0u; + exiFrag->EVReady_isUsed = 0u; + exiFrag->X509SerialNumber_isUsed = 0u; + exiFrag->RetrievalMethod_isUsed = 0u; + exiFrag->RetryCounter_isUsed = 0u; + exiFrag->DC_EVSEStatus_isUsed = 0u; + exiFrag->DC_EVSEStatus_isUsed = 0u; + exiFrag->DC_EVSEStatus_isUsed = 0u; + exiFrag->DC_EVSEStatus_isUsed = 0u; + exiFrag->MeteringReceiptReq_isUsed = 0u; + exiFrag->ReadyToChargeState_isUsed = 0u; + exiFrag->Multiplier_isUsed = 0u; + exiFrag->EPriceLevel_isUsed = 0u; + exiFrag->stringValue_isUsed = 0u; + exiFrag->ServiceDiscoveryReq_isUsed = 0u; + exiFrag->Transforms_isUsed = 0u; + exiFrag->MeteringReceiptRes_isUsed = 0u; + exiFrag->PreChargeReq_isUsed = 0u; + exiFrag->OEMProvisioningCert_isUsed = 0u; + exiFrag->ServiceDiscoveryRes_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ResponseCode_isUsed = 0u; + exiFrag->ContractAuthenticationReq_isUsed = 0u; + exiFrag->ContractSignatureCertChain_isUsed = 0u; + exiFrag->ContractSignatureCertChain_isUsed = 0u; + exiFrag->ContractSignatureCertChain_isUsed = 0u; + exiFrag->ContractSignatureCertChain_isUsed = 0u; + exiFrag->ContractAuthenticationRes_isUsed = 0u; + exiFrag->HMACOutputLength_isUsed = 0u; + exiFrag->BulkChargingComplete_isUsed = 0u; + exiFrag->Exponent_isUsed = 0u; + exiFrag->DC_EVStatus_isUsed = 0u; + exiFrag->SAScheduleTuple_isUsed = 0u; + exiFrag->DC_EVStatus_isUsed = 0u; + exiFrag->DC_EVStatus_isUsed = 0u; + exiFrag->DepartureTime_isUsed = 0u; + exiFrag->X509IssuerSerial_isUsed = 0u; + exiFrag->SAScheduleTupleID_isUsed = 0u; + exiFrag->SAScheduleTupleID_isUsed = 0u; + exiFrag->SPKIData_isUsed = 0u; + exiFrag->RelativeTimeInterval_isUsed = 0u; + exiFrag->EVEnergyRequest_isUsed = 0u; + exiFrag->PreChargeRes_isUsed = 0u; + exiFrag->SessionID_isUsed = 0u; + exiFrag->PMaxSchedule_isUsed = 0u; + exiFrag->ServiceCharge_isUsed = 0u; + exiFrag->PgenCounter_isUsed = 0u; + exiFrag->ChargingStatusReq_isUsed = 0u; + exiFrag->X509Data_isUsed = 0u; + exiFrag->SalesTariffEntry_isUsed = 0u; + exiFrag->KeyValue_isUsed = 0u; + exiFrag->ChargingStatusRes_isUsed = 0u; + exiFrag->V2G_Message_isUsed = 0u; + exiFrag->DC_EVStatus_isUsed = 0u; + exiFrag->DC_EVStatus_isUsed = 0u; + exiFrag->DC_EVStatus_isUsed = 0u; + exiFrag->ServicePaymentSelectionReq_isUsed = 0u; + exiFrag->DC_EVStatus_isUsed = 0u; + exiFrag->EVSEIsolationStatus_isUsed = 0u; + exiFrag->ServicePaymentSelectionRes_isUsed = 0u; + exiFrag->EVSEPresentVoltage_isUsed = 0u; + exiFrag->EVSEPresentVoltage_isUsed = 0u; + exiFrag->EVSEPresentVoltage_isUsed = 0u; + exiFrag->BodyElement_isUsed = 0u; + exiFrag->EVCCID_isUsed = 0u; + exiFrag->PGPData_isUsed = 0u; + exiFrag->RootCertificateID_isUsed = 0u; + exiFrag->FaultCode_isUsed = 0u; + exiFrag->CableCheckReq_isUsed = 0u; + exiFrag->EVSEVoltageLimitAchieved_isUsed = 0u; + exiFrag->EVRESSConditioning_isUsed = 0u; + exiFrag->MeterInfo_isUsed = 0u; + exiFrag->MeterInfo_isUsed = 0u; + exiFrag->CableCheckRes_isUsed = 0u; + exiFrag->ChargingProfileEntryStart_isUsed = 0u; + exiFrag->SignatureProperty_isUsed = 0u; + exiFrag->EVMaxCurrent_isUsed = 0u; + exiFrag->PGPKeyPacket_isUsed = 0u; + exiFrag->PGPKeyPacket_isUsed = 0u; + exiFrag->Seed_isUsed = 0u; + exiFrag->RSAKeyValue_isUsed = 0u; + exiFrag->costKind_isUsed = 0u; + exiFrag->EAmount_isUsed = 0u; + exiFrag->EVSEPresentCurrent_isUsed = 0u; + exiFrag->PowerDeliveryRes_isUsed = 0u; + exiFrag->NumEPriceLevels_isUsed = 0u; + exiFrag->SessionStopRes_isUsed = 0u; + exiFrag->PowerDeliveryReq_isUsed = 0u; + exiFrag->SessionStopReq_isUsed = 0u; + exiFrag->XPath_isUsed = 0u; + exiFrag->BulkSOC_isUsed = 0u; + exiFrag->PMax_isUsed = 0u; + exiFrag->ParameterSetID_isUsed = 0u; + exiFrag->ParameterSetID_isUsed = 0u; + exiFrag->ContractID_isUsed = 0u; + exiFrag->ContractID_isUsed = 0u; + exiFrag->ContractID_isUsed = 0u; + exiFrag->ContractID_isUsed = 0u; + exiFrag->Signature_isUsed = 0u; + exiFrag->EVMaxVoltage_isUsed = 0u; + exiFrag->ReceiptRequired_isUsed = 0u; + exiFrag->ChargingComplete_isUsed = 0u; + exiFrag->ChargingProfile_isUsed = 0u; + exiFrag->PaymentOptions_isUsed = 0u; + exiFrag->SessionSetupRes_isUsed = 0u; + exiFrag->EVSEMaximumVoltageLimit_isUsed = 0u; + exiFrag->ServiceDetailRes_isUsed = 0u; + exiFrag->DC_EVPowerDeliveryParameter_isUsed = 0u; + exiFrag->PaymentDetailsRes_isUsed = 0u; + exiFrag->PaymentDetailsReq_isUsed = 0u; + exiFrag->MgmtData_isUsed = 0u; + exiFrag->Value_isUsed = 0u; + exiFrag->EVSENotification_isUsed = 0u; + exiFrag->EVSENotification_isUsed = 0u; + exiFrag->EVSEMaximumPowerLimit_isUsed = 0u; + exiFrag->EVTargetCurrent_isUsed = 0u; + exiFrag->RemainingTimeToBulkSoC_isUsed = 0u; + exiFrag->EVTargetCurrent_isUsed = 0u; + exiFrag->SessionSetupReq_isUsed = 0u; + exiFrag->EVSECurrentLimitAchieved_isUsed = 0u; + exiFrag->ServiceDetailReq_isUsed = 0u; + exiFrag->byteValue_isUsed = 0u; + exiFrag->EVMaximumPowerLimit_isUsed = 0u; + exiFrag->PowerSwitchClosed_isUsed = 0u; + exiFrag->Manifest_isUsed = 0u; + exiFrag->P_isUsed = 0u; + exiFrag->SAScheduleList_isUsed = 0u; + exiFrag->Q_isUsed = 0u; + exiFrag->X509SubjectName_isUsed = 0u; + exiFrag->G_isUsed = 0u; + exiFrag->SessionID_isUsed = 0u; + exiFrag->J_isUsed = 0u; + exiFrag->CertificateInstallationRes_isUsed = 0u; + exiFrag->CertificateInstallationReq_isUsed = 0u; + exiFrag->SalesTariff_isUsed = 0u; + exiFrag->Header_isUsed = 0u; + exiFrag->EVSEMinimumCurrentLimit_isUsed = 0u; + exiFrag->X509CRL_isUsed = 0u; + exiFrag->EVMaximumCurrentLimit_isUsed = 0u; + exiFrag->Y_isUsed = 0u; + exiFrag->DigestValue_isUsed = 0u; + exiFrag->DC_EVChargeParameter_isUsed = 0u; + exiFrag->ContractSignatureEncryptedPrivateKey_isUsed = 0u; + exiFrag->ContractSignatureEncryptedPrivateKey_isUsed = 0u; + exiFrag->DigestMethod_isUsed = 0u; + exiFrag->SPKISexp_isUsed = 0u; + exiFrag->ChargeService_isUsed = 0u; + exiFrag->EVSEEnergyToBeDelivered_isUsed = 0u; + exiFrag->SignatureProperties_isUsed = 0u; + exiFrag->EVSEMaxCurrent_isUsed = 0u; + exiFrag->EVMaximumPowerLimit_isUsed = 0u; + exiFrag->EVSEStatus_isUsed = 0u; + exiFrag->Service_isUsed = 0u; + exiFrag->DHParams_isUsed = 0u; + exiFrag->DHParams_isUsed = 0u; + exiFrag->DHParams_isUsed = 0u; + exiFrag->DHParams_isUsed = 0u; + exiFrag->PGPKeyID_isUsed = 0u; + exiFrag->DSAKeyValue_isUsed = 0u; + exiFrag->EnergyTransferType_isUsed = 0u; + exiFrag->WeldingDetectionRes_isUsed = 0u; + exiFrag->FreeService_isUsed = 0u; + exiFrag->SelectedServiceList_isUsed = 0u; + exiFrag->WeldingDetectionReq_isUsed = 0u; + exiFrag->EVTargetVoltage_isUsed = 0u; + exiFrag->EVTargetVoltage_isUsed = 0u; + exiFrag->CanonicalizationMethod_isUsed = 0u; + exiFrag->X509Certificate_isUsed = 0u; + exiFrag->CertificateUpdateRes_isUsed = 0u; + exiFrag->CertificateUpdateReq_isUsed = 0u; + exiFrag->EVSEMaxVoltage_isUsed = 0u; + exiFrag->SignedInfo_isUsed = 0u; + exiFrag->AC_EVSEChargeParameter_isUsed = 0u; + exiFrag->EVEnergyCapacity_isUsed = 0u; + exiFrag->ServiceID_isUsed = 0u; + exiFrag->ServiceID_isUsed = 0u; + exiFrag->EVSECurrentRegulationTolerance_isUsed = 0u; + exiFrag->ServiceParameterList_isUsed = 0u; + exiFrag->ListOfRootCertificateIDs_isUsed = 0u; + exiFrag->ListOfRootCertificateIDs_isUsed = 0u; + exiFrag->ProfileEntry_isUsed = 0u; + exiFrag->EVSEMinimumVoltageLimit_isUsed = 0u; + exiFrag->CurrentDemandRes_isUsed = 0u; + exiFrag->EVRESSSOC_isUsed = 0u; + exiFrag->MeterReading_isUsed = 0u; + exiFrag->CurrentDemandReq_isUsed = 0u; + exiFrag->physicalValue_isUsed = 0u; + exiFrag->ChargingComplete_isUsed = 0u; + exiFrag->TimeInterval_isUsed = 0u; + exiFrag->AC_EVSEStatus_isUsed = 0u; + exiFrag->AC_EVSEStatus_isUsed = 0u; + exiFrag->EVMaximumVoltageLimit_isUsed = 0u; + exiFrag->SignatureValue_isUsed = 0u; + exiFrag->DateTimeNow_isUsed = 0u; + exiFrag->DateTimeNow_isUsed = 0u; + exiFrag->ServiceTag_isUsed = 0u; + exiFrag->intValue_isUsed = 0u; + exiFrag->SelectedPaymentOption_isUsed = 0u; + exiFrag->ServiceName_isUsed = 0u; + exiFrag->EVCabinConditioning_isUsed = 0u; + exiFrag->EVSEID_isUsed = 0u; + exiFrag->ServiceScope_isUsed = 0u; + exiFrag->EVSEID_isUsed = 0u; + exiFrag->MeterStatus_isUsed = 0u; + exiFrag->EVRequestedEnergyTransferType_isUsed = 0u; + exiFrag->ServiceCategory_isUsed = 0u; + exiFrag->GenChallenge_isUsed = 0u; + exiFrag->GenChallenge_isUsed = 0u; + exiFrag->SalesTariffDescription_isUsed = 0u; + exiFrag->NotificationMaxDelay_isUsed = 0u; + exiFrag->NotificationMaxDelay_isUsed = 0u; + exiFrag->boolValue_isUsed = 0u; + exiFrag->EVSEStatusCode_isUsed = 0u; + exiFrag->ServiceScope_isUsed = 0u; + exiFrag->FaultMsg_isUsed = 0u; + exiFrag->SAScheduleTupleID_isUsed = 0u; + exiFrag->SAScheduleTupleID_isUsed = 0u; + exiFrag->BulkChargingComplete_isUsed = 0u; + exiFrag->KeyName_isUsed = 0u; + exiFrag->ParameterSet_isUsed = 0u; + exiFrag->SigMeterReading_isUsed = 0u; + exiFrag->EVSEChargeParameter_isUsed = 0u; + exiFrag->Body_isUsed = 0u; + exiFrag->SASchedules_isUsed = 0u; + exiFrag->ServiceCategory_isUsed = 0u; + exiFrag->KeyInfo_isUsed = 0u; + exiFrag->PMaxScheduleID_isUsed = 0u; + exiFrag->RemainingTimeToFullSoC_isUsed = 0u; + exiFrag->EVStatus_isUsed = 0u; + exiFrag->SubCertificates_isUsed = 0u; + exiFrag->PaymentOption_isUsed = 0u; + exiFrag->X509SKI_isUsed = 0u; + exiFrag->EVMaximumVoltageLimit_isUsed = 0u; + exiFrag->ServiceList_isUsed = 0u; + exiFrag->Cost_isUsed = 0u; + exiFrag->AC_EVSEStatus_isUsed = 0u; + exiFrag->AC_EVSEStatus_isUsed = 0u; + exiFrag->SignatureMethod_isUsed = 0u; + exiFrag->EVSEMinCurrent_isUsed = 0u; + exiFrag->ConsumptionCost_isUsed = 0u; + exiFrag->EVSEPeakCurrentRipple_isUsed = 0u; + exiFrag->EVErrorCode_isUsed = 0u; + exiFrag->EVChargeParameter_isUsed = 0u; + exiFrag->start_isUsed = 0u; + exiFrag->X509IssuerName_isUsed = 0u; + exiFrag->Reference_isUsed = 0u; + exiFrag->EVMinCurrent_isUsed = 0u; + exiFrag->FullSOC_isUsed = 0u; + exiFrag->amount_isUsed = 0u; + exiFrag->DC_EVSEStatus_isUsed = 0u; + exiFrag->DC_EVSEStatus_isUsed = 0u; + exiFrag->shortValue_isUsed = 0u; + exiFrag->DC_EVSEChargeParameter_isUsed = 0u; + exiFrag->Entry_isUsed = 0u; + exiFrag->ServiceID_isUsed = 0u; + exiFrag->ServiceID_isUsed = 0u; + exiFrag->SalesTariffID_isUsed = 0u; + exiFrag->MeterID_isUsed = 0u; + exiFrag->EVSEMaximumCurrentLimit_isUsed = 0u; + exiFrag->ChargeParameterDiscoveryReq_isUsed = 0u; + exiFrag->amountMultiplier_isUsed = 0u; + exiFrag->ChargeParameterDiscoveryRes_isUsed = 0u; + exiFrag->Transform_isUsed = 0u; + exiFrag->Object_isUsed = 0u; + exiFrag->RCD_isUsed = 0u; + exiFrag->Notification_isUsed = 0u; + exiFrag->startValue_isUsed = 0u; + exiFrag->Modulus_isUsed = 0u; + exiFrag->EVSEMaxCurrent_isUsed = 0u; +} +#endif /* DEPLOY_DIN_CODEC_FRAGMENT */ + +void init_dinMeteringReceiptReqType(struct dinMeteringReceiptReqType* dinMeteringReceiptReqType) { + dinMeteringReceiptReqType->Id_isUsed = 0u; + dinMeteringReceiptReqType->SAScheduleTupleID_isUsed = 0u; +} + +void init_dinBodyType(struct dinBodyType* dinBodyType) { + dinBodyType->BodyElement_isUsed = 0u; + dinBodyType->SessionSetupReq_isUsed = 0u; + dinBodyType->SessionSetupRes_isUsed = 0u; + dinBodyType->ServiceDiscoveryReq_isUsed = 0u; + dinBodyType->ServiceDiscoveryRes_isUsed = 0u; + dinBodyType->ServiceDetailReq_isUsed = 0u; + dinBodyType->ServiceDetailRes_isUsed = 0u; + dinBodyType->ServicePaymentSelectionReq_isUsed = 0u; + dinBodyType->ServicePaymentSelectionRes_isUsed = 0u; + dinBodyType->PaymentDetailsReq_isUsed = 0u; + dinBodyType->PaymentDetailsRes_isUsed = 0u; + dinBodyType->ContractAuthenticationReq_isUsed = 0u; + dinBodyType->ContractAuthenticationRes_isUsed = 0u; + dinBodyType->ChargeParameterDiscoveryReq_isUsed = 0u; + dinBodyType->ChargeParameterDiscoveryRes_isUsed = 0u; + dinBodyType->PowerDeliveryReq_isUsed = 0u; + dinBodyType->PowerDeliveryRes_isUsed = 0u; + dinBodyType->ChargingStatusReq_isUsed = 0u; + dinBodyType->ChargingStatusRes_isUsed = 0u; + dinBodyType->MeteringReceiptReq_isUsed = 0u; + dinBodyType->MeteringReceiptRes_isUsed = 0u; + dinBodyType->SessionStopReq_isUsed = 0u; + dinBodyType->SessionStopRes_isUsed = 0u; + dinBodyType->CertificateUpdateReq_isUsed = 0u; + dinBodyType->CertificateUpdateRes_isUsed = 0u; + dinBodyType->CertificateInstallationReq_isUsed = 0u; + dinBodyType->CertificateInstallationRes_isUsed = 0u; + dinBodyType->CableCheckReq_isUsed = 0u; + dinBodyType->CableCheckRes_isUsed = 0u; + dinBodyType->PreChargeReq_isUsed = 0u; + dinBodyType->PreChargeRes_isUsed = 0u; + dinBodyType->CurrentDemandReq_isUsed = 0u; + dinBodyType->CurrentDemandRes_isUsed = 0u; + dinBodyType->WeldingDetectionReq_isUsed = 0u; + dinBodyType->WeldingDetectionRes_isUsed = 0u; +} + +void init_dinSessionSetupReqType(struct dinSessionSetupReqType* dinSessionSetupReqType) { + (void)dinSessionSetupReqType; /* avoid unused warning */ +} + +void init_dinPowerDeliveryResType(struct dinPowerDeliveryResType* dinPowerDeliveryResType) { + dinPowerDeliveryResType->EVSEStatus_isUsed = 0u; + dinPowerDeliveryResType->AC_EVSEStatus_isUsed = 0u; + dinPowerDeliveryResType->DC_EVSEStatus_isUsed = 0u; +} + +void init_dinServiceDetailResType(struct dinServiceDetailResType* dinServiceDetailResType) { + dinServiceDetailResType->ServiceParameterList_isUsed = 0u; +} + +void init_dinWeldingDetectionResType(struct dinWeldingDetectionResType* dinWeldingDetectionResType) { + (void)dinWeldingDetectionResType; /* avoid unused warning */ +} + +void init_dinContractAuthenticationResType(struct dinContractAuthenticationResType* dinContractAuthenticationResType) { + (void)dinContractAuthenticationResType; /* avoid unused warning */ +} + +void init_dinCanonicalizationMethodType(struct dinCanonicalizationMethodType* dinCanonicalizationMethodType) { + dinCanonicalizationMethodType->ANY_isUsed = 0u; +} + +void init_dinSPKIDataType(struct dinSPKIDataType* dinSPKIDataType) { + dinSPKIDataType->SPKISexp.arrayLen = 0u; + dinSPKIDataType->ANY_isUsed = 0u; +} + +void init_dinListOfRootCertificateIDsType(struct dinListOfRootCertificateIDsType* dinListOfRootCertificateIDsType) { + dinListOfRootCertificateIDsType->RootCertificateID.arrayLen = 0u; +} + +void init_dinSelectedServiceListType(struct dinSelectedServiceListType* dinSelectedServiceListType) { + dinSelectedServiceListType->SelectedService.arrayLen = 0u; +} + +void init_dinCurrentDemandResType(struct dinCurrentDemandResType* dinCurrentDemandResType) { + dinCurrentDemandResType->EVSEMaximumVoltageLimit_isUsed = 0u; + dinCurrentDemandResType->EVSEMaximumCurrentLimit_isUsed = 0u; + dinCurrentDemandResType->EVSEMaximumPowerLimit_isUsed = 0u; +} + +void init_dinTransformType(struct dinTransformType* dinTransformType) { + dinTransformType->ANY_isUsed = 0u; + dinTransformType->XPath.arrayLen = 0u; +} + +void init_dinAC_EVChargeParameterType(struct dinAC_EVChargeParameterType* dinAC_EVChargeParameterType) { + (void)dinAC_EVChargeParameterType; /* avoid unused warning */ +} + +void init_dinX509DataType(struct dinX509DataType* dinX509DataType) { + dinX509DataType->X509IssuerSerial.arrayLen = 0u; + dinX509DataType->X509SKI.arrayLen = 0u; + dinX509DataType->X509SubjectName.arrayLen = 0u; + dinX509DataType->X509Certificate.arrayLen = 0u; + dinX509DataType->X509CRL.arrayLen = 0u; + dinX509DataType->ANY_isUsed = 0u; +} + +void init_dinChargingStatusResType(struct dinChargingStatusResType* dinChargingStatusResType) { + dinChargingStatusResType->EVSEMaxCurrent_isUsed = 0u; + dinChargingStatusResType->MeterInfo_isUsed = 0u; +} + +void init_dinWeldingDetectionReqType(struct dinWeldingDetectionReqType* dinWeldingDetectionReqType) { + (void)dinWeldingDetectionReqType; /* avoid unused warning */ +} + +void init_dinSignaturePropertiesType(struct dinSignaturePropertiesType* dinSignaturePropertiesType) { + dinSignaturePropertiesType->Id_isUsed = 0u; + dinSignaturePropertiesType->SignatureProperty.arrayLen = 0u; +} + +void init_dinContractAuthenticationReqType(struct dinContractAuthenticationReqType* dinContractAuthenticationReqType) { + dinContractAuthenticationReqType->Id_isUsed = 0u; + dinContractAuthenticationReqType->GenChallenge_isUsed = 0u; +} + +void init_dinDC_EVPowerDeliveryParameterType(struct dinDC_EVPowerDeliveryParameterType* dinDC_EVPowerDeliveryParameterType) { + dinDC_EVPowerDeliveryParameterType->BulkChargingComplete_isUsed = 0u; +} + +void init_dinEVSEChargeParameterType(struct dinEVSEChargeParameterType* dinEVSEChargeParameterType) { + (void)dinEVSEChargeParameterType; /* avoid unused warning */ +} + +void init_dinCableCheckReqType(struct dinCableCheckReqType* dinCableCheckReqType) { + (void)dinCableCheckReqType; /* avoid unused warning */ +} + +void init_dinDC_EVChargeParameterType(struct dinDC_EVChargeParameterType* dinDC_EVChargeParameterType) { + dinDC_EVChargeParameterType->EVMaximumPowerLimit_isUsed = 0u; + dinDC_EVChargeParameterType->EVEnergyCapacity_isUsed = 0u; + dinDC_EVChargeParameterType->EVEnergyRequest_isUsed = 0u; + dinDC_EVChargeParameterType->FullSOC_isUsed = 0u; + dinDC_EVChargeParameterType->BulkSOC_isUsed = 0u; +} + +void init_dinSAScheduleListType(struct dinSAScheduleListType* dinSAScheduleListType) { + dinSAScheduleListType->SAScheduleTuple.arrayLen = 0u; +} + +void init_dinPMaxScheduleType(struct dinPMaxScheduleType* dinPMaxScheduleType) { + dinPMaxScheduleType->PMaxScheduleEntry.arrayLen = 0u; +} + +void init_dinServicePaymentSelectionReqType(struct dinServicePaymentSelectionReqType* dinServicePaymentSelectionReqType) { + (void)dinServicePaymentSelectionReqType; /* avoid unused warning */ +} + +void init_dinRelativeTimeIntervalType(struct dinRelativeTimeIntervalType* dinRelativeTimeIntervalType) { + dinRelativeTimeIntervalType->duration_isUsed = 0u; +} + +void init_dinEVStatusType(struct dinEVStatusType* dinEVStatusType) { + (void)dinEVStatusType; /* avoid unused warning */ +} + +void init_dinPreChargeResType(struct dinPreChargeResType* dinPreChargeResType) { + (void)dinPreChargeResType; /* avoid unused warning */ +} + +void init_dinDC_EVSEChargeParameterType(struct dinDC_EVSEChargeParameterType* dinDC_EVSEChargeParameterType) { + dinDC_EVSEChargeParameterType->EVSEMaximumPowerLimit_isUsed = 0u; + dinDC_EVSEChargeParameterType->EVSECurrentRegulationTolerance_isUsed = 0u; + dinDC_EVSEChargeParameterType->EVSEEnergyToBeDelivered_isUsed = 0u; +} + +void init_dinPaymentDetailsResType(struct dinPaymentDetailsResType* dinPaymentDetailsResType) { + (void)dinPaymentDetailsResType; /* avoid unused warning */ +} + +void init_dinDSAKeyValueType(struct dinDSAKeyValueType* dinDSAKeyValueType) { + dinDSAKeyValueType->P_isUsed = 0u; + dinDSAKeyValueType->Q_isUsed = 0u; + dinDSAKeyValueType->G_isUsed = 0u; + dinDSAKeyValueType->J_isUsed = 0u; + dinDSAKeyValueType->Seed_isUsed = 0u; + dinDSAKeyValueType->PgenCounter_isUsed = 0u; +} + +void init_dinSASchedulesType(struct dinSASchedulesType* dinSASchedulesType) { + (void)dinSASchedulesType; /* avoid unused warning */ +} + +void init_dinCertificateUpdateResType(struct dinCertificateUpdateResType* dinCertificateUpdateResType) { + (void)dinCertificateUpdateResType; /* avoid unused warning */ +} + +void init_dinEVChargeParameterType(struct dinEVChargeParameterType* dinEVChargeParameterType) { + (void)dinEVChargeParameterType; /* avoid unused warning */ +} + +void init_dinMessageHeaderType(struct dinMessageHeaderType* dinMessageHeaderType) { + dinMessageHeaderType->Notification_isUsed = 0u; + dinMessageHeaderType->Signature_isUsed = 0u; +} + +void init_dinBodyBaseType(struct dinBodyBaseType* dinBodyBaseType) { + (void)dinBodyBaseType; /* avoid unused warning */ +} + +void init_dinKeyValueType(struct dinKeyValueType* dinKeyValueType) { + dinKeyValueType->DSAKeyValue_isUsed = 0u; + dinKeyValueType->RSAKeyValue_isUsed = 0u; + dinKeyValueType->ANY_isUsed = 0u; +} + +void init_dinIntervalType(struct dinIntervalType* dinIntervalType) { + (void)dinIntervalType; /* avoid unused warning */ +} + +void init_dinChargeParameterDiscoveryResType(struct dinChargeParameterDiscoveryResType* dinChargeParameterDiscoveryResType) { + dinChargeParameterDiscoveryResType->SASchedules_isUsed = 0u; + dinChargeParameterDiscoveryResType->SAScheduleList_isUsed = 0u; + dinChargeParameterDiscoveryResType->EVSEChargeParameter_isUsed = 0u; + dinChargeParameterDiscoveryResType->AC_EVSEChargeParameter_isUsed = 0u; + dinChargeParameterDiscoveryResType->DC_EVSEChargeParameter_isUsed = 0u; +} + +void init_dinPowerDeliveryReqType(struct dinPowerDeliveryReqType* dinPowerDeliveryReqType) { + dinPowerDeliveryReqType->ChargingProfile_isUsed = 0u; + dinPowerDeliveryReqType->EVPowerDeliveryParameter_isUsed = 0u; + dinPowerDeliveryReqType->DC_EVPowerDeliveryParameter_isUsed = 0u; +} + +void init_dinCertificateChainType(struct dinCertificateChainType* dinCertificateChainType) { + dinCertificateChainType->SubCertificates_isUsed = 0u; +} + +void init_dinTransformsType(struct dinTransformsType* dinTransformsType) { + dinTransformsType->Transform.arrayLen = 0u; +} + +void init_dinEntryType(struct dinEntryType* dinEntryType) { + dinEntryType->TimeInterval_isUsed = 0u; + dinEntryType->RelativeTimeInterval_isUsed = 0u; +} + +void init_dinSessionStopType(struct dinSessionStopType* dinSessionStopType) { + (void)dinSessionStopType; /* avoid unused warning */ +} + +void init_dinServiceDetailReqType(struct dinServiceDetailReqType* dinServiceDetailReqType) { + (void)dinServiceDetailReqType; /* avoid unused warning */ +} + +void init_dinDigestMethodType(struct dinDigestMethodType* dinDigestMethodType) { + dinDigestMethodType->ANY_isUsed = 0u; +} + +void init_dinParameterType(struct dinParameterType* dinParameterType) { + dinParameterType->boolValue_isUsed = 0u; + dinParameterType->byteValue_isUsed = 0u; + dinParameterType->shortValue_isUsed = 0u; + dinParameterType->intValue_isUsed = 0u; + dinParameterType->physicalValue_isUsed = 0u; + dinParameterType->stringValue_isUsed = 0u; +} + +void init_dinChargingStatusReqType(struct dinChargingStatusReqType* dinChargingStatusReqType) { + (void)dinChargingStatusReqType; /* avoid unused warning */ +} + +void init_dinSignatureMethodType(struct dinSignatureMethodType* dinSignatureMethodType) { + dinSignatureMethodType->HMACOutputLength_isUsed = 0u; + dinSignatureMethodType->ANY_isUsed = 0u; +} + +void init_dinCertificateInstallationReqType(struct dinCertificateInstallationReqType* dinCertificateInstallationReqType) { + dinCertificateInstallationReqType->Id_isUsed = 0u; +} + +void init_dinSalesTariffEntryType(struct dinSalesTariffEntryType* dinSalesTariffEntryType) { + dinSalesTariffEntryType->TimeInterval_isUsed = 0u; + dinSalesTariffEntryType->RelativeTimeInterval_isUsed = 0u; + dinSalesTariffEntryType->ConsumptionCost.arrayLen = 0u; +} + +void init_dinServiceDiscoveryResType(struct dinServiceDiscoveryResType* dinServiceDiscoveryResType) { + dinServiceDiscoveryResType->ServiceList_isUsed = 0u; +} + +void init_dinParameterSetType(struct dinParameterSetType* dinParameterSetType) { + dinParameterSetType->Parameter.arrayLen = 0u; +} + +void init_dinCurrentDemandReqType(struct dinCurrentDemandReqType* dinCurrentDemandReqType) { + dinCurrentDemandReqType->EVMaximumVoltageLimit_isUsed = 0u; + dinCurrentDemandReqType->EVMaximumCurrentLimit_isUsed = 0u; + dinCurrentDemandReqType->EVMaximumPowerLimit_isUsed = 0u; + dinCurrentDemandReqType->BulkChargingComplete_isUsed = 0u; + dinCurrentDemandReqType->RemainingTimeToFullSoC_isUsed = 0u; + dinCurrentDemandReqType->RemainingTimeToBulkSoC_isUsed = 0u; +} + +void init_dinPreChargeReqType(struct dinPreChargeReqType* dinPreChargeReqType) { + (void)dinPreChargeReqType; /* avoid unused warning */ +} + +void init_dinSignatureType(struct dinSignatureType* dinSignatureType) { + dinSignatureType->Id_isUsed = 0u; + dinSignatureType->KeyInfo_isUsed = 0u; + dinSignatureType->Object.arrayLen = 0u; +} + +void init_dinReferenceType(struct dinReferenceType* dinReferenceType) { + dinReferenceType->Id_isUsed = 0u; + dinReferenceType->URI_isUsed = 0u; + dinReferenceType->Type_isUsed = 0u; + dinReferenceType->Transforms_isUsed = 0u; +} + +void init_dinProfileEntryType(struct dinProfileEntryType* dinProfileEntryType) { + (void)dinProfileEntryType; /* avoid unused warning */ +} + +void init_dinAnonType_V2G_Message(struct dinAnonType_V2G_Message* dinAnonType_V2G_Message) { + (void)dinAnonType_V2G_Message; /* avoid unused warning */ +} + +void init_dinChargeParameterDiscoveryReqType(struct dinChargeParameterDiscoveryReqType* dinChargeParameterDiscoveryReqType) { + dinChargeParameterDiscoveryReqType->EVChargeParameter_isUsed = 0u; + dinChargeParameterDiscoveryReqType->AC_EVChargeParameter_isUsed = 0u; + dinChargeParameterDiscoveryReqType->DC_EVChargeParameter_isUsed = 0u; +} + +void init_dinConsumptionCostType(struct dinConsumptionCostType* dinConsumptionCostType) { + dinConsumptionCostType->Cost.arrayLen = 0u; +} + +void init_dinRSAKeyValueType(struct dinRSAKeyValueType* dinRSAKeyValueType) { + (void)dinRSAKeyValueType; /* avoid unused warning */ +} + +void init_dinServiceType(struct dinServiceType* dinServiceType) { + (void)dinServiceType; /* avoid unused warning */ +} + +void init_dinServiceTagListType(struct dinServiceTagListType* dinServiceTagListType) { + dinServiceTagListType->Service.arrayLen = 0u; +} + +void init_dinEVSEStatusType(struct dinEVSEStatusType* dinEVSEStatusType) { + (void)dinEVSEStatusType; /* avoid unused warning */ +} + +void init_dinSessionSetupResType(struct dinSessionSetupResType* dinSessionSetupResType) { + dinSessionSetupResType->DateTimeNow_isUsed = 0u; +} + +void init_dinEVPowerDeliveryParameterType(struct dinEVPowerDeliveryParameterType* dinEVPowerDeliveryParameterType) { + (void)dinEVPowerDeliveryParameterType; /* avoid unused warning */ +} + +void init_dinX509IssuerSerialType(struct dinX509IssuerSerialType* dinX509IssuerSerialType) { + (void)dinX509IssuerSerialType; /* avoid unused warning */ +} + +void init_dinSelectedServiceType(struct dinSelectedServiceType* dinSelectedServiceType) { + dinSelectedServiceType->ParameterSetID_isUsed = 0u; +} + +void init_dinMeteringReceiptResType(struct dinMeteringReceiptResType* dinMeteringReceiptResType) { + (void)dinMeteringReceiptResType; /* avoid unused warning */ +} + +void init_dinDC_EVStatusType(struct dinDC_EVStatusType* dinDC_EVStatusType) { + dinDC_EVStatusType->EVCabinConditioning_isUsed = 0u; + dinDC_EVStatusType->EVRESSConditioning_isUsed = 0u; +} + +void init_dinPhysicalValueType(struct dinPhysicalValueType* dinPhysicalValueType) { + dinPhysicalValueType->Unit_isUsed = 0u; +} + +void init_dinManifestType(struct dinManifestType* dinManifestType) { + dinManifestType->Id_isUsed = 0u; + dinManifestType->Reference.arrayLen = 0u; +} + +void init_dinPMaxScheduleEntryType(struct dinPMaxScheduleEntryType* dinPMaxScheduleEntryType) { + dinPMaxScheduleEntryType->TimeInterval_isUsed = 0u; + dinPMaxScheduleEntryType->RelativeTimeInterval_isUsed = 0u; +} + +void init_dinServiceParameterListType(struct dinServiceParameterListType* dinServiceParameterListType) { + dinServiceParameterListType->ParameterSet.arrayLen = 0u; +} + +void init_dinSignatureValueType(struct dinSignatureValueType* dinSignatureValueType) { + dinSignatureValueType->Id_isUsed = 0u; +} + +void init_dinPaymentOptionsType(struct dinPaymentOptionsType* dinPaymentOptionsType) { + dinPaymentOptionsType->PaymentOption.arrayLen = 0u; +} + +void init_dinServiceTagType(struct dinServiceTagType* dinServiceTagType) { + dinServiceTagType->ServiceName_isUsed = 0u; + dinServiceTagType->ServiceScope_isUsed = 0u; +} + +void init_dinAC_EVSEStatusType(struct dinAC_EVSEStatusType* dinAC_EVSEStatusType) { + (void)dinAC_EVSEStatusType; /* avoid unused warning */ +} + +void init_dinCertificateUpdateReqType(struct dinCertificateUpdateReqType* dinCertificateUpdateReqType) { + dinCertificateUpdateReqType->Id_isUsed = 0u; +} + +void init_dinServicePaymentSelectionResType(struct dinServicePaymentSelectionResType* dinServicePaymentSelectionResType) { + (void)dinServicePaymentSelectionResType; /* avoid unused warning */ +} + +void init_dinSAScheduleTupleType(struct dinSAScheduleTupleType* dinSAScheduleTupleType) { + dinSAScheduleTupleType->SalesTariff_isUsed = 0u; +} + +void init_dinChargingProfileType(struct dinChargingProfileType* dinChargingProfileType) { + dinChargingProfileType->ProfileEntry.arrayLen = 0u; +} + +void init_dinServiceDiscoveryReqType(struct dinServiceDiscoveryReqType* dinServiceDiscoveryReqType) { + dinServiceDiscoveryReqType->ServiceScope_isUsed = 0u; + dinServiceDiscoveryReqType->ServiceCategory_isUsed = 0u; +} + +void init_dinAC_EVSEChargeParameterType(struct dinAC_EVSEChargeParameterType* dinAC_EVSEChargeParameterType) { + (void)dinAC_EVSEChargeParameterType; /* avoid unused warning */ +} + +void init_dinKeyInfoType(struct dinKeyInfoType* dinKeyInfoType) { + dinKeyInfoType->Id_isUsed = 0u; + dinKeyInfoType->KeyName.arrayLen = 0u; + dinKeyInfoType->KeyValue.arrayLen = 0u; + dinKeyInfoType->RetrievalMethod.arrayLen = 0u; + dinKeyInfoType->X509Data.arrayLen = 0u; + dinKeyInfoType->PGPData.arrayLen = 0u; + dinKeyInfoType->SPKIData.arrayLen = 0u; + dinKeyInfoType->MgmtData.arrayLen = 0u; + dinKeyInfoType->ANY_isUsed = 0u; +} + +void init_dinPaymentDetailsReqType(struct dinPaymentDetailsReqType* dinPaymentDetailsReqType) { + (void)dinPaymentDetailsReqType; /* avoid unused warning */ +} + +void init_dinCableCheckResType(struct dinCableCheckResType* dinCableCheckResType) { + (void)dinCableCheckResType; /* avoid unused warning */ +} + +void init_dinObjectType(struct dinObjectType* dinObjectType) { + dinObjectType->Id_isUsed = 0u; + dinObjectType->MimeType_isUsed = 0u; + dinObjectType->Encoding_isUsed = 0u; + dinObjectType->ANY_isUsed = 0u; +} + +void init_dinSessionStopResType(struct dinSessionStopResType* dinSessionStopResType) { + (void)dinSessionStopResType; /* avoid unused warning */ +} + +void init_dinSignedInfoType(struct dinSignedInfoType* dinSignedInfoType) { + dinSignedInfoType->Id_isUsed = 0u; + dinSignedInfoType->Reference.arrayLen = 0u; +} + +void init_dinSalesTariffType(struct dinSalesTariffType* dinSalesTariffType) { + dinSalesTariffType->SalesTariffDescription_isUsed = 0u; + dinSalesTariffType->SalesTariffEntry.arrayLen = 0u; +} + +void init_dinCostType(struct dinCostType* dinCostType) { + dinCostType->amountMultiplier_isUsed = 0u; +} + +void init_dinServiceChargeType(struct dinServiceChargeType* dinServiceChargeType) { + (void)dinServiceChargeType; /* avoid unused warning */ +} + +void init_dinDC_EVSEStatusType(struct dinDC_EVSEStatusType* dinDC_EVSEStatusType) { + dinDC_EVSEStatusType->EVSEIsolationStatus_isUsed = 0u; +} + +void init_dinRetrievalMethodType(struct dinRetrievalMethodType* dinRetrievalMethodType) { + dinRetrievalMethodType->URI_isUsed = 0u; + dinRetrievalMethodType->Type_isUsed = 0u; + dinRetrievalMethodType->Transforms_isUsed = 0u; +} + +void init_dinNotificationType(struct dinNotificationType* dinNotificationType) { + dinNotificationType->FaultMsg_isUsed = 0u; +} + +void init_dinPGPDataType(struct dinPGPDataType* dinPGPDataType) { + dinPGPDataType->PGPKeyID_isUsed = 0u; + dinPGPDataType->PGPKeyPacket_isUsed = 0u; + dinPGPDataType->ANY_isUsed = 0u; +} + +void init_dinCertificateInstallationResType(struct dinCertificateInstallationResType* dinCertificateInstallationResType) { + (void)dinCertificateInstallationResType; /* avoid unused warning */ +} + +void init_dinSignaturePropertyType(struct dinSignaturePropertyType* dinSignaturePropertyType) { + dinSignaturePropertyType->Id_isUsed = 0u; + dinSignaturePropertyType->ANY_isUsed = 0u; +} + +void init_dinMeterInfoType(struct dinMeterInfoType* dinMeterInfoType) { + dinMeterInfoType->MeterReading_isUsed = 0u; + dinMeterInfoType->SigMeterReading_isUsed = 0u; + dinMeterInfoType->MeterStatus_isUsed = 0u; + dinMeterInfoType->TMeter_isUsed = 0u; +} + +void init_dinSubCertificatesType(struct dinSubCertificatesType* dinSubCertificatesType) { + dinSubCertificatesType->Certificate.arrayLen = 0u; +} + + + +#endif /* DEPLOY_DIN_CODEC */ + +#endif + diff --git a/src/src/exi/dinEXIDatatypes.h b/src/src/exi/dinEXIDatatypes.h new file mode 100644 index 0000000..cc73807 --- /dev/null +++ b/src/src/exi/dinEXIDatatypes.h @@ -0,0 +1,2934 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file EXIDatatypes.h + * \brief Datatype definitions and structs for given XML Schema definitions and initialization methods + * + */ + +#ifndef EXI_din_DATATYPES_H +#define EXI_din_DATATYPES_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define SUPPORT_YES 1 +#define SUPPORT_NO 2 +#define DEPLOY_DIN_CODEC SUPPORT_YES +#define DEPLOY_DIN_CODEC_FRAGMENT SUPPORT_NO + +#if DEPLOY_DIN_CODEC == SUPPORT_YES + +#include + +#include "EXITypes.h" + + +/* Datatype definitions and structs for given XML Schema definitions */ + +#define UNION_YES 1 +#define UNION_NO 2 +#define SAVE_MEMORY_WITH_UNNAMED_UNION UNION_YES + +/* Note: Please find below a list of occurrence limits that have been applied */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":SPKISexp from unbounded to 1 (see #define dinSPKIDataType_SPKISexp_ARRAY_SIZE) */ +/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":RootCertificateID from unbounded to 5 (see #define dinListOfRootCertificateIDsType_RootCertificateID_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":XPath from unbounded to 1 (see #define dinTransformType_XPath_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":Transform from unbounded to 1 (see #define dinTransformsType_Transform_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":Reference from unbounded to 1 (see #define dinManifestType_Reference_ARRAY_SIZE) */ +/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":PaymentOption from unbounded to 5 (see #define dinPaymentOptionsType_PaymentOption_ARRAY_SIZE) */ +/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":ProfileEntry from unbounded to 24 (see #define dinChargingProfileType_ProfileEntry_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":Reference from unbounded to 1 (see #define dinSignedInfoType_Reference_ARRAY_SIZE) */ +/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":Certificate from unbounded to 5 (see #define dinSubCertificatesType_Certificate_ARRAY_SIZE) */ +/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":SelectedService from unbounded to 16 (see #define dinSelectedServiceListType_SelectedService_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial from unbounded to 1 (see #define dinX509DataType_X509IssuerSerial_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509SKI from unbounded to 1 (see #define dinX509DataType_X509SKI_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509SubjectName from unbounded to 1 (see #define dinX509DataType_X509SubjectName_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509Certificate from unbounded to 1 (see #define dinX509DataType_X509Certificate_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509CRL from unbounded to 1 (see #define dinX509DataType_X509CRL_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":SignatureProperty from unbounded to 1 (see #define dinSignaturePropertiesType_SignatureProperty_ARRAY_SIZE) */ +/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleEntry from unbounded to 5 (see #define dinPMaxScheduleType_PMaxScheduleEntry_ARRAY_SIZE) */ +/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":Parameter from unbounded to 16 (see #define dinParameterSetType_Parameter_ARRAY_SIZE) */ +/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":Cost from unbounded to 5 (see #define dinConsumptionCostType_Cost_ARRAY_SIZE) */ +/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":Service from unbounded to 8 (see #define dinServiceTagListType_Service_ARRAY_SIZE) */ +/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":ParameterSet from unbounded to 5 (see #define dinServiceParameterListType_ParameterSet_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":KeyName from unbounded to 1 (see #define dinKeyInfoType_KeyName_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":KeyValue from unbounded to 1 (see #define dinKeyInfoType_KeyValue_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":RetrievalMethod from unbounded to 1 (see #define dinKeyInfoType_RetrievalMethod_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":X509Data from unbounded to 1 (see #define dinKeyInfoType_X509Data_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":PGPData from unbounded to 1 (see #define dinKeyInfoType_PGPData_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":SPKIData from unbounded to 1 (see #define dinKeyInfoType_SPKIData_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":MgmtData from unbounded to 1 (see #define dinKeyInfoType_MgmtData_ARRAY_SIZE) */ +/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":ConsumptionCost from unbounded to 5 (see #define dinSalesTariffEntryType_ConsumptionCost_ARRAY_SIZE) */ +/* Limit occurrence of element "http://www.w3.org/2000/09/xmldsig#":Object from unbounded to 1 (see #define dinSignatureType_Object_ARRAY_SIZE) */ +/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":SalesTariffEntry from unbounded to 5 (see #define dinSalesTariffType_SalesTariffEntry_ARRAY_SIZE) */ +/* Limit occurrence of element "urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTuple from unbounded to 5 (see #define dinSAScheduleListType_SAScheduleTuple_ARRAY_SIZE) */ + + +typedef enum { + dinDC_EVSEStatusCodeType_EVSE_NotReady = 0, + dinDC_EVSEStatusCodeType_EVSE_Ready = 1, + dinDC_EVSEStatusCodeType_EVSE_Shutdown = 2, + dinDC_EVSEStatusCodeType_EVSE_UtilityInterruptEvent = 3, + dinDC_EVSEStatusCodeType_EVSE_IsolationMonitoringActive = 4, + dinDC_EVSEStatusCodeType_EVSE_EmergencyShutdown = 5, + dinDC_EVSEStatusCodeType_EVSE_Malfunction = 6, + dinDC_EVSEStatusCodeType_Reserved_8 = 7, + dinDC_EVSEStatusCodeType_Reserved_9 = 8, + dinDC_EVSEStatusCodeType_Reserved_A = 9, + dinDC_EVSEStatusCodeType_Reserved_B = 10, + dinDC_EVSEStatusCodeType_Reserved_C = 11 +} dinDC_EVSEStatusCodeType; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,SessionSetupReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":EVCCID)', derivedBy='EXTENSION'. */ +#define dinSessionSetupReqType_EVCCID_BYTES_SIZE 8 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,evccIDType is 8 */ +struct dinSessionSetupReqType { + /* element: "urn:iso:15118:2:2010:MsgBody":EVCCID, urn:iso:15118:2:2010:MsgDataTypes,evccIDType */ + struct { + uint8_t bytes[dinSessionSetupReqType_EVCCID_BYTES_SIZE]; + uint16_t bytesLen; + } EVCCID ; +}; + +typedef enum { + dinEVSEProcessingType_Finished = 0, + dinEVSEProcessingType_Ongoing = 1 +} dinEVSEProcessingType; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,CanonicalizationMethodType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##any]){0-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinCanonicalizationMethodType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR +#define dinCanonicalizationMethodType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR +struct dinCanonicalizationMethodType { + /* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */ + struct { + exi_string_character_t characters[dinCanonicalizationMethodType_Algorithm_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Algorithm ; + /* element: WC[##any] */ + struct { + exi_string_character_t characters[dinCanonicalizationMethodType_ANY_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ANY ; + unsigned int ANY_isUsed:1; +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SPKIDataType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":SPKISexp,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-1}){1-UNBOUNDED}', derivedBy='RESTRICTION'. */ +#define dinSPKIDataType_SPKISexp_BYTES_SIZE 350 +#define dinSPKIDataType_SPKISexp_ARRAY_SIZE 1 +#define dinSPKIDataType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR +struct dinSPKIDataType { + /* element: "http://www.w3.org/2000/09/xmldsig#":SPKISexp, http://www.w3.org/2001/XMLSchema,base64Binary */ + struct { + struct { + uint8_t bytes[dinSPKIDataType_SPKISexp_BYTES_SIZE]; + uint16_t bytesLen; + } array[dinSPKIDataType_SPKISexp_ARRAY_SIZE]; + uint16_t arrayLen; + } SPKISexp; + /* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */ + struct { + exi_string_character_t characters[dinSPKIDataType_ANY_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ANY ; + unsigned int ANY_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ListOfRootCertificateIDsType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":RootCertificateID{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinListOfRootCertificateIDsType_RootCertificateID_CHARACTERS_SIZE 40 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,rootCertificateIDType is 40 */ +#define dinListOfRootCertificateIDsType_RootCertificateID_ARRAY_SIZE 5 +struct dinListOfRootCertificateIDsType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":RootCertificateID, urn:iso:15118:2:2010:MsgDataTypes,rootCertificateIDType */ + struct { + struct { + exi_string_character_t characters[dinListOfRootCertificateIDsType_RootCertificateID_CHARACTERS_SIZE]; + uint16_t charactersLen; + } array[dinListOfRootCertificateIDsType_RootCertificateID_ARRAY_SIZE]; + uint16_t arrayLen; + } RootCertificateID; +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])|"http://www.w3.org/2000/09/xmldsig#":XPath){0-UNBOUNDED}', derivedBy='RESTRICTION'. */ +#define dinTransformType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR +#define dinTransformType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinTransformType_XPath_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinTransformType_XPath_ARRAY_SIZE 1 +struct dinTransformType { + /* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */ + struct { + exi_string_character_t characters[dinTransformType_Algorithm_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Algorithm ; + /* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */ + struct { + exi_string_character_t characters[dinTransformType_ANY_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ANY ; + unsigned int ANY_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":XPath, http://www.w3.org/2001/XMLSchema,string */ + struct { + struct { + exi_string_character_t characters[dinTransformType_XPath_CHARACTERS_SIZE]; + uint16_t charactersLen; + } array[dinTransformType_XPath_ARRAY_SIZE]; + uint16_t arrayLen; + } XPath; +}; + +typedef enum { + dinDC_EVErrorCodeType_NO_ERROR = 0, + dinDC_EVErrorCodeType_FAILED_RESSTemperatureInhibit = 1, + dinDC_EVErrorCodeType_FAILED_EVShiftPosition = 2, + dinDC_EVErrorCodeType_FAILED_ChargerConnectorLockFault = 3, + dinDC_EVErrorCodeType_FAILED_EVRESSMalfunction = 4, + dinDC_EVErrorCodeType_FAILED_ChargingCurrentdifferential = 5, + dinDC_EVErrorCodeType_FAILED_ChargingVoltageOutOfRange = 6, + dinDC_EVErrorCodeType_Reserved_A = 7, + dinDC_EVErrorCodeType_Reserved_B = 8, + dinDC_EVErrorCodeType_Reserved_C = 9, + dinDC_EVErrorCodeType_FAILED_ChargingSystemIncompatibility = 10, + dinDC_EVErrorCodeType_NoData = 11 +} dinDC_EVErrorCodeType; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ContractAuthenticationReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":GenChallenge{0-1})', derivedBy='EXTENSION'. */ +#define dinContractAuthenticationReqType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinContractAuthenticationReqType_GenChallenge_CHARACTERS_SIZE 50 + EXTRA_CHAR +struct dinContractAuthenticationReqType { + /* attribute: Id {http://www.w3.org/2001/XMLSchema,IDREF} */ + struct { + exi_string_character_t characters[dinContractAuthenticationReqType_Id_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Id ; + unsigned int Id_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgBody":GenChallenge, urn:iso:15118:2:2010:MsgDataTypes,genChallengeType */ + struct { + exi_string_character_t characters[dinContractAuthenticationReqType_GenChallenge_CHARACTERS_SIZE]; + uint16_t charactersLen; + } GenChallenge ; + unsigned int GenChallenge_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVSEChargeParameterType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +struct dinEVSEChargeParameterType { + int noContent; /* avoid warning */ +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,RelativeTimeIntervalType', base type name='IntervalType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":start,"urn:iso:15118:2:2010:MsgDataTypes":duration{0-1})', derivedBy='EXTENSION'. */ +struct dinRelativeTimeIntervalType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":start, http://www.w3.org/2001/XMLSchema,unsignedInt */ + uint32_t start ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":duration, http://www.w3.org/2001/XMLSchema,unsignedInt */ + uint32_t duration ; + unsigned int duration_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVStatusType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +struct dinEVStatusType { + int noContent; /* avoid warning */ +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,DSAKeyValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("http://www.w3.org/2000/09/xmldsig#":P,"http://www.w3.org/2000/09/xmldsig#":Q){0-1},"http://www.w3.org/2000/09/xmldsig#":G{0-1},"http://www.w3.org/2000/09/xmldsig#":Y,"http://www.w3.org/2000/09/xmldsig#":J{0-1},("http://www.w3.org/2000/09/xmldsig#":Seed,"http://www.w3.org/2000/09/xmldsig#":PgenCounter){0-1})', derivedBy='RESTRICTION'. */ +#define dinDSAKeyValueType_P_BYTES_SIZE 350 +#define dinDSAKeyValueType_Q_BYTES_SIZE 350 +#define dinDSAKeyValueType_G_BYTES_SIZE 350 +#define dinDSAKeyValueType_Y_BYTES_SIZE 350 +#define dinDSAKeyValueType_J_BYTES_SIZE 350 +#define dinDSAKeyValueType_Seed_BYTES_SIZE 350 +#define dinDSAKeyValueType_PgenCounter_BYTES_SIZE 350 +struct dinDSAKeyValueType { + /* element: "http://www.w3.org/2000/09/xmldsig#":P, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */ + struct { + uint8_t bytes[dinDSAKeyValueType_P_BYTES_SIZE]; + uint16_t bytesLen; + } P ; + unsigned int P_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":Q, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */ + struct { + uint8_t bytes[dinDSAKeyValueType_Q_BYTES_SIZE]; + uint16_t bytesLen; + } Q ; + unsigned int Q_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":G, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */ + struct { + uint8_t bytes[dinDSAKeyValueType_G_BYTES_SIZE]; + uint16_t bytesLen; + } G ; + unsigned int G_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":Y, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */ + struct { + uint8_t bytes[dinDSAKeyValueType_Y_BYTES_SIZE]; + uint16_t bytesLen; + } Y ; + /* element: "http://www.w3.org/2000/09/xmldsig#":J, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */ + struct { + uint8_t bytes[dinDSAKeyValueType_J_BYTES_SIZE]; + uint16_t bytesLen; + } J ; + unsigned int J_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":Seed, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */ + struct { + uint8_t bytes[dinDSAKeyValueType_Seed_BYTES_SIZE]; + uint16_t bytesLen; + } Seed ; + unsigned int Seed_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":PgenCounter, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */ + struct { + uint8_t bytes[dinDSAKeyValueType_PgenCounter_BYTES_SIZE]; + uint16_t bytesLen; + } PgenCounter ; + unsigned int PgenCounter_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SASchedulesType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +struct dinSASchedulesType { + int noContent; /* avoid warning */ +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVChargeParameterType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +struct dinEVChargeParameterType { + int noContent; /* avoid warning */ +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDef,BodyBaseType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +struct dinBodyBaseType { + int noContent; /* avoid warning */ +}; + +typedef enum { + dinunitSymbolType_h = 0, + dinunitSymbolType_m = 1, + dinunitSymbolType_s = 2, + dinunitSymbolType_A = 3, + dinunitSymbolType_Ah = 4, + dinunitSymbolType_V = 5, + dinunitSymbolType_VA = 6, + dinunitSymbolType_W = 7, + dinunitSymbolType_W_s = 8, + dinunitSymbolType_Wh = 9 +} dinunitSymbolType; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,IntervalType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +struct dinIntervalType { + int noContent; /* avoid warning */ +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinTransformsType_Transform_ARRAY_SIZE 1 +struct dinTransformsType { + /* element: "http://www.w3.org/2000/09/xmldsig#":Transform, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])|"http://www.w3.org/2000/09/xmldsig#":XPath){0-UNBOUNDED}', derivedBy='RESTRICTION'. */ + struct { + struct dinTransformType array[dinTransformsType_Transform_ARRAY_SIZE]; + uint16_t arrayLen; + } Transform; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EntryType', base type name='anyType', content type='ELEMENT', isAbstract='true', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":TimeInterval)', derivedBy='RESTRICTION'. */ +struct dinEntryType { + /* substitutionGroup */ +#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES + union { +#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ + /* element: "urn:iso:15118:2:2010:MsgDataTypes":TimeInterval, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,IntervalType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ + struct dinIntervalType TimeInterval ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":RelativeTimeInterval, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,RelativeTimeIntervalType', base type name='IntervalType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":start,"urn:iso:15118:2:2010:MsgDataTypes":duration{0-1})', derivedBy='EXTENSION'. */ + struct dinRelativeTimeIntervalType RelativeTimeInterval ; +#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES + }; +#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ + unsigned int TimeInterval_isUsed:1; + unsigned int RelativeTimeInterval_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,SessionStopType', base type name='BodyBaseType', content type='EMPTY', isAbstract='false', hasTypeId='false', final='0', block='0', derivedBy='EXTENSION'. */ +struct dinSessionStopType { + int noContent; /* avoid warning */ +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDetailReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ServiceID)', derivedBy='EXTENSION'. */ +struct dinServiceDetailReqType { + /* element: "urn:iso:15118:2:2010:MsgBody":ServiceID, urn:iso:15118:2:2010:MsgDataTypes,serviceIDType */ + uint16_t ServiceID ; +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,DigestMethodType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinDigestMethodType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR +#define dinDigestMethodType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR +struct dinDigestMethodType { + /* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */ + struct { + exi_string_character_t characters[dinDigestMethodType_Algorithm_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Algorithm ; + /* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */ + struct { + exi_string_character_t characters[dinDigestMethodType_ANY_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ANY ; + unsigned int ANY_isUsed:1; +}; + +typedef enum { + dinvalueType_bool = 0, + dinvalueType_byte = 1, + dinvalueType_short = 2, + dinvalueType_int = 3, + dinvalueType_physicalValue = 4, + dinvalueType_string = 5 +} dinvalueType; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ChargingStatusReqType', base type name='BodyBaseType', content type='EMPTY', isAbstract='false', hasTypeId='false', final='0', block='0', derivedBy='EXTENSION'. */ +struct dinChargingStatusReqType { + int noContent; /* avoid warning */ +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureMethodType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":HMACOutputLength{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinSignatureMethodType_Algorithm_CHARACTERS_SIZE 65 + EXTRA_CHAR +#define dinSignatureMethodType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR +struct dinSignatureMethodType { + /* attribute: Algorithm {http://www.w3.org/2001/XMLSchema,anyURI} */ + struct { + exi_string_character_t characters[dinSignatureMethodType_Algorithm_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Algorithm ; + /* element: "http://www.w3.org/2000/09/xmldsig#":HMACOutputLength, http://www.w3.org/2000/09/xmldsig#,HMACOutputLengthType */ + int64_t HMACOutputLength ; + unsigned int HMACOutputLength_isUsed:1; + /* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */ + struct { + exi_string_character_t characters[dinSignatureMethodType_ANY_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ANY ; + unsigned int ANY_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateInstallationReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":OEMProvisioningCert,"urn:iso:15118:2:2010:MsgBody":ListOfRootCertificateIDs,"urn:iso:15118:2:2010:MsgBody":DHParams)', derivedBy='EXTENSION'. */ +#define dinCertificateInstallationReqType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinCertificateInstallationReqType_OEMProvisioningCert_BYTES_SIZE 1200 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,certificateType is 1200 */ +#define dinCertificateInstallationReqType_DHParams_BYTES_SIZE 256 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,dHParamsType is 256 */ +struct dinCertificateInstallationReqType { + /* attribute: Id {http://www.w3.org/2001/XMLSchema,IDREF} */ + struct { + exi_string_character_t characters[dinCertificateInstallationReqType_Id_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Id ; + unsigned int Id_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgBody":OEMProvisioningCert, urn:iso:15118:2:2010:MsgDataTypes,certificateType */ + struct { + uint8_t bytes[dinCertificateInstallationReqType_OEMProvisioningCert_BYTES_SIZE]; + uint16_t bytesLen; + } OEMProvisioningCert ; + /* element: "urn:iso:15118:2:2010:MsgBody":ListOfRootCertificateIDs, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ListOfRootCertificateIDsType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":RootCertificateID{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinListOfRootCertificateIDsType ListOfRootCertificateIDs ; + /* element: "urn:iso:15118:2:2010:MsgBody":DHParams, urn:iso:15118:2:2010:MsgDataTypes,dHParamsType */ + struct { + uint8_t bytes[dinCertificateInstallationReqType_DHParams_BYTES_SIZE]; + uint16_t bytesLen; + } DHParams ; +}; + +typedef enum { + dinEVRequestedEnergyTransferType_AC_single_phase_core = 0, + dinEVRequestedEnergyTransferType_AC_three_phase_core = 1, + dinEVRequestedEnergyTransferType_DC_core = 2, + dinEVRequestedEnergyTransferType_DC_extended = 3, + dinEVRequestedEnergyTransferType_DC_combo_core = 4, + dinEVRequestedEnergyTransferType_DC_unique = 5 +} dinEVRequestedEnergyTransferType; + +typedef enum { + dinpaymentOptionType_Contract = 0, + dinpaymentOptionType_ExternalPayment = 1 +} dinpaymentOptionType; + +typedef enum { + dinEVSESupportedEnergyTransferType_AC_single_phase_core = 0, + dinEVSESupportedEnergyTransferType_AC_three_phase_core = 1, + dinEVSESupportedEnergyTransferType_DC_core = 2, + dinEVSESupportedEnergyTransferType_DC_extended = 3, + dinEVSESupportedEnergyTransferType_DC_combo_core = 4, + dinEVSESupportedEnergyTransferType_DC_dual = 5, + dinEVSESupportedEnergyTransferType_AC_core1p_DC_extended = 6, + dinEVSESupportedEnergyTransferType_AC_single_DC_core = 7, + dinEVSESupportedEnergyTransferType_AC_single_phase_three_phase_core_DC_extended = 8, + dinEVSESupportedEnergyTransferType_AC_core3p_DC_extended = 9 +} dinEVSESupportedEnergyTransferType; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)', derivedBy='RESTRICTION'. */ +#define dinReferenceType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinReferenceType_URI_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinReferenceType_Type_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinReferenceType_DigestValue_BYTES_SIZE 350 +struct dinReferenceType { + /* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */ + struct { + exi_string_character_t characters[dinReferenceType_Id_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Id ; + unsigned int Id_isUsed:1; + /* attribute: URI {http://www.w3.org/2001/XMLSchema,anyURI} */ + struct { + exi_string_character_t characters[dinReferenceType_URI_CHARACTERS_SIZE]; + uint16_t charactersLen; + } URI ; + unsigned int URI_isUsed:1; + /* attribute: Type {http://www.w3.org/2001/XMLSchema,anyURI} */ + struct { + exi_string_character_t characters[dinReferenceType_Type_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Type ; + unsigned int Type_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":Transforms, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinTransformsType Transforms ; + unsigned int Transforms_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":DigestMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,DigestMethodType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinDigestMethodType DigestMethod ; + /* element: "http://www.w3.org/2000/09/xmldsig#":DigestValue, http://www.w3.org/2000/09/xmldsig#,DigestValueType */ + struct { + uint8_t bytes[dinReferenceType_DigestValue_BYTES_SIZE]; + uint16_t bytesLen; + } DigestValue ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ProfileEntryType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ChargingProfileEntryStart,"urn:iso:15118:2:2010:MsgDataTypes":ChargingProfileEntryMaxPower)', derivedBy='RESTRICTION'. */ +struct dinProfileEntryType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":ChargingProfileEntryStart, http://www.w3.org/2001/XMLSchema,unsignedInt */ + uint32_t ChargingProfileEntryStart ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":ChargingProfileEntryMaxPower, urn:iso:15118:2:2010:MsgDataTypes,PMaxType */ + int16_t ChargingProfileEntryMaxPower ; +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,RSAKeyValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Modulus,"http://www.w3.org/2000/09/xmldsig#":Exponent)', derivedBy='RESTRICTION'. */ +#define dinRSAKeyValueType_Modulus_BYTES_SIZE 350 +#define dinRSAKeyValueType_Exponent_BYTES_SIZE 350 +struct dinRSAKeyValueType { + /* element: "http://www.w3.org/2000/09/xmldsig#":Modulus, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */ + struct { + uint8_t bytes[dinRSAKeyValueType_Modulus_BYTES_SIZE]; + uint16_t bytesLen; + } Modulus ; + /* element: "http://www.w3.org/2000/09/xmldsig#":Exponent, http://www.w3.org/2000/09/xmldsig#,CryptoBinary */ + struct { + uint8_t bytes[dinRSAKeyValueType_Exponent_BYTES_SIZE]; + uint16_t bytesLen; + } Exponent ; +}; + +typedef enum { + dinfaultCodeType_ParsingError = 0, + dinfaultCodeType_NoTLSRootCertificatAvailable = 1, + dinfaultCodeType_UnknownError = 2 +} dinfaultCodeType; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVSEStatusType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +struct dinEVSEStatusType { + int noContent; /* avoid warning */ +}; + +typedef enum { + dinserviceCategoryType_EVCharging = 0, + dinserviceCategoryType_Internet = 1, + dinserviceCategoryType_ContractCertificate = 2, + dinserviceCategoryType_OtherCustom = 3 +} dinserviceCategoryType; + +typedef enum { + dinEVSENotificationType_None = 0, + dinEVSENotificationType_StopCharging = 1, + dinEVSENotificationType_ReNegotiation = 2 +} dinEVSENotificationType; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVPowerDeliveryParameterType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +struct dinEVPowerDeliveryParameterType { + int noContent; /* avoid warning */ +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)', derivedBy='RESTRICTION'. */ +#define dinX509IssuerSerialType_X509IssuerName_CHARACTERS_SIZE 50 + EXTRA_CHAR +struct dinX509IssuerSerialType { + /* element: "http://www.w3.org/2000/09/xmldsig#":X509IssuerName, http://www.w3.org/2001/XMLSchema,string */ + struct { + exi_string_character_t characters[dinX509IssuerSerialType_X509IssuerName_CHARACTERS_SIZE]; + uint16_t charactersLen; + } X509IssuerName ; + /* element: "http://www.w3.org/2000/09/xmldsig#":X509SerialNumber, http://www.w3.org/2001/XMLSchema,integer */ + int64_t X509SerialNumber ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SelectedServiceType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceID,"urn:iso:15118:2:2010:MsgDataTypes":ParameterSetID{0-1})', derivedBy='RESTRICTION'. */ +struct dinSelectedServiceType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":ServiceID, urn:iso:15118:2:2010:MsgDataTypes,serviceIDType */ + uint16_t ServiceID ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":ParameterSetID, http://www.w3.org/2001/XMLSchema,short */ + int16_t ParameterSetID ; + unsigned int ParameterSetID_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVStatusType', base type name='EVStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVReady,"urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC)', derivedBy='EXTENSION'. */ +struct dinDC_EVStatusType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVReady, http://www.w3.org/2001/XMLSchema,boolean */ + int EVReady ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning, http://www.w3.org/2001/XMLSchema,boolean */ + int EVCabinConditioning ; + unsigned int EVCabinConditioning_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning, http://www.w3.org/2001/XMLSchema,boolean */ + int EVRESSConditioning ; + unsigned int EVRESSConditioning_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode, urn:iso:15118:2:2010:MsgDataTypes,DC_EVErrorCodeType */ + dinDC_EVErrorCodeType EVErrorCode ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC, urn:iso:15118:2:2010:MsgDataTypes,percentValueType */ + int8_t EVRESSSOC ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ +struct dinPhysicalValueType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":Multiplier, urn:iso:15118:2:2010:MsgDataTypes,unitMultiplierType */ + int8_t Multiplier ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":Unit, urn:iso:15118:2:2010:MsgDataTypes,unitSymbolType */ + dinunitSymbolType Unit ; + unsigned int Unit_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":Value, http://www.w3.org/2001/XMLSchema,short */ + int16_t Value ; +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ManifestType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinManifestType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinManifestType_Reference_ARRAY_SIZE 1 +struct dinManifestType { + /* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */ + struct { + exi_string_character_t characters[dinManifestType_Id_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Id ; + unsigned int Id_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":Reference, Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)', derivedBy='RESTRICTION'. */ + struct { + struct dinReferenceType array[dinManifestType_Reference_ARRAY_SIZE]; + uint16_t arrayLen; + } Reference; +}; + +typedef enum { + dincostKindType_relativePricePercentage = 0, + dincostKindType_RenewableGenerationPercentage = 1, + dincostKindType_CarbonDioxideEmission = 2 +} dincostKindType; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PMaxScheduleEntryType', base type name='EntryType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("urn:iso:15118:2:2010:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2010:MsgDataTypes":PMax))', derivedBy='EXTENSION'. */ +struct dinPMaxScheduleEntryType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":TimeInterval, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,IntervalType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ + struct dinIntervalType TimeInterval ; + unsigned int TimeInterval_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":RelativeTimeInterval, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,RelativeTimeIntervalType', base type name='IntervalType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":start,"urn:iso:15118:2:2010:MsgDataTypes":duration{0-1})', derivedBy='EXTENSION'. */ + struct dinRelativeTimeIntervalType RelativeTimeInterval ; + unsigned int RelativeTimeInterval_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":PMax, urn:iso:15118:2:2010:MsgDataTypes,PMaxType */ + int16_t PMax ; +}; + +typedef enum { + dinisolationLevelType_Invalid = 0, + dinisolationLevelType_Valid = 1, + dinisolationLevelType_Warning = 2, + dinisolationLevelType_Fault = 3 +} dinisolationLevelType; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureValueType', base type name='base64Binary', content type='SIMPLE', isAbstract='false', hasTypeId='false', final='0', block='0', derivedBy='EXTENSION'. */ +#define dinSignatureValueType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinSignatureValueType_CONTENT_BYTES_SIZE 350 +struct dinSignatureValueType { + /* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */ + struct { + exi_string_character_t characters[dinSignatureValueType_Id_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Id ; + unsigned int Id_isUsed:1; + /* simple content: http://www.w3.org/2001/XMLSchema,base64Binary */ + struct { + uint8_t bytes[dinSignatureValueType_CONTENT_BYTES_SIZE]; + uint16_t bytesLen; + } CONTENT ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PaymentOptionsType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":PaymentOption{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinPaymentOptionsType_PaymentOption_ARRAY_SIZE 5 +struct dinPaymentOptionsType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":PaymentOption, urn:iso:15118:2:2010:MsgDataTypes,paymentOptionType */ + struct { + dinpaymentOptionType array[dinPaymentOptionsType_PaymentOption_ARRAY_SIZE]; + uint16_t arrayLen; + } PaymentOption; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceTagType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceID,"urn:iso:15118:2:2010:MsgDataTypes":ServiceName{0-1},"urn:iso:15118:2:2010:MsgDataTypes":ServiceCategory,"urn:iso:15118:2:2010:MsgDataTypes":ServiceScope{0-1})', derivedBy='RESTRICTION'. */ +#define dinServiceTagType_ServiceName_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,serviceNameType is 32 */ +#define dinServiceTagType_ServiceScope_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,serviceScopeType is 32 */ +struct dinServiceTagType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":ServiceID, urn:iso:15118:2:2010:MsgDataTypes,serviceIDType */ + uint16_t ServiceID ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":ServiceName, urn:iso:15118:2:2010:MsgDataTypes,serviceNameType */ + struct { + exi_string_character_t characters[dinServiceTagType_ServiceName_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ServiceName ; + unsigned int ServiceName_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":ServiceCategory, urn:iso:15118:2:2010:MsgDataTypes,serviceCategoryType */ + dinserviceCategoryType ServiceCategory ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":ServiceScope, urn:iso:15118:2:2010:MsgDataTypes,serviceScopeType */ + struct { + exi_string_character_t characters[dinServiceTagType_ServiceScope_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ServiceScope ; + unsigned int ServiceScope_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEStatusType', base type name='EVSEStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":PowerSwitchClosed,"urn:iso:15118:2:2010:MsgDataTypes":RCD,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)', derivedBy='EXTENSION'. */ +struct dinAC_EVSEStatusType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":PowerSwitchClosed, http://www.w3.org/2001/XMLSchema,boolean */ + int PowerSwitchClosed ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":RCD, http://www.w3.org/2001/XMLSchema,boolean */ + int RCD ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay, http://www.w3.org/2001/XMLSchema,unsignedInt */ + uint32_t NotificationMaxDelay ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSENotification, urn:iso:15118:2:2010:MsgDataTypes,EVSENotificationType */ + dinEVSENotificationType EVSENotification ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ChargingProfileType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgDataTypes":ProfileEntry{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinChargingProfileType_ProfileEntry_ARRAY_SIZE 24 +struct dinChargingProfileType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTupleID, urn:iso:15118:2:2010:MsgDataTypes,SAIDType */ + int16_t SAScheduleTupleID ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":ProfileEntry, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ProfileEntryType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ChargingProfileEntryStart,"urn:iso:15118:2:2010:MsgDataTypes":ChargingProfileEntryMaxPower)', derivedBy='RESTRICTION'. */ + struct { + struct dinProfileEntryType array[dinChargingProfileType_ProfileEntry_ARRAY_SIZE]; + uint16_t arrayLen; + } ProfileEntry; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDiscoveryReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ServiceScope{0-1},"urn:iso:15118:2:2010:MsgBody":ServiceCategory{0-1})', derivedBy='EXTENSION'. */ +#define dinServiceDiscoveryReqType_ServiceScope_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,serviceScopeType is 32 */ +struct dinServiceDiscoveryReqType { + /* element: "urn:iso:15118:2:2010:MsgBody":ServiceScope, urn:iso:15118:2:2010:MsgDataTypes,serviceScopeType */ + struct { + exi_string_character_t characters[dinServiceDiscoveryReqType_ServiceScope_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ServiceScope ; + unsigned int ServiceScope_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgBody":ServiceCategory, urn:iso:15118:2:2010:MsgDataTypes,serviceCategoryType */ + dinserviceCategoryType ServiceCategory ; + unsigned int ServiceCategory_isUsed:1; +}; + +typedef enum { + dinresponseCodeType_OK = 0, + dinresponseCodeType_OK_NewSessionEstablished = 1, + dinresponseCodeType_OK_OldSessionJoined = 2, + dinresponseCodeType_OK_CertificateExpiresSoon = 3, + dinresponseCodeType_FAILED = 4, + dinresponseCodeType_FAILED_SequenceError = 5, + dinresponseCodeType_FAILED_ServiceIDInvalid = 6, + dinresponseCodeType_FAILED_UnknownSession = 7, + dinresponseCodeType_FAILED_ServiceSelectionInvalid = 8, + dinresponseCodeType_FAILED_PaymentSelectionInvalid = 9, + dinresponseCodeType_FAILED_CertificateExpired = 10, + dinresponseCodeType_FAILED_SignatureError = 11, + dinresponseCodeType_FAILED_NoCertificateAvailable = 12, + dinresponseCodeType_FAILED_CertChainError = 13, + dinresponseCodeType_FAILED_ChallengeInvalid = 14, + dinresponseCodeType_FAILED_ContractCanceled = 15, + dinresponseCodeType_FAILED_WrongChargeParameter = 16, + dinresponseCodeType_FAILED_PowerDeliveryNotApplied = 17, + dinresponseCodeType_FAILED_TariffSelectionInvalid = 18, + dinresponseCodeType_FAILED_ChargingProfileInvalid = 19, + dinresponseCodeType_FAILED_EVSEPresentVoltageToLow = 20, + dinresponseCodeType_FAILED_MeteringSignatureNotValid = 21, + dinresponseCodeType_FAILED_WrongEnergyTransferType = 22 +} dinresponseCodeType; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEChargeParameterType', base type name='EVSEChargeParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":AC_EVSEStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaxVoltage,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaxCurrent,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinCurrent)', derivedBy='EXTENSION'. */ +struct dinAC_EVSEChargeParameterType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":AC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEStatusType', base type name='EVSEStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":PowerSwitchClosed,"urn:iso:15118:2:2010:MsgDataTypes":RCD,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)', derivedBy='EXTENSION'. */ + struct dinAC_EVSEStatusType AC_EVSEStatus ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEMaxVoltage, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEMaxVoltage ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEMaxCurrent, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEMaxCurrent ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEMinCurrent, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEMinCurrent ; +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ObjectType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##any])){0-UNBOUNDED}', derivedBy='RESTRICTION'. */ +#define dinObjectType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinObjectType_MimeType_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinObjectType_Encoding_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinObjectType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR +struct dinObjectType { + /* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */ + struct { + exi_string_character_t characters[dinObjectType_Id_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Id ; + unsigned int Id_isUsed:1; + /* attribute: MimeType {http://www.w3.org/2001/XMLSchema,string} */ + struct { + exi_string_character_t characters[dinObjectType_MimeType_CHARACTERS_SIZE]; + uint16_t charactersLen; + } MimeType ; + unsigned int MimeType_isUsed:1; + /* attribute: Encoding {http://www.w3.org/2001/XMLSchema,anyURI} */ + struct { + exi_string_character_t characters[dinObjectType_Encoding_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Encoding ; + unsigned int Encoding_isUsed:1; + /* element: WC[##any] */ + struct { + exi_string_character_t characters[dinObjectType_ANY_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ANY ; + unsigned int ANY_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,SessionStopResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode)', derivedBy='EXTENSION'. */ +struct dinSessionStopResType { + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignedInfoType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod,"http://www.w3.org/2000/09/xmldsig#":SignatureMethod,"http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinSignedInfoType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinSignedInfoType_Reference_ARRAY_SIZE 1 +struct dinSignedInfoType { + /* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */ + struct { + exi_string_character_t characters[dinSignedInfoType_Id_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Id ; + unsigned int Id_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,CanonicalizationMethodType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##any]){0-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinCanonicalizationMethodType CanonicalizationMethod ; + /* element: "http://www.w3.org/2000/09/xmldsig#":SignatureMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureMethodType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":HMACOutputLength{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinSignatureMethodType SignatureMethod ; + /* element: "http://www.w3.org/2000/09/xmldsig#":Reference, Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)', derivedBy='RESTRICTION'. */ + struct { + struct dinReferenceType array[dinSignedInfoType_Reference_ARRAY_SIZE]; + uint16_t arrayLen; + } Reference; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CostType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":costKind,"urn:iso:15118:2:2010:MsgDataTypes":amount,"urn:iso:15118:2:2010:MsgDataTypes":amountMultiplier{0-1})', derivedBy='RESTRICTION'. */ +struct dinCostType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":costKind, urn:iso:15118:2:2010:MsgDataTypes,costKindType */ + dincostKindType costKind ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":amount, http://www.w3.org/2001/XMLSchema,unsignedInt */ + uint32_t amount ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":amountMultiplier, urn:iso:15118:2:2010:MsgDataTypes,unitMultiplierType */ + int8_t amountMultiplier ; + unsigned int amountMultiplier_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceChargeType', base type name='ServiceType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("urn:iso:15118:2:2010:MsgDataTypes":ServiceTag,"urn:iso:15118:2:2010:MsgDataTypes":FreeService),("urn:iso:15118:2:2010:MsgDataTypes":EnergyTransferType))', derivedBy='EXTENSION'. */ +struct dinServiceChargeType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":ServiceTag, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceTagType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceID,"urn:iso:15118:2:2010:MsgDataTypes":ServiceName{0-1},"urn:iso:15118:2:2010:MsgDataTypes":ServiceCategory,"urn:iso:15118:2:2010:MsgDataTypes":ServiceScope{0-1})', derivedBy='RESTRICTION'. */ + struct dinServiceTagType ServiceTag ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":FreeService, http://www.w3.org/2001/XMLSchema,boolean */ + int FreeService ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EnergyTransferType, urn:iso:15118:2:2010:MsgDataTypes,EVSESupportedEnergyTransferType */ + dinEVSESupportedEnergyTransferType EnergyTransferType ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusType', base type name='EVSEStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)', derivedBy='EXTENSION'. */ +struct dinDC_EVSEStatusType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus, urn:iso:15118:2:2010:MsgDataTypes,isolationLevelType */ + dinisolationLevelType EVSEIsolationStatus ; + unsigned int EVSEIsolationStatus_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode, urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusCodeType */ + dinDC_EVSEStatusCodeType EVSEStatusCode ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay, http://www.w3.org/2001/XMLSchema,unsignedInt */ + uint32_t NotificationMaxDelay ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSENotification, urn:iso:15118:2:2010:MsgDataTypes,EVSENotificationType */ + dinEVSENotificationType EVSENotification ; +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,RetrievalMethodType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1})', derivedBy='RESTRICTION'. */ +#define dinRetrievalMethodType_URI_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinRetrievalMethodType_Type_CHARACTERS_SIZE 50 + EXTRA_CHAR +struct dinRetrievalMethodType { + /* attribute: URI {http://www.w3.org/2001/XMLSchema,anyURI} */ + struct { + exi_string_character_t characters[dinRetrievalMethodType_URI_CHARACTERS_SIZE]; + uint16_t charactersLen; + } URI ; + unsigned int URI_isUsed:1; + /* attribute: Type {http://www.w3.org/2001/XMLSchema,anyURI} */ + struct { + exi_string_character_t characters[dinRetrievalMethodType_Type_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Type ; + unsigned int Type_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":Transforms, Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinTransformsType Transforms ; + unsigned int Transforms_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,NotificationType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":FaultCode,"urn:iso:15118:2:2010:MsgDataTypes":FaultMsg{0-1})', derivedBy='RESTRICTION'. */ +#define dinNotificationType_FaultMsg_CHARACTERS_SIZE 64 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,faultMsgType is 64 */ +struct dinNotificationType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":FaultCode, urn:iso:15118:2:2010:MsgDataTypes,faultCodeType */ + dinfaultCodeType FaultCode ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":FaultMsg, urn:iso:15118:2:2010:MsgDataTypes,faultMsgType */ + struct { + exi_string_character_t characters[dinNotificationType_FaultMsg_CHARACTERS_SIZE]; + uint16_t charactersLen; + } FaultMsg ; + unsigned int FaultMsg_isUsed:1; +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,PGPDataType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("http://www.w3.org/2000/09/xmldsig#":PGPKeyID,"http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})|("http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED}))', derivedBy='RESTRICTION'. */ +#define dinPGPDataType_PGPKeyID_BYTES_SIZE 350 +#define dinPGPDataType_PGPKeyPacket_BYTES_SIZE 350 +#define dinPGPDataType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR +struct dinPGPDataType { + /* element: "http://www.w3.org/2000/09/xmldsig#":PGPKeyID, http://www.w3.org/2001/XMLSchema,base64Binary */ + struct { + uint8_t bytes[dinPGPDataType_PGPKeyID_BYTES_SIZE]; + uint16_t bytesLen; + } PGPKeyID ; + unsigned int PGPKeyID_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket, http://www.w3.org/2001/XMLSchema,base64Binary */ + struct { + uint8_t bytes[dinPGPDataType_PGPKeyPacket_BYTES_SIZE]; + uint16_t bytesLen; + } PGPKeyPacket ; + unsigned int PGPKeyPacket_isUsed:1; + /* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */ + struct { + exi_string_character_t characters[dinPGPDataType_ANY_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ANY ; + unsigned int ANY_isUsed:1; +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertyType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}', derivedBy='RESTRICTION'. */ +#define dinSignaturePropertyType_Target_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinSignaturePropertyType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinSignaturePropertyType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR +struct dinSignaturePropertyType { + /* attribute: Target {http://www.w3.org/2001/XMLSchema,anyURI} */ + struct { + exi_string_character_t characters[dinSignaturePropertyType_Target_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Target ; + /* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */ + struct { + exi_string_character_t characters[dinSignaturePropertyType_Id_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Id ; + unsigned int Id_isUsed:1; + /* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */ + struct { + exi_string_character_t characters[dinSignaturePropertyType_ANY_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ANY ; + unsigned int ANY_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,MeterInfoType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":MeterID,"urn:iso:15118:2:2010:MsgDataTypes":MeterReading{0-1},"urn:iso:15118:2:2010:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2010:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":TMeter{0-1})', derivedBy='RESTRICTION'. */ +#define dinMeterInfoType_MeterID_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,meterIDType is 32 */ +#define dinMeterInfoType_SigMeterReading_BYTES_SIZE 32 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,sigMeterReadingType is 32 */ +struct dinMeterInfoType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":MeterID, urn:iso:15118:2:2010:MsgDataTypes,meterIDType */ + struct { + exi_string_character_t characters[dinMeterInfoType_MeterID_CHARACTERS_SIZE]; + uint16_t charactersLen; + } MeterID ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":MeterReading, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType MeterReading ; + unsigned int MeterReading_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":SigMeterReading, urn:iso:15118:2:2010:MsgDataTypes,sigMeterReadingType */ + struct { + uint8_t bytes[dinMeterInfoType_SigMeterReading_BYTES_SIZE]; + uint16_t bytesLen; + } SigMeterReading ; + unsigned int SigMeterReading_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":MeterStatus, urn:iso:15118:2:2010:MsgDataTypes,meterStatusType */ + int16_t MeterStatus ; + unsigned int MeterStatus_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":TMeter, http://www.w3.org/2001/XMLSchema,long */ + int64_t TMeter ; + unsigned int TMeter_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SubCertificatesType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinSubCertificatesType_Certificate_BYTES_SIZE 1200 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,certificateType is 1200 */ +#define dinSubCertificatesType_Certificate_ARRAY_SIZE 5 +struct dinSubCertificatesType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":Certificate, urn:iso:15118:2:2010:MsgDataTypes,certificateType */ + struct { + struct { + uint8_t bytes[dinSubCertificatesType_Certificate_BYTES_SIZE]; + uint16_t bytesLen; + } array[dinSubCertificatesType_Certificate_ARRAY_SIZE]; + uint16_t arrayLen; + } Certificate; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,MeteringReceiptReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":SessionID,"urn:iso:15118:2:2010:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2010:MsgBody":MeterInfo)', derivedBy='EXTENSION'. */ +#define dinMeteringReceiptReqType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinMeteringReceiptReqType_SessionID_BYTES_SIZE 8 /* XML schema facet length for urn:iso:15118:2:2010:MsgDataTypes,sessionIDType is 8 */ +struct dinMeteringReceiptReqType { + /* attribute: Id {http://www.w3.org/2001/XMLSchema,IDREF} */ + struct { + exi_string_character_t characters[dinMeteringReceiptReqType_Id_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Id ; + unsigned int Id_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgBody":SessionID, urn:iso:15118:2:2010:MsgDataTypes,sessionIDType */ + struct { + uint8_t bytes[dinMeteringReceiptReqType_SessionID_BYTES_SIZE]; + uint16_t bytesLen; + } SessionID ; + /* element: "urn:iso:15118:2:2010:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2010:MsgDataTypes,SAIDType */ + int16_t SAScheduleTupleID ; + unsigned int SAScheduleTupleID_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgBody":MeterInfo, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,MeterInfoType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":MeterID,"urn:iso:15118:2:2010:MsgDataTypes":MeterReading{0-1},"urn:iso:15118:2:2010:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2010:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":TMeter{0-1})', derivedBy='RESTRICTION'. */ + struct dinMeterInfoType MeterInfo ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PowerDeliveryResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatus)', derivedBy='EXTENSION'. */ +struct dinPowerDeliveryResType { + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVSEStatusType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ + struct dinEVSEStatusType EVSEStatus ; + unsigned int EVSEStatus_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":AC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEStatusType', base type name='EVSEStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":PowerSwitchClosed,"urn:iso:15118:2:2010:MsgDataTypes":RCD,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)', derivedBy='EXTENSION'. */ + struct dinAC_EVSEStatusType AC_EVSEStatus ; + unsigned int AC_EVSEStatus_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusType', base type name='EVSEStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)', derivedBy='EXTENSION'. */ + struct dinDC_EVSEStatusType DC_EVSEStatus ; + unsigned int DC_EVSEStatus_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,WeldingDetectionResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage)', derivedBy='EXTENSION'. */ +struct dinWeldingDetectionResType { + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; + /* element: "urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusType', base type name='EVSEStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)', derivedBy='EXTENSION'. */ + struct dinDC_EVSEStatusType DC_EVSEStatus ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEPresentVoltage ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ContractAuthenticationResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing)', derivedBy='EXTENSION'. */ +struct dinContractAuthenticationResType { + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVSEProcessing, urn:iso:15118:2:2010:MsgDataTypes,EVSEProcessingType */ + dinEVSEProcessingType EVSEProcessing ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SelectedServiceListType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SelectedService{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinSelectedServiceListType_SelectedService_ARRAY_SIZE 16 +struct dinSelectedServiceListType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":SelectedService, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SelectedServiceType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceID,"urn:iso:15118:2:2010:MsgDataTypes":ParameterSetID{0-1})', derivedBy='RESTRICTION'. */ + struct { + struct dinSelectedServiceType array[dinSelectedServiceListType_SelectedService_ARRAY_SIZE]; + uint16_t arrayLen; + } SelectedService; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CurrentDemandResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage,"urn:iso:15118:2:2010:MsgBody":EVSEPresentCurrent,"urn:iso:15118:2:2010:MsgBody":EVSECurrentLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEVoltageLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEPowerLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEMaximumVoltageLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVSEMaximumCurrentLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVSEMaximumPowerLimit{0-1})', derivedBy='EXTENSION'. */ +struct dinCurrentDemandResType { + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; + /* element: "urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusType', base type name='EVSEStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)', derivedBy='EXTENSION'. */ + struct dinDC_EVSEStatusType DC_EVSEStatus ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEPresentVoltage ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVSEPresentCurrent, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEPresentCurrent ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVSECurrentLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */ + int EVSECurrentLimitAchieved ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVSEVoltageLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */ + int EVSEVoltageLimitAchieved ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVSEPowerLimitAchieved, http://www.w3.org/2001/XMLSchema,boolean */ + int EVSEPowerLimitAchieved ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVSEMaximumVoltageLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEMaximumVoltageLimit ; + unsigned int EVSEMaximumVoltageLimit_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgBody":EVSEMaximumCurrentLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEMaximumCurrentLimit ; + unsigned int EVSEMaximumCurrentLimit_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgBody":EVSEMaximumPowerLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEMaximumPowerLimit ; + unsigned int EVSEMaximumPowerLimit_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVChargeParameterType', base type name='EVChargeParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":DepartureTime,"urn:iso:15118:2:2010:MsgDataTypes":EAmount,"urn:iso:15118:2:2010:MsgDataTypes":EVMaxVoltage,"urn:iso:15118:2:2010:MsgDataTypes":EVMaxCurrent,"urn:iso:15118:2:2010:MsgDataTypes":EVMinCurrent)', derivedBy='EXTENSION'. */ +struct dinAC_EVChargeParameterType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":DepartureTime, http://www.w3.org/2001/XMLSchema,unsignedInt */ + uint32_t DepartureTime ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EAmount, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EAmount ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVMaxVoltage, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVMaxVoltage ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVMaxCurrent, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVMaxCurrent ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVMinCurrent, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVMinCurrent ; +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,X509DataType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial|"http://www.w3.org/2000/09/xmldsig#":X509SKI|"http://www.w3.org/2000/09/xmldsig#":X509SubjectName|"http://www.w3.org/2000/09/xmldsig#":X509Certificate|"http://www.w3.org/2000/09/xmldsig#":X509CRL|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))){1-UNBOUNDED}', derivedBy='RESTRICTION'. */ +#define dinX509DataType_X509IssuerSerial_ARRAY_SIZE 1 +#define dinX509DataType_X509SKI_BYTES_SIZE 350 +#define dinX509DataType_X509SKI_ARRAY_SIZE 1 +#define dinX509DataType_X509SubjectName_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinX509DataType_X509SubjectName_ARRAY_SIZE 1 +#define dinX509DataType_X509Certificate_BYTES_SIZE 350 +#define dinX509DataType_X509Certificate_ARRAY_SIZE 1 +#define dinX509DataType_X509CRL_BYTES_SIZE 350 +#define dinX509DataType_X509CRL_ARRAY_SIZE 1 +#define dinX509DataType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR +struct dinX509DataType { + /* element: "http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial, Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)', derivedBy='RESTRICTION'. */ + struct { + struct dinX509IssuerSerialType array[dinX509DataType_X509IssuerSerial_ARRAY_SIZE]; + uint16_t arrayLen; + } X509IssuerSerial; + /* element: "http://www.w3.org/2000/09/xmldsig#":X509SKI, http://www.w3.org/2001/XMLSchema,base64Binary */ + struct { + struct { + uint8_t bytes[dinX509DataType_X509SKI_BYTES_SIZE]; + uint16_t bytesLen; + } array[dinX509DataType_X509SKI_ARRAY_SIZE]; + uint16_t arrayLen; + } X509SKI; + /* element: "http://www.w3.org/2000/09/xmldsig#":X509SubjectName, http://www.w3.org/2001/XMLSchema,string */ + struct { + struct { + exi_string_character_t characters[dinX509DataType_X509SubjectName_CHARACTERS_SIZE]; + uint16_t charactersLen; + } array[dinX509DataType_X509SubjectName_ARRAY_SIZE]; + uint16_t arrayLen; + } X509SubjectName; + /* element: "http://www.w3.org/2000/09/xmldsig#":X509Certificate, http://www.w3.org/2001/XMLSchema,base64Binary */ + struct { + struct { + uint8_t bytes[dinX509DataType_X509Certificate_BYTES_SIZE]; + uint16_t bytesLen; + } array[dinX509DataType_X509Certificate_ARRAY_SIZE]; + uint16_t arrayLen; + } X509Certificate; + /* element: "http://www.w3.org/2000/09/xmldsig#":X509CRL, http://www.w3.org/2001/XMLSchema,base64Binary */ + struct { + struct { + uint8_t bytes[dinX509DataType_X509CRL_BYTES_SIZE]; + uint16_t bytesLen; + } array[dinX509DataType_X509CRL_ARRAY_SIZE]; + uint16_t arrayLen; + } X509CRL; + /* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */ + struct { + exi_string_character_t characters[dinX509DataType_ANY_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ANY ; + unsigned int ANY_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ChargingStatusResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEID,"urn:iso:15118:2:2010:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgBody":EVSEMaxCurrent{0-1},"urn:iso:15118:2:2010:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2010:MsgBody":ReceiptRequired,"urn:iso:15118:2:2010:MsgBody":AC_EVSEStatus)', derivedBy='EXTENSION'. */ +#define dinChargingStatusResType_EVSEID_BYTES_SIZE 32 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,evseIDType is 32 */ +struct dinChargingStatusResType { + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVSEID, urn:iso:15118:2:2010:MsgDataTypes,evseIDType */ + struct { + uint8_t bytes[dinChargingStatusResType_EVSEID_BYTES_SIZE]; + uint16_t bytesLen; + } EVSEID ; + /* element: "urn:iso:15118:2:2010:MsgBody":SAScheduleTupleID, urn:iso:15118:2:2010:MsgDataTypes,SAIDType */ + int16_t SAScheduleTupleID ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVSEMaxCurrent, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEMaxCurrent ; + unsigned int EVSEMaxCurrent_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgBody":MeterInfo, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,MeterInfoType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":MeterID,"urn:iso:15118:2:2010:MsgDataTypes":MeterReading{0-1},"urn:iso:15118:2:2010:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2010:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":TMeter{0-1})', derivedBy='RESTRICTION'. */ + struct dinMeterInfoType MeterInfo ; + unsigned int MeterInfo_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgBody":ReceiptRequired, http://www.w3.org/2001/XMLSchema,boolean */ + int ReceiptRequired ; + /* element: "urn:iso:15118:2:2010:MsgBody":AC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEStatusType', base type name='EVSEStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":PowerSwitchClosed,"urn:iso:15118:2:2010:MsgDataTypes":RCD,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)', derivedBy='EXTENSION'. */ + struct dinAC_EVSEStatusType AC_EVSEStatus ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,WeldingDetectionReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus)', derivedBy='EXTENSION'. */ +struct dinWeldingDetectionReqType { + /* element: "urn:iso:15118:2:2010:MsgBody":DC_EVStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVStatusType', base type name='EVStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVReady,"urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC)', derivedBy='EXTENSION'. */ + struct dinDC_EVStatusType DC_EVStatus ; +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertiesType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":SignatureProperty{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinSignaturePropertiesType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinSignaturePropertiesType_SignatureProperty_ARRAY_SIZE 1 +struct dinSignaturePropertiesType { + /* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */ + struct { + exi_string_character_t characters[dinSignaturePropertiesType_Id_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Id ; + unsigned int Id_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":SignatureProperty, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertyType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}', derivedBy='RESTRICTION'. */ + struct { + struct dinSignaturePropertyType array[dinSignaturePropertiesType_SignatureProperty_ARRAY_SIZE]; + uint16_t arrayLen; + } SignatureProperty; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVPowerDeliveryParameterType', base type name='EVPowerDeliveryParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2010:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2010:MsgDataTypes":ChargingComplete)', derivedBy='EXTENSION'. */ +struct dinDC_EVPowerDeliveryParameterType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":DC_EVStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVStatusType', base type name='EVStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVReady,"urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC)', derivedBy='EXTENSION'. */ + struct dinDC_EVStatusType DC_EVStatus ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":BulkChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */ + int BulkChargingComplete ; + unsigned int BulkChargingComplete_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":ChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */ + int ChargingComplete ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CableCheckReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus)', derivedBy='EXTENSION'. */ +struct dinCableCheckReqType { + /* element: "urn:iso:15118:2:2010:MsgBody":DC_EVStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVStatusType', base type name='EVStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVReady,"urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC)', derivedBy='EXTENSION'. */ + struct dinDC_EVStatusType DC_EVStatus ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVChargeParameterType', base type name='EVChargeParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVEnergyCapacity{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVEnergyRequest{0-1},"urn:iso:15118:2:2010:MsgDataTypes":FullSOC{0-1},"urn:iso:15118:2:2010:MsgDataTypes":BulkSOC{0-1})', derivedBy='EXTENSION'. */ +struct dinDC_EVChargeParameterType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":DC_EVStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVStatusType', base type name='EVStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVReady,"urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC)', derivedBy='EXTENSION'. */ + struct dinDC_EVStatusType DC_EVStatus ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVMaximumCurrentLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVMaximumCurrentLimit ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVMaximumPowerLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVMaximumPowerLimit ; + unsigned int EVMaximumPowerLimit_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVMaximumVoltageLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVMaximumVoltageLimit ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVEnergyCapacity, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVEnergyCapacity ; + unsigned int EVEnergyCapacity_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVEnergyRequest, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVEnergyRequest ; + unsigned int EVEnergyRequest_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":FullSOC, urn:iso:15118:2:2010:MsgDataTypes,percentValueType */ + int8_t FullSOC ; + unsigned int FullSOC_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":BulkSOC, urn:iso:15118:2:2010:MsgDataTypes,percentValueType */ + int8_t BulkSOC ; + unsigned int BulkSOC_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PMaxScheduleType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleID,"urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleEntry{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinPMaxScheduleType_PMaxScheduleEntry_ARRAY_SIZE 5 +struct dinPMaxScheduleType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleID, urn:iso:15118:2:2010:MsgDataTypes,SAIDType */ + int16_t PMaxScheduleID ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleEntry, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PMaxScheduleEntryType', base type name='EntryType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("urn:iso:15118:2:2010:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2010:MsgDataTypes":PMax))', derivedBy='EXTENSION'. */ + struct { + struct dinPMaxScheduleEntryType array[dinPMaxScheduleType_PMaxScheduleEntry_ARRAY_SIZE]; + uint16_t arrayLen; + } PMaxScheduleEntry; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServicePaymentSelectionReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":SelectedPaymentOption,"urn:iso:15118:2:2010:MsgBody":SelectedServiceList)', derivedBy='EXTENSION'. */ +struct dinServicePaymentSelectionReqType { + /* element: "urn:iso:15118:2:2010:MsgBody":SelectedPaymentOption, urn:iso:15118:2:2010:MsgDataTypes,paymentOptionType */ + dinpaymentOptionType SelectedPaymentOption ; + /* element: "urn:iso:15118:2:2010:MsgBody":SelectedServiceList, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SelectedServiceListType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SelectedService{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinSelectedServiceListType SelectedServiceList ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PreChargeResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage)', derivedBy='EXTENSION'. */ +struct dinPreChargeResType { + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; + /* element: "urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusType', base type name='EVSEStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)', derivedBy='EXTENSION'. */ + struct dinDC_EVSEStatusType DC_EVSEStatus ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEPresentVoltage ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEChargeParameterType', base type name='EVSEChargeParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinimumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinimumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSECurrentRegulationTolerance{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEPeakCurrentRipple,"urn:iso:15118:2:2010:MsgDataTypes":EVSEEnergyToBeDelivered{0-1})', derivedBy='EXTENSION'. */ +struct dinDC_EVSEChargeParameterType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusType', base type name='EVSEStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)', derivedBy='EXTENSION'. */ + struct dinDC_EVSEStatusType DC_EVSEStatus ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumCurrentLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEMaximumCurrentLimit ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumPowerLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEMaximumPowerLimit ; + unsigned int EVSEMaximumPowerLimit_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumVoltageLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEMaximumVoltageLimit ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEMinimumCurrentLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEMinimumCurrentLimit ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEMinimumVoltageLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEMinimumVoltageLimit ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSECurrentRegulationTolerance, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSECurrentRegulationTolerance ; + unsigned int EVSECurrentRegulationTolerance_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEPeakCurrentRipple, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEPeakCurrentRipple ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEEnergyToBeDelivered, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVSEEnergyToBeDelivered ; + unsigned int EVSEEnergyToBeDelivered_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PaymentDetailsResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":GenChallenge,"urn:iso:15118:2:2010:MsgBody":DateTimeNow)', derivedBy='EXTENSION'. */ +#define dinPaymentDetailsResType_GenChallenge_CHARACTERS_SIZE 50 + EXTRA_CHAR +struct dinPaymentDetailsResType { + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; + /* element: "urn:iso:15118:2:2010:MsgBody":GenChallenge, urn:iso:15118:2:2010:MsgDataTypes,genChallengeType */ + struct { + exi_string_character_t characters[dinPaymentDetailsResType_GenChallenge_CHARACTERS_SIZE]; + uint16_t charactersLen; + } GenChallenge ; + /* element: "urn:iso:15118:2:2010:MsgBody":DateTimeNow, http://www.w3.org/2001/XMLSchema,long */ + int64_t DateTimeNow ; +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyValueType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":DSAKeyValue|"http://www.w3.org/2000/09/xmldsig#":RSAKeyValue|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))', derivedBy='RESTRICTION'. */ +#define dinKeyValueType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR +struct dinKeyValueType { + /* element: "http://www.w3.org/2000/09/xmldsig#":DSAKeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,DSAKeyValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("http://www.w3.org/2000/09/xmldsig#":P,"http://www.w3.org/2000/09/xmldsig#":Q){0-1},"http://www.w3.org/2000/09/xmldsig#":G{0-1},"http://www.w3.org/2000/09/xmldsig#":Y,"http://www.w3.org/2000/09/xmldsig#":J{0-1},("http://www.w3.org/2000/09/xmldsig#":Seed,"http://www.w3.org/2000/09/xmldsig#":PgenCounter){0-1})', derivedBy='RESTRICTION'. */ + struct dinDSAKeyValueType DSAKeyValue ; + unsigned int DSAKeyValue_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":RSAKeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,RSAKeyValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Modulus,"http://www.w3.org/2000/09/xmldsig#":Exponent)', derivedBy='RESTRICTION'. */ + struct dinRSAKeyValueType RSAKeyValue ; + unsigned int RSAKeyValue_isUsed:1; + /* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */ + struct { + exi_string_character_t characters[dinKeyValueType_ANY_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ANY ; + unsigned int ANY_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PowerDeliveryReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ReadyToChargeState,"urn:iso:15118:2:2010:MsgBody":ChargingProfile{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVPowerDeliveryParameter{0-1})', derivedBy='EXTENSION'. */ +struct dinPowerDeliveryReqType { + /* element: "urn:iso:15118:2:2010:MsgBody":ReadyToChargeState, http://www.w3.org/2001/XMLSchema,boolean */ + int ReadyToChargeState ; + /* element: "urn:iso:15118:2:2010:MsgBody":ChargingProfile, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ChargingProfileType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgDataTypes":ProfileEntry{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinChargingProfileType ChargingProfile ; + unsigned int ChargingProfile_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVPowerDeliveryParameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVPowerDeliveryParameterType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ + struct dinEVPowerDeliveryParameterType EVPowerDeliveryParameter ; + unsigned int EVPowerDeliveryParameter_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":DC_EVPowerDeliveryParameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVPowerDeliveryParameterType', base type name='EVPowerDeliveryParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2010:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2010:MsgDataTypes":ChargingComplete)', derivedBy='EXTENSION'. */ + struct dinDC_EVPowerDeliveryParameterType DC_EVPowerDeliveryParameter ; + unsigned int DC_EVPowerDeliveryParameter_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CertificateChainType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate,"urn:iso:15118:2:2010:MsgDataTypes":SubCertificates{0-1})', derivedBy='RESTRICTION'. */ +#define dinCertificateChainType_Certificate_BYTES_SIZE 1200 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,certificateType is 1200 */ +struct dinCertificateChainType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":Certificate, urn:iso:15118:2:2010:MsgDataTypes,certificateType */ + struct { + uint8_t bytes[dinCertificateChainType_Certificate_BYTES_SIZE]; + uint16_t bytesLen; + } Certificate ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":SubCertificates, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SubCertificatesType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinSubCertificatesType SubCertificates ; + unsigned int SubCertificates_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ParameterType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":boolValue|"urn:iso:15118:2:2010:MsgDataTypes":byteValue|"urn:iso:15118:2:2010:MsgDataTypes":shortValue|"urn:iso:15118:2:2010:MsgDataTypes":intValue|"urn:iso:15118:2:2010:MsgDataTypes":physicalValue|"urn:iso:15118:2:2010:MsgDataTypes":stringValue)', derivedBy='RESTRICTION'. */ +#define dinParameterType_Name_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinParameterType_stringValue_CHARACTERS_SIZE 50 + EXTRA_CHAR +struct dinParameterType { + /* attribute: Name {http://www.w3.org/2001/XMLSchema,string} */ + struct { + exi_string_character_t characters[dinParameterType_Name_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Name ; + /* attribute: ValueType {urn:iso:15118:2:2010:MsgDataTypes,valueType} */ + dinvalueType ValueType ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":boolValue, http://www.w3.org/2001/XMLSchema,boolean */ + int boolValue ; + unsigned int boolValue_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":byteValue, http://www.w3.org/2001/XMLSchema,byte */ + int8_t byteValue ; + unsigned int byteValue_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":shortValue, http://www.w3.org/2001/XMLSchema,short */ + int16_t shortValue ; + unsigned int shortValue_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":intValue, http://www.w3.org/2001/XMLSchema,int */ + int32_t intValue ; + unsigned int intValue_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":physicalValue, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType physicalValue ; + unsigned int physicalValue_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":stringValue, http://www.w3.org/2001/XMLSchema,string */ + struct { + exi_string_character_t characters[dinParameterType_stringValue_CHARACTERS_SIZE]; + uint16_t charactersLen; + } stringValue ; + unsigned int stringValue_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ParameterSetType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2010:MsgDataTypes":Parameter{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinParameterSetType_Parameter_ARRAY_SIZE 16 +struct dinParameterSetType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":ParameterSetID, http://www.w3.org/2001/XMLSchema,short */ + int16_t ParameterSetID ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":Parameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ParameterType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":boolValue|"urn:iso:15118:2:2010:MsgDataTypes":byteValue|"urn:iso:15118:2:2010:MsgDataTypes":shortValue|"urn:iso:15118:2:2010:MsgDataTypes":intValue|"urn:iso:15118:2:2010:MsgDataTypes":physicalValue|"urn:iso:15118:2:2010:MsgDataTypes":stringValue)', derivedBy='RESTRICTION'. */ + struct { + struct dinParameterType array[dinParameterSetType_Parameter_ARRAY_SIZE]; + uint16_t arrayLen; + } Parameter; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CurrentDemandReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus,"urn:iso:15118:2:2010:MsgBody":EVTargetCurrent,"urn:iso:15118:2:2010:MsgBody":EVMaximumVoltageLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVMaximumCurrentLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgBody":BulkChargingComplete{0-1},"urn:iso:15118:2:2010:MsgBody":ChargingComplete,"urn:iso:15118:2:2010:MsgBody":RemainingTimeToFullSoC{0-1},"urn:iso:15118:2:2010:MsgBody":RemainingTimeToBulkSoC{0-1},"urn:iso:15118:2:2010:MsgBody":EVTargetVoltage)', derivedBy='EXTENSION'. */ +struct dinCurrentDemandReqType { + /* element: "urn:iso:15118:2:2010:MsgBody":DC_EVStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVStatusType', base type name='EVStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVReady,"urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC)', derivedBy='EXTENSION'. */ + struct dinDC_EVStatusType DC_EVStatus ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVTargetCurrent, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVTargetCurrent ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVMaximumVoltageLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVMaximumVoltageLimit ; + unsigned int EVMaximumVoltageLimit_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgBody":EVMaximumCurrentLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVMaximumCurrentLimit ; + unsigned int EVMaximumCurrentLimit_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgBody":EVMaximumPowerLimit, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVMaximumPowerLimit ; + unsigned int EVMaximumPowerLimit_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgBody":BulkChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */ + int BulkChargingComplete ; + unsigned int BulkChargingComplete_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgBody":ChargingComplete, http://www.w3.org/2001/XMLSchema,boolean */ + int ChargingComplete ; + /* element: "urn:iso:15118:2:2010:MsgBody":RemainingTimeToFullSoC, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType RemainingTimeToFullSoC ; + unsigned int RemainingTimeToFullSoC_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgBody":RemainingTimeToBulkSoC, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType RemainingTimeToBulkSoC ; + unsigned int RemainingTimeToBulkSoC_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgBody":EVTargetVoltage, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVTargetVoltage ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PreChargeReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus,"urn:iso:15118:2:2010:MsgBody":EVTargetVoltage,"urn:iso:15118:2:2010:MsgBody":EVTargetCurrent)', derivedBy='EXTENSION'. */ +struct dinPreChargeReqType { + /* element: "urn:iso:15118:2:2010:MsgBody":DC_EVStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVStatusType', base type name='EVStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVReady,"urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC)', derivedBy='EXTENSION'. */ + struct dinDC_EVStatusType DC_EVStatus ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVTargetVoltage, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVTargetVoltage ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVTargetCurrent, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ + struct dinPhysicalValueType EVTargetCurrent ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ChargeParameterDiscoveryReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":EVRequestedEnergyTransferType,"urn:iso:15118:2:2010:MsgDataTypes":EVChargeParameter)', derivedBy='EXTENSION'. */ +struct dinChargeParameterDiscoveryReqType { + /* element: "urn:iso:15118:2:2010:MsgBody":EVRequestedEnergyTransferType, urn:iso:15118:2:2010:MsgDataTypes,EVRequestedEnergyTransferType */ + dinEVRequestedEnergyTransferType EVRequestedEnergyTransferType ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVChargeParameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVChargeParameterType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ + struct dinEVChargeParameterType EVChargeParameter ; + unsigned int EVChargeParameter_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":AC_EVChargeParameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVChargeParameterType', base type name='EVChargeParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":DepartureTime,"urn:iso:15118:2:2010:MsgDataTypes":EAmount,"urn:iso:15118:2:2010:MsgDataTypes":EVMaxVoltage,"urn:iso:15118:2:2010:MsgDataTypes":EVMaxCurrent,"urn:iso:15118:2:2010:MsgDataTypes":EVMinCurrent)', derivedBy='EXTENSION'. */ + struct dinAC_EVChargeParameterType AC_EVChargeParameter ; + unsigned int AC_EVChargeParameter_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":DC_EVChargeParameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVChargeParameterType', base type name='EVChargeParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVEnergyCapacity{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVEnergyRequest{0-1},"urn:iso:15118:2:2010:MsgDataTypes":FullSOC{0-1},"urn:iso:15118:2:2010:MsgDataTypes":BulkSOC{0-1})', derivedBy='EXTENSION'. */ + struct dinDC_EVChargeParameterType DC_EVChargeParameter ; + unsigned int DC_EVChargeParameter_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ConsumptionCostType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":startValue,"urn:iso:15118:2:2010:MsgDataTypes":Cost{0-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinConsumptionCostType_Cost_ARRAY_SIZE 5 +struct dinConsumptionCostType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":startValue, http://www.w3.org/2001/XMLSchema,unsignedInt */ + uint32_t startValue ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":Cost, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CostType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":costKind,"urn:iso:15118:2:2010:MsgDataTypes":amount,"urn:iso:15118:2:2010:MsgDataTypes":amountMultiplier{0-1})', derivedBy='RESTRICTION'. */ + struct { + struct dinCostType array[dinConsumptionCostType_Cost_ARRAY_SIZE]; + uint16_t arrayLen; + } Cost; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceTag,"urn:iso:15118:2:2010:MsgDataTypes":FreeService)', derivedBy='RESTRICTION'. */ +struct dinServiceType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":ServiceTag, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceTagType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceID,"urn:iso:15118:2:2010:MsgDataTypes":ServiceName{0-1},"urn:iso:15118:2:2010:MsgDataTypes":ServiceCategory,"urn:iso:15118:2:2010:MsgDataTypes":ServiceScope{0-1})', derivedBy='RESTRICTION'. */ + struct dinServiceTagType ServiceTag ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":FreeService, http://www.w3.org/2001/XMLSchema,boolean */ + int FreeService ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceTagListType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Service{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinServiceTagListType_Service_ARRAY_SIZE 8 +struct dinServiceTagListType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":Service, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceTag,"urn:iso:15118:2:2010:MsgDataTypes":FreeService)', derivedBy='RESTRICTION'. */ + struct { + struct dinServiceType array[dinServiceTagListType_Service_ARRAY_SIZE]; + uint16_t arrayLen; + } Service; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,SessionSetupResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEID,"urn:iso:15118:2:2010:MsgBody":DateTimeNow{0-1})', derivedBy='EXTENSION'. */ +#define dinSessionSetupResType_EVSEID_BYTES_SIZE 32 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,evseIDType is 32 */ +struct dinSessionSetupResType { + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVSEID, urn:iso:15118:2:2010:MsgDataTypes,evseIDType */ + struct { + uint8_t bytes[dinSessionSetupResType_EVSEID_BYTES_SIZE]; + uint16_t bytesLen; + } EVSEID ; + /* element: "urn:iso:15118:2:2010:MsgBody":DateTimeNow, http://www.w3.org/2001/XMLSchema,long */ + int64_t DateTimeNow ; + unsigned int DateTimeNow_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,MeteringReceiptResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":AC_EVSEStatus)', derivedBy='EXTENSION'. */ +struct dinMeteringReceiptResType { + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; + /* element: "urn:iso:15118:2:2010:MsgBody":AC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEStatusType', base type name='EVSEStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":PowerSwitchClosed,"urn:iso:15118:2:2010:MsgDataTypes":RCD,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)', derivedBy='EXTENSION'. */ + struct dinAC_EVSEStatusType AC_EVSEStatus ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceParameterListType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ParameterSet{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinServiceParameterListType_ParameterSet_ARRAY_SIZE 1 +struct dinServiceParameterListType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":ParameterSet, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ParameterSetType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2010:MsgDataTypes":Parameter{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct { + struct dinParameterSetType array[dinServiceParameterListType_ParameterSet_ARRAY_SIZE]; + uint16_t arrayLen; + } ParameterSet; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateUpdateReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":ListOfRootCertificateIDs,"urn:iso:15118:2:2010:MsgBody":DHParams)', derivedBy='EXTENSION'. */ +#define dinCertificateUpdateReqType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinCertificateUpdateReqType_ContractID_CHARACTERS_SIZE 24 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,contractIDType is 24 */ +#define dinCertificateUpdateReqType_DHParams_BYTES_SIZE 256 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,dHParamsType is 256 */ +struct dinCertificateUpdateReqType { + /* attribute: Id {http://www.w3.org/2001/XMLSchema,IDREF} */ + struct { + exi_string_character_t characters[dinCertificateUpdateReqType_Id_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Id ; + unsigned int Id_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CertificateChainType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate,"urn:iso:15118:2:2010:MsgDataTypes":SubCertificates{0-1})', derivedBy='RESTRICTION'. */ + struct dinCertificateChainType ContractSignatureCertChain ; + /* element: "urn:iso:15118:2:2010:MsgBody":ContractID, urn:iso:15118:2:2010:MsgDataTypes,contractIDType */ + struct { + exi_string_character_t characters[dinCertificateUpdateReqType_ContractID_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ContractID ; + /* element: "urn:iso:15118:2:2010:MsgBody":ListOfRootCertificateIDs, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ListOfRootCertificateIDsType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":RootCertificateID{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinListOfRootCertificateIDsType ListOfRootCertificateIDs ; + /* element: "urn:iso:15118:2:2010:MsgBody":DHParams, urn:iso:15118:2:2010:MsgDataTypes,dHParamsType */ + struct { + uint8_t bytes[dinCertificateUpdateReqType_DHParams_BYTES_SIZE]; + uint16_t bytesLen; + } DHParams ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServicePaymentSelectionResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode)', derivedBy='EXTENSION'. */ +struct dinServicePaymentSelectionResType { + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyInfoType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":KeyName|"http://www.w3.org/2000/09/xmldsig#":KeyValue|"http://www.w3.org/2000/09/xmldsig#":RetrievalMethod|"http://www.w3.org/2000/09/xmldsig#":X509Data|"http://www.w3.org/2000/09/xmldsig#":PGPData|"http://www.w3.org/2000/09/xmldsig#":SPKIData|"http://www.w3.org/2000/09/xmldsig#":MgmtData|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}', derivedBy='RESTRICTION'. */ +#define dinKeyInfoType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinKeyInfoType_KeyName_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinKeyInfoType_KeyName_ARRAY_SIZE 1 +#define dinKeyInfoType_KeyValue_ARRAY_SIZE 1 +#define dinKeyInfoType_RetrievalMethod_ARRAY_SIZE 1 +#define dinKeyInfoType_X509Data_ARRAY_SIZE 1 +#define dinKeyInfoType_PGPData_ARRAY_SIZE 1 +#define dinKeyInfoType_SPKIData_ARRAY_SIZE 1 +#define dinKeyInfoType_MgmtData_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinKeyInfoType_MgmtData_ARRAY_SIZE 1 +#define dinKeyInfoType_ANY_CHARACTERS_SIZE 50 + EXTRA_CHAR +struct dinKeyInfoType { + /* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */ + struct { + exi_string_character_t characters[dinKeyInfoType_Id_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Id ; + unsigned int Id_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":KeyName, http://www.w3.org/2001/XMLSchema,string */ + struct { + struct { + exi_string_character_t characters[dinKeyInfoType_KeyName_CHARACTERS_SIZE]; + uint16_t charactersLen; + } array[dinKeyInfoType_KeyName_ARRAY_SIZE]; + uint16_t arrayLen; + } KeyName; + /* element: "http://www.w3.org/2000/09/xmldsig#":KeyValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyValueType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":DSAKeyValue|"http://www.w3.org/2000/09/xmldsig#":RSAKeyValue|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))', derivedBy='RESTRICTION'. */ + struct { + struct dinKeyValueType array[dinKeyInfoType_KeyValue_ARRAY_SIZE]; + uint16_t arrayLen; + } KeyValue; + /* element: "http://www.w3.org/2000/09/xmldsig#":RetrievalMethod, Complex type name='http://www.w3.org/2000/09/xmldsig#,RetrievalMethodType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1})', derivedBy='RESTRICTION'. */ + struct { + struct dinRetrievalMethodType array[dinKeyInfoType_RetrievalMethod_ARRAY_SIZE]; + uint16_t arrayLen; + } RetrievalMethod; + /* element: "http://www.w3.org/2000/09/xmldsig#":X509Data, Complex type name='http://www.w3.org/2000/09/xmldsig#,X509DataType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial|"http://www.w3.org/2000/09/xmldsig#":X509SKI|"http://www.w3.org/2000/09/xmldsig#":X509SubjectName|"http://www.w3.org/2000/09/xmldsig#":X509Certificate|"http://www.w3.org/2000/09/xmldsig#":X509CRL|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))){1-UNBOUNDED}', derivedBy='RESTRICTION'. */ + struct { + struct dinX509DataType array[dinKeyInfoType_X509Data_ARRAY_SIZE]; + uint16_t arrayLen; + } X509Data; + /* element: "http://www.w3.org/2000/09/xmldsig#":PGPData, Complex type name='http://www.w3.org/2000/09/xmldsig#,PGPDataType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("http://www.w3.org/2000/09/xmldsig#":PGPKeyID,"http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})|("http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED}))', derivedBy='RESTRICTION'. */ + struct { + struct dinPGPDataType array[dinKeyInfoType_PGPData_ARRAY_SIZE]; + uint16_t arrayLen; + } PGPData; + /* element: "http://www.w3.org/2000/09/xmldsig#":SPKIData, Complex type name='http://www.w3.org/2000/09/xmldsig#,SPKIDataType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":SPKISexp,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-1}){1-UNBOUNDED}', derivedBy='RESTRICTION'. */ + struct { + struct dinSPKIDataType array[dinKeyInfoType_SPKIData_ARRAY_SIZE]; + uint16_t arrayLen; + } SPKIData; + /* element: "http://www.w3.org/2000/09/xmldsig#":MgmtData, http://www.w3.org/2001/XMLSchema,string */ + struct { + struct { + exi_string_character_t characters[dinKeyInfoType_MgmtData_CHARACTERS_SIZE]; + uint16_t charactersLen; + } array[dinKeyInfoType_MgmtData_ARRAY_SIZE]; + uint16_t arrayLen; + } MgmtData; + /* element: WC[##other:"http://www.w3.org/2000/09/xmldsig#"] */ + struct { + exi_string_character_t characters[dinKeyInfoType_ANY_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ANY ; + unsigned int ANY_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PaymentDetailsReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain)', derivedBy='EXTENSION'. */ +#define dinPaymentDetailsReqType_ContractID_CHARACTERS_SIZE 24 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,contractIDType is 24 */ +struct dinPaymentDetailsReqType { + /* element: "urn:iso:15118:2:2010:MsgBody":ContractID, urn:iso:15118:2:2010:MsgDataTypes,contractIDType */ + struct { + exi_string_character_t characters[dinPaymentDetailsReqType_ContractID_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ContractID ; + /* element: "urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CertificateChainType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate,"urn:iso:15118:2:2010:MsgDataTypes":SubCertificates{0-1})', derivedBy='RESTRICTION'. */ + struct dinCertificateChainType ContractSignatureCertChain ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CableCheckResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing)', derivedBy='EXTENSION'. */ +struct dinCableCheckResType { + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; + /* element: "urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusType', base type name='EVSEStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)', derivedBy='EXTENSION'. */ + struct dinDC_EVSEStatusType DC_EVSEStatus ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVSEProcessing, urn:iso:15118:2:2010:MsgDataTypes,EVSEProcessingType */ + dinEVSEProcessingType EVSEProcessing ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateInstallationResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2010:MsgBody":DHParams,"urn:iso:15118:2:2010:MsgBody":ContractID)', derivedBy='EXTENSION'. */ +#define dinCertificateInstallationResType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinCertificateInstallationResType_ContractSignatureEncryptedPrivateKey_BYTES_SIZE 128 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,privateKeyType is 128 */ +#define dinCertificateInstallationResType_DHParams_BYTES_SIZE 256 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,dHParamsType is 256 */ +#define dinCertificateInstallationResType_ContractID_CHARACTERS_SIZE 24 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,contractIDType is 24 */ +struct dinCertificateInstallationResType { + /* attribute: Id {http://www.w3.org/2001/XMLSchema,IDREF} */ + struct { + exi_string_character_t characters[dinCertificateInstallationResType_Id_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Id ; + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; + /* element: "urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CertificateChainType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate,"urn:iso:15118:2:2010:MsgDataTypes":SubCertificates{0-1})', derivedBy='RESTRICTION'. */ + struct dinCertificateChainType ContractSignatureCertChain ; + /* element: "urn:iso:15118:2:2010:MsgBody":ContractSignatureEncryptedPrivateKey, urn:iso:15118:2:2010:MsgDataTypes,privateKeyType */ + struct { + uint8_t bytes[dinCertificateInstallationResType_ContractSignatureEncryptedPrivateKey_BYTES_SIZE]; + uint16_t bytesLen; + } ContractSignatureEncryptedPrivateKey ; + /* element: "urn:iso:15118:2:2010:MsgBody":DHParams, urn:iso:15118:2:2010:MsgDataTypes,dHParamsType */ + struct { + uint8_t bytes[dinCertificateInstallationResType_DHParams_BYTES_SIZE]; + uint16_t bytesLen; + } DHParams ; + /* element: "urn:iso:15118:2:2010:MsgBody":ContractID, urn:iso:15118:2:2010:MsgDataTypes,contractIDType */ + struct { + exi_string_character_t characters[dinCertificateInstallationResType_ContractID_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ContractID ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDetailResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ServiceID,"urn:iso:15118:2:2010:MsgBody":ServiceParameterList{0-1})', derivedBy='EXTENSION'. */ +struct dinServiceDetailResType { + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; + /* element: "urn:iso:15118:2:2010:MsgBody":ServiceID, urn:iso:15118:2:2010:MsgDataTypes,serviceIDType */ + uint16_t ServiceID ; + /* element: "urn:iso:15118:2:2010:MsgBody":ServiceParameterList, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceParameterListType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ParameterSet{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinServiceParameterListType ServiceParameterList ; + unsigned int ServiceParameterList_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateUpdateResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2010:MsgBody":DHParams,"urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":RetryCounter)', derivedBy='EXTENSION'. */ +#define dinCertificateUpdateResType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinCertificateUpdateResType_ContractSignatureEncryptedPrivateKey_BYTES_SIZE 128 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,privateKeyType is 128 */ +#define dinCertificateUpdateResType_DHParams_BYTES_SIZE 256 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,dHParamsType is 256 */ +#define dinCertificateUpdateResType_ContractID_CHARACTERS_SIZE 24 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,contractIDType is 24 */ +struct dinCertificateUpdateResType { + /* attribute: Id {http://www.w3.org/2001/XMLSchema,IDREF} */ + struct { + exi_string_character_t characters[dinCertificateUpdateResType_Id_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Id ; + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; + /* element: "urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CertificateChainType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate,"urn:iso:15118:2:2010:MsgDataTypes":SubCertificates{0-1})', derivedBy='RESTRICTION'. */ + struct dinCertificateChainType ContractSignatureCertChain ; + /* element: "urn:iso:15118:2:2010:MsgBody":ContractSignatureEncryptedPrivateKey, urn:iso:15118:2:2010:MsgDataTypes,privateKeyType */ + struct { + uint8_t bytes[dinCertificateUpdateResType_ContractSignatureEncryptedPrivateKey_BYTES_SIZE]; + uint16_t bytesLen; + } ContractSignatureEncryptedPrivateKey ; + /* element: "urn:iso:15118:2:2010:MsgBody":DHParams, urn:iso:15118:2:2010:MsgDataTypes,dHParamsType */ + struct { + uint8_t bytes[dinCertificateUpdateResType_DHParams_BYTES_SIZE]; + uint16_t bytesLen; + } DHParams ; + /* element: "urn:iso:15118:2:2010:MsgBody":ContractID, urn:iso:15118:2:2010:MsgDataTypes,contractIDType */ + struct { + exi_string_character_t characters[dinCertificateUpdateResType_ContractID_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ContractID ; + /* element: "urn:iso:15118:2:2010:MsgBody":RetryCounter, http://www.w3.org/2001/XMLSchema,short */ + int16_t RetryCounter ; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SalesTariffEntryType', base type name='EntryType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("urn:iso:15118:2:2010:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2010:MsgDataTypes":EPriceLevel,"urn:iso:15118:2:2010:MsgDataTypes":ConsumptionCost{0-UNBOUNDED}))', derivedBy='EXTENSION'. */ +#define dinSalesTariffEntryType_ConsumptionCost_ARRAY_SIZE 5 +struct dinSalesTariffEntryType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":TimeInterval, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,IntervalType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ + struct dinIntervalType TimeInterval ; + unsigned int TimeInterval_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":RelativeTimeInterval, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,RelativeTimeIntervalType', base type name='IntervalType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":start,"urn:iso:15118:2:2010:MsgDataTypes":duration{0-1})', derivedBy='EXTENSION'. */ + struct dinRelativeTimeIntervalType RelativeTimeInterval ; + unsigned int RelativeTimeInterval_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EPriceLevel, http://www.w3.org/2001/XMLSchema,unsignedByte */ + uint8_t EPriceLevel ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":ConsumptionCost, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ConsumptionCostType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":startValue,"urn:iso:15118:2:2010:MsgDataTypes":Cost{0-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct { + struct dinConsumptionCostType array[dinSalesTariffEntryType_ConsumptionCost_ARRAY_SIZE]; + uint16_t arrayLen; + } ConsumptionCost; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDiscoveryResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":PaymentOptions,"urn:iso:15118:2:2010:MsgBody":ChargeService,"urn:iso:15118:2:2010:MsgBody":ServiceList{0-1})', derivedBy='EXTENSION'. */ +struct dinServiceDiscoveryResType { + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; + /* element: "urn:iso:15118:2:2010:MsgBody":PaymentOptions, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PaymentOptionsType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":PaymentOption{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinPaymentOptionsType PaymentOptions ; + /* element: "urn:iso:15118:2:2010:MsgBody":ChargeService, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceChargeType', base type name='ServiceType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("urn:iso:15118:2:2010:MsgDataTypes":ServiceTag,"urn:iso:15118:2:2010:MsgDataTypes":FreeService),("urn:iso:15118:2:2010:MsgDataTypes":EnergyTransferType))', derivedBy='EXTENSION'. */ + struct dinServiceChargeType ChargeService ; + /* element: "urn:iso:15118:2:2010:MsgBody":ServiceList, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceTagListType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Service{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinServiceTagListType ServiceList ; + unsigned int ServiceList_isUsed:1; +}; + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":SignedInfo,"http://www.w3.org/2000/09/xmldsig#":SignatureValue,"http://www.w3.org/2000/09/xmldsig#":KeyInfo{0-1},"http://www.w3.org/2000/09/xmldsig#":Object{0-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinSignatureType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinSignatureType_Object_ARRAY_SIZE 1 +struct dinSignatureType { + /* attribute: Id {http://www.w3.org/2001/XMLSchema,ID} */ + struct { + exi_string_character_t characters[dinSignatureType_Id_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Id ; + unsigned int Id_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":SignedInfo, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignedInfoType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod,"http://www.w3.org/2000/09/xmldsig#":SignatureMethod,"http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinSignedInfoType SignedInfo ; + /* element: "http://www.w3.org/2000/09/xmldsig#":SignatureValue, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureValueType', base type name='base64Binary', content type='SIMPLE', isAbstract='false', hasTypeId='false', final='0', block='0', derivedBy='EXTENSION'. */ + struct dinSignatureValueType SignatureValue ; + /* element: "http://www.w3.org/2000/09/xmldsig#":KeyInfo, Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyInfoType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":KeyName|"http://www.w3.org/2000/09/xmldsig#":KeyValue|"http://www.w3.org/2000/09/xmldsig#":RetrievalMethod|"http://www.w3.org/2000/09/xmldsig#":X509Data|"http://www.w3.org/2000/09/xmldsig#":PGPData|"http://www.w3.org/2000/09/xmldsig#":SPKIData|"http://www.w3.org/2000/09/xmldsig#":MgmtData|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}', derivedBy='RESTRICTION'. */ + struct dinKeyInfoType KeyInfo ; + unsigned int KeyInfo_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":Object, Complex type name='http://www.w3.org/2000/09/xmldsig#,ObjectType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##any])){0-UNBOUNDED}', derivedBy='RESTRICTION'. */ + struct { + struct dinObjectType array[dinSignatureType_Object_ARRAY_SIZE]; + uint16_t arrayLen; + } Object; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SalesTariffType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SalesTariffID,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariffDescription{0-1},"urn:iso:15118:2:2010:MsgDataTypes":NumEPriceLevels,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariffEntry{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +#define dinSalesTariffType_Id_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinSalesTariffType_SalesTariffDescription_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,tariffDescriptionType is 32 */ +#define dinSalesTariffType_SalesTariffEntry_ARRAY_SIZE 5 +struct dinSalesTariffType { + /* attribute: Id {http://www.w3.org/2001/XMLSchema,IDREF} */ + struct { + exi_string_character_t characters[dinSalesTariffType_Id_CHARACTERS_SIZE]; + uint16_t charactersLen; + } Id ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":SalesTariffID, urn:iso:15118:2:2010:MsgDataTypes,SAIDType */ + int16_t SalesTariffID ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":SalesTariffDescription, urn:iso:15118:2:2010:MsgDataTypes,tariffDescriptionType */ + struct { + exi_string_character_t characters[dinSalesTariffType_SalesTariffDescription_CHARACTERS_SIZE]; + uint16_t charactersLen; + } SalesTariffDescription ; + unsigned int SalesTariffDescription_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":NumEPriceLevels, http://www.w3.org/2001/XMLSchema,unsignedByte */ + uint8_t NumEPriceLevels ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":SalesTariffEntry, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SalesTariffEntryType', base type name='EntryType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("urn:iso:15118:2:2010:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2010:MsgDataTypes":EPriceLevel,"urn:iso:15118:2:2010:MsgDataTypes":ConsumptionCost{0-UNBOUNDED}))', derivedBy='EXTENSION'. */ + struct { + struct dinSalesTariffEntryType array[dinSalesTariffType_SalesTariffEntry_ARRAY_SIZE]; + uint16_t arrayLen; + } SalesTariffEntry; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgHeader,MessageHeaderType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgHeader":SessionID,"urn:iso:15118:2:2010:MsgHeader":Notification{0-1},"http://www.w3.org/2000/09/xmldsig#":Signature{0-1})', derivedBy='RESTRICTION'. */ +#define dinMessageHeaderType_SessionID_BYTES_SIZE 8 /* XML schema facet length for urn:iso:15118:2:2010:MsgDataTypes,sessionIDType is 8 */ +struct dinMessageHeaderType { + /* element: "urn:iso:15118:2:2010:MsgHeader":SessionID, urn:iso:15118:2:2010:MsgDataTypes,sessionIDType */ + struct { + uint8_t bytes[dinMessageHeaderType_SessionID_BYTES_SIZE]; + uint16_t bytesLen; + } SessionID ; + /* element: "urn:iso:15118:2:2010:MsgHeader":Notification, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,NotificationType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":FaultCode,"urn:iso:15118:2:2010:MsgDataTypes":FaultMsg{0-1})', derivedBy='RESTRICTION'. */ + struct dinNotificationType Notification ; + unsigned int Notification_isUsed:1; + /* element: "http://www.w3.org/2000/09/xmldsig#":Signature, Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":SignedInfo,"http://www.w3.org/2000/09/xmldsig#":SignatureValue,"http://www.w3.org/2000/09/xmldsig#":KeyInfo{0-1},"http://www.w3.org/2000/09/xmldsig#":Object{0-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinSignatureType Signature ; + unsigned int Signature_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SAScheduleTupleType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgDataTypes":PMaxSchedule,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariff{0-1})', derivedBy='RESTRICTION'. */ +struct dinSAScheduleTupleType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTupleID, urn:iso:15118:2:2010:MsgDataTypes,SAIDType */ + int16_t SAScheduleTupleID ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":PMaxSchedule, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PMaxScheduleType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleID,"urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleEntry{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinPMaxScheduleType PMaxSchedule ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":SalesTariff, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SalesTariffType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SalesTariffID,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariffDescription{0-1},"urn:iso:15118:2:2010:MsgDataTypes":NumEPriceLevels,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariffEntry{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ + struct dinSalesTariffType SalesTariff ; + unsigned int SalesTariff_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SAScheduleListType', base type name='SASchedulesType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTuple{1-UNBOUNDED})', derivedBy='EXTENSION'. */ +#define dinSAScheduleListType_SAScheduleTuple_ARRAY_SIZE 5 +struct dinSAScheduleListType { + /* element: "urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTuple, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SAScheduleTupleType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgDataTypes":PMaxSchedule,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariff{0-1})', derivedBy='RESTRICTION'. */ + struct { + struct dinSAScheduleTupleType array[dinSAScheduleListType_SAScheduleTuple_ARRAY_SIZE]; + uint16_t arrayLen; + } SAScheduleTuple; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ChargeParameterDiscoveryResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing,"urn:iso:15118:2:2010:MsgDataTypes":SASchedules,"urn:iso:15118:2:2010:MsgDataTypes":EVSEChargeParameter)', derivedBy='EXTENSION'. */ +struct dinChargeParameterDiscoveryResType { + /* element: "urn:iso:15118:2:2010:MsgBody":ResponseCode, urn:iso:15118:2:2010:MsgDataTypes,responseCodeType */ + dinresponseCodeType ResponseCode ; + /* element: "urn:iso:15118:2:2010:MsgBody":EVSEProcessing, urn:iso:15118:2:2010:MsgDataTypes,EVSEProcessingType */ + dinEVSEProcessingType EVSEProcessing ; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":SASchedules, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SASchedulesType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ + struct dinSASchedulesType SASchedules ; + unsigned int SASchedules_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":SAScheduleList, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SAScheduleListType', base type name='SASchedulesType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTuple{1-UNBOUNDED})', derivedBy='EXTENSION'. */ + struct dinSAScheduleListType SAScheduleList ; + unsigned int SAScheduleList_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":EVSEChargeParameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVSEChargeParameterType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ + struct dinEVSEChargeParameterType EVSEChargeParameter ; + unsigned int EVSEChargeParameter_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":AC_EVSEChargeParameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEChargeParameterType', base type name='EVSEChargeParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":AC_EVSEStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaxVoltage,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaxCurrent,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinCurrent)', derivedBy='EXTENSION'. */ + struct dinAC_EVSEChargeParameterType AC_EVSEChargeParameter ; + unsigned int AC_EVSEChargeParameter_isUsed:1; + /* element: "urn:iso:15118:2:2010:MsgDataTypes":DC_EVSEChargeParameter, Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEChargeParameterType', base type name='EVSEChargeParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinimumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinimumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSECurrentRegulationTolerance{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEPeakCurrentRipple,"urn:iso:15118:2:2010:MsgDataTypes":EVSEEnergyToBeDelivered{0-1})', derivedBy='EXTENSION'. */ + struct dinDC_EVSEChargeParameterType DC_EVSEChargeParameter ; + unsigned int DC_EVSEChargeParameter_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDef,BodyType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDef":BodyElement{0-1})', derivedBy='RESTRICTION'. */ +struct dinBodyType { + /* substitutionGroup */ +#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES + union { +#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ + /* element: "urn:iso:15118:2:2010:MsgDef":BodyElement, Complex type name='urn:iso:15118:2:2010:MsgDef,BodyBaseType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ + struct dinBodyBaseType BodyElement ; + /* element: "urn:iso:15118:2:2010:MsgBody":SessionSetupReq, Complex type name='urn:iso:15118:2:2010:MsgBody,SessionSetupReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":EVCCID)', derivedBy='EXTENSION'. */ + struct dinSessionSetupReqType SessionSetupReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":SessionSetupRes, Complex type name='urn:iso:15118:2:2010:MsgBody,SessionSetupResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEID,"urn:iso:15118:2:2010:MsgBody":DateTimeNow{0-1})', derivedBy='EXTENSION'. */ + struct dinSessionSetupResType SessionSetupRes ; + /* element: "urn:iso:15118:2:2010:MsgBody":ServiceDiscoveryReq, Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDiscoveryReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ServiceScope{0-1},"urn:iso:15118:2:2010:MsgBody":ServiceCategory{0-1})', derivedBy='EXTENSION'. */ + struct dinServiceDiscoveryReqType ServiceDiscoveryReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":ServiceDiscoveryRes, Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDiscoveryResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":PaymentOptions,"urn:iso:15118:2:2010:MsgBody":ChargeService,"urn:iso:15118:2:2010:MsgBody":ServiceList{0-1})', derivedBy='EXTENSION'. */ + struct dinServiceDiscoveryResType ServiceDiscoveryRes ; + /* element: "urn:iso:15118:2:2010:MsgBody":ServiceDetailReq, Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDetailReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ServiceID)', derivedBy='EXTENSION'. */ + struct dinServiceDetailReqType ServiceDetailReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":ServiceDetailRes, Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDetailResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ServiceID,"urn:iso:15118:2:2010:MsgBody":ServiceParameterList{0-1})', derivedBy='EXTENSION'. */ + struct dinServiceDetailResType ServiceDetailRes ; + /* element: "urn:iso:15118:2:2010:MsgBody":ServicePaymentSelectionReq, Complex type name='urn:iso:15118:2:2010:MsgBody,ServicePaymentSelectionReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":SelectedPaymentOption,"urn:iso:15118:2:2010:MsgBody":SelectedServiceList)', derivedBy='EXTENSION'. */ + struct dinServicePaymentSelectionReqType ServicePaymentSelectionReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":ServicePaymentSelectionRes, Complex type name='urn:iso:15118:2:2010:MsgBody,ServicePaymentSelectionResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode)', derivedBy='EXTENSION'. */ + struct dinServicePaymentSelectionResType ServicePaymentSelectionRes ; + /* element: "urn:iso:15118:2:2010:MsgBody":PaymentDetailsReq, Complex type name='urn:iso:15118:2:2010:MsgBody,PaymentDetailsReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain)', derivedBy='EXTENSION'. */ + struct dinPaymentDetailsReqType PaymentDetailsReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":PaymentDetailsRes, Complex type name='urn:iso:15118:2:2010:MsgBody,PaymentDetailsResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":GenChallenge,"urn:iso:15118:2:2010:MsgBody":DateTimeNow)', derivedBy='EXTENSION'. */ + struct dinPaymentDetailsResType PaymentDetailsRes ; + /* element: "urn:iso:15118:2:2010:MsgBody":ContractAuthenticationReq, Complex type name='urn:iso:15118:2:2010:MsgBody,ContractAuthenticationReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":GenChallenge{0-1})', derivedBy='EXTENSION'. */ + struct dinContractAuthenticationReqType ContractAuthenticationReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":ContractAuthenticationRes, Complex type name='urn:iso:15118:2:2010:MsgBody,ContractAuthenticationResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing)', derivedBy='EXTENSION'. */ + struct dinContractAuthenticationResType ContractAuthenticationRes ; + /* element: "urn:iso:15118:2:2010:MsgBody":ChargeParameterDiscoveryReq, Complex type name='urn:iso:15118:2:2010:MsgBody,ChargeParameterDiscoveryReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":EVRequestedEnergyTransferType,"urn:iso:15118:2:2010:MsgDataTypes":EVChargeParameter)', derivedBy='EXTENSION'. */ + struct dinChargeParameterDiscoveryReqType ChargeParameterDiscoveryReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":ChargeParameterDiscoveryRes, Complex type name='urn:iso:15118:2:2010:MsgBody,ChargeParameterDiscoveryResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing,"urn:iso:15118:2:2010:MsgDataTypes":SASchedules,"urn:iso:15118:2:2010:MsgDataTypes":EVSEChargeParameter)', derivedBy='EXTENSION'. */ + struct dinChargeParameterDiscoveryResType ChargeParameterDiscoveryRes ; + /* element: "urn:iso:15118:2:2010:MsgBody":PowerDeliveryReq, Complex type name='urn:iso:15118:2:2010:MsgBody,PowerDeliveryReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ReadyToChargeState,"urn:iso:15118:2:2010:MsgBody":ChargingProfile{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVPowerDeliveryParameter{0-1})', derivedBy='EXTENSION'. */ + struct dinPowerDeliveryReqType PowerDeliveryReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":PowerDeliveryRes, Complex type name='urn:iso:15118:2:2010:MsgBody,PowerDeliveryResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatus)', derivedBy='EXTENSION'. */ + struct dinPowerDeliveryResType PowerDeliveryRes ; + /* element: "urn:iso:15118:2:2010:MsgBody":ChargingStatusReq, Complex type name='urn:iso:15118:2:2010:MsgBody,ChargingStatusReqType', base type name='BodyBaseType', content type='EMPTY', isAbstract='false', hasTypeId='false', final='0', block='0', derivedBy='EXTENSION'. */ + struct dinChargingStatusReqType ChargingStatusReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":ChargingStatusRes, Complex type name='urn:iso:15118:2:2010:MsgBody,ChargingStatusResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEID,"urn:iso:15118:2:2010:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgBody":EVSEMaxCurrent{0-1},"urn:iso:15118:2:2010:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2010:MsgBody":ReceiptRequired,"urn:iso:15118:2:2010:MsgBody":AC_EVSEStatus)', derivedBy='EXTENSION'. */ + struct dinChargingStatusResType ChargingStatusRes ; + /* element: "urn:iso:15118:2:2010:MsgBody":MeteringReceiptReq, Complex type name='urn:iso:15118:2:2010:MsgBody,MeteringReceiptReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":SessionID,"urn:iso:15118:2:2010:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2010:MsgBody":MeterInfo)', derivedBy='EXTENSION'. */ + struct dinMeteringReceiptReqType MeteringReceiptReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":MeteringReceiptRes, Complex type name='urn:iso:15118:2:2010:MsgBody,MeteringReceiptResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":AC_EVSEStatus)', derivedBy='EXTENSION'. */ + struct dinMeteringReceiptResType MeteringReceiptRes ; + /* element: "urn:iso:15118:2:2010:MsgBody":SessionStopReq, Complex type name='urn:iso:15118:2:2010:MsgBody,SessionStopType', base type name='BodyBaseType', content type='EMPTY', isAbstract='false', hasTypeId='false', final='0', block='0', derivedBy='EXTENSION'. */ + struct dinSessionStopType SessionStopReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":SessionStopRes, Complex type name='urn:iso:15118:2:2010:MsgBody,SessionStopResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode)', derivedBy='EXTENSION'. */ + struct dinSessionStopResType SessionStopRes ; + /* element: "urn:iso:15118:2:2010:MsgBody":CertificateUpdateReq, Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateUpdateReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":ListOfRootCertificateIDs,"urn:iso:15118:2:2010:MsgBody":DHParams)', derivedBy='EXTENSION'. */ + struct dinCertificateUpdateReqType CertificateUpdateReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":CertificateUpdateRes, Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateUpdateResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2010:MsgBody":DHParams,"urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":RetryCounter)', derivedBy='EXTENSION'. */ + struct dinCertificateUpdateResType CertificateUpdateRes ; + /* element: "urn:iso:15118:2:2010:MsgBody":CertificateInstallationReq, Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateInstallationReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":OEMProvisioningCert,"urn:iso:15118:2:2010:MsgBody":ListOfRootCertificateIDs,"urn:iso:15118:2:2010:MsgBody":DHParams)', derivedBy='EXTENSION'. */ + struct dinCertificateInstallationReqType CertificateInstallationReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":CertificateInstallationRes, Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateInstallationResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2010:MsgBody":DHParams,"urn:iso:15118:2:2010:MsgBody":ContractID)', derivedBy='EXTENSION'. */ + struct dinCertificateInstallationResType CertificateInstallationRes ; + /* element: "urn:iso:15118:2:2010:MsgBody":CableCheckReq, Complex type name='urn:iso:15118:2:2010:MsgBody,CableCheckReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus)', derivedBy='EXTENSION'. */ + struct dinCableCheckReqType CableCheckReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":CableCheckRes, Complex type name='urn:iso:15118:2:2010:MsgBody,CableCheckResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing)', derivedBy='EXTENSION'. */ + struct dinCableCheckResType CableCheckRes ; + /* element: "urn:iso:15118:2:2010:MsgBody":PreChargeReq, Complex type name='urn:iso:15118:2:2010:MsgBody,PreChargeReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus,"urn:iso:15118:2:2010:MsgBody":EVTargetVoltage,"urn:iso:15118:2:2010:MsgBody":EVTargetCurrent)', derivedBy='EXTENSION'. */ + struct dinPreChargeReqType PreChargeReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":PreChargeRes, Complex type name='urn:iso:15118:2:2010:MsgBody,PreChargeResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage)', derivedBy='EXTENSION'. */ + struct dinPreChargeResType PreChargeRes ; + /* element: "urn:iso:15118:2:2010:MsgBody":CurrentDemandReq, Complex type name='urn:iso:15118:2:2010:MsgBody,CurrentDemandReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus,"urn:iso:15118:2:2010:MsgBody":EVTargetCurrent,"urn:iso:15118:2:2010:MsgBody":EVMaximumVoltageLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVMaximumCurrentLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgBody":BulkChargingComplete{0-1},"urn:iso:15118:2:2010:MsgBody":ChargingComplete,"urn:iso:15118:2:2010:MsgBody":RemainingTimeToFullSoC{0-1},"urn:iso:15118:2:2010:MsgBody":RemainingTimeToBulkSoC{0-1},"urn:iso:15118:2:2010:MsgBody":EVTargetVoltage)', derivedBy='EXTENSION'. */ + struct dinCurrentDemandReqType CurrentDemandReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":CurrentDemandRes, Complex type name='urn:iso:15118:2:2010:MsgBody,CurrentDemandResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage,"urn:iso:15118:2:2010:MsgBody":EVSEPresentCurrent,"urn:iso:15118:2:2010:MsgBody":EVSECurrentLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEVoltageLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEPowerLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEMaximumVoltageLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVSEMaximumCurrentLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVSEMaximumPowerLimit{0-1})', derivedBy='EXTENSION'. */ + struct dinCurrentDemandResType CurrentDemandRes ; + /* element: "urn:iso:15118:2:2010:MsgBody":WeldingDetectionReq, Complex type name='urn:iso:15118:2:2010:MsgBody,WeldingDetectionReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus)', derivedBy='EXTENSION'. */ + struct dinWeldingDetectionReqType WeldingDetectionReq ; + /* element: "urn:iso:15118:2:2010:MsgBody":WeldingDetectionRes, Complex type name='urn:iso:15118:2:2010:MsgBody,WeldingDetectionResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage)', derivedBy='EXTENSION'. */ + struct dinWeldingDetectionResType WeldingDetectionRes ; +#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES + }; +#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ + unsigned int BodyElement_isUsed:1; + unsigned int SessionSetupReq_isUsed:1; + unsigned int SessionSetupRes_isUsed:1; + unsigned int ServiceDiscoveryReq_isUsed:1; + unsigned int ServiceDiscoveryRes_isUsed:1; + unsigned int ServiceDetailReq_isUsed:1; + unsigned int ServiceDetailRes_isUsed:1; + unsigned int ServicePaymentSelectionReq_isUsed:1; + unsigned int ServicePaymentSelectionRes_isUsed:1; + unsigned int PaymentDetailsReq_isUsed:1; + unsigned int PaymentDetailsRes_isUsed:1; + unsigned int ContractAuthenticationReq_isUsed:1; + unsigned int ContractAuthenticationRes_isUsed:1; + unsigned int ChargeParameterDiscoveryReq_isUsed:1; + unsigned int ChargeParameterDiscoveryRes_isUsed:1; + unsigned int PowerDeliveryReq_isUsed:1; + unsigned int PowerDeliveryRes_isUsed:1; + unsigned int ChargingStatusReq_isUsed:1; + unsigned int ChargingStatusRes_isUsed:1; + unsigned int MeteringReceiptReq_isUsed:1; + unsigned int MeteringReceiptRes_isUsed:1; + unsigned int SessionStopReq_isUsed:1; + unsigned int SessionStopRes_isUsed:1; + unsigned int CertificateUpdateReq_isUsed:1; + unsigned int CertificateUpdateRes_isUsed:1; + unsigned int CertificateInstallationReq_isUsed:1; + unsigned int CertificateInstallationRes_isUsed:1; + unsigned int CableCheckReq_isUsed:1; + unsigned int CableCheckRes_isUsed:1; + unsigned int PreChargeReq_isUsed:1; + unsigned int PreChargeRes_isUsed:1; + unsigned int CurrentDemandReq_isUsed:1; + unsigned int CurrentDemandRes_isUsed:1; + unsigned int WeldingDetectionReq_isUsed:1; + unsigned int WeldingDetectionRes_isUsed:1; +}; + +/* Complex type name='urn:iso:15118:2:2010:MsgDef,#AnonType_V2G_Message', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDef":Header,"urn:iso:15118:2:2010:MsgDef":Body)', derivedBy='RESTRICTION'. */ +struct dinAnonType_V2G_Message { + /* element: "urn:iso:15118:2:2010:MsgDef":Header, Complex type name='urn:iso:15118:2:2010:MsgHeader,MessageHeaderType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgHeader":SessionID,"urn:iso:15118:2:2010:MsgHeader":Notification{0-1},"http://www.w3.org/2000/09/xmldsig#":Signature{0-1})', derivedBy='RESTRICTION'. */ + struct dinMessageHeaderType Header ; + /* element: "urn:iso:15118:2:2010:MsgDef":Body, Complex type name='urn:iso:15118:2:2010:MsgDef,BodyType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDef":BodyElement{0-1})', derivedBy='RESTRICTION'. */ + struct dinBodyType Body ; +}; + + + +#define dinEXIDocument_MgmtData_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinEXIDocument_KeyName_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinEXIDocument_DigestValue_BYTES_SIZE 350 +#define dinEXIFragment_Certificate_BYTES_SIZE 1200 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,certificateType is 1200 */ +#define dinEXIFragment_stringValue_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinEXIFragment_OEMProvisioningCert_BYTES_SIZE 1200 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,certificateType is 1200 */ +#define dinEXIFragment_Exponent_BYTES_SIZE 350 +#define dinEXIFragment_SessionID_BYTES_SIZE 8 /* XML schema facet length for urn:iso:15118:2:2010:MsgDataTypes,sessionIDType is 8 */ +#define dinEXIFragment_PgenCounter_BYTES_SIZE 350 +#define dinEXIFragment_EVCCID_BYTES_SIZE 8 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,evccIDType is 8 */ +#define dinEXIFragment_RootCertificateID_CHARACTERS_SIZE 40 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,rootCertificateIDType is 40 */ +#define dinEXIFragment_PGPKeyPacket_BYTES_SIZE 350 +#define dinEXIFragment_Seed_BYTES_SIZE 350 +#define dinEXIFragment_XPath_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinEXIFragment_ContractID_CHARACTERS_SIZE 24 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,contractIDType is 24 */ +#define dinEXIFragment_MgmtData_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinEXIFragment_P_BYTES_SIZE 350 +#define dinEXIFragment_Q_BYTES_SIZE 350 +#define dinEXIFragment_X509SubjectName_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinEXIFragment_G_BYTES_SIZE 350 +#define dinEXIFragment_J_BYTES_SIZE 350 +#define dinEXIFragment_X509CRL_BYTES_SIZE 350 +#define dinEXIFragment_Y_BYTES_SIZE 350 +#define dinEXIFragment_DigestValue_BYTES_SIZE 350 +#define dinEXIFragment_ContractSignatureEncryptedPrivateKey_BYTES_SIZE 128 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,privateKeyType is 128 */ +#define dinEXIFragment_SPKISexp_BYTES_SIZE 350 +#define dinEXIFragment_DHParams_BYTES_SIZE 256 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,dHParamsType is 256 */ +#define dinEXIFragment_PGPKeyID_BYTES_SIZE 350 +#define dinEXIFragment_X509Certificate_BYTES_SIZE 350 +#define dinEXIFragment_ServiceName_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,serviceNameType is 32 */ +#define dinEXIFragment_EVSEID_BYTES_SIZE 32 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,evseIDType is 32 */ +#define dinEXIFragment_ServiceScope_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,serviceScopeType is 32 */ +#define dinEXIFragment_GenChallenge_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinEXIFragment_SalesTariffDescription_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,tariffDescriptionType is 32 */ +#define dinEXIFragment_FaultMsg_CHARACTERS_SIZE 64 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,faultMsgType is 64 */ +#define dinEXIFragment_KeyName_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinEXIFragment_SigMeterReading_BYTES_SIZE 32 /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,sigMeterReadingType is 32 */ +#define dinEXIFragment_X509SKI_BYTES_SIZE 350 +#define dinEXIFragment_X509IssuerName_CHARACTERS_SIZE 50 + EXTRA_CHAR +#define dinEXIFragment_MeterID_CHARACTERS_SIZE 32 + EXTRA_CHAR /* XML schema facet maxLength for urn:iso:15118:2:2010:MsgDataTypes,meterIDType is 32 */ +#define dinEXIFragment_Modulus_BYTES_SIZE 350 + + +/* Global elements of EXI Document */ +struct dinEXIDocument { +#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES + union { +#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ + struct dinBodyBaseType BodyElement ; + struct dinAnonType_V2G_Message V2G_Message ; + struct dinSignaturePropertyType SignatureProperty ; + struct dinDSAKeyValueType DSAKeyValue ; + struct dinSignaturePropertiesType SignatureProperties ; + struct dinKeyValueType KeyValue ; + struct dinTransformsType Transforms ; + struct dinDigestMethodType DigestMethod ; + struct dinSignatureType Signature ; + struct dinRetrievalMethodType RetrievalMethod ; + struct dinManifestType Manifest ; + struct dinReferenceType Reference ; + struct dinCanonicalizationMethodType CanonicalizationMethod ; + struct dinRSAKeyValueType RSAKeyValue ; + struct dinTransformType Transform ; + struct dinPGPDataType PGPData ; + struct { + exi_string_character_t characters[dinEXIDocument_MgmtData_CHARACTERS_SIZE]; + uint16_t charactersLen; + } MgmtData ; + struct dinSignatureMethodType SignatureMethod ; + struct dinKeyInfoType KeyInfo ; + struct dinSPKIDataType SPKIData ; + struct dinX509DataType X509Data ; + struct dinSignatureValueType SignatureValue ; + struct { + exi_string_character_t characters[dinEXIDocument_KeyName_CHARACTERS_SIZE]; + uint16_t charactersLen; + } KeyName ; + struct { + uint8_t bytes[dinEXIDocument_DigestValue_BYTES_SIZE]; + uint16_t bytesLen; + } DigestValue ; + struct dinSignedInfoType SignedInfo ; + struct dinObjectType Object ; + struct dinDC_EVSEStatusType DC_EVSEStatus ; + struct dinRelativeTimeIntervalType RelativeTimeInterval ; + struct dinSalesTariffEntryType SalesTariffEntry ; + struct dinDC_EVPowerDeliveryParameterType DC_EVPowerDeliveryParameter ; + struct dinSASchedulesType SASchedules ; + struct dinAC_EVChargeParameterType AC_EVChargeParameter ; + struct dinSAScheduleListType SAScheduleList ; + struct dinDC_EVStatusType DC_EVStatus ; + struct dinServiceChargeType ServiceCharge ; + struct dinEVStatusType EVStatus ; + struct dinDC_EVChargeParameterType DC_EVChargeParameter ; + struct dinDC_EVSEChargeParameterType DC_EVSEChargeParameter ; + struct dinEVSEStatusType EVSEStatus ; + struct dinIntervalType TimeInterval ; + struct dinEVPowerDeliveryParameterType EVPowerDeliveryParameter ; + struct dinEVSEChargeParameterType EVSEChargeParameter ; + struct dinAC_EVSEStatusType AC_EVSEStatus ; + struct dinEntryType Entry ; + struct dinAC_EVSEChargeParameterType AC_EVSEChargeParameter ; + struct dinPMaxScheduleEntryType PMaxScheduleEntry ; + struct dinEVChargeParameterType EVChargeParameter ; + struct dinServiceDiscoveryReqType ServiceDiscoveryReq ; + struct dinServiceDiscoveryResType ServiceDiscoveryRes ; + struct dinMeteringReceiptReqType MeteringReceiptReq ; + struct dinPaymentDetailsReqType PaymentDetailsReq ; + struct dinMeteringReceiptResType MeteringReceiptRes ; + struct dinPaymentDetailsResType PaymentDetailsRes ; + struct dinSessionSetupReqType SessionSetupReq ; + struct dinSessionSetupResType SessionSetupRes ; + struct dinCableCheckReqType CableCheckReq ; + struct dinCableCheckResType CableCheckRes ; + struct dinContractAuthenticationReqType ContractAuthenticationReq ; + struct dinCertificateInstallationReqType CertificateInstallationReq ; + struct dinContractAuthenticationResType ContractAuthenticationRes ; + struct dinCertificateInstallationResType CertificateInstallationRes ; + struct dinWeldingDetectionReqType WeldingDetectionReq ; + struct dinWeldingDetectionResType WeldingDetectionRes ; + struct dinCertificateUpdateReqType CertificateUpdateReq ; + struct dinCertificateUpdateResType CertificateUpdateRes ; + struct dinPowerDeliveryReqType PowerDeliveryReq ; + struct dinPowerDeliveryResType PowerDeliveryRes ; + struct dinChargingStatusReqType ChargingStatusReq ; + struct dinChargingStatusResType ChargingStatusRes ; + struct dinCurrentDemandReqType CurrentDemandReq ; + struct dinPreChargeReqType PreChargeReq ; + struct dinCurrentDemandResType CurrentDemandRes ; + struct dinPreChargeResType PreChargeRes ; + struct dinServicePaymentSelectionReqType ServicePaymentSelectionReq ; + struct dinSessionStopType SessionStopReq ; + struct dinServicePaymentSelectionResType ServicePaymentSelectionRes ; + struct dinSessionStopResType SessionStopRes ; + struct dinChargeParameterDiscoveryReqType ChargeParameterDiscoveryReq ; + struct dinChargeParameterDiscoveryResType ChargeParameterDiscoveryRes ; + struct dinServiceDetailReqType ServiceDetailReq ; + struct dinServiceDetailResType ServiceDetailRes ; +#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES + }; +#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ + unsigned int BodyElement_isUsed:1; + unsigned int V2G_Message_isUsed:1; + unsigned int SignatureProperty_isUsed:1; + unsigned int DSAKeyValue_isUsed:1; + unsigned int SignatureProperties_isUsed:1; + unsigned int KeyValue_isUsed:1; + unsigned int Transforms_isUsed:1; + unsigned int DigestMethod_isUsed:1; + unsigned int Signature_isUsed:1; + unsigned int RetrievalMethod_isUsed:1; + unsigned int Manifest_isUsed:1; + unsigned int Reference_isUsed:1; + unsigned int CanonicalizationMethod_isUsed:1; + unsigned int RSAKeyValue_isUsed:1; + unsigned int Transform_isUsed:1; + unsigned int PGPData_isUsed:1; + unsigned int MgmtData_isUsed:1; + unsigned int SignatureMethod_isUsed:1; + unsigned int KeyInfo_isUsed:1; + unsigned int SPKIData_isUsed:1; + unsigned int X509Data_isUsed:1; + unsigned int SignatureValue_isUsed:1; + unsigned int KeyName_isUsed:1; + unsigned int DigestValue_isUsed:1; + unsigned int SignedInfo_isUsed:1; + unsigned int Object_isUsed:1; + unsigned int DC_EVSEStatus_isUsed:1; + unsigned int RelativeTimeInterval_isUsed:1; + unsigned int SalesTariffEntry_isUsed:1; + unsigned int DC_EVPowerDeliveryParameter_isUsed:1; + unsigned int SASchedules_isUsed:1; + unsigned int AC_EVChargeParameter_isUsed:1; + unsigned int SAScheduleList_isUsed:1; + unsigned int DC_EVStatus_isUsed:1; + unsigned int ServiceCharge_isUsed:1; + unsigned int EVStatus_isUsed:1; + unsigned int DC_EVChargeParameter_isUsed:1; + unsigned int DC_EVSEChargeParameter_isUsed:1; + unsigned int EVSEStatus_isUsed:1; + unsigned int TimeInterval_isUsed:1; + unsigned int EVPowerDeliveryParameter_isUsed:1; + unsigned int EVSEChargeParameter_isUsed:1; + unsigned int AC_EVSEStatus_isUsed:1; + unsigned int Entry_isUsed:1; + unsigned int AC_EVSEChargeParameter_isUsed:1; + unsigned int PMaxScheduleEntry_isUsed:1; + unsigned int EVChargeParameter_isUsed:1; + unsigned int ServiceDiscoveryReq_isUsed:1; + unsigned int ServiceDiscoveryRes_isUsed:1; + unsigned int MeteringReceiptReq_isUsed:1; + unsigned int PaymentDetailsReq_isUsed:1; + unsigned int MeteringReceiptRes_isUsed:1; + unsigned int PaymentDetailsRes_isUsed:1; + unsigned int SessionSetupReq_isUsed:1; + unsigned int SessionSetupRes_isUsed:1; + unsigned int CableCheckReq_isUsed:1; + unsigned int CableCheckRes_isUsed:1; + unsigned int ContractAuthenticationReq_isUsed:1; + unsigned int CertificateInstallationReq_isUsed:1; + unsigned int ContractAuthenticationRes_isUsed:1; + unsigned int CertificateInstallationRes_isUsed:1; + unsigned int WeldingDetectionReq_isUsed:1; + unsigned int WeldingDetectionRes_isUsed:1; + unsigned int CertificateUpdateReq_isUsed:1; + unsigned int CertificateUpdateRes_isUsed:1; + unsigned int PowerDeliveryReq_isUsed:1; + unsigned int PowerDeliveryRes_isUsed:1; + unsigned int ChargingStatusReq_isUsed:1; + unsigned int ChargingStatusRes_isUsed:1; + unsigned int CurrentDemandReq_isUsed:1; + unsigned int PreChargeReq_isUsed:1; + unsigned int CurrentDemandRes_isUsed:1; + unsigned int PreChargeRes_isUsed:1; + unsigned int ServicePaymentSelectionReq_isUsed:1; + unsigned int SessionStopReq_isUsed:1; + unsigned int ServicePaymentSelectionRes_isUsed:1; + unsigned int SessionStopRes_isUsed:1; + unsigned int ChargeParameterDiscoveryReq_isUsed:1; + unsigned int ChargeParameterDiscoveryRes_isUsed:1; + unsigned int ServiceDetailReq_isUsed:1; + unsigned int ServiceDetailRes_isUsed:1; + + + int _warning_; +}; + + +#if DEPLOY_DIN_CODEC_FRAGMENT == SUPPORT_YES +/* Possible elements of EXI Fragment */ +struct dinEXIFragment { +#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES + union { +#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ + dinunitSymbolType Unit ; + struct dinPhysicalValueType EVSEMaximumCurrentLimit ; + struct dinEVPowerDeliveryParameterType EVPowerDeliveryParameter ; + int16_t ChargingProfileEntryMaxPower ; + int64_t TMeter ; + int EVSEPowerLimitAchieved ; + uint32_t duration ; + struct dinPhysicalValueType EVMaximumCurrentLimit ; + struct dinParameterType Parameter ; + dinEVSEProcessingType EVSEProcessing ; + struct dinAC_EVChargeParameterType AC_EVChargeParameter ; + struct dinPMaxScheduleEntryType PMaxScheduleEntry ; + struct dinPhysicalValueType EVSEMaximumVoltageLimit ; + struct dinSelectedServiceType SelectedService ; + struct { + uint8_t bytes[dinEXIFragment_Certificate_BYTES_SIZE]; + uint16_t bytesLen; + } Certificate ; + struct dinPhysicalValueType EVSEMaximumPowerLimit ; + int EVReady ; + int64_t X509SerialNumber ; + struct dinRetrievalMethodType RetrievalMethod ; + int16_t RetryCounter ; + struct dinDC_EVSEStatusType DC_EVSEStatus ; + struct dinMeteringReceiptReqType MeteringReceiptReq ; + int ReadyToChargeState ; + int8_t Multiplier ; + uint8_t EPriceLevel ; + struct { + exi_string_character_t characters[dinEXIFragment_stringValue_CHARACTERS_SIZE]; + uint16_t charactersLen; + } stringValue ; + struct dinServiceDiscoveryReqType ServiceDiscoveryReq ; + struct dinTransformsType Transforms ; + struct dinMeteringReceiptResType MeteringReceiptRes ; + struct dinPreChargeReqType PreChargeReq ; + struct { + uint8_t bytes[dinEXIFragment_OEMProvisioningCert_BYTES_SIZE]; + uint16_t bytesLen; + } OEMProvisioningCert ; + struct dinServiceDiscoveryResType ServiceDiscoveryRes ; + dinresponseCodeType ResponseCode ; + struct dinContractAuthenticationReqType ContractAuthenticationReq ; + struct dinCertificateChainType ContractSignatureCertChain ; + struct dinContractAuthenticationResType ContractAuthenticationRes ; + int64_t HMACOutputLength ; + int BulkChargingComplete ; + struct { + uint8_t bytes[dinEXIFragment_Exponent_BYTES_SIZE]; + uint16_t bytesLen; + } Exponent ; + struct dinDC_EVStatusType DC_EVStatus ; + struct dinSAScheduleTupleType SAScheduleTuple ; + uint32_t DepartureTime ; + struct dinX509IssuerSerialType X509IssuerSerial ; + int16_t SAScheduleTupleID ; + struct dinSPKIDataType SPKIData ; + struct dinRelativeTimeIntervalType RelativeTimeInterval ; + struct dinPhysicalValueType EVEnergyRequest ; + struct dinPreChargeResType PreChargeRes ; + struct { + uint8_t bytes[dinEXIFragment_SessionID_BYTES_SIZE]; + uint16_t bytesLen; + } SessionID ; + struct dinPMaxScheduleType PMaxSchedule ; + struct dinServiceChargeType ServiceCharge ; + struct { + uint8_t bytes[dinEXIFragment_PgenCounter_BYTES_SIZE]; + uint16_t bytesLen; + } PgenCounter ; + struct dinChargingStatusReqType ChargingStatusReq ; + struct dinX509DataType X509Data ; + struct dinSalesTariffEntryType SalesTariffEntry ; + struct dinKeyValueType KeyValue ; + struct dinChargingStatusResType ChargingStatusRes ; + struct dinAnonType_V2G_Message V2G_Message ; + struct dinServicePaymentSelectionReqType ServicePaymentSelectionReq ; + dinisolationLevelType EVSEIsolationStatus ; + struct dinServicePaymentSelectionResType ServicePaymentSelectionRes ; + struct dinPhysicalValueType EVSEPresentVoltage ; + struct dinBodyBaseType BodyElement ; + struct { + uint8_t bytes[dinEXIFragment_EVCCID_BYTES_SIZE]; + uint16_t bytesLen; + } EVCCID ; + struct dinPGPDataType PGPData ; + struct { + exi_string_character_t characters[dinEXIFragment_RootCertificateID_CHARACTERS_SIZE]; + uint16_t charactersLen; + } RootCertificateID ; + dinfaultCodeType FaultCode ; + struct dinCableCheckReqType CableCheckReq ; + int EVSEVoltageLimitAchieved ; + int EVRESSConditioning ; + struct dinMeterInfoType MeterInfo ; + struct dinCableCheckResType CableCheckRes ; + uint32_t ChargingProfileEntryStart ; + struct dinSignaturePropertyType SignatureProperty ; + struct dinPhysicalValueType EVMaxCurrent ; + struct { + uint8_t bytes[dinEXIFragment_PGPKeyPacket_BYTES_SIZE]; + uint16_t bytesLen; + } PGPKeyPacket ; + struct { + uint8_t bytes[dinEXIFragment_Seed_BYTES_SIZE]; + uint16_t bytesLen; + } Seed ; + struct dinRSAKeyValueType RSAKeyValue ; + dincostKindType costKind ; + struct dinPhysicalValueType EAmount ; + struct dinPhysicalValueType EVSEPresentCurrent ; + struct dinPowerDeliveryResType PowerDeliveryRes ; + uint8_t NumEPriceLevels ; + struct dinSessionStopResType SessionStopRes ; + struct dinPowerDeliveryReqType PowerDeliveryReq ; + struct dinSessionStopType SessionStopReq ; + struct { + exi_string_character_t characters[dinEXIFragment_XPath_CHARACTERS_SIZE]; + uint16_t charactersLen; + } XPath ; + int8_t BulkSOC ; + int16_t PMax ; + int16_t ParameterSetID ; + struct { + exi_string_character_t characters[dinEXIFragment_ContractID_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ContractID ; + struct dinSignatureType Signature ; + struct dinPhysicalValueType EVMaxVoltage ; + int ReceiptRequired ; + int ChargingComplete ; + struct dinChargingProfileType ChargingProfile ; + struct dinPaymentOptionsType PaymentOptions ; + struct dinSessionSetupResType SessionSetupRes ; + struct dinServiceDetailResType ServiceDetailRes ; + struct dinDC_EVPowerDeliveryParameterType DC_EVPowerDeliveryParameter ; + struct dinPaymentDetailsResType PaymentDetailsRes ; + struct dinPaymentDetailsReqType PaymentDetailsReq ; + struct { + exi_string_character_t characters[dinEXIFragment_MgmtData_CHARACTERS_SIZE]; + uint16_t charactersLen; + } MgmtData ; + int16_t Value ; + dinEVSENotificationType EVSENotification ; + struct dinPhysicalValueType EVTargetCurrent ; + struct dinPhysicalValueType RemainingTimeToBulkSoC ; + struct dinSessionSetupReqType SessionSetupReq ; + int EVSECurrentLimitAchieved ; + struct dinServiceDetailReqType ServiceDetailReq ; + int8_t byteValue ; + struct dinPhysicalValueType EVMaximumPowerLimit ; + int PowerSwitchClosed ; + struct dinManifestType Manifest ; + struct { + uint8_t bytes[dinEXIFragment_P_BYTES_SIZE]; + uint16_t bytesLen; + } P ; + struct dinSAScheduleListType SAScheduleList ; + struct { + uint8_t bytes[dinEXIFragment_Q_BYTES_SIZE]; + uint16_t bytesLen; + } Q ; + struct { + exi_string_character_t characters[dinEXIFragment_X509SubjectName_CHARACTERS_SIZE]; + uint16_t charactersLen; + } X509SubjectName ; + struct { + uint8_t bytes[dinEXIFragment_G_BYTES_SIZE]; + uint16_t bytesLen; + } G ; + struct { + uint8_t bytes[dinEXIFragment_J_BYTES_SIZE]; + uint16_t bytesLen; + } J ; + struct dinCertificateInstallationResType CertificateInstallationRes ; + struct dinCertificateInstallationReqType CertificateInstallationReq ; + struct dinSalesTariffType SalesTariff ; + struct dinMessageHeaderType Header ; + struct dinPhysicalValueType EVSEMinimumCurrentLimit ; + struct { + uint8_t bytes[dinEXIFragment_X509CRL_BYTES_SIZE]; + uint16_t bytesLen; + } X509CRL ; + struct { + uint8_t bytes[dinEXIFragment_Y_BYTES_SIZE]; + uint16_t bytesLen; + } Y ; + struct { + uint8_t bytes[dinEXIFragment_DigestValue_BYTES_SIZE]; + uint16_t bytesLen; + } DigestValue ; + struct dinDC_EVChargeParameterType DC_EVChargeParameter ; + struct { + uint8_t bytes[dinEXIFragment_ContractSignatureEncryptedPrivateKey_BYTES_SIZE]; + uint16_t bytesLen; + } ContractSignatureEncryptedPrivateKey ; + struct dinDigestMethodType DigestMethod ; + struct { + uint8_t bytes[dinEXIFragment_SPKISexp_BYTES_SIZE]; + uint16_t bytesLen; + } SPKISexp ; + struct dinServiceChargeType ChargeService ; + struct dinPhysicalValueType EVSEEnergyToBeDelivered ; + struct dinSignaturePropertiesType SignatureProperties ; + struct dinPhysicalValueType EVSEMaxCurrent ; + struct dinEVSEStatusType EVSEStatus ; + struct dinServiceType Service ; + struct { + uint8_t bytes[dinEXIFragment_DHParams_BYTES_SIZE]; + uint16_t bytesLen; + } DHParams ; + struct { + uint8_t bytes[dinEXIFragment_PGPKeyID_BYTES_SIZE]; + uint16_t bytesLen; + } PGPKeyID ; + struct dinDSAKeyValueType DSAKeyValue ; + dinEVSESupportedEnergyTransferType EnergyTransferType ; + struct dinWeldingDetectionResType WeldingDetectionRes ; + int FreeService ; + struct dinSelectedServiceListType SelectedServiceList ; + struct dinWeldingDetectionReqType WeldingDetectionReq ; + struct dinPhysicalValueType EVTargetVoltage ; + struct dinCanonicalizationMethodType CanonicalizationMethod ; + struct { + uint8_t bytes[dinEXIFragment_X509Certificate_BYTES_SIZE]; + uint16_t bytesLen; + } X509Certificate ; + struct dinCertificateUpdateResType CertificateUpdateRes ; + struct dinCertificateUpdateReqType CertificateUpdateReq ; + struct dinPhysicalValueType EVSEMaxVoltage ; + struct dinSignedInfoType SignedInfo ; + struct dinAC_EVSEChargeParameterType AC_EVSEChargeParameter ; + struct dinPhysicalValueType EVEnergyCapacity ; + uint16_t ServiceID ; + struct dinPhysicalValueType EVSECurrentRegulationTolerance ; + struct dinServiceParameterListType ServiceParameterList ; + struct dinListOfRootCertificateIDsType ListOfRootCertificateIDs ; + struct dinProfileEntryType ProfileEntry ; + struct dinPhysicalValueType EVSEMinimumVoltageLimit ; + struct dinCurrentDemandResType CurrentDemandRes ; + int8_t EVRESSSOC ; + struct dinPhysicalValueType MeterReading ; + struct dinCurrentDemandReqType CurrentDemandReq ; + struct dinPhysicalValueType physicalValue ; + struct dinIntervalType TimeInterval ; + struct dinAC_EVSEStatusType AC_EVSEStatus ; + struct dinPhysicalValueType EVMaximumVoltageLimit ; + struct dinSignatureValueType SignatureValue ; + int64_t DateTimeNow ; + struct dinServiceTagType ServiceTag ; + int32_t intValue ; + dinpaymentOptionType SelectedPaymentOption ; + struct { + exi_string_character_t characters[dinEXIFragment_ServiceName_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ServiceName ; + int EVCabinConditioning ; + struct { + uint8_t bytes[dinEXIFragment_EVSEID_BYTES_SIZE]; + uint16_t bytesLen; + } EVSEID ; + struct { + exi_string_character_t characters[dinEXIFragment_ServiceScope_CHARACTERS_SIZE]; + uint16_t charactersLen; + } ServiceScope ; + int16_t MeterStatus ; + dinEVRequestedEnergyTransferType EVRequestedEnergyTransferType ; + dinserviceCategoryType ServiceCategory ; + struct { + exi_string_character_t characters[dinEXIFragment_GenChallenge_CHARACTERS_SIZE]; + uint16_t charactersLen; + } GenChallenge ; + struct { + exi_string_character_t characters[dinEXIFragment_SalesTariffDescription_CHARACTERS_SIZE]; + uint16_t charactersLen; + } SalesTariffDescription ; + uint32_t NotificationMaxDelay ; + int boolValue ; + dinDC_EVSEStatusCodeType EVSEStatusCode ; + struct { + exi_string_character_t characters[dinEXIFragment_FaultMsg_CHARACTERS_SIZE]; + uint16_t charactersLen; + } FaultMsg ; + struct { + exi_string_character_t characters[dinEXIFragment_KeyName_CHARACTERS_SIZE]; + uint16_t charactersLen; + } KeyName ; + struct dinParameterSetType ParameterSet ; + struct { + uint8_t bytes[dinEXIFragment_SigMeterReading_BYTES_SIZE]; + uint16_t bytesLen; + } SigMeterReading ; + struct dinEVSEChargeParameterType EVSEChargeParameter ; + struct dinBodyType Body ; + struct dinSASchedulesType SASchedules ; + struct dinKeyInfoType KeyInfo ; + int16_t PMaxScheduleID ; + struct dinPhysicalValueType RemainingTimeToFullSoC ; + struct dinEVStatusType EVStatus ; + struct dinSubCertificatesType SubCertificates ; + dinpaymentOptionType PaymentOption ; + struct { + uint8_t bytes[dinEXIFragment_X509SKI_BYTES_SIZE]; + uint16_t bytesLen; + } X509SKI ; + struct dinServiceTagListType ServiceList ; + struct dinCostType Cost ; + struct dinSignatureMethodType SignatureMethod ; + struct dinPhysicalValueType EVSEMinCurrent ; + struct dinConsumptionCostType ConsumptionCost ; + struct dinPhysicalValueType EVSEPeakCurrentRipple ; + dinDC_EVErrorCodeType EVErrorCode ; + struct dinEVChargeParameterType EVChargeParameter ; + uint32_t start ; + struct { + exi_string_character_t characters[dinEXIFragment_X509IssuerName_CHARACTERS_SIZE]; + uint16_t charactersLen; + } X509IssuerName ; + struct dinReferenceType Reference ; + struct dinPhysicalValueType EVMinCurrent ; + int8_t FullSOC ; + uint32_t amount ; + int16_t shortValue ; + struct dinDC_EVSEChargeParameterType DC_EVSEChargeParameter ; + struct dinEntryType Entry ; + int16_t SalesTariffID ; + struct { + exi_string_character_t characters[dinEXIFragment_MeterID_CHARACTERS_SIZE]; + uint16_t charactersLen; + } MeterID ; + struct dinChargeParameterDiscoveryReqType ChargeParameterDiscoveryReq ; + int8_t amountMultiplier ; + struct dinChargeParameterDiscoveryResType ChargeParameterDiscoveryRes ; + struct dinTransformType Transform ; + struct dinObjectType Object ; + int RCD ; + struct dinNotificationType Notification ; + uint32_t startValue ; + struct { + uint8_t bytes[dinEXIFragment_Modulus_BYTES_SIZE]; + uint16_t bytesLen; + } Modulus ; +#if SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES + }; +#endif /* SAVE_MEMORY_WITH_UNNAMED_UNION == UNION_YES */ + unsigned int Unit_isUsed:1; + unsigned int EVSEMaximumCurrentLimit_isUsed:1; + unsigned int EVPowerDeliveryParameter_isUsed:1; + unsigned int ChargingProfileEntryMaxPower_isUsed:1; + unsigned int TMeter_isUsed:1; + unsigned int EVSEPowerLimitAchieved_isUsed:1; + unsigned int duration_isUsed:1; + unsigned int EVMaximumCurrentLimit_isUsed:1; + unsigned int Parameter_isUsed:1; + unsigned int EVSEProcessing_isUsed:1; + unsigned int AC_EVChargeParameter_isUsed:1; + unsigned int PMaxScheduleEntry_isUsed:1; + unsigned int EVSEMaximumVoltageLimit_isUsed:1; + unsigned int SelectedService_isUsed:1; + unsigned int Certificate_isUsed:1; + unsigned int EVSEMaximumPowerLimit_isUsed:1; + unsigned int EVReady_isUsed:1; + unsigned int X509SerialNumber_isUsed:1; + unsigned int RetrievalMethod_isUsed:1; + unsigned int RetryCounter_isUsed:1; + unsigned int DC_EVSEStatus_isUsed:1; + unsigned int MeteringReceiptReq_isUsed:1; + unsigned int ReadyToChargeState_isUsed:1; + unsigned int Multiplier_isUsed:1; + unsigned int EPriceLevel_isUsed:1; + unsigned int stringValue_isUsed:1; + unsigned int ServiceDiscoveryReq_isUsed:1; + unsigned int Transforms_isUsed:1; + unsigned int MeteringReceiptRes_isUsed:1; + unsigned int PreChargeReq_isUsed:1; + unsigned int OEMProvisioningCert_isUsed:1; + unsigned int ServiceDiscoveryRes_isUsed:1; + unsigned int ResponseCode_isUsed:1; + unsigned int ContractAuthenticationReq_isUsed:1; + unsigned int ContractSignatureCertChain_isUsed:1; + unsigned int ContractAuthenticationRes_isUsed:1; + unsigned int HMACOutputLength_isUsed:1; + unsigned int BulkChargingComplete_isUsed:1; + unsigned int Exponent_isUsed:1; + unsigned int DC_EVStatus_isUsed:1; + unsigned int SAScheduleTuple_isUsed:1; + unsigned int DepartureTime_isUsed:1; + unsigned int X509IssuerSerial_isUsed:1; + unsigned int SAScheduleTupleID_isUsed:1; + unsigned int SPKIData_isUsed:1; + unsigned int RelativeTimeInterval_isUsed:1; + unsigned int EVEnergyRequest_isUsed:1; + unsigned int PreChargeRes_isUsed:1; + unsigned int SessionID_isUsed:1; + unsigned int PMaxSchedule_isUsed:1; + unsigned int ServiceCharge_isUsed:1; + unsigned int PgenCounter_isUsed:1; + unsigned int ChargingStatusReq_isUsed:1; + unsigned int X509Data_isUsed:1; + unsigned int SalesTariffEntry_isUsed:1; + unsigned int KeyValue_isUsed:1; + unsigned int ChargingStatusRes_isUsed:1; + unsigned int V2G_Message_isUsed:1; + unsigned int ServicePaymentSelectionReq_isUsed:1; + unsigned int EVSEIsolationStatus_isUsed:1; + unsigned int ServicePaymentSelectionRes_isUsed:1; + unsigned int EVSEPresentVoltage_isUsed:1; + unsigned int BodyElement_isUsed:1; + unsigned int EVCCID_isUsed:1; + unsigned int PGPData_isUsed:1; + unsigned int RootCertificateID_isUsed:1; + unsigned int FaultCode_isUsed:1; + unsigned int CableCheckReq_isUsed:1; + unsigned int EVSEVoltageLimitAchieved_isUsed:1; + unsigned int EVRESSConditioning_isUsed:1; + unsigned int MeterInfo_isUsed:1; + unsigned int CableCheckRes_isUsed:1; + unsigned int ChargingProfileEntryStart_isUsed:1; + unsigned int SignatureProperty_isUsed:1; + unsigned int EVMaxCurrent_isUsed:1; + unsigned int PGPKeyPacket_isUsed:1; + unsigned int Seed_isUsed:1; + unsigned int RSAKeyValue_isUsed:1; + unsigned int costKind_isUsed:1; + unsigned int EAmount_isUsed:1; + unsigned int EVSEPresentCurrent_isUsed:1; + unsigned int PowerDeliveryRes_isUsed:1; + unsigned int NumEPriceLevels_isUsed:1; + unsigned int SessionStopRes_isUsed:1; + unsigned int PowerDeliveryReq_isUsed:1; + unsigned int SessionStopReq_isUsed:1; + unsigned int XPath_isUsed:1; + unsigned int BulkSOC_isUsed:1; + unsigned int PMax_isUsed:1; + unsigned int ParameterSetID_isUsed:1; + unsigned int ContractID_isUsed:1; + unsigned int Signature_isUsed:1; + unsigned int EVMaxVoltage_isUsed:1; + unsigned int ReceiptRequired_isUsed:1; + unsigned int ChargingComplete_isUsed:1; + unsigned int ChargingProfile_isUsed:1; + unsigned int PaymentOptions_isUsed:1; + unsigned int SessionSetupRes_isUsed:1; + unsigned int ServiceDetailRes_isUsed:1; + unsigned int DC_EVPowerDeliveryParameter_isUsed:1; + unsigned int PaymentDetailsRes_isUsed:1; + unsigned int PaymentDetailsReq_isUsed:1; + unsigned int MgmtData_isUsed:1; + unsigned int Value_isUsed:1; + unsigned int EVSENotification_isUsed:1; + unsigned int EVTargetCurrent_isUsed:1; + unsigned int RemainingTimeToBulkSoC_isUsed:1; + unsigned int SessionSetupReq_isUsed:1; + unsigned int EVSECurrentLimitAchieved_isUsed:1; + unsigned int ServiceDetailReq_isUsed:1; + unsigned int byteValue_isUsed:1; + unsigned int EVMaximumPowerLimit_isUsed:1; + unsigned int PowerSwitchClosed_isUsed:1; + unsigned int Manifest_isUsed:1; + unsigned int P_isUsed:1; + unsigned int SAScheduleList_isUsed:1; + unsigned int Q_isUsed:1; + unsigned int X509SubjectName_isUsed:1; + unsigned int G_isUsed:1; + unsigned int J_isUsed:1; + unsigned int CertificateInstallationRes_isUsed:1; + unsigned int CertificateInstallationReq_isUsed:1; + unsigned int SalesTariff_isUsed:1; + unsigned int Header_isUsed:1; + unsigned int EVSEMinimumCurrentLimit_isUsed:1; + unsigned int X509CRL_isUsed:1; + unsigned int Y_isUsed:1; + unsigned int DigestValue_isUsed:1; + unsigned int DC_EVChargeParameter_isUsed:1; + unsigned int ContractSignatureEncryptedPrivateKey_isUsed:1; + unsigned int DigestMethod_isUsed:1; + unsigned int SPKISexp_isUsed:1; + unsigned int ChargeService_isUsed:1; + unsigned int EVSEEnergyToBeDelivered_isUsed:1; + unsigned int SignatureProperties_isUsed:1; + unsigned int EVSEMaxCurrent_isUsed:1; + unsigned int EVSEStatus_isUsed:1; + unsigned int Service_isUsed:1; + unsigned int DHParams_isUsed:1; + unsigned int PGPKeyID_isUsed:1; + unsigned int DSAKeyValue_isUsed:1; + unsigned int EnergyTransferType_isUsed:1; + unsigned int WeldingDetectionRes_isUsed:1; + unsigned int FreeService_isUsed:1; + unsigned int SelectedServiceList_isUsed:1; + unsigned int WeldingDetectionReq_isUsed:1; + unsigned int EVTargetVoltage_isUsed:1; + unsigned int CanonicalizationMethod_isUsed:1; + unsigned int X509Certificate_isUsed:1; + unsigned int CertificateUpdateRes_isUsed:1; + unsigned int CertificateUpdateReq_isUsed:1; + unsigned int EVSEMaxVoltage_isUsed:1; + unsigned int SignedInfo_isUsed:1; + unsigned int AC_EVSEChargeParameter_isUsed:1; + unsigned int EVEnergyCapacity_isUsed:1; + unsigned int ServiceID_isUsed:1; + unsigned int EVSECurrentRegulationTolerance_isUsed:1; + unsigned int ServiceParameterList_isUsed:1; + unsigned int ListOfRootCertificateIDs_isUsed:1; + unsigned int ProfileEntry_isUsed:1; + unsigned int EVSEMinimumVoltageLimit_isUsed:1; + unsigned int CurrentDemandRes_isUsed:1; + unsigned int EVRESSSOC_isUsed:1; + unsigned int MeterReading_isUsed:1; + unsigned int CurrentDemandReq_isUsed:1; + unsigned int physicalValue_isUsed:1; + unsigned int TimeInterval_isUsed:1; + unsigned int AC_EVSEStatus_isUsed:1; + unsigned int EVMaximumVoltageLimit_isUsed:1; + unsigned int SignatureValue_isUsed:1; + unsigned int DateTimeNow_isUsed:1; + unsigned int ServiceTag_isUsed:1; + unsigned int intValue_isUsed:1; + unsigned int SelectedPaymentOption_isUsed:1; + unsigned int ServiceName_isUsed:1; + unsigned int EVCabinConditioning_isUsed:1; + unsigned int EVSEID_isUsed:1; + unsigned int ServiceScope_isUsed:1; + unsigned int MeterStatus_isUsed:1; + unsigned int EVRequestedEnergyTransferType_isUsed:1; + unsigned int ServiceCategory_isUsed:1; + unsigned int GenChallenge_isUsed:1; + unsigned int SalesTariffDescription_isUsed:1; + unsigned int NotificationMaxDelay_isUsed:1; + unsigned int boolValue_isUsed:1; + unsigned int EVSEStatusCode_isUsed:1; + unsigned int FaultMsg_isUsed:1; + unsigned int KeyName_isUsed:1; + unsigned int ParameterSet_isUsed:1; + unsigned int SigMeterReading_isUsed:1; + unsigned int EVSEChargeParameter_isUsed:1; + unsigned int Body_isUsed:1; + unsigned int SASchedules_isUsed:1; + unsigned int KeyInfo_isUsed:1; + unsigned int PMaxScheduleID_isUsed:1; + unsigned int RemainingTimeToFullSoC_isUsed:1; + unsigned int EVStatus_isUsed:1; + unsigned int SubCertificates_isUsed:1; + unsigned int PaymentOption_isUsed:1; + unsigned int X509SKI_isUsed:1; + unsigned int ServiceList_isUsed:1; + unsigned int Cost_isUsed:1; + unsigned int SignatureMethod_isUsed:1; + unsigned int EVSEMinCurrent_isUsed:1; + unsigned int ConsumptionCost_isUsed:1; + unsigned int EVSEPeakCurrentRipple_isUsed:1; + unsigned int EVErrorCode_isUsed:1; + unsigned int EVChargeParameter_isUsed:1; + unsigned int start_isUsed:1; + unsigned int X509IssuerName_isUsed:1; + unsigned int Reference_isUsed:1; + unsigned int EVMinCurrent_isUsed:1; + unsigned int FullSOC_isUsed:1; + unsigned int amount_isUsed:1; + unsigned int shortValue_isUsed:1; + unsigned int DC_EVSEChargeParameter_isUsed:1; + unsigned int Entry_isUsed:1; + unsigned int SalesTariffID_isUsed:1; + unsigned int MeterID_isUsed:1; + unsigned int ChargeParameterDiscoveryReq_isUsed:1; + unsigned int amountMultiplier_isUsed:1; + unsigned int ChargeParameterDiscoveryRes_isUsed:1; + unsigned int Transform_isUsed:1; + unsigned int Object_isUsed:1; + unsigned int RCD_isUsed:1; + unsigned int Notification_isUsed:1; + unsigned int startValue_isUsed:1; + unsigned int Modulus_isUsed:1; + + + int _warning_; +}; +#endif /* DEPLOY_DIN_CODEC_FRAGMENT */ + + +/* Initialization methods for structs */ + +void init_dinEXIDocument(struct dinEXIDocument* exiDoc); +#if DEPLOY_DIN_CODEC_FRAGMENT == SUPPORT_YES +void init_dinEXIFragment(struct dinEXIFragment* exiFrag); +#endif /* DEPLOY_DIN_CODEC_FRAGMENT */ +void init_dinMeteringReceiptReqType(struct dinMeteringReceiptReqType* dinMeteringReceiptReqType); +void init_dinBodyType(struct dinBodyType* dinBodyType); +void init_dinSessionSetupReqType(struct dinSessionSetupReqType* dinSessionSetupReqType); +void init_dinPowerDeliveryResType(struct dinPowerDeliveryResType* dinPowerDeliveryResType); +void init_dinServiceDetailResType(struct dinServiceDetailResType* dinServiceDetailResType); +void init_dinWeldingDetectionResType(struct dinWeldingDetectionResType* dinWeldingDetectionResType); +void init_dinContractAuthenticationResType(struct dinContractAuthenticationResType* dinContractAuthenticationResType); +void init_dinCanonicalizationMethodType(struct dinCanonicalizationMethodType* dinCanonicalizationMethodType); +void init_dinSPKIDataType(struct dinSPKIDataType* dinSPKIDataType); +void init_dinListOfRootCertificateIDsType(struct dinListOfRootCertificateIDsType* dinListOfRootCertificateIDsType); +void init_dinSelectedServiceListType(struct dinSelectedServiceListType* dinSelectedServiceListType); +void init_dinCurrentDemandResType(struct dinCurrentDemandResType* dinCurrentDemandResType); +void init_dinTransformType(struct dinTransformType* dinTransformType); +void init_dinAC_EVChargeParameterType(struct dinAC_EVChargeParameterType* dinAC_EVChargeParameterType); +void init_dinX509DataType(struct dinX509DataType* dinX509DataType); +void init_dinChargingStatusResType(struct dinChargingStatusResType* dinChargingStatusResType); +void init_dinWeldingDetectionReqType(struct dinWeldingDetectionReqType* dinWeldingDetectionReqType); +void init_dinSignaturePropertiesType(struct dinSignaturePropertiesType* dinSignaturePropertiesType); +void init_dinContractAuthenticationReqType(struct dinContractAuthenticationReqType* dinContractAuthenticationReqType); +void init_dinDC_EVPowerDeliveryParameterType(struct dinDC_EVPowerDeliveryParameterType* dinDC_EVPowerDeliveryParameterType); +void init_dinEVSEChargeParameterType(struct dinEVSEChargeParameterType* dinEVSEChargeParameterType); +void init_dinCableCheckReqType(struct dinCableCheckReqType* dinCableCheckReqType); +void init_dinDC_EVChargeParameterType(struct dinDC_EVChargeParameterType* dinDC_EVChargeParameterType); +void init_dinSAScheduleListType(struct dinSAScheduleListType* dinSAScheduleListType); +void init_dinPMaxScheduleType(struct dinPMaxScheduleType* dinPMaxScheduleType); +void init_dinServicePaymentSelectionReqType(struct dinServicePaymentSelectionReqType* dinServicePaymentSelectionReqType); +void init_dinRelativeTimeIntervalType(struct dinRelativeTimeIntervalType* dinRelativeTimeIntervalType); +void init_dinEVStatusType(struct dinEVStatusType* dinEVStatusType); +void init_dinPreChargeResType(struct dinPreChargeResType* dinPreChargeResType); +void init_dinDC_EVSEChargeParameterType(struct dinDC_EVSEChargeParameterType* dinDC_EVSEChargeParameterType); +void init_dinPaymentDetailsResType(struct dinPaymentDetailsResType* dinPaymentDetailsResType); +void init_dinDSAKeyValueType(struct dinDSAKeyValueType* dinDSAKeyValueType); +void init_dinSASchedulesType(struct dinSASchedulesType* dinSASchedulesType); +void init_dinCertificateUpdateResType(struct dinCertificateUpdateResType* dinCertificateUpdateResType); +void init_dinEVChargeParameterType(struct dinEVChargeParameterType* dinEVChargeParameterType); +void init_dinMessageHeaderType(struct dinMessageHeaderType* dinMessageHeaderType); +void init_dinBodyBaseType(struct dinBodyBaseType* dinBodyBaseType); +void init_dinKeyValueType(struct dinKeyValueType* dinKeyValueType); +void init_dinIntervalType(struct dinIntervalType* dinIntervalType); +void init_dinChargeParameterDiscoveryResType(struct dinChargeParameterDiscoveryResType* dinChargeParameterDiscoveryResType); +void init_dinPowerDeliveryReqType(struct dinPowerDeliveryReqType* dinPowerDeliveryReqType); +void init_dinCertificateChainType(struct dinCertificateChainType* dinCertificateChainType); +void init_dinTransformsType(struct dinTransformsType* dinTransformsType); +void init_dinEntryType(struct dinEntryType* dinEntryType); +void init_dinSessionStopType(struct dinSessionStopType* dinSessionStopType); +void init_dinServiceDetailReqType(struct dinServiceDetailReqType* dinServiceDetailReqType); +void init_dinDigestMethodType(struct dinDigestMethodType* dinDigestMethodType); +void init_dinParameterType(struct dinParameterType* dinParameterType); +void init_dinChargingStatusReqType(struct dinChargingStatusReqType* dinChargingStatusReqType); +void init_dinSignatureMethodType(struct dinSignatureMethodType* dinSignatureMethodType); +void init_dinCertificateInstallationReqType(struct dinCertificateInstallationReqType* dinCertificateInstallationReqType); +void init_dinSalesTariffEntryType(struct dinSalesTariffEntryType* dinSalesTariffEntryType); +void init_dinServiceDiscoveryResType(struct dinServiceDiscoveryResType* dinServiceDiscoveryResType); +void init_dinParameterSetType(struct dinParameterSetType* dinParameterSetType); +void init_dinCurrentDemandReqType(struct dinCurrentDemandReqType* dinCurrentDemandReqType); +void init_dinPreChargeReqType(struct dinPreChargeReqType* dinPreChargeReqType); +void init_dinSignatureType(struct dinSignatureType* dinSignatureType); +void init_dinReferenceType(struct dinReferenceType* dinReferenceType); +void init_dinProfileEntryType(struct dinProfileEntryType* dinProfileEntryType); +void init_dinAnonType_V2G_Message(struct dinAnonType_V2G_Message* dinAnonType_V2G_Message); +void init_dinChargeParameterDiscoveryReqType(struct dinChargeParameterDiscoveryReqType* dinChargeParameterDiscoveryReqType); +void init_dinConsumptionCostType(struct dinConsumptionCostType* dinConsumptionCostType); +void init_dinRSAKeyValueType(struct dinRSAKeyValueType* dinRSAKeyValueType); +void init_dinServiceType(struct dinServiceType* dinServiceType); +void init_dinServiceTagListType(struct dinServiceTagListType* dinServiceTagListType); +void init_dinEVSEStatusType(struct dinEVSEStatusType* dinEVSEStatusType); +void init_dinSessionSetupResType(struct dinSessionSetupResType* dinSessionSetupResType); +void init_dinEVPowerDeliveryParameterType(struct dinEVPowerDeliveryParameterType* dinEVPowerDeliveryParameterType); +void init_dinX509IssuerSerialType(struct dinX509IssuerSerialType* dinX509IssuerSerialType); +void init_dinSelectedServiceType(struct dinSelectedServiceType* dinSelectedServiceType); +void init_dinMeteringReceiptResType(struct dinMeteringReceiptResType* dinMeteringReceiptResType); +void init_dinDC_EVStatusType(struct dinDC_EVStatusType* dinDC_EVStatusType); +void init_dinPhysicalValueType(struct dinPhysicalValueType* dinPhysicalValueType); +void init_dinManifestType(struct dinManifestType* dinManifestType); +void init_dinPMaxScheduleEntryType(struct dinPMaxScheduleEntryType* dinPMaxScheduleEntryType); +void init_dinServiceParameterListType(struct dinServiceParameterListType* dinServiceParameterListType); +void init_dinSignatureValueType(struct dinSignatureValueType* dinSignatureValueType); +void init_dinPaymentOptionsType(struct dinPaymentOptionsType* dinPaymentOptionsType); +void init_dinServiceTagType(struct dinServiceTagType* dinServiceTagType); +void init_dinAC_EVSEStatusType(struct dinAC_EVSEStatusType* dinAC_EVSEStatusType); +void init_dinCertificateUpdateReqType(struct dinCertificateUpdateReqType* dinCertificateUpdateReqType); +void init_dinServicePaymentSelectionResType(struct dinServicePaymentSelectionResType* dinServicePaymentSelectionResType); +void init_dinSAScheduleTupleType(struct dinSAScheduleTupleType* dinSAScheduleTupleType); +void init_dinChargingProfileType(struct dinChargingProfileType* dinChargingProfileType); +void init_dinServiceDiscoveryReqType(struct dinServiceDiscoveryReqType* dinServiceDiscoveryReqType); +void init_dinAC_EVSEChargeParameterType(struct dinAC_EVSEChargeParameterType* dinAC_EVSEChargeParameterType); +void init_dinKeyInfoType(struct dinKeyInfoType* dinKeyInfoType); +void init_dinPaymentDetailsReqType(struct dinPaymentDetailsReqType* dinPaymentDetailsReqType); +void init_dinCableCheckResType(struct dinCableCheckResType* dinCableCheckResType); +void init_dinObjectType(struct dinObjectType* dinObjectType); +void init_dinSessionStopResType(struct dinSessionStopResType* dinSessionStopResType); +void init_dinSignedInfoType(struct dinSignedInfoType* dinSignedInfoType); +void init_dinSalesTariffType(struct dinSalesTariffType* dinSalesTariffType); +void init_dinCostType(struct dinCostType* dinCostType); +void init_dinServiceChargeType(struct dinServiceChargeType* dinServiceChargeType); +void init_dinDC_EVSEStatusType(struct dinDC_EVSEStatusType* dinDC_EVSEStatusType); +void init_dinRetrievalMethodType(struct dinRetrievalMethodType* dinRetrievalMethodType); +void init_dinNotificationType(struct dinNotificationType* dinNotificationType); +void init_dinPGPDataType(struct dinPGPDataType* dinPGPDataType); +void init_dinCertificateInstallationResType(struct dinCertificateInstallationResType* dinCertificateInstallationResType); +void init_dinSignaturePropertyType(struct dinSignaturePropertyType* dinSignaturePropertyType); +void init_dinMeterInfoType(struct dinMeterInfoType* dinMeterInfoType); +void init_dinSubCertificatesType(struct dinSubCertificatesType* dinSubCertificatesType); + + +#endif /* DEPLOY_DIN_CODEC */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/src/exi/dinEXIDatatypesDecoder.c b/src/src/exi/dinEXIDatatypesDecoder.c new file mode 100644 index 0000000..235d9b2 --- /dev/null +++ b/src/src/exi/dinEXIDatatypesDecoder.c @@ -0,0 +1,17105 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + + +#include "dinEXIDatatypesDecoder.h" + +#include "DecoderChannel.h" +#include "EXIHeaderDecoder.h" + +#include "dinEXIDatatypes.h" +#include "ErrorCodes.h" + +#ifndef EXI_din_DATATYPES_DECODER_C +#define EXI_din_DATATYPES_DECODER_C + +extern void debugAddStringAndInt(char *s, int i); + + +#if DEPLOY_DIN_CODEC == SUPPORT_YES + +/** event-code */ +static uint32_t eventCode; +static int errn; +static uint32_t uint32; + +/* Forward Declarations */ +static int decode_dinMeteringReceiptReqType(bitstream_t* stream, struct dinMeteringReceiptReqType* dinMeteringReceiptReqType); +static int decode_dinBodyType(bitstream_t* stream, struct dinBodyType* dinBodyType); +static int decode_dinSessionSetupReqType(bitstream_t* stream, struct dinSessionSetupReqType* dinSessionSetupReqType); +static int decode_dinPowerDeliveryResType(bitstream_t* stream, struct dinPowerDeliveryResType* dinPowerDeliveryResType); +static int decode_dinServiceDetailResType(bitstream_t* stream, struct dinServiceDetailResType* dinServiceDetailResType); +static int decode_dinWeldingDetectionResType(bitstream_t* stream, struct dinWeldingDetectionResType* dinWeldingDetectionResType); +static int decode_dinContractAuthenticationResType(bitstream_t* stream, struct dinContractAuthenticationResType* dinContractAuthenticationResType); +static int decode_dinCanonicalizationMethodType(bitstream_t* stream, struct dinCanonicalizationMethodType* dinCanonicalizationMethodType); +static int decode_dinSPKIDataType(bitstream_t* stream, struct dinSPKIDataType* dinSPKIDataType); +static int decode_dinListOfRootCertificateIDsType(bitstream_t* stream, struct dinListOfRootCertificateIDsType* dinListOfRootCertificateIDsType); +static int decode_dinSelectedServiceListType(bitstream_t* stream, struct dinSelectedServiceListType* dinSelectedServiceListType); +static int decode_dinCurrentDemandResType(bitstream_t* stream, struct dinCurrentDemandResType* dinCurrentDemandResType); +static int decode_dinTransformType(bitstream_t* stream, struct dinTransformType* dinTransformType); +static int decode_dinAC_EVChargeParameterType(bitstream_t* stream, struct dinAC_EVChargeParameterType* dinAC_EVChargeParameterType); +static int decode_dinX509DataType(bitstream_t* stream, struct dinX509DataType* dinX509DataType); +static int decode_dinChargingStatusResType(bitstream_t* stream, struct dinChargingStatusResType* dinChargingStatusResType); +static int decode_dinWeldingDetectionReqType(bitstream_t* stream, struct dinWeldingDetectionReqType* dinWeldingDetectionReqType); +static int decode_dinSignaturePropertiesType(bitstream_t* stream, struct dinSignaturePropertiesType* dinSignaturePropertiesType); +static int decode_dinContractAuthenticationReqType(bitstream_t* stream, struct dinContractAuthenticationReqType* dinContractAuthenticationReqType); +static int decode_dinDC_EVPowerDeliveryParameterType(bitstream_t* stream, struct dinDC_EVPowerDeliveryParameterType* dinDC_EVPowerDeliveryParameterType); +static int decode_dinEVSEChargeParameterType(bitstream_t* stream, struct dinEVSEChargeParameterType* dinEVSEChargeParameterType); +static int decode_dinCableCheckReqType(bitstream_t* stream, struct dinCableCheckReqType* dinCableCheckReqType); +static int decode_dinDC_EVChargeParameterType(bitstream_t* stream, struct dinDC_EVChargeParameterType* dinDC_EVChargeParameterType); +static int decode_dinSAScheduleListType(bitstream_t* stream, struct dinSAScheduleListType* dinSAScheduleListType); +static int decode_dinPMaxScheduleType(bitstream_t* stream, struct dinPMaxScheduleType* dinPMaxScheduleType); +static int decode_dinServicePaymentSelectionReqType(bitstream_t* stream, struct dinServicePaymentSelectionReqType* dinServicePaymentSelectionReqType); +static int decode_dinRelativeTimeIntervalType(bitstream_t* stream, struct dinRelativeTimeIntervalType* dinRelativeTimeIntervalType); +static int decode_dinEVStatusType(bitstream_t* stream, struct dinEVStatusType* dinEVStatusType); +static int decode_dinPreChargeResType(bitstream_t* stream, struct dinPreChargeResType* dinPreChargeResType); +static int decode_dinDC_EVSEChargeParameterType(bitstream_t* stream, struct dinDC_EVSEChargeParameterType* dinDC_EVSEChargeParameterType); +static int decode_dinPaymentDetailsResType(bitstream_t* stream, struct dinPaymentDetailsResType* dinPaymentDetailsResType); +static int decode_dinDSAKeyValueType(bitstream_t* stream, struct dinDSAKeyValueType* dinDSAKeyValueType); +static int decode_dinSASchedulesType(bitstream_t* stream, struct dinSASchedulesType* dinSASchedulesType); +static int decode_dinCertificateUpdateResType(bitstream_t* stream, struct dinCertificateUpdateResType* dinCertificateUpdateResType); +static int decode_dinEVChargeParameterType(bitstream_t* stream, struct dinEVChargeParameterType* dinEVChargeParameterType); +static int decode_dinMessageHeaderType(bitstream_t* stream, struct dinMessageHeaderType* dinMessageHeaderType); +static int decode_dinBodyBaseType(bitstream_t* stream, struct dinBodyBaseType* dinBodyBaseType); +static int decode_dinKeyValueType(bitstream_t* stream, struct dinKeyValueType* dinKeyValueType); +static int decode_dinIntervalType(bitstream_t* stream, struct dinIntervalType* dinIntervalType); +static int decode_dinChargeParameterDiscoveryResType(bitstream_t* stream, struct dinChargeParameterDiscoveryResType* dinChargeParameterDiscoveryResType); +static int decode_dinPowerDeliveryReqType(bitstream_t* stream, struct dinPowerDeliveryReqType* dinPowerDeliveryReqType); +static int decode_dinCertificateChainType(bitstream_t* stream, struct dinCertificateChainType* dinCertificateChainType); +static int decode_dinTransformsType(bitstream_t* stream, struct dinTransformsType* dinTransformsType); +static int decode_dinEntryType(bitstream_t* stream, struct dinEntryType* dinEntryType); +static int decode_dinSessionStopType(bitstream_t* stream, struct dinSessionStopType* dinSessionStopType); +static int decode_dinServiceDetailReqType(bitstream_t* stream, struct dinServiceDetailReqType* dinServiceDetailReqType); +static int decode_dinDigestMethodType(bitstream_t* stream, struct dinDigestMethodType* dinDigestMethodType); +static int decode_dinParameterType(bitstream_t* stream, struct dinParameterType* dinParameterType); +static int decode_dinChargingStatusReqType(bitstream_t* stream, struct dinChargingStatusReqType* dinChargingStatusReqType); +static int decode_dinSignatureMethodType(bitstream_t* stream, struct dinSignatureMethodType* dinSignatureMethodType); +static int decode_dinCertificateInstallationReqType(bitstream_t* stream, struct dinCertificateInstallationReqType* dinCertificateInstallationReqType); +static int decode_dinSalesTariffEntryType(bitstream_t* stream, struct dinSalesTariffEntryType* dinSalesTariffEntryType); +static int decode_dinServiceDiscoveryResType(bitstream_t* stream, struct dinServiceDiscoveryResType* dinServiceDiscoveryResType); +static int decode_dinParameterSetType(bitstream_t* stream, struct dinParameterSetType* dinParameterSetType); +static int decode_dinCurrentDemandReqType(bitstream_t* stream, struct dinCurrentDemandReqType* dinCurrentDemandReqType); +static int decode_dinPreChargeReqType(bitstream_t* stream, struct dinPreChargeReqType* dinPreChargeReqType); +static int decode_dinSignatureType(bitstream_t* stream, struct dinSignatureType* dinSignatureType); +static int decode_dinReferenceType(bitstream_t* stream, struct dinReferenceType* dinReferenceType); +static int decode_dinProfileEntryType(bitstream_t* stream, struct dinProfileEntryType* dinProfileEntryType); +static int decode_dinAnonType_V2G_Message(bitstream_t* stream, struct dinAnonType_V2G_Message* dinAnonType_V2G_Message); +static int decode_dinChargeParameterDiscoveryReqType(bitstream_t* stream, struct dinChargeParameterDiscoveryReqType* dinChargeParameterDiscoveryReqType); +static int decode_dinConsumptionCostType(bitstream_t* stream, struct dinConsumptionCostType* dinConsumptionCostType); +static int decode_dinRSAKeyValueType(bitstream_t* stream, struct dinRSAKeyValueType* dinRSAKeyValueType); +static int decode_dinServiceType(bitstream_t* stream, struct dinServiceType* dinServiceType); +static int decode_dinServiceTagListType(bitstream_t* stream, struct dinServiceTagListType* dinServiceTagListType); +static int decode_dinEVSEStatusType(bitstream_t* stream, struct dinEVSEStatusType* dinEVSEStatusType); +static int decode_dinSessionSetupResType(bitstream_t* stream, struct dinSessionSetupResType* dinSessionSetupResType); +static int decode_dinEVPowerDeliveryParameterType(bitstream_t* stream, struct dinEVPowerDeliveryParameterType* dinEVPowerDeliveryParameterType); +static int decode_dinX509IssuerSerialType(bitstream_t* stream, struct dinX509IssuerSerialType* dinX509IssuerSerialType); +static int decode_dinSelectedServiceType(bitstream_t* stream, struct dinSelectedServiceType* dinSelectedServiceType); +static int decode_dinMeteringReceiptResType(bitstream_t* stream, struct dinMeteringReceiptResType* dinMeteringReceiptResType); +static int decode_dinDC_EVStatusType(bitstream_t* stream, struct dinDC_EVStatusType* dinDC_EVStatusType); +static int decode_dinPhysicalValueType(bitstream_t* stream, struct dinPhysicalValueType* dinPhysicalValueType); +static int decode_dinManifestType(bitstream_t* stream, struct dinManifestType* dinManifestType); +static int decode_dinPMaxScheduleEntryType(bitstream_t* stream, struct dinPMaxScheduleEntryType* dinPMaxScheduleEntryType); +static int decode_dinServiceParameterListType(bitstream_t* stream, struct dinServiceParameterListType* dinServiceParameterListType); +static int decode_dinSignatureValueType(bitstream_t* stream, struct dinSignatureValueType* dinSignatureValueType); +static int decode_dinPaymentOptionsType(bitstream_t* stream, struct dinPaymentOptionsType* dinPaymentOptionsType); +static int decode_dinServiceTagType(bitstream_t* stream, struct dinServiceTagType* dinServiceTagType); +static int decode_dinAC_EVSEStatusType(bitstream_t* stream, struct dinAC_EVSEStatusType* dinAC_EVSEStatusType); +static int decode_dinCertificateUpdateReqType(bitstream_t* stream, struct dinCertificateUpdateReqType* dinCertificateUpdateReqType); +static int decode_dinServicePaymentSelectionResType(bitstream_t* stream, struct dinServicePaymentSelectionResType* dinServicePaymentSelectionResType); +static int decode_dinSAScheduleTupleType(bitstream_t* stream, struct dinSAScheduleTupleType* dinSAScheduleTupleType); +static int decode_dinChargingProfileType(bitstream_t* stream, struct dinChargingProfileType* dinChargingProfileType); +static int decode_dinServiceDiscoveryReqType(bitstream_t* stream, struct dinServiceDiscoveryReqType* dinServiceDiscoveryReqType); +static int decode_dinAC_EVSEChargeParameterType(bitstream_t* stream, struct dinAC_EVSEChargeParameterType* dinAC_EVSEChargeParameterType); +static int decode_dinKeyInfoType(bitstream_t* stream, struct dinKeyInfoType* dinKeyInfoType); +static int decode_dinPaymentDetailsReqType(bitstream_t* stream, struct dinPaymentDetailsReqType* dinPaymentDetailsReqType); +static int decode_dinCableCheckResType(bitstream_t* stream, struct dinCableCheckResType* dinCableCheckResType); +static int decode_dinObjectType(bitstream_t* stream, struct dinObjectType* dinObjectType); +static int decode_dinSessionStopResType(bitstream_t* stream, struct dinSessionStopResType* dinSessionStopResType); +static int decode_dinSignedInfoType(bitstream_t* stream, struct dinSignedInfoType* dinSignedInfoType); +static int decode_dinSalesTariffType(bitstream_t* stream, struct dinSalesTariffType* dinSalesTariffType); +static int decode_dinCostType(bitstream_t* stream, struct dinCostType* dinCostType); +static int decode_dinServiceChargeType(bitstream_t* stream, struct dinServiceChargeType* dinServiceChargeType); +static int decode_dinDC_EVSEStatusType(bitstream_t* stream, struct dinDC_EVSEStatusType* dinDC_EVSEStatusType); +static int decode_dinRetrievalMethodType(bitstream_t* stream, struct dinRetrievalMethodType* dinRetrievalMethodType); +static int decode_dinNotificationType(bitstream_t* stream, struct dinNotificationType* dinNotificationType); +static int decode_dinPGPDataType(bitstream_t* stream, struct dinPGPDataType* dinPGPDataType); +static int decode_dinCertificateInstallationResType(bitstream_t* stream, struct dinCertificateInstallationResType* dinCertificateInstallationResType); +static int decode_dinSignaturePropertyType(bitstream_t* stream, struct dinSignaturePropertyType* dinSignaturePropertyType); +static int decode_dinMeterInfoType(bitstream_t* stream, struct dinMeterInfoType* dinMeterInfoType); +static int decode_dinSubCertificatesType(bitstream_t* stream, struct dinSubCertificatesType* dinSubCertificatesType); + +/* Deviant data decoding (skip functions) */ + + + /* Complex type name='urn:iso:15118:2:2010:MsgBody,MeteringReceiptReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":SessionID,"urn:iso:15118:2:2010:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2010:MsgBody":MeterInfo)', derivedBy='EXTENSION'. */ +static int decode_dinMeteringReceiptReqType(bitstream_t* stream, struct dinMeteringReceiptReqType* dinMeteringReceiptReqType) { + int grammarID = 0; + int done = 0; + + init_dinMeteringReceiptReqType(dinMeteringReceiptReqType); + + while(!done) { + switch(grammarID) { + case 0: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinMeteringReceiptReqType->Id.charactersLen); + if (errn == 0) { + if (dinMeteringReceiptReqType->Id.charactersLen >= 2) { + dinMeteringReceiptReqType->Id.charactersLen = (uint16_t)(dinMeteringReceiptReqType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinMeteringReceiptReqType->Id.charactersLen, dinMeteringReceiptReqType->Id.characters, dinMeteringReceiptReqType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinMeteringReceiptReqType->Id_isUsed = 1u; + grammarID = 1; + break; + case 1: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinMeteringReceiptReqType->SessionID.bytesLen); + if (errn == 0) { + errn = (dinMeteringReceiptReqType->SessionID.bytesLen) <= dinMeteringReceiptReqType_SessionID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinMeteringReceiptReqType->SessionID.bytesLen, dinMeteringReceiptReqType->SessionID.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 2; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 1: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinMeteringReceiptReqType->SessionID.bytesLen); + if (errn == 0) { + errn = (dinMeteringReceiptReqType->SessionID.bytesLen) <= dinMeteringReceiptReqType_SessionID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinMeteringReceiptReqType->SessionID.bytesLen, dinMeteringReceiptReqType->SessionID.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 2; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 2: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinMeteringReceiptReqType->SAScheduleTupleID); + dinMeteringReceiptReqType->SAScheduleTupleID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 3; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + errn = decode_dinMeterInfoType(stream, &dinMeteringReceiptReqType->MeterInfo); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 3: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinMeterInfoType(stream, &dinMeteringReceiptReqType->MeterInfo); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDef,BodyType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDef":BodyElement{0-1})', derivedBy='RESTRICTION'. */ +static int decode_dinBodyType(bitstream_t* stream, struct dinBodyType* dinBodyType) { + int grammarID = 6; + int done = 0; + + init_dinBodyType(dinBodyType); + + while(!done) { + switch(grammarID) { + case 6: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 6, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinBodyBaseType(stream, &dinBodyType->BodyElement); + dinBodyType->BodyElement_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 1: + errn = decode_dinCableCheckReqType(stream, &dinBodyType->CableCheckReq); + dinBodyType->CableCheckReq_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 2: + errn = decode_dinCableCheckResType(stream, &dinBodyType->CableCheckRes); + dinBodyType->CableCheckRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 3: + errn = decode_dinCertificateInstallationReqType(stream, &dinBodyType->CertificateInstallationReq); + dinBodyType->CertificateInstallationReq_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 4: + errn = decode_dinCertificateInstallationResType(stream, &dinBodyType->CertificateInstallationRes); + dinBodyType->CertificateInstallationRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 5: + errn = decode_dinCertificateUpdateReqType(stream, &dinBodyType->CertificateUpdateReq); + dinBodyType->CertificateUpdateReq_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 6: + errn = decode_dinCertificateUpdateResType(stream, &dinBodyType->CertificateUpdateRes); + dinBodyType->CertificateUpdateRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 7: + errn = decode_dinChargeParameterDiscoveryReqType(stream, &dinBodyType->ChargeParameterDiscoveryReq); + dinBodyType->ChargeParameterDiscoveryReq_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 8: + errn = decode_dinChargeParameterDiscoveryResType(stream, &dinBodyType->ChargeParameterDiscoveryRes); + dinBodyType->ChargeParameterDiscoveryRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 9: + errn = decode_dinChargingStatusReqType(stream, &dinBodyType->ChargingStatusReq); + dinBodyType->ChargingStatusReq_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 10: + errn = decode_dinChargingStatusResType(stream, &dinBodyType->ChargingStatusRes); + dinBodyType->ChargingStatusRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 11: + errn = decode_dinContractAuthenticationReqType(stream, &dinBodyType->ContractAuthenticationReq); + dinBodyType->ContractAuthenticationReq_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 12: + errn = decode_dinContractAuthenticationResType(stream, &dinBodyType->ContractAuthenticationRes); + dinBodyType->ContractAuthenticationRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 13: + errn = decode_dinCurrentDemandReqType(stream, &dinBodyType->CurrentDemandReq); + dinBodyType->CurrentDemandReq_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 14: + errn = decode_dinCurrentDemandResType(stream, &dinBodyType->CurrentDemandRes); + dinBodyType->CurrentDemandRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 15: + errn = decode_dinMeteringReceiptReqType(stream, &dinBodyType->MeteringReceiptReq); + dinBodyType->MeteringReceiptReq_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 16: + errn = decode_dinMeteringReceiptResType(stream, &dinBodyType->MeteringReceiptRes); + dinBodyType->MeteringReceiptRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 17: + errn = decode_dinPaymentDetailsReqType(stream, &dinBodyType->PaymentDetailsReq); + dinBodyType->PaymentDetailsReq_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 18: + errn = decode_dinPaymentDetailsResType(stream, &dinBodyType->PaymentDetailsRes); + dinBodyType->PaymentDetailsRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 19: + errn = decode_dinPowerDeliveryReqType(stream, &dinBodyType->PowerDeliveryReq); + dinBodyType->PowerDeliveryReq_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 20: + errn = decode_dinPowerDeliveryResType(stream, &dinBodyType->PowerDeliveryRes); + dinBodyType->PowerDeliveryRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 21: + errn = decode_dinPreChargeReqType(stream, &dinBodyType->PreChargeReq); + dinBodyType->PreChargeReq_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 22: + errn = decode_dinPreChargeResType(stream, &dinBodyType->PreChargeRes); + dinBodyType->PreChargeRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 23: + errn = decode_dinServiceDetailReqType(stream, &dinBodyType->ServiceDetailReq); + dinBodyType->ServiceDetailReq_isUsed = 1u; + debugAddStringAndInt("Line", __LINE__); + grammarID = 4; + break; + case 24: + errn = decode_dinServiceDetailResType(stream, &dinBodyType->ServiceDetailRes); + dinBodyType->ServiceDetailRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 25: + errn = decode_dinServiceDiscoveryReqType(stream, &dinBodyType->ServiceDiscoveryReq); + dinBodyType->ServiceDiscoveryReq_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 26: + errn = decode_dinServiceDiscoveryResType(stream, &dinBodyType->ServiceDiscoveryRes); + dinBodyType->ServiceDiscoveryRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 27: + errn = decode_dinServicePaymentSelectionReqType(stream, &dinBodyType->ServicePaymentSelectionReq); + dinBodyType->ServicePaymentSelectionReq_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 28: + errn = decode_dinServicePaymentSelectionResType(stream, &dinBodyType->ServicePaymentSelectionRes); + dinBodyType->ServicePaymentSelectionRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 29: + errn = decode_dinSessionSetupReqType(stream, &dinBodyType->SessionSetupReq); + dinBodyType->SessionSetupReq_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 30: + errn = decode_dinSessionSetupResType(stream, &dinBodyType->SessionSetupRes); + dinBodyType->SessionSetupRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 31: + errn = decode_dinSessionStopType(stream, &dinBodyType->SessionStopReq); + dinBodyType->SessionStopReq_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 32: + errn = decode_dinSessionStopResType(stream, &dinBodyType->SessionStopRes); + dinBodyType->SessionStopRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 33: + errn = decode_dinWeldingDetectionReqType(stream, &dinBodyType->WeldingDetectionReq); + dinBodyType->WeldingDetectionReq_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 34: + errn = decode_dinWeldingDetectionResType(stream, &dinBodyType->WeldingDetectionRes); + dinBodyType->WeldingDetectionRes_isUsed = 1u; + grammarID = 4; + debugAddStringAndInt("Line", __LINE__); + break; + case 35: + done = 1; + grammarID = 5; + debugAddStringAndInt("Line", __LINE__); + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + debugAddStringAndInt("Line", __LINE__); + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,SessionSetupReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":EVCCID)', derivedBy='EXTENSION'. */ +static int decode_dinSessionSetupReqType(bitstream_t* stream, struct dinSessionSetupReqType* dinSessionSetupReqType) { + int grammarID = 7; + int done = 0; + + init_dinSessionSetupReqType(dinSessionSetupReqType); + + while(!done) { + switch(grammarID) { + case 7: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinSessionSetupReqType->EVCCID.bytesLen); + if (errn == 0) { + errn = (dinSessionSetupReqType->EVCCID.bytesLen) <= dinSessionSetupReqType_EVCCID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinSessionSetupReqType->EVCCID.bytesLen, dinSessionSetupReqType->EVCCID.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PowerDeliveryResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatus)', derivedBy='EXTENSION'. */ +static int decode_dinPowerDeliveryResType(bitstream_t* stream, struct dinPowerDeliveryResType* dinPowerDeliveryResType) { + int grammarID = 8; + int done = 0; + + init_dinPowerDeliveryResType(dinPowerDeliveryResType); + + while(!done) { + switch(grammarID) { + case 8: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinPowerDeliveryResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 9; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 9: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinAC_EVSEStatusType(stream, &dinPowerDeliveryResType->AC_EVSEStatus); + dinPowerDeliveryResType->AC_EVSEStatus_isUsed = 1u; + grammarID = 4; + break; + case 1: + errn = decode_dinDC_EVSEStatusType(stream, &dinPowerDeliveryResType->DC_EVSEStatus); + dinPowerDeliveryResType->DC_EVSEStatus_isUsed = 1u; + grammarID = 4; + break; + case 2: + errn = decode_dinEVSEStatusType(stream, &dinPowerDeliveryResType->EVSEStatus); + dinPowerDeliveryResType->EVSEStatus_isUsed = 1u; + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDetailResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ServiceID,"urn:iso:15118:2:2010:MsgBody":ServiceParameterList{0-1})', derivedBy='EXTENSION'. */ +static int decode_dinServiceDetailResType(bitstream_t* stream, struct dinServiceDetailResType* dinServiceDetailResType) { + int grammarID = 10; + int done = 0; + + init_dinServiceDetailResType(dinServiceDetailResType); + + while(!done) { + switch(grammarID) { + case 10: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinServiceDetailResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 11; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 11: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinServiceDetailResType->ServiceID); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 12; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 12: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceParameterList), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinServiceParameterListType(stream, &dinServiceDetailResType->ServiceParameterList); + dinServiceDetailResType->ServiceParameterList_isUsed = 1u; + grammarID = 4; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,WeldingDetectionResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage)', derivedBy='EXTENSION'. */ +static int decode_dinWeldingDetectionResType(bitstream_t* stream, struct dinWeldingDetectionResType* dinWeldingDetectionResType) { + int grammarID = 13; + int done = 0; + + init_dinWeldingDetectionResType(dinWeldingDetectionResType); + + while(!done) { + switch(grammarID) { + case 13: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinWeldingDetectionResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 14; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 14: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinDC_EVSEStatusType(stream, &dinWeldingDetectionResType->DC_EVSEStatus); + grammarID = 15; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 15: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinWeldingDetectionResType->EVSEPresentVoltage); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ContractAuthenticationResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing)', derivedBy='EXTENSION'. */ +static int decode_dinContractAuthenticationResType(bitstream_t* stream, struct dinContractAuthenticationResType* dinContractAuthenticationResType) { + int grammarID = 16; + int done = 0; + + init_dinContractAuthenticationResType(dinContractAuthenticationResType); + + while(!done) { + switch(grammarID) { + case 16: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinContractAuthenticationResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 17; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 17: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 1, &uint32); + dinContractAuthenticationResType->EVSEProcessing = (dinEVSEProcessingType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,CanonicalizationMethodType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##any]){0-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinCanonicalizationMethodType(bitstream_t* stream, struct dinCanonicalizationMethodType* dinCanonicalizationMethodType) { + int grammarID = 18; + int done = 0; + + init_dinCanonicalizationMethodType(dinCanonicalizationMethodType); + + while(!done) { + switch(grammarID) { + case 18: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinCanonicalizationMethodType->Algorithm.charactersLen); + if (errn == 0) { + if (dinCanonicalizationMethodType->Algorithm.charactersLen >= 2) { + dinCanonicalizationMethodType->Algorithm.charactersLen = (uint16_t)(dinCanonicalizationMethodType->Algorithm.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinCanonicalizationMethodType->Algorithm.charactersLen, dinCanonicalizationMethodType->Algorithm.characters, dinCanonicalizationMethodType_Algorithm_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + grammarID = 19; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 19: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 20; + break; + case 1: + done = 1; + grammarID = 5; + break; + case 2: + errn = decodeUnsignedInteger16(stream, &dinCanonicalizationMethodType->ANY.charactersLen); + if (errn == 0) { + if (dinCanonicalizationMethodType->ANY.charactersLen >= 2) { + dinCanonicalizationMethodType->ANY.charactersLen = (uint16_t)(dinCanonicalizationMethodType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinCanonicalizationMethodType->ANY.charactersLen, dinCanonicalizationMethodType->ANY.characters, dinCanonicalizationMethodType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinCanonicalizationMethodType->ANY_isUsed = 1u; + grammarID = 20; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 20: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 20; + break; + case 1: + done = 1; + grammarID = 5; + break; + case 2: + errn = decodeUnsignedInteger16(stream, &dinCanonicalizationMethodType->ANY.charactersLen); + if (errn == 0) { + if (dinCanonicalizationMethodType->ANY.charactersLen >= 2) { + dinCanonicalizationMethodType->ANY.charactersLen = (uint16_t)(dinCanonicalizationMethodType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinCanonicalizationMethodType->ANY.charactersLen, dinCanonicalizationMethodType->ANY.characters, dinCanonicalizationMethodType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinCanonicalizationMethodType->ANY_isUsed = 1u; + grammarID = 20; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SPKIDataType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":SPKISexp,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-1}){1-UNBOUNDED}', derivedBy='RESTRICTION'. */ +static int decode_dinSPKIDataType(bitstream_t* stream, struct dinSPKIDataType* dinSPKIDataType) { + int grammarID = 21; + int done = 0; + + init_dinSPKIDataType(dinSPKIDataType); + + while(!done) { + switch(grammarID) { + case 21: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSPKIDataType->SPKISexp.arrayLen < dinSPKIDataType_SPKISexp_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinSPKIDataType->SPKISexp.array[dinSPKIDataType->SPKISexp.arrayLen].bytesLen); + if (errn == 0) { + errn = (dinSPKIDataType->SPKISexp.array[dinSPKIDataType->SPKISexp.arrayLen].bytesLen) <= dinSPKIDataType_SPKISexp_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinSPKIDataType->SPKISexp.array[dinSPKIDataType->SPKISexp.arrayLen].bytesLen, dinSPKIDataType->SPKISexp.array[dinSPKIDataType->SPKISexp.arrayLen].bytes); + } + dinSPKIDataType->SPKISexp.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 22; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 22: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), START_ELEMENT_GENERIC, END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSPKIDataType->SPKISexp.arrayLen < dinSPKIDataType_SPKISexp_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinSPKIDataType->SPKISexp.array[dinSPKIDataType->SPKISexp.arrayLen].bytesLen); + if (errn == 0) { + errn = (dinSPKIDataType->SPKISexp.array[dinSPKIDataType->SPKISexp.arrayLen].bytesLen) <= dinSPKIDataType_SPKISexp_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinSPKIDataType->SPKISexp.array[dinSPKIDataType->SPKISexp.arrayLen].bytesLen, dinSPKIDataType->SPKISexp.array[dinSPKIDataType->SPKISexp.arrayLen].bytes); + } + dinSPKIDataType->SPKISexp.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 22; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 23; + break; + case 2: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 23: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSPKIDataType->SPKISexp.arrayLen < dinSPKIDataType_SPKISexp_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinSPKIDataType->SPKISexp.array[dinSPKIDataType->SPKISexp.arrayLen].bytesLen); + if (errn == 0) { + errn = (dinSPKIDataType->SPKISexp.array[dinSPKIDataType->SPKISexp.arrayLen].bytesLen) <= dinSPKIDataType_SPKISexp_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinSPKIDataType->SPKISexp.array[dinSPKIDataType->SPKISexp.arrayLen].bytesLen, dinSPKIDataType->SPKISexp.array[dinSPKIDataType->SPKISexp.arrayLen].bytes); + } + dinSPKIDataType->SPKISexp.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 22; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ListOfRootCertificateIDsType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":RootCertificateID{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinListOfRootCertificateIDsType(bitstream_t* stream, struct dinListOfRootCertificateIDsType* dinListOfRootCertificateIDsType) { + int grammarID = 24; + int done = 0; + + init_dinListOfRootCertificateIDsType(dinListOfRootCertificateIDsType); + + while(!done) { + switch(grammarID) { + case 24: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinListOfRootCertificateIDsType->RootCertificateID.arrayLen < dinListOfRootCertificateIDsType_RootCertificateID_ARRAY_SIZE) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType->RootCertificateID.arrayLen].charactersLen); + if (errn == 0) { + if (dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType->RootCertificateID.arrayLen].charactersLen >= 2) { + dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType->RootCertificateID.arrayLen].charactersLen = (uint16_t)(dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType->RootCertificateID.arrayLen].charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType->RootCertificateID.arrayLen].charactersLen, dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType->RootCertificateID.arrayLen].characters, dinListOfRootCertificateIDsType_RootCertificateID_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinListOfRootCertificateIDsType->RootCertificateID.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 25; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 25: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinListOfRootCertificateIDsType->RootCertificateID.arrayLen < dinListOfRootCertificateIDsType_RootCertificateID_ARRAY_SIZE) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType->RootCertificateID.arrayLen].charactersLen); + if (errn == 0) { + if (dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType->RootCertificateID.arrayLen].charactersLen >= 2) { + dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType->RootCertificateID.arrayLen].charactersLen = (uint16_t)(dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType->RootCertificateID.arrayLen].charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType->RootCertificateID.arrayLen].charactersLen, dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType->RootCertificateID.arrayLen].characters, dinListOfRootCertificateIDsType_RootCertificateID_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinListOfRootCertificateIDsType->RootCertificateID.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 25; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SelectedServiceListType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SelectedService{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinSelectedServiceListType(bitstream_t* stream, struct dinSelectedServiceListType* dinSelectedServiceListType) { + int grammarID = 26; + int done = 0; + + init_dinSelectedServiceListType(dinSelectedServiceListType); + + while(!done) { + switch(grammarID) { + case 26: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSelectedServiceListType->SelectedService.arrayLen < dinSelectedServiceListType_SelectedService_ARRAY_SIZE) { + errn = decode_dinSelectedServiceType(stream, &dinSelectedServiceListType->SelectedService.array[dinSelectedServiceListType->SelectedService.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 27; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 27: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSelectedServiceListType->SelectedService.arrayLen < dinSelectedServiceListType_SelectedService_ARRAY_SIZE) { + errn = decode_dinSelectedServiceType(stream, &dinSelectedServiceListType->SelectedService.array[dinSelectedServiceListType->SelectedService.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 27; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CurrentDemandResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage,"urn:iso:15118:2:2010:MsgBody":EVSEPresentCurrent,"urn:iso:15118:2:2010:MsgBody":EVSECurrentLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEVoltageLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEPowerLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEMaximumVoltageLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVSEMaximumCurrentLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVSEMaximumPowerLimit{0-1})', derivedBy='EXTENSION'. */ +static int decode_dinCurrentDemandResType(bitstream_t* stream, struct dinCurrentDemandResType* dinCurrentDemandResType) { + int grammarID = 28; + int done = 0; + + init_dinCurrentDemandResType(dinCurrentDemandResType); + + while(!done) { + switch(grammarID) { + case 28: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinCurrentDemandResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 29; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 29: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinDC_EVSEStatusType(stream, &dinCurrentDemandResType->DC_EVSEStatus); + grammarID = 30; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 30: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandResType->EVSEPresentVoltage); + grammarID = 31; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 31: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentCurrent)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandResType->EVSEPresentCurrent); + grammarID = 32; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 32: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinCurrentDemandResType->EVSECurrentLimitAchieved); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 33; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 33: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinCurrentDemandResType->EVSEVoltageLimitAchieved); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 34; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 34: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinCurrentDemandResType->EVSEPowerLimitAchieved); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 35; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 35: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandResType->EVSEMaximumVoltageLimit); + dinCurrentDemandResType->EVSEMaximumVoltageLimit_isUsed = 1u; + grammarID = 36; + break; + case 1: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandResType->EVSEMaximumCurrentLimit); + dinCurrentDemandResType->EVSEMaximumCurrentLimit_isUsed = 1u; + grammarID = 37; + break; + case 2: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandResType->EVSEMaximumPowerLimit); + dinCurrentDemandResType->EVSEMaximumPowerLimit_isUsed = 1u; + grammarID = 4; + break; + case 3: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 36: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandResType->EVSEMaximumCurrentLimit); + dinCurrentDemandResType->EVSEMaximumCurrentLimit_isUsed = 1u; + grammarID = 37; + break; + case 1: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandResType->EVSEMaximumPowerLimit); + dinCurrentDemandResType->EVSEMaximumPowerLimit_isUsed = 1u; + grammarID = 4; + break; + case 2: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 37: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandResType->EVSEMaximumPowerLimit); + dinCurrentDemandResType->EVSEMaximumPowerLimit_isUsed = 1u; + grammarID = 4; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])|"http://www.w3.org/2000/09/xmldsig#":XPath){0-UNBOUNDED}', derivedBy='RESTRICTION'. */ +static int decode_dinTransformType(bitstream_t* stream, struct dinTransformType* dinTransformType) { + int grammarID = 38; + int done = 0; + + init_dinTransformType(dinTransformType); + + while(!done) { + switch(grammarID) { + case 38: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinTransformType->Algorithm.charactersLen); + if (errn == 0) { + if (dinTransformType->Algorithm.charactersLen >= 2) { + dinTransformType->Algorithm.charactersLen = (uint16_t)(dinTransformType->Algorithm.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinTransformType->Algorithm.charactersLen, dinTransformType->Algorithm.characters, dinTransformType_Algorithm_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + grammarID = 39; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 39: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinTransformType->XPath.arrayLen < dinTransformType_XPath_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinTransformType->XPath.array[dinTransformType->XPath.arrayLen].charactersLen); + if (errn == 0) { + if (dinTransformType->XPath.array[dinTransformType->XPath.arrayLen].charactersLen >= 2) { + dinTransformType->XPath.array[dinTransformType->XPath.arrayLen].charactersLen = (uint16_t)(dinTransformType->XPath.array[dinTransformType->XPath.arrayLen].charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinTransformType->XPath.array[dinTransformType->XPath.arrayLen].charactersLen, dinTransformType->XPath.array[dinTransformType->XPath.arrayLen].characters, dinTransformType_XPath_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinTransformType->XPath.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 40; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 40; + break; + case 2: + done = 1; + grammarID = 5; + break; + case 3: + errn = decodeUnsignedInteger16(stream, &dinTransformType->ANY.charactersLen); + if (errn == 0) { + if (dinTransformType->ANY.charactersLen >= 2) { + dinTransformType->ANY.charactersLen = (uint16_t)(dinTransformType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinTransformType->ANY.charactersLen, dinTransformType->ANY.characters, dinTransformType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinTransformType->ANY_isUsed = 1u; + grammarID = 40; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 40: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinTransformType->XPath.arrayLen < dinTransformType_XPath_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinTransformType->XPath.array[dinTransformType->XPath.arrayLen].charactersLen); + if (errn == 0) { + if (dinTransformType->XPath.array[dinTransformType->XPath.arrayLen].charactersLen >= 2) { + dinTransformType->XPath.array[dinTransformType->XPath.arrayLen].charactersLen = (uint16_t)(dinTransformType->XPath.array[dinTransformType->XPath.arrayLen].charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinTransformType->XPath.array[dinTransformType->XPath.arrayLen].charactersLen, dinTransformType->XPath.array[dinTransformType->XPath.arrayLen].characters, dinTransformType_XPath_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinTransformType->XPath.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 40; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 40; + break; + case 2: + done = 1; + grammarID = 5; + break; + case 3: + errn = decodeUnsignedInteger16(stream, &dinTransformType->ANY.charactersLen); + if (errn == 0) { + if (dinTransformType->ANY.charactersLen >= 2) { + dinTransformType->ANY.charactersLen = (uint16_t)(dinTransformType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinTransformType->ANY.charactersLen, dinTransformType->ANY.characters, dinTransformType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinTransformType->ANY_isUsed = 1u; + grammarID = 40; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVChargeParameterType', base type name='EVChargeParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":DepartureTime,"urn:iso:15118:2:2010:MsgDataTypes":EAmount,"urn:iso:15118:2:2010:MsgDataTypes":EVMaxVoltage,"urn:iso:15118:2:2010:MsgDataTypes":EVMaxCurrent,"urn:iso:15118:2:2010:MsgDataTypes":EVMinCurrent)', derivedBy='EXTENSION'. */ +static int decode_dinAC_EVChargeParameterType(bitstream_t* stream, struct dinAC_EVChargeParameterType* dinAC_EVChargeParameterType) { + int grammarID = 41; + int done = 0; + + init_dinAC_EVChargeParameterType(dinAC_EVChargeParameterType); + + while(!done) { + switch(grammarID) { + case 41: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &dinAC_EVChargeParameterType->DepartureTime); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 42; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 42: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EAmount)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinAC_EVChargeParameterType->EAmount); + grammarID = 43; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 43: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxVoltage)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinAC_EVChargeParameterType->EVMaxVoltage); + grammarID = 44; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 44: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxCurrent)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinAC_EVChargeParameterType->EVMaxCurrent); + grammarID = 45; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 45: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinAC_EVChargeParameterType->EVMinCurrent); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,X509DataType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial|"http://www.w3.org/2000/09/xmldsig#":X509SKI|"http://www.w3.org/2000/09/xmldsig#":X509SubjectName|"http://www.w3.org/2000/09/xmldsig#":X509Certificate|"http://www.w3.org/2000/09/xmldsig#":X509CRL|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))){1-UNBOUNDED}', derivedBy='RESTRICTION'. */ +static int decode_dinX509DataType(bitstream_t* stream, struct dinX509DataType* dinX509DataType) { + int grammarID = 46; + int done = 0; + + init_dinX509DataType(dinX509DataType); + + while(!done) { + switch(grammarID) { + case 46: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinX509DataType->X509IssuerSerial.arrayLen < dinX509DataType_X509IssuerSerial_ARRAY_SIZE) { + errn = decode_dinX509IssuerSerialType(stream, &dinX509DataType->X509IssuerSerial.array[dinX509DataType->X509IssuerSerial.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 47; + break; + case 1: + if (dinX509DataType->X509SKI.arrayLen < dinX509DataType_X509SKI_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinX509DataType->X509SKI.array[dinX509DataType->X509SKI.arrayLen].bytesLen); + if (errn == 0) { + errn = (dinX509DataType->X509SKI.array[dinX509DataType->X509SKI.arrayLen].bytesLen) <= dinX509DataType_X509SKI_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinX509DataType->X509SKI.array[dinX509DataType->X509SKI.arrayLen].bytesLen, dinX509DataType->X509SKI.array[dinX509DataType->X509SKI.arrayLen].bytes); + } + dinX509DataType->X509SKI.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 47; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 2: + if (dinX509DataType->X509SubjectName.arrayLen < dinX509DataType_X509SubjectName_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinX509DataType->X509SubjectName.array[dinX509DataType->X509SubjectName.arrayLen].charactersLen); + if (errn == 0) { + if (dinX509DataType->X509SubjectName.array[dinX509DataType->X509SubjectName.arrayLen].charactersLen >= 2) { + dinX509DataType->X509SubjectName.array[dinX509DataType->X509SubjectName.arrayLen].charactersLen = (uint16_t)(dinX509DataType->X509SubjectName.array[dinX509DataType->X509SubjectName.arrayLen].charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinX509DataType->X509SubjectName.array[dinX509DataType->X509SubjectName.arrayLen].charactersLen, dinX509DataType->X509SubjectName.array[dinX509DataType->X509SubjectName.arrayLen].characters, dinX509DataType_X509SubjectName_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinX509DataType->X509SubjectName.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 47; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 3: + if (dinX509DataType->X509Certificate.arrayLen < dinX509DataType_X509Certificate_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinX509DataType->X509Certificate.array[dinX509DataType->X509Certificate.arrayLen].bytesLen); + if (errn == 0) { + errn = (dinX509DataType->X509Certificate.array[dinX509DataType->X509Certificate.arrayLen].bytesLen) <= dinX509DataType_X509Certificate_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinX509DataType->X509Certificate.array[dinX509DataType->X509Certificate.arrayLen].bytesLen, dinX509DataType->X509Certificate.array[dinX509DataType->X509Certificate.arrayLen].bytes); + } + dinX509DataType->X509Certificate.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 47; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 4: + if (dinX509DataType->X509CRL.arrayLen < dinX509DataType_X509CRL_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinX509DataType->X509CRL.array[dinX509DataType->X509CRL.arrayLen].bytesLen); + if (errn == 0) { + errn = (dinX509DataType->X509CRL.array[dinX509DataType->X509CRL.arrayLen].bytesLen) <= dinX509DataType_X509CRL_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinX509DataType->X509CRL.array[dinX509DataType->X509CRL.arrayLen].bytesLen, dinX509DataType->X509CRL.array[dinX509DataType->X509CRL.arrayLen].bytes); + } + dinX509DataType->X509CRL.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 47; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 5: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 47; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 47: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC, END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinX509DataType->X509IssuerSerial.arrayLen < dinX509DataType_X509IssuerSerial_ARRAY_SIZE) { + errn = decode_dinX509IssuerSerialType(stream, &dinX509DataType->X509IssuerSerial.array[dinX509DataType->X509IssuerSerial.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 47; + break; + case 1: + if (dinX509DataType->X509SKI.arrayLen < dinX509DataType_X509SKI_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinX509DataType->X509SKI.array[dinX509DataType->X509SKI.arrayLen].bytesLen); + if (errn == 0) { + errn = (dinX509DataType->X509SKI.array[dinX509DataType->X509SKI.arrayLen].bytesLen) <= dinX509DataType_X509SKI_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinX509DataType->X509SKI.array[dinX509DataType->X509SKI.arrayLen].bytesLen, dinX509DataType->X509SKI.array[dinX509DataType->X509SKI.arrayLen].bytes); + } + dinX509DataType->X509SKI.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 47; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 2: + if (dinX509DataType->X509SubjectName.arrayLen < dinX509DataType_X509SubjectName_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinX509DataType->X509SubjectName.array[dinX509DataType->X509SubjectName.arrayLen].charactersLen); + if (errn == 0) { + if (dinX509DataType->X509SubjectName.array[dinX509DataType->X509SubjectName.arrayLen].charactersLen >= 2) { + dinX509DataType->X509SubjectName.array[dinX509DataType->X509SubjectName.arrayLen].charactersLen = (uint16_t)(dinX509DataType->X509SubjectName.array[dinX509DataType->X509SubjectName.arrayLen].charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinX509DataType->X509SubjectName.array[dinX509DataType->X509SubjectName.arrayLen].charactersLen, dinX509DataType->X509SubjectName.array[dinX509DataType->X509SubjectName.arrayLen].characters, dinX509DataType_X509SubjectName_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinX509DataType->X509SubjectName.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 47; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 3: + if (dinX509DataType->X509Certificate.arrayLen < dinX509DataType_X509Certificate_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinX509DataType->X509Certificate.array[dinX509DataType->X509Certificate.arrayLen].bytesLen); + if (errn == 0) { + errn = (dinX509DataType->X509Certificate.array[dinX509DataType->X509Certificate.arrayLen].bytesLen) <= dinX509DataType_X509Certificate_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinX509DataType->X509Certificate.array[dinX509DataType->X509Certificate.arrayLen].bytesLen, dinX509DataType->X509Certificate.array[dinX509DataType->X509Certificate.arrayLen].bytes); + } + dinX509DataType->X509Certificate.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 47; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 4: + if (dinX509DataType->X509CRL.arrayLen < dinX509DataType_X509CRL_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinX509DataType->X509CRL.array[dinX509DataType->X509CRL.arrayLen].bytesLen); + if (errn == 0) { + errn = (dinX509DataType->X509CRL.array[dinX509DataType->X509CRL.arrayLen].bytesLen) <= dinX509DataType_X509CRL_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinX509DataType->X509CRL.array[dinX509DataType->X509CRL.arrayLen].bytesLen, dinX509DataType->X509CRL.array[dinX509DataType->X509CRL.arrayLen].bytes); + } + dinX509DataType->X509CRL.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 47; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 5: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 47; + break; + case 6: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ChargingStatusResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEID,"urn:iso:15118:2:2010:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgBody":EVSEMaxCurrent{0-1},"urn:iso:15118:2:2010:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2010:MsgBody":ReceiptRequired,"urn:iso:15118:2:2010:MsgBody":AC_EVSEStatus)', derivedBy='EXTENSION'. */ +static int decode_dinChargingStatusResType(bitstream_t* stream, struct dinChargingStatusResType* dinChargingStatusResType) { + int grammarID = 48; + int done = 0; + + init_dinChargingStatusResType(dinChargingStatusResType); + + while(!done) { + switch(grammarID) { + case 48: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinChargingStatusResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 49; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 49: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinChargingStatusResType->EVSEID.bytesLen); + if (errn == 0) { + errn = (dinChargingStatusResType->EVSEID.bytesLen) <= dinChargingStatusResType_EVSEID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinChargingStatusResType->EVSEID.bytesLen, dinChargingStatusResType->EVSEID.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 50; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 50: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinChargingStatusResType->SAScheduleTupleID); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 51; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 51: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinChargingStatusResType->EVSEMaxCurrent); + dinChargingStatusResType->EVSEMaxCurrent_isUsed = 1u; + grammarID = 52; + break; + case 1: + errn = decode_dinMeterInfoType(stream, &dinChargingStatusResType->MeterInfo); + dinChargingStatusResType->MeterInfo_isUsed = 1u; + grammarID = 53; + break; + case 2: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinChargingStatusResType->ReceiptRequired); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 54; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 52: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinMeterInfoType(stream, &dinChargingStatusResType->MeterInfo); + dinChargingStatusResType->MeterInfo_isUsed = 1u; + grammarID = 53; + break; + case 1: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinChargingStatusResType->ReceiptRequired); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 54; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 53: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinChargingStatusResType->ReceiptRequired); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 54; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 54: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinAC_EVSEStatusType(stream, &dinChargingStatusResType->AC_EVSEStatus); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,WeldingDetectionReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus)', derivedBy='EXTENSION'. */ +static int decode_dinWeldingDetectionReqType(bitstream_t* stream, struct dinWeldingDetectionReqType* dinWeldingDetectionReqType) { + int grammarID = 55; + int done = 0; + + init_dinWeldingDetectionReqType(dinWeldingDetectionReqType); + + while(!done) { + switch(grammarID) { + case 55: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinDC_EVStatusType(stream, &dinWeldingDetectionReqType->DC_EVStatus); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertiesType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":SignatureProperty{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinSignaturePropertiesType(bitstream_t* stream, struct dinSignaturePropertiesType* dinSignaturePropertiesType) { + int grammarID = 56; + int done = 0; + + init_dinSignaturePropertiesType(dinSignaturePropertiesType); + + while(!done) { + switch(grammarID) { + case 56: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinSignaturePropertiesType->Id.charactersLen); + if (errn == 0) { + if (dinSignaturePropertiesType->Id.charactersLen >= 2) { + dinSignaturePropertiesType->Id.charactersLen = (uint16_t)(dinSignaturePropertiesType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinSignaturePropertiesType->Id.charactersLen, dinSignaturePropertiesType->Id.characters, dinSignaturePropertiesType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinSignaturePropertiesType->Id_isUsed = 1u; + grammarID = 57; + break; + case 1: + if (dinSignaturePropertiesType->SignatureProperty.arrayLen < dinSignaturePropertiesType_SignatureProperty_ARRAY_SIZE) { + errn = decode_dinSignaturePropertyType(stream, &dinSignaturePropertiesType->SignatureProperty.array[dinSignaturePropertiesType->SignatureProperty.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 58; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 57: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSignaturePropertiesType->SignatureProperty.arrayLen < dinSignaturePropertiesType_SignatureProperty_ARRAY_SIZE) { + errn = decode_dinSignaturePropertyType(stream, &dinSignaturePropertiesType->SignatureProperty.array[dinSignaturePropertiesType->SignatureProperty.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 58; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 58: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSignaturePropertiesType->SignatureProperty.arrayLen < dinSignaturePropertiesType_SignatureProperty_ARRAY_SIZE) { + errn = decode_dinSignaturePropertyType(stream, &dinSignaturePropertiesType->SignatureProperty.array[dinSignaturePropertiesType->SignatureProperty.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 58; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ContractAuthenticationReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":GenChallenge{0-1})', derivedBy='EXTENSION'. */ +static int decode_dinContractAuthenticationReqType(bitstream_t* stream, struct dinContractAuthenticationReqType* dinContractAuthenticationReqType) { + int grammarID = 59; + int done = 0; + + init_dinContractAuthenticationReqType(dinContractAuthenticationReqType); + + while(!done) { + switch(grammarID) { + case 59: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinContractAuthenticationReqType->Id.charactersLen); + if (errn == 0) { + if (dinContractAuthenticationReqType->Id.charactersLen >= 2) { + dinContractAuthenticationReqType->Id.charactersLen = (uint16_t)(dinContractAuthenticationReqType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinContractAuthenticationReqType->Id.charactersLen, dinContractAuthenticationReqType->Id.characters, dinContractAuthenticationReqType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinContractAuthenticationReqType->Id_isUsed = 1u; + grammarID = 60; + break; + case 1: + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinContractAuthenticationReqType->GenChallenge.charactersLen); + if (errn == 0) { + if (dinContractAuthenticationReqType->GenChallenge.charactersLen >= 2) { + dinContractAuthenticationReqType->GenChallenge.charactersLen = (uint16_t)(dinContractAuthenticationReqType->GenChallenge.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinContractAuthenticationReqType->GenChallenge.charactersLen, dinContractAuthenticationReqType->GenChallenge.characters, dinContractAuthenticationReqType_GenChallenge_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinContractAuthenticationReqType->GenChallenge_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 2: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 60: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinContractAuthenticationReqType->GenChallenge.charactersLen); + if (errn == 0) { + if (dinContractAuthenticationReqType->GenChallenge.charactersLen >= 2) { + dinContractAuthenticationReqType->GenChallenge.charactersLen = (uint16_t)(dinContractAuthenticationReqType->GenChallenge.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinContractAuthenticationReqType->GenChallenge.charactersLen, dinContractAuthenticationReqType->GenChallenge.characters, dinContractAuthenticationReqType_GenChallenge_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinContractAuthenticationReqType->GenChallenge_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVPowerDeliveryParameterType', base type name='EVPowerDeliveryParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2010:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2010:MsgDataTypes":ChargingComplete)', derivedBy='EXTENSION'. */ +static int decode_dinDC_EVPowerDeliveryParameterType(bitstream_t* stream, struct dinDC_EVPowerDeliveryParameterType* dinDC_EVPowerDeliveryParameterType) { + int grammarID = 61; + int done = 0; + + init_dinDC_EVPowerDeliveryParameterType(dinDC_EVPowerDeliveryParameterType); + + while(!done) { + switch(grammarID) { + case 61: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinDC_EVStatusType(stream, &dinDC_EVPowerDeliveryParameterType->DC_EVStatus); + grammarID = 62; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 62: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinDC_EVPowerDeliveryParameterType->BulkChargingComplete); + dinDC_EVPowerDeliveryParameterType->BulkChargingComplete_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 63; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinDC_EVPowerDeliveryParameterType->ChargingComplete); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 63: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinDC_EVPowerDeliveryParameterType->ChargingComplete); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVSEChargeParameterType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +static int decode_dinEVSEChargeParameterType(bitstream_t* stream, struct dinEVSEChargeParameterType* dinEVSEChargeParameterType) { + int grammarID = 64; + int done = 0; + + init_dinEVSEChargeParameterType(dinEVSEChargeParameterType); + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CableCheckReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus)', derivedBy='EXTENSION'. */ +static int decode_dinCableCheckReqType(bitstream_t* stream, struct dinCableCheckReqType* dinCableCheckReqType) { + int grammarID = 55; + int done = 0; + + init_dinCableCheckReqType(dinCableCheckReqType); + + while(!done) { + switch(grammarID) { + case 55: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinDC_EVStatusType(stream, &dinCableCheckReqType->DC_EVStatus); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVChargeParameterType', base type name='EVChargeParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVEnergyCapacity{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVEnergyRequest{0-1},"urn:iso:15118:2:2010:MsgDataTypes":FullSOC{0-1},"urn:iso:15118:2:2010:MsgDataTypes":BulkSOC{0-1})', derivedBy='EXTENSION'. */ +static int decode_dinDC_EVChargeParameterType(bitstream_t* stream, struct dinDC_EVChargeParameterType* dinDC_EVChargeParameterType) { + int grammarID = 65; + int done = 0; + + init_dinDC_EVChargeParameterType(dinDC_EVChargeParameterType); + + while(!done) { + switch(grammarID) { + case 65: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinDC_EVStatusType(stream, &dinDC_EVChargeParameterType->DC_EVStatus); + grammarID = 66; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 66: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVChargeParameterType->EVMaximumCurrentLimit); + grammarID = 67; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 67: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVChargeParameterType->EVMaximumPowerLimit); + dinDC_EVChargeParameterType->EVMaximumPowerLimit_isUsed = 1u; + grammarID = 68; + break; + case 1: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVChargeParameterType->EVMaximumVoltageLimit); + grammarID = 69; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 68: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVChargeParameterType->EVMaximumVoltageLimit); + grammarID = 69; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 69: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVChargeParameterType->EVEnergyCapacity); + dinDC_EVChargeParameterType->EVEnergyCapacity_isUsed = 1u; + grammarID = 70; + break; + case 1: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVChargeParameterType->EVEnergyRequest); + dinDC_EVChargeParameterType->EVEnergyRequest_isUsed = 1u; + grammarID = 71; + break; + case 2: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 7, &(uint32)); + dinDC_EVChargeParameterType->FullSOC = (int8_t)(uint32 + 0); + dinDC_EVChargeParameterType->FullSOC_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 72; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 3: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 7, &(uint32)); + dinDC_EVChargeParameterType->BulkSOC = (int8_t)(uint32 + 0); + dinDC_EVChargeParameterType->BulkSOC_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 4: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 70: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVChargeParameterType->EVEnergyRequest); + dinDC_EVChargeParameterType->EVEnergyRequest_isUsed = 1u; + grammarID = 71; + break; + case 1: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 7, &(uint32)); + dinDC_EVChargeParameterType->FullSOC = (int8_t)(uint32 + 0); + dinDC_EVChargeParameterType->FullSOC_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 72; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 2: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 7, &(uint32)); + dinDC_EVChargeParameterType->BulkSOC = (int8_t)(uint32 + 0); + dinDC_EVChargeParameterType->BulkSOC_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 3: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 71: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 7, &(uint32)); + dinDC_EVChargeParameterType->FullSOC = (int8_t)(uint32 + 0); + dinDC_EVChargeParameterType->FullSOC_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 72; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 7, &(uint32)); + dinDC_EVChargeParameterType->BulkSOC = (int8_t)(uint32 + 0); + dinDC_EVChargeParameterType->BulkSOC_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 2: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 72: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 7, &(uint32)); + dinDC_EVChargeParameterType->BulkSOC = (int8_t)(uint32 + 0); + dinDC_EVChargeParameterType->BulkSOC_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SAScheduleListType', base type name='SASchedulesType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTuple{1-UNBOUNDED})', derivedBy='EXTENSION'. */ +static int decode_dinSAScheduleListType(bitstream_t* stream, struct dinSAScheduleListType* dinSAScheduleListType) { + int grammarID = 73; + int done = 0; + + init_dinSAScheduleListType(dinSAScheduleListType); + + while(!done) { + switch(grammarID) { + case 73: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSAScheduleListType->SAScheduleTuple.arrayLen < dinSAScheduleListType_SAScheduleTuple_ARRAY_SIZE) { + errn = decode_dinSAScheduleTupleType(stream, &dinSAScheduleListType->SAScheduleTuple.array[dinSAScheduleListType->SAScheduleTuple.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 74; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 74: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSAScheduleListType->SAScheduleTuple.arrayLen < dinSAScheduleListType_SAScheduleTuple_ARRAY_SIZE) { + errn = decode_dinSAScheduleTupleType(stream, &dinSAScheduleListType->SAScheduleTuple.array[dinSAScheduleListType->SAScheduleTuple.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 74; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PMaxScheduleType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleID,"urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleEntry{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinPMaxScheduleType(bitstream_t* stream, struct dinPMaxScheduleType* dinPMaxScheduleType) { + int grammarID = 75; + int done = 0; + + init_dinPMaxScheduleType(dinPMaxScheduleType); + + while(!done) { + switch(grammarID) { + case 75: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinPMaxScheduleType->PMaxScheduleID); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 76; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 76: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinPMaxScheduleType->PMaxScheduleEntry.arrayLen < dinPMaxScheduleType_PMaxScheduleEntry_ARRAY_SIZE) { + errn = decode_dinPMaxScheduleEntryType(stream, &dinPMaxScheduleType->PMaxScheduleEntry.array[dinPMaxScheduleType->PMaxScheduleEntry.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 77; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 77: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinPMaxScheduleType->PMaxScheduleEntry.arrayLen < dinPMaxScheduleType_PMaxScheduleEntry_ARRAY_SIZE) { + errn = decode_dinPMaxScheduleEntryType(stream, &dinPMaxScheduleType->PMaxScheduleEntry.array[dinPMaxScheduleType->PMaxScheduleEntry.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 77; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServicePaymentSelectionReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":SelectedPaymentOption,"urn:iso:15118:2:2010:MsgBody":SelectedServiceList)', derivedBy='EXTENSION'. */ +static int decode_dinServicePaymentSelectionReqType(bitstream_t* stream, struct dinServicePaymentSelectionReqType* dinServicePaymentSelectionReqType) { + int grammarID = 78; + int done = 0; + + init_dinServicePaymentSelectionReqType(dinServicePaymentSelectionReqType); + + while(!done) { + switch(grammarID) { + case 78: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 1, &uint32); + dinServicePaymentSelectionReqType->SelectedPaymentOption = (dinpaymentOptionType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 79; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 79: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedServiceList)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinSelectedServiceListType(stream, &dinServicePaymentSelectionReqType->SelectedServiceList); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,RelativeTimeIntervalType', base type name='IntervalType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":start,"urn:iso:15118:2:2010:MsgDataTypes":duration{0-1})', derivedBy='EXTENSION'. */ +static int decode_dinRelativeTimeIntervalType(bitstream_t* stream, struct dinRelativeTimeIntervalType* dinRelativeTimeIntervalType) { + int grammarID = 80; + int done = 0; + + init_dinRelativeTimeIntervalType(dinRelativeTimeIntervalType); + + while(!done) { + switch(grammarID) { + case 80: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &dinRelativeTimeIntervalType->start); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 81; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 81: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}duration), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &dinRelativeTimeIntervalType->duration); + dinRelativeTimeIntervalType->duration_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}duration) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVStatusType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +static int decode_dinEVStatusType(bitstream_t* stream, struct dinEVStatusType* dinEVStatusType) { + int grammarID = 64; + int done = 0; + + init_dinEVStatusType(dinEVStatusType); + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PreChargeResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage)', derivedBy='EXTENSION'. */ +static int decode_dinPreChargeResType(bitstream_t* stream, struct dinPreChargeResType* dinPreChargeResType) { + int grammarID = 13; + int done = 0; + + init_dinPreChargeResType(dinPreChargeResType); + + while(!done) { + switch(grammarID) { + case 13: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinPreChargeResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 14; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 14: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinDC_EVSEStatusType(stream, &dinPreChargeResType->DC_EVSEStatus); + grammarID = 15; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 15: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinPreChargeResType->EVSEPresentVoltage); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEChargeParameterType', base type name='EVSEChargeParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinimumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinimumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSECurrentRegulationTolerance{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEPeakCurrentRipple,"urn:iso:15118:2:2010:MsgDataTypes":EVSEEnergyToBeDelivered{0-1})', derivedBy='EXTENSION'. */ +static int decode_dinDC_EVSEChargeParameterType(bitstream_t* stream, struct dinDC_EVSEChargeParameterType* dinDC_EVSEChargeParameterType) { + int grammarID = 82; + int done = 0; + + init_dinDC_EVSEChargeParameterType(dinDC_EVSEChargeParameterType); + + while(!done) { + switch(grammarID) { + case 82: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinDC_EVSEStatusType(stream, &dinDC_EVSEChargeParameterType->DC_EVSEStatus); + grammarID = 83; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 83: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEMaximumCurrentLimit); + grammarID = 84; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 84: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEMaximumPowerLimit); + dinDC_EVSEChargeParameterType->EVSEMaximumPowerLimit_isUsed = 1u; + grammarID = 85; + break; + case 1: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEMaximumVoltageLimit); + grammarID = 86; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 85: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEMaximumVoltageLimit); + grammarID = 86; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 86: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumCurrentLimit)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEMinimumCurrentLimit); + grammarID = 87; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 87: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumVoltageLimit)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEMinimumVoltageLimit); + grammarID = 88; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 88: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSECurrentRegulationTolerance), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSECurrentRegulationTolerance); + dinDC_EVSEChargeParameterType->EVSECurrentRegulationTolerance_isUsed = 1u; + grammarID = 89; + break; + case 1: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEPeakCurrentRipple); + grammarID = 90; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 89: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEPeakCurrentRipple); + grammarID = 90; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 90: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEEnergyToBeDelivered); + dinDC_EVSEChargeParameterType->EVSEEnergyToBeDelivered_isUsed = 1u; + grammarID = 4; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PaymentDetailsResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":GenChallenge,"urn:iso:15118:2:2010:MsgBody":DateTimeNow)', derivedBy='EXTENSION'. */ +static int decode_dinPaymentDetailsResType(bitstream_t* stream, struct dinPaymentDetailsResType* dinPaymentDetailsResType) { + int grammarID = 91; + int done = 0; + + init_dinPaymentDetailsResType(dinPaymentDetailsResType); + + while(!done) { + switch(grammarID) { + case 91: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinPaymentDetailsResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 92; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 92: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinPaymentDetailsResType->GenChallenge.charactersLen); + if (errn == 0) { + if (dinPaymentDetailsResType->GenChallenge.charactersLen >= 2) { + dinPaymentDetailsResType->GenChallenge.charactersLen = (uint16_t)(dinPaymentDetailsResType->GenChallenge.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinPaymentDetailsResType->GenChallenge.charactersLen, dinPaymentDetailsResType->GenChallenge.characters, dinPaymentDetailsResType_GenChallenge_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 93; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 93: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger64(stream, &dinPaymentDetailsResType->DateTimeNow); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,DSAKeyValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("http://www.w3.org/2000/09/xmldsig#":P,"http://www.w3.org/2000/09/xmldsig#":Q){0-1},"http://www.w3.org/2000/09/xmldsig#":G{0-1},"http://www.w3.org/2000/09/xmldsig#":Y,"http://www.w3.org/2000/09/xmldsig#":J{0-1},("http://www.w3.org/2000/09/xmldsig#":Seed,"http://www.w3.org/2000/09/xmldsig#":PgenCounter){0-1})', derivedBy='RESTRICTION'. */ +static int decode_dinDSAKeyValueType(bitstream_t* stream, struct dinDSAKeyValueType* dinDSAKeyValueType) { + int grammarID = 94; + int done = 0; + + init_dinDSAKeyValueType(dinDSAKeyValueType); + + while(!done) { + switch(grammarID) { + case 94: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinDSAKeyValueType->P.bytesLen); + if (errn == 0) { + errn = (dinDSAKeyValueType->P.bytesLen) <= dinDSAKeyValueType_P_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinDSAKeyValueType->P.bytesLen, dinDSAKeyValueType->P.bytes); + } + dinDSAKeyValueType->P_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 95; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinDSAKeyValueType->G.bytesLen); + if (errn == 0) { + errn = (dinDSAKeyValueType->G.bytesLen) <= dinDSAKeyValueType_G_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinDSAKeyValueType->G.bytesLen, dinDSAKeyValueType->G.bytes); + } + dinDSAKeyValueType->G_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 96; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 2: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinDSAKeyValueType->Y.bytesLen); + if (errn == 0) { + errn = (dinDSAKeyValueType->Y.bytesLen) <= dinDSAKeyValueType_Y_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinDSAKeyValueType->Y.bytesLen, dinDSAKeyValueType->Y.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 97; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 95: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Q)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinDSAKeyValueType->Q.bytesLen); + if (errn == 0) { + errn = (dinDSAKeyValueType->Q.bytesLen) <= dinDSAKeyValueType_Q_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinDSAKeyValueType->Q.bytesLen, dinDSAKeyValueType->Q.bytes); + } + dinDSAKeyValueType->Q_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Q) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 98; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 98: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinDSAKeyValueType->G.bytesLen); + if (errn == 0) { + errn = (dinDSAKeyValueType->G.bytesLen) <= dinDSAKeyValueType_G_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinDSAKeyValueType->G.bytesLen, dinDSAKeyValueType->G.bytes); + } + dinDSAKeyValueType->G_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 96; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinDSAKeyValueType->Y.bytesLen); + if (errn == 0) { + errn = (dinDSAKeyValueType->Y.bytesLen) <= dinDSAKeyValueType_Y_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinDSAKeyValueType->Y.bytesLen, dinDSAKeyValueType->Y.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 97; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 96: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinDSAKeyValueType->Y.bytesLen); + if (errn == 0) { + errn = (dinDSAKeyValueType->Y.bytesLen) <= dinDSAKeyValueType_Y_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinDSAKeyValueType->Y.bytesLen, dinDSAKeyValueType->Y.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 97; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 97: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}J), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinDSAKeyValueType->J.bytesLen); + if (errn == 0) { + errn = (dinDSAKeyValueType->J.bytesLen) <= dinDSAKeyValueType_J_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinDSAKeyValueType->J.bytesLen, dinDSAKeyValueType->J.bytes); + } + dinDSAKeyValueType->J_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}J) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 99; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinDSAKeyValueType->Seed.bytesLen); + if (errn == 0) { + errn = (dinDSAKeyValueType->Seed.bytesLen) <= dinDSAKeyValueType_Seed_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinDSAKeyValueType->Seed.bytesLen, dinDSAKeyValueType->Seed.bytes); + } + dinDSAKeyValueType->Seed_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 100; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 2: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 99: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinDSAKeyValueType->Seed.bytesLen); + if (errn == 0) { + errn = (dinDSAKeyValueType->Seed.bytesLen) <= dinDSAKeyValueType_Seed_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinDSAKeyValueType->Seed.bytesLen, dinDSAKeyValueType->Seed.bytes); + } + dinDSAKeyValueType->Seed_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 100; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 100: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PgenCounter)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinDSAKeyValueType->PgenCounter.bytesLen); + if (errn == 0) { + errn = (dinDSAKeyValueType->PgenCounter.bytesLen) <= dinDSAKeyValueType_PgenCounter_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinDSAKeyValueType->PgenCounter.bytesLen, dinDSAKeyValueType->PgenCounter.bytes); + } + dinDSAKeyValueType->PgenCounter_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PgenCounter) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SASchedulesType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +static int decode_dinSASchedulesType(bitstream_t* stream, struct dinSASchedulesType* dinSASchedulesType) { + int grammarID = 64; + int done = 0; + + init_dinSASchedulesType(dinSASchedulesType); + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateUpdateResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2010:MsgBody":DHParams,"urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":RetryCounter)', derivedBy='EXTENSION'. */ +static int decode_dinCertificateUpdateResType(bitstream_t* stream, struct dinCertificateUpdateResType* dinCertificateUpdateResType) { + int grammarID = 101; + int done = 0; + + init_dinCertificateUpdateResType(dinCertificateUpdateResType); + + while(!done) { + switch(grammarID) { + case 101: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinCertificateUpdateResType->Id.charactersLen); + if (errn == 0) { + if (dinCertificateUpdateResType->Id.charactersLen >= 2) { + dinCertificateUpdateResType->Id.charactersLen = (uint16_t)(dinCertificateUpdateResType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinCertificateUpdateResType->Id.charactersLen, dinCertificateUpdateResType->Id.characters, dinCertificateUpdateResType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + grammarID = 102; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 102: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinCertificateUpdateResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 103; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 103: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinCertificateChainType(stream, &dinCertificateUpdateResType->ContractSignatureCertChain); + grammarID = 104; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 104: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinCertificateUpdateResType->ContractSignatureEncryptedPrivateKey.bytesLen); + if (errn == 0) { + errn = (dinCertificateUpdateResType->ContractSignatureEncryptedPrivateKey.bytesLen) <= dinCertificateUpdateResType_ContractSignatureEncryptedPrivateKey_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinCertificateUpdateResType->ContractSignatureEncryptedPrivateKey.bytesLen, dinCertificateUpdateResType->ContractSignatureEncryptedPrivateKey.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 105; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 105: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinCertificateUpdateResType->DHParams.bytesLen); + if (errn == 0) { + errn = (dinCertificateUpdateResType->DHParams.bytesLen) <= dinCertificateUpdateResType_DHParams_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinCertificateUpdateResType->DHParams.bytesLen, dinCertificateUpdateResType->DHParams.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 106; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 106: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinCertificateUpdateResType->ContractID.charactersLen); + if (errn == 0) { + if (dinCertificateUpdateResType->ContractID.charactersLen >= 2) { + dinCertificateUpdateResType->ContractID.charactersLen = (uint16_t)(dinCertificateUpdateResType->ContractID.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinCertificateUpdateResType->ContractID.charactersLen, dinCertificateUpdateResType->ContractID.characters, dinCertificateUpdateResType_ContractID_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 107; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 107: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RetryCounter)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinCertificateUpdateResType->RetryCounter); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RetryCounter) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVChargeParameterType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +static int decode_dinEVChargeParameterType(bitstream_t* stream, struct dinEVChargeParameterType* dinEVChargeParameterType) { + int grammarID = 64; + int done = 0; + + init_dinEVChargeParameterType(dinEVChargeParameterType); + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgHeader,MessageHeaderType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgHeader":SessionID,"urn:iso:15118:2:2010:MsgHeader":Notification{0-1},"http://www.w3.org/2000/09/xmldsig#":Signature{0-1})', derivedBy='RESTRICTION'. */ +static int decode_dinMessageHeaderType(bitstream_t* stream, struct dinMessageHeaderType* dinMessageHeaderType) { + int grammarID = 108; + int done = 0; + + init_dinMessageHeaderType(dinMessageHeaderType); + + while(!done) { + switch(grammarID) { + case 108: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinMessageHeaderType->SessionID.bytesLen); + if (errn == 0) { + errn = (dinMessageHeaderType->SessionID.bytesLen) <= dinMessageHeaderType_SessionID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinMessageHeaderType->SessionID.bytesLen, dinMessageHeaderType->SessionID.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 109; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 109: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}Notification), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinNotificationType(stream, &dinMessageHeaderType->Notification); + dinMessageHeaderType->Notification_isUsed = 1u; + grammarID = 110; + break; + case 1: + errn = decode_dinSignatureType(stream, &dinMessageHeaderType->Signature); + dinMessageHeaderType->Signature_isUsed = 1u; + grammarID = 4; + break; + case 2: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 110: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinSignatureType(stream, &dinMessageHeaderType->Signature); + dinMessageHeaderType->Signature_isUsed = 1u; + grammarID = 4; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDef,BodyBaseType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +static int decode_dinBodyBaseType(bitstream_t* stream, struct dinBodyBaseType* dinBodyBaseType) { + int grammarID = 64; + int done = 0; + + init_dinBodyBaseType(dinBodyBaseType); + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyValueType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":DSAKeyValue|"http://www.w3.org/2000/09/xmldsig#":RSAKeyValue|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))', derivedBy='RESTRICTION'. */ +static int decode_dinKeyValueType(bitstream_t* stream, struct dinKeyValueType* dinKeyValueType) { + int grammarID = 111; + int done = 0; + + init_dinKeyValueType(dinKeyValueType); + + while(!done) { + switch(grammarID) { + case 111: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinDSAKeyValueType(stream, &dinKeyValueType->DSAKeyValue); + dinKeyValueType->DSAKeyValue_isUsed = 1u; + grammarID = 112; + break; + case 1: + errn = decode_dinRSAKeyValueType(stream, &dinKeyValueType->RSAKeyValue); + dinKeyValueType->RSAKeyValue_isUsed = 1u; + grammarID = 112; + break; + case 2: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 112; + break; + case 3: + errn = decodeUnsignedInteger16(stream, &dinKeyValueType->ANY.charactersLen); + if (errn == 0) { + if (dinKeyValueType->ANY.charactersLen >= 2) { + dinKeyValueType->ANY.charactersLen = (uint16_t)(dinKeyValueType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinKeyValueType->ANY.charactersLen, dinKeyValueType->ANY.characters, dinKeyValueType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinKeyValueType->ANY_isUsed = 1u; + grammarID = 113; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 112: + /* Element[END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + case 1: + errn = decodeUnsignedInteger16(stream, &dinKeyValueType->ANY.charactersLen); + if (errn == 0) { + if (dinKeyValueType->ANY.charactersLen >= 2) { + dinKeyValueType->ANY.charactersLen = (uint16_t)(dinKeyValueType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinKeyValueType->ANY.charactersLen, dinKeyValueType->ANY.characters, dinKeyValueType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinKeyValueType->ANY_isUsed = 1u; + grammarID = 112; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 113: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinDSAKeyValueType(stream, &dinKeyValueType->DSAKeyValue); + dinKeyValueType->DSAKeyValue_isUsed = 1u; + grammarID = 112; + break; + case 1: + errn = decode_dinRSAKeyValueType(stream, &dinKeyValueType->RSAKeyValue); + dinKeyValueType->RSAKeyValue_isUsed = 1u; + grammarID = 112; + break; + case 2: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 112; + break; + case 3: + errn = decodeUnsignedInteger16(stream, &dinKeyValueType->ANY.charactersLen); + if (errn == 0) { + if (dinKeyValueType->ANY.charactersLen >= 2) { + dinKeyValueType->ANY.charactersLen = (uint16_t)(dinKeyValueType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinKeyValueType->ANY.charactersLen, dinKeyValueType->ANY.characters, dinKeyValueType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinKeyValueType->ANY_isUsed = 1u; + grammarID = 113; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,IntervalType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +static int decode_dinIntervalType(bitstream_t* stream, struct dinIntervalType* dinIntervalType) { + int grammarID = 64; + int done = 0; + + init_dinIntervalType(dinIntervalType); + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ChargeParameterDiscoveryResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing,"urn:iso:15118:2:2010:MsgDataTypes":SASchedules,"urn:iso:15118:2:2010:MsgDataTypes":EVSEChargeParameter)', derivedBy='EXTENSION'. */ +static int decode_dinChargeParameterDiscoveryResType(bitstream_t* stream, struct dinChargeParameterDiscoveryResType* dinChargeParameterDiscoveryResType) { + int grammarID = 114; + int done = 0; + + init_dinChargeParameterDiscoveryResType(dinChargeParameterDiscoveryResType); + + while(!done) { + switch(grammarID) { + case 114: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinChargeParameterDiscoveryResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 115; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 115: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 1, &uint32); + dinChargeParameterDiscoveryResType->EVSEProcessing = (dinEVSEProcessingType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 116; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 116: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinSAScheduleListType(stream, &dinChargeParameterDiscoveryResType->SAScheduleList); + dinChargeParameterDiscoveryResType->SAScheduleList_isUsed = 1u; + grammarID = 117; + break; + case 1: + errn = decode_dinSASchedulesType(stream, &dinChargeParameterDiscoveryResType->SASchedules); + dinChargeParameterDiscoveryResType->SASchedules_isUsed = 1u; + grammarID = 117; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 117: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinAC_EVSEChargeParameterType(stream, &dinChargeParameterDiscoveryResType->AC_EVSEChargeParameter); + dinChargeParameterDiscoveryResType->AC_EVSEChargeParameter_isUsed = 1u; + grammarID = 4; + break; + case 1: + errn = decode_dinDC_EVSEChargeParameterType(stream, &dinChargeParameterDiscoveryResType->DC_EVSEChargeParameter); + dinChargeParameterDiscoveryResType->DC_EVSEChargeParameter_isUsed = 1u; + grammarID = 4; + break; + case 2: + errn = decode_dinEVSEChargeParameterType(stream, &dinChargeParameterDiscoveryResType->EVSEChargeParameter); + dinChargeParameterDiscoveryResType->EVSEChargeParameter_isUsed = 1u; + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PowerDeliveryReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ReadyToChargeState,"urn:iso:15118:2:2010:MsgBody":ChargingProfile{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVPowerDeliveryParameter{0-1})', derivedBy='EXTENSION'. */ +static int decode_dinPowerDeliveryReqType(bitstream_t* stream, struct dinPowerDeliveryReqType* dinPowerDeliveryReqType) { + int grammarID = 118; + int done = 0; + + init_dinPowerDeliveryReqType(dinPowerDeliveryReqType); + + while(!done) { + switch(grammarID) { + case 118: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinPowerDeliveryReqType->ReadyToChargeState); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 119; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 119: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinChargingProfileType(stream, &dinPowerDeliveryReqType->ChargingProfile); + dinPowerDeliveryReqType->ChargingProfile_isUsed = 1u; + grammarID = 120; + break; + case 1: + errn = decode_dinDC_EVPowerDeliveryParameterType(stream, &dinPowerDeliveryReqType->DC_EVPowerDeliveryParameter); + dinPowerDeliveryReqType->DC_EVPowerDeliveryParameter_isUsed = 1u; + grammarID = 4; + break; + case 2: + errn = decode_dinEVPowerDeliveryParameterType(stream, &dinPowerDeliveryReqType->EVPowerDeliveryParameter); + dinPowerDeliveryReqType->EVPowerDeliveryParameter_isUsed = 1u; + grammarID = 4; + break; + case 3: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 120: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinDC_EVPowerDeliveryParameterType(stream, &dinPowerDeliveryReqType->DC_EVPowerDeliveryParameter); + dinPowerDeliveryReqType->DC_EVPowerDeliveryParameter_isUsed = 1u; + grammarID = 4; + break; + case 1: + errn = decode_dinEVPowerDeliveryParameterType(stream, &dinPowerDeliveryReqType->EVPowerDeliveryParameter); + dinPowerDeliveryReqType->EVPowerDeliveryParameter_isUsed = 1u; + grammarID = 4; + break; + case 2: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CertificateChainType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate,"urn:iso:15118:2:2010:MsgDataTypes":SubCertificates{0-1})', derivedBy='RESTRICTION'. */ +static int decode_dinCertificateChainType(bitstream_t* stream, struct dinCertificateChainType* dinCertificateChainType) { + int grammarID = 121; + int done = 0; + + init_dinCertificateChainType(dinCertificateChainType); + + while(!done) { + switch(grammarID) { + case 121: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinCertificateChainType->Certificate.bytesLen); + if (errn == 0) { + errn = (dinCertificateChainType->Certificate.bytesLen) <= dinCertificateChainType_Certificate_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinCertificateChainType->Certificate.bytesLen, dinCertificateChainType->Certificate.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 122; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 122: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SubCertificates), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinSubCertificatesType(stream, &dinCertificateChainType->SubCertificates); + dinCertificateChainType->SubCertificates_isUsed = 1u; + grammarID = 4; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinTransformsType(bitstream_t* stream, struct dinTransformsType* dinTransformsType) { + int grammarID = 123; + int done = 0; + + init_dinTransformsType(dinTransformsType); + + while(!done) { + switch(grammarID) { + case 123: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinTransformsType->Transform.arrayLen < dinTransformsType_Transform_ARRAY_SIZE) { + errn = decode_dinTransformType(stream, &dinTransformsType->Transform.array[dinTransformsType->Transform.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 124; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 124: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinTransformsType->Transform.arrayLen < dinTransformsType_Transform_ARRAY_SIZE) { + errn = decode_dinTransformType(stream, &dinTransformsType->Transform.array[dinTransformsType->Transform.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 124; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EntryType', base type name='anyType', content type='ELEMENT', isAbstract='true', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":TimeInterval)', derivedBy='RESTRICTION'. */ +static int decode_dinEntryType(bitstream_t* stream, struct dinEntryType* dinEntryType) { + int grammarID = 125; + int done = 0; + + init_dinEntryType(dinEntryType); + + while(!done) { + switch(grammarID) { + case 125: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinRelativeTimeIntervalType(stream, &dinEntryType->RelativeTimeInterval); + dinEntryType->RelativeTimeInterval_isUsed = 1u; + grammarID = 4; + break; + case 1: + errn = decode_dinIntervalType(stream, &dinEntryType->TimeInterval); + dinEntryType->TimeInterval_isUsed = 1u; + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,SessionStopType', base type name='BodyBaseType', content type='EMPTY', isAbstract='false', hasTypeId='false', final='0', block='0', derivedBy='EXTENSION'. */ +static int decode_dinSessionStopType(bitstream_t* stream, struct dinSessionStopType* dinSessionStopType) { + int grammarID = 64; + int done = 0; + + init_dinSessionStopType(dinSessionStopType); + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDetailReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ServiceID)', derivedBy='EXTENSION'. */ +static int decode_dinServiceDetailReqType(bitstream_t* stream, struct dinServiceDetailReqType* dinServiceDetailReqType) { + int grammarID = 126; + int done = 0; + + init_dinServiceDetailReqType(dinServiceDetailReqType); + + while(!done) { + switch(grammarID) { + case 126: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinServiceDetailReqType->ServiceID); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,DigestMethodType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinDigestMethodType(bitstream_t* stream, struct dinDigestMethodType* dinDigestMethodType) { + int grammarID = 18; + int done = 0; + + init_dinDigestMethodType(dinDigestMethodType); + + while(!done) { + switch(grammarID) { + case 18: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinDigestMethodType->Algorithm.charactersLen); + if (errn == 0) { + if (dinDigestMethodType->Algorithm.charactersLen >= 2) { + dinDigestMethodType->Algorithm.charactersLen = (uint16_t)(dinDigestMethodType->Algorithm.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinDigestMethodType->Algorithm.charactersLen, dinDigestMethodType->Algorithm.characters, dinDigestMethodType_Algorithm_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + grammarID = 19; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 19: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 20; + break; + case 1: + done = 1; + grammarID = 5; + break; + case 2: + errn = decodeUnsignedInteger16(stream, &dinDigestMethodType->ANY.charactersLen); + if (errn == 0) { + if (dinDigestMethodType->ANY.charactersLen >= 2) { + dinDigestMethodType->ANY.charactersLen = (uint16_t)(dinDigestMethodType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinDigestMethodType->ANY.charactersLen, dinDigestMethodType->ANY.characters, dinDigestMethodType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinDigestMethodType->ANY_isUsed = 1u; + grammarID = 20; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 20: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 20; + break; + case 1: + done = 1; + grammarID = 5; + break; + case 2: + errn = decodeUnsignedInteger16(stream, &dinDigestMethodType->ANY.charactersLen); + if (errn == 0) { + if (dinDigestMethodType->ANY.charactersLen >= 2) { + dinDigestMethodType->ANY.charactersLen = (uint16_t)(dinDigestMethodType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinDigestMethodType->ANY.charactersLen, dinDigestMethodType->ANY.characters, dinDigestMethodType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinDigestMethodType->ANY_isUsed = 1u; + grammarID = 20; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ParameterType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":boolValue|"urn:iso:15118:2:2010:MsgDataTypes":byteValue|"urn:iso:15118:2:2010:MsgDataTypes":shortValue|"urn:iso:15118:2:2010:MsgDataTypes":intValue|"urn:iso:15118:2:2010:MsgDataTypes":physicalValue|"urn:iso:15118:2:2010:MsgDataTypes":stringValue)', derivedBy='RESTRICTION'. */ +static int decode_dinParameterType(bitstream_t* stream, struct dinParameterType* dinParameterType) { + int grammarID = 127; + int done = 0; + + init_dinParameterType(dinParameterType); + + while(!done) { + switch(grammarID) { + case 127: + /* FirstStartTag[ATTRIBUTE[STRING](Name)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinParameterType->Name.charactersLen); + if (errn == 0) { + if (dinParameterType->Name.charactersLen >= 2) { + dinParameterType->Name.charactersLen = (uint16_t)(dinParameterType->Name.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinParameterType->Name.charactersLen, dinParameterType->Name.characters, dinParameterType_Name_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + grammarID = 128; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 128: + /* StartTag[ATTRIBUTE[ENUMERATION](ValueType)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeNBitUnsignedInteger(stream, 3, &uint32); + dinParameterType->ValueType = (dinvalueType) uint32; + grammarID = 129; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 129: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue)] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinParameterType->boolValue); + dinParameterType->boolValue_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* First(xsi:type)StartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 8, &(uint32)); + dinParameterType->byteValue = (int8_t)(uint32 -128); + dinParameterType->byteValue_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 2: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinParameterType->shortValue); + dinParameterType->shortValue_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 3: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger32(stream, &dinParameterType->intValue); + dinParameterType->intValue_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 4: + errn = decode_dinPhysicalValueType(stream, &dinParameterType->physicalValue); + dinParameterType->physicalValue_isUsed = 1u; + grammarID = 4; + break; + case 5: + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinParameterType->stringValue.charactersLen); + if (errn == 0) { + if (dinParameterType->stringValue.charactersLen >= 2) { + dinParameterType->stringValue.charactersLen = (uint16_t)(dinParameterType->stringValue.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinParameterType->stringValue.charactersLen, dinParameterType->stringValue.characters, dinParameterType_stringValue_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinParameterType->stringValue_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ChargingStatusReqType', base type name='BodyBaseType', content type='EMPTY', isAbstract='false', hasTypeId='false', final='0', block='0', derivedBy='EXTENSION'. */ +static int decode_dinChargingStatusReqType(bitstream_t* stream, struct dinChargingStatusReqType* dinChargingStatusReqType) { + int grammarID = 64; + int done = 0; + + init_dinChargingStatusReqType(dinChargingStatusReqType); + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureMethodType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":HMACOutputLength{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinSignatureMethodType(bitstream_t* stream, struct dinSignatureMethodType* dinSignatureMethodType) { + int grammarID = 130; + int done = 0; + + init_dinSignatureMethodType(dinSignatureMethodType); + + while(!done) { + switch(grammarID) { + case 130: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinSignatureMethodType->Algorithm.charactersLen); + if (errn == 0) { + if (dinSignatureMethodType->Algorithm.charactersLen >= 2) { + dinSignatureMethodType->Algorithm.charactersLen = (uint16_t)(dinSignatureMethodType->Algorithm.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinSignatureMethodType->Algorithm.charactersLen, dinSignatureMethodType->Algorithm.characters, dinSignatureMethodType_Algorithm_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + grammarID = 131; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 131: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger64(stream, &dinSignatureMethodType->HMACOutputLength); + dinSignatureMethodType->HMACOutputLength_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 20; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 20; + break; + case 2: + done = 1; + grammarID = 5; + break; + case 3: + errn = decodeUnsignedInteger16(stream, &dinSignatureMethodType->ANY.charactersLen); + if (errn == 0) { + if (dinSignatureMethodType->ANY.charactersLen >= 2) { + dinSignatureMethodType->ANY.charactersLen = (uint16_t)(dinSignatureMethodType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinSignatureMethodType->ANY.charactersLen, dinSignatureMethodType->ANY.characters, dinSignatureMethodType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinSignatureMethodType->ANY_isUsed = 1u; + grammarID = 132; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 20: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 20; + break; + case 1: + done = 1; + grammarID = 5; + break; + case 2: + errn = decodeUnsignedInteger16(stream, &dinSignatureMethodType->ANY.charactersLen); + if (errn == 0) { + if (dinSignatureMethodType->ANY.charactersLen >= 2) { + dinSignatureMethodType->ANY.charactersLen = (uint16_t)(dinSignatureMethodType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinSignatureMethodType->ANY.charactersLen, dinSignatureMethodType->ANY.characters, dinSignatureMethodType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinSignatureMethodType->ANY_isUsed = 1u; + grammarID = 20; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 132: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger64(stream, &dinSignatureMethodType->HMACOutputLength); + dinSignatureMethodType->HMACOutputLength_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 20; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 20; + break; + case 2: + done = 1; + grammarID = 5; + break; + case 3: + errn = decodeUnsignedInteger16(stream, &dinSignatureMethodType->ANY.charactersLen); + if (errn == 0) { + if (dinSignatureMethodType->ANY.charactersLen >= 2) { + dinSignatureMethodType->ANY.charactersLen = (uint16_t)(dinSignatureMethodType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinSignatureMethodType->ANY.charactersLen, dinSignatureMethodType->ANY.characters, dinSignatureMethodType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinSignatureMethodType->ANY_isUsed = 1u; + grammarID = 132; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateInstallationReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":OEMProvisioningCert,"urn:iso:15118:2:2010:MsgBody":ListOfRootCertificateIDs,"urn:iso:15118:2:2010:MsgBody":DHParams)', derivedBy='EXTENSION'. */ +static int decode_dinCertificateInstallationReqType(bitstream_t* stream, struct dinCertificateInstallationReqType* dinCertificateInstallationReqType) { + int grammarID = 133; + int done = 0; + + init_dinCertificateInstallationReqType(dinCertificateInstallationReqType); + + while(!done) { + switch(grammarID) { + case 133: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinCertificateInstallationReqType->Id.charactersLen); + if (errn == 0) { + if (dinCertificateInstallationReqType->Id.charactersLen >= 2) { + dinCertificateInstallationReqType->Id.charactersLen = (uint16_t)(dinCertificateInstallationReqType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinCertificateInstallationReqType->Id.charactersLen, dinCertificateInstallationReqType->Id.characters, dinCertificateInstallationReqType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinCertificateInstallationReqType->Id_isUsed = 1u; + grammarID = 134; + break; + case 1: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinCertificateInstallationReqType->OEMProvisioningCert.bytesLen); + if (errn == 0) { + errn = (dinCertificateInstallationReqType->OEMProvisioningCert.bytesLen) <= dinCertificateInstallationReqType_OEMProvisioningCert_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinCertificateInstallationReqType->OEMProvisioningCert.bytesLen, dinCertificateInstallationReqType->OEMProvisioningCert.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 135; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 134: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinCertificateInstallationReqType->OEMProvisioningCert.bytesLen); + if (errn == 0) { + errn = (dinCertificateInstallationReqType->OEMProvisioningCert.bytesLen) <= dinCertificateInstallationReqType_OEMProvisioningCert_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinCertificateInstallationReqType->OEMProvisioningCert.bytesLen, dinCertificateInstallationReqType->OEMProvisioningCert.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 135; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 135: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinListOfRootCertificateIDsType(stream, &dinCertificateInstallationReqType->ListOfRootCertificateIDs); + grammarID = 136; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 136: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinCertificateInstallationReqType->DHParams.bytesLen); + if (errn == 0) { + errn = (dinCertificateInstallationReqType->DHParams.bytesLen) <= dinCertificateInstallationReqType_DHParams_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinCertificateInstallationReqType->DHParams.bytesLen, dinCertificateInstallationReqType->DHParams.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SalesTariffEntryType', base type name='EntryType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("urn:iso:15118:2:2010:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2010:MsgDataTypes":EPriceLevel,"urn:iso:15118:2:2010:MsgDataTypes":ConsumptionCost{0-UNBOUNDED}))', derivedBy='EXTENSION'. */ +static int decode_dinSalesTariffEntryType(bitstream_t* stream, struct dinSalesTariffEntryType* dinSalesTariffEntryType) { + int grammarID = 137; + int done = 0; + + init_dinSalesTariffEntryType(dinSalesTariffEntryType); + + while(!done) { + switch(grammarID) { + case 137: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinRelativeTimeIntervalType(stream, &dinSalesTariffEntryType->RelativeTimeInterval); + dinSalesTariffEntryType->RelativeTimeInterval_isUsed = 1u; + grammarID = 138; + break; + case 1: + errn = decode_dinIntervalType(stream, &dinSalesTariffEntryType->TimeInterval); + dinSalesTariffEntryType->TimeInterval_isUsed = 1u; + grammarID = 138; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 138: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 8, &(uint32)); + dinSalesTariffEntryType->EPriceLevel = (uint8_t)(uint32 + 0); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 139; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 139: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSalesTariffEntryType->ConsumptionCost.arrayLen < dinSalesTariffEntryType_ConsumptionCost_ARRAY_SIZE) { + errn = decode_dinConsumptionCostType(stream, &dinSalesTariffEntryType->ConsumptionCost.array[dinSalesTariffEntryType->ConsumptionCost.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 139; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDiscoveryResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":PaymentOptions,"urn:iso:15118:2:2010:MsgBody":ChargeService,"urn:iso:15118:2:2010:MsgBody":ServiceList{0-1})', derivedBy='EXTENSION'. */ +static int decode_dinServiceDiscoveryResType(bitstream_t* stream, struct dinServiceDiscoveryResType* dinServiceDiscoveryResType) { + int grammarID = 140; + int done = 0; + + init_dinServiceDiscoveryResType(dinServiceDiscoveryResType); + + while(!done) { + switch(grammarID) { + case 140: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinServiceDiscoveryResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 141; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 141: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentOptions)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPaymentOptionsType(stream, &dinServiceDiscoveryResType->PaymentOptions); + grammarID = 142; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 142: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeService)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinServiceChargeType(stream, &dinServiceDiscoveryResType->ChargeService); + grammarID = 143; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 143: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinServiceTagListType(stream, &dinServiceDiscoveryResType->ServiceList); + dinServiceDiscoveryResType->ServiceList_isUsed = 1u; + grammarID = 4; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ParameterSetType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2010:MsgDataTypes":Parameter{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinParameterSetType(bitstream_t* stream, struct dinParameterSetType* dinParameterSetType) { + int grammarID = 144; + int done = 0; + + init_dinParameterSetType(dinParameterSetType); + + while(!done) { + switch(grammarID) { + case 144: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinParameterSetType->ParameterSetID); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 145; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 145: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinParameterSetType->Parameter.arrayLen < dinParameterSetType_Parameter_ARRAY_SIZE) { + errn = decode_dinParameterType(stream, &dinParameterSetType->Parameter.array[dinParameterSetType->Parameter.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 146; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 146: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinParameterSetType->Parameter.arrayLen < dinParameterSetType_Parameter_ARRAY_SIZE) { + errn = decode_dinParameterType(stream, &dinParameterSetType->Parameter.array[dinParameterSetType->Parameter.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 146; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CurrentDemandReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus,"urn:iso:15118:2:2010:MsgBody":EVTargetCurrent,"urn:iso:15118:2:2010:MsgBody":EVMaximumVoltageLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVMaximumCurrentLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgBody":BulkChargingComplete{0-1},"urn:iso:15118:2:2010:MsgBody":ChargingComplete,"urn:iso:15118:2:2010:MsgBody":RemainingTimeToFullSoC{0-1},"urn:iso:15118:2:2010:MsgBody":RemainingTimeToBulkSoC{0-1},"urn:iso:15118:2:2010:MsgBody":EVTargetVoltage)', derivedBy='EXTENSION'. */ +static int decode_dinCurrentDemandReqType(bitstream_t* stream, struct dinCurrentDemandReqType* dinCurrentDemandReqType) { + int grammarID = 147; + int done = 0; + + init_dinCurrentDemandReqType(dinCurrentDemandReqType); + + while(!done) { + switch(grammarID) { + case 147: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinDC_EVStatusType(stream, &dinCurrentDemandReqType->DC_EVStatus); + grammarID = 148; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 148: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVTargetCurrent); + grammarID = 149; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 149: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVMaximumVoltageLimit); + dinCurrentDemandReqType->EVMaximumVoltageLimit_isUsed = 1u; + grammarID = 150; + break; + case 1: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVMaximumCurrentLimit); + dinCurrentDemandReqType->EVMaximumCurrentLimit_isUsed = 1u; + grammarID = 151; + break; + case 2: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVMaximumPowerLimit); + dinCurrentDemandReqType->EVMaximumPowerLimit_isUsed = 1u; + grammarID = 152; + break; + case 3: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinCurrentDemandReqType->BulkChargingComplete); + dinCurrentDemandReqType->BulkChargingComplete_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 153; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 4: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinCurrentDemandReqType->ChargingComplete); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 154; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 150: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVMaximumCurrentLimit); + dinCurrentDemandReqType->EVMaximumCurrentLimit_isUsed = 1u; + grammarID = 151; + break; + case 1: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVMaximumPowerLimit); + dinCurrentDemandReqType->EVMaximumPowerLimit_isUsed = 1u; + grammarID = 152; + break; + case 2: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinCurrentDemandReqType->BulkChargingComplete); + dinCurrentDemandReqType->BulkChargingComplete_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 153; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 3: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinCurrentDemandReqType->ChargingComplete); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 154; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 151: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVMaximumPowerLimit); + dinCurrentDemandReqType->EVMaximumPowerLimit_isUsed = 1u; + grammarID = 152; + break; + case 1: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinCurrentDemandReqType->BulkChargingComplete); + dinCurrentDemandReqType->BulkChargingComplete_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 153; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 2: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinCurrentDemandReqType->ChargingComplete); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 154; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 152: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinCurrentDemandReqType->BulkChargingComplete); + dinCurrentDemandReqType->BulkChargingComplete_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 153; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinCurrentDemandReqType->ChargingComplete); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 154; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 153: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinCurrentDemandReqType->ChargingComplete); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 154; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 154: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToFullSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->RemainingTimeToFullSoC); + dinCurrentDemandReqType->RemainingTimeToFullSoC_isUsed = 1u; + grammarID = 155; + break; + case 1: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->RemainingTimeToBulkSoC); + dinCurrentDemandReqType->RemainingTimeToBulkSoC_isUsed = 1u; + grammarID = 156; + break; + case 2: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVTargetVoltage); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 155: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->RemainingTimeToBulkSoC); + dinCurrentDemandReqType->RemainingTimeToBulkSoC_isUsed = 1u; + grammarID = 156; + break; + case 1: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVTargetVoltage); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 156: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVTargetVoltage); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PreChargeReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus,"urn:iso:15118:2:2010:MsgBody":EVTargetVoltage,"urn:iso:15118:2:2010:MsgBody":EVTargetCurrent)', derivedBy='EXTENSION'. */ +static int decode_dinPreChargeReqType(bitstream_t* stream, struct dinPreChargeReqType* dinPreChargeReqType) { + int grammarID = 157; + int done = 0; + + init_dinPreChargeReqType(dinPreChargeReqType); + + while(!done) { + switch(grammarID) { + case 157: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinDC_EVStatusType(stream, &dinPreChargeReqType->DC_EVStatus); + grammarID = 158; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 158: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinPreChargeReqType->EVTargetVoltage); + grammarID = 159; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 159: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinPreChargeReqType->EVTargetCurrent); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":SignedInfo,"http://www.w3.org/2000/09/xmldsig#":SignatureValue,"http://www.w3.org/2000/09/xmldsig#":KeyInfo{0-1},"http://www.w3.org/2000/09/xmldsig#":Object{0-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinSignatureType(bitstream_t* stream, struct dinSignatureType* dinSignatureType) { + int grammarID = 160; + int done = 0; + + init_dinSignatureType(dinSignatureType); + + while(!done) { + switch(grammarID) { + case 160: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinSignatureType->Id.charactersLen); + if (errn == 0) { + if (dinSignatureType->Id.charactersLen >= 2) { + dinSignatureType->Id.charactersLen = (uint16_t)(dinSignatureType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinSignatureType->Id.charactersLen, dinSignatureType->Id.characters, dinSignatureType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinSignatureType->Id_isUsed = 1u; + grammarID = 161; + break; + case 1: + errn = decode_dinSignedInfoType(stream, &dinSignatureType->SignedInfo); + grammarID = 162; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 161: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinSignedInfoType(stream, &dinSignatureType->SignedInfo); + grammarID = 162; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 162: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinSignatureValueType(stream, &dinSignatureType->SignatureValue); + grammarID = 163; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 163: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinKeyInfoType(stream, &dinSignatureType->KeyInfo); + dinSignatureType->KeyInfo_isUsed = 1u; + grammarID = 164; + break; + case 1: + if (dinSignatureType->Object.arrayLen < dinSignatureType_Object_ARRAY_SIZE) { + errn = decode_dinObjectType(stream, &dinSignatureType->Object.array[dinSignatureType->Object.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 164; + break; + case 2: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 164: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSignatureType->Object.arrayLen < dinSignatureType_Object_ARRAY_SIZE) { + errn = decode_dinObjectType(stream, &dinSignatureType->Object.array[dinSignatureType->Object.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 164; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)', derivedBy='RESTRICTION'. */ +static int decode_dinReferenceType(bitstream_t* stream, struct dinReferenceType* dinReferenceType) { + int grammarID = 165; + int done = 0; + + init_dinReferenceType(dinReferenceType); + + while(!done) { + switch(grammarID) { + case 165: + /* FirstStartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinReferenceType->Id.charactersLen); + if (errn == 0) { + if (dinReferenceType->Id.charactersLen >= 2) { + dinReferenceType->Id.charactersLen = (uint16_t)(dinReferenceType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinReferenceType->Id.charactersLen, dinReferenceType->Id.characters, dinReferenceType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinReferenceType->Id_isUsed = 1u; + grammarID = 166; + break; + case 1: + errn = decodeUnsignedInteger16(stream, &dinReferenceType->Type.charactersLen); + if (errn == 0) { + if (dinReferenceType->Type.charactersLen >= 2) { + dinReferenceType->Type.charactersLen = (uint16_t)(dinReferenceType->Type.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinReferenceType->Type.charactersLen, dinReferenceType->Type.characters, dinReferenceType_Type_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinReferenceType->Type_isUsed = 1u; + grammarID = 167; + break; + case 2: + errn = decodeUnsignedInteger16(stream, &dinReferenceType->URI.charactersLen); + if (errn == 0) { + if (dinReferenceType->URI.charactersLen >= 2) { + dinReferenceType->URI.charactersLen = (uint16_t)(dinReferenceType->URI.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinReferenceType->URI.charactersLen, dinReferenceType->URI.characters, dinReferenceType_URI_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinReferenceType->URI_isUsed = 1u; + grammarID = 168; + break; + case 3: + errn = decode_dinTransformsType(stream, &dinReferenceType->Transforms); + dinReferenceType->Transforms_isUsed = 1u; + grammarID = 169; + break; + case 4: + errn = decode_dinDigestMethodType(stream, &dinReferenceType->DigestMethod); + grammarID = 170; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 166: + /* StartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinReferenceType->Type.charactersLen); + if (errn == 0) { + if (dinReferenceType->Type.charactersLen >= 2) { + dinReferenceType->Type.charactersLen = (uint16_t)(dinReferenceType->Type.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinReferenceType->Type.charactersLen, dinReferenceType->Type.characters, dinReferenceType_Type_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinReferenceType->Type_isUsed = 1u; + grammarID = 167; + break; + case 1: + errn = decodeUnsignedInteger16(stream, &dinReferenceType->URI.charactersLen); + if (errn == 0) { + if (dinReferenceType->URI.charactersLen >= 2) { + dinReferenceType->URI.charactersLen = (uint16_t)(dinReferenceType->URI.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinReferenceType->URI.charactersLen, dinReferenceType->URI.characters, dinReferenceType_URI_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinReferenceType->URI_isUsed = 1u; + grammarID = 168; + break; + case 2: + errn = decode_dinTransformsType(stream, &dinReferenceType->Transforms); + dinReferenceType->Transforms_isUsed = 1u; + grammarID = 169; + break; + case 3: + errn = decode_dinDigestMethodType(stream, &dinReferenceType->DigestMethod); + grammarID = 170; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 167: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinReferenceType->URI.charactersLen); + if (errn == 0) { + if (dinReferenceType->URI.charactersLen >= 2) { + dinReferenceType->URI.charactersLen = (uint16_t)(dinReferenceType->URI.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinReferenceType->URI.charactersLen, dinReferenceType->URI.characters, dinReferenceType_URI_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinReferenceType->URI_isUsed = 1u; + grammarID = 168; + break; + case 1: + errn = decode_dinTransformsType(stream, &dinReferenceType->Transforms); + dinReferenceType->Transforms_isUsed = 1u; + grammarID = 169; + break; + case 2: + errn = decode_dinDigestMethodType(stream, &dinReferenceType->DigestMethod); + grammarID = 170; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 168: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinTransformsType(stream, &dinReferenceType->Transforms); + dinReferenceType->Transforms_isUsed = 1u; + grammarID = 169; + break; + case 1: + errn = decode_dinDigestMethodType(stream, &dinReferenceType->DigestMethod); + grammarID = 170; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 169: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinDigestMethodType(stream, &dinReferenceType->DigestMethod); + grammarID = 170; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 170: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinReferenceType->DigestValue.bytesLen); + if (errn == 0) { + errn = (dinReferenceType->DigestValue.bytesLen) <= dinReferenceType_DigestValue_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinReferenceType->DigestValue.bytesLen, dinReferenceType->DigestValue.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ProfileEntryType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ChargingProfileEntryStart,"urn:iso:15118:2:2010:MsgDataTypes":ChargingProfileEntryMaxPower)', derivedBy='RESTRICTION'. */ +static int decode_dinProfileEntryType(bitstream_t* stream, struct dinProfileEntryType* dinProfileEntryType) { + int grammarID = 171; + int done = 0; + + init_dinProfileEntryType(dinProfileEntryType); + + while(!done) { + switch(grammarID) { + case 171: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &dinProfileEntryType->ChargingProfileEntryStart); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 172; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 172: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinProfileEntryType->ChargingProfileEntryMaxPower); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDef,#AnonType_V2G_Message', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDef":Header,"urn:iso:15118:2:2010:MsgDef":Body)', derivedBy='RESTRICTION'. */ +static int decode_dinAnonType_V2G_Message(bitstream_t* stream, struct dinAnonType_V2G_Message* dinAnonType_V2G_Message) { + int grammarID = 173; + int done = 0; + + init_dinAnonType_V2G_Message(dinAnonType_V2G_Message); + + while(!done) { + switch(grammarID) { + case 173: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinMessageHeaderType(stream, &dinAnonType_V2G_Message->Header); + grammarID = 174; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 174: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinBodyType(stream, &dinAnonType_V2G_Message->Body); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ChargeParameterDiscoveryReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":EVRequestedEnergyTransferType,"urn:iso:15118:2:2010:MsgDataTypes":EVChargeParameter)', derivedBy='EXTENSION'. */ +static int decode_dinChargeParameterDiscoveryReqType(bitstream_t* stream, struct dinChargeParameterDiscoveryReqType* dinChargeParameterDiscoveryReqType) { + int grammarID = 175; + int done = 0; + + init_dinChargeParameterDiscoveryReqType(dinChargeParameterDiscoveryReqType); + + while(!done) { + switch(grammarID) { + case 175: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 3, &uint32); + dinChargeParameterDiscoveryReqType->EVRequestedEnergyTransferType = (dinEVRequestedEnergyTransferType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 176; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 176: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinAC_EVChargeParameterType(stream, &dinChargeParameterDiscoveryReqType->AC_EVChargeParameter); + dinChargeParameterDiscoveryReqType->AC_EVChargeParameter_isUsed = 1u; + grammarID = 4; + break; + case 1: + errn = decode_dinDC_EVChargeParameterType(stream, &dinChargeParameterDiscoveryReqType->DC_EVChargeParameter); + dinChargeParameterDiscoveryReqType->DC_EVChargeParameter_isUsed = 1u; + grammarID = 4; + break; + case 2: + errn = decode_dinEVChargeParameterType(stream, &dinChargeParameterDiscoveryReqType->EVChargeParameter); + dinChargeParameterDiscoveryReqType->EVChargeParameter_isUsed = 1u; + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ConsumptionCostType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":startValue,"urn:iso:15118:2:2010:MsgDataTypes":Cost{0-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinConsumptionCostType(bitstream_t* stream, struct dinConsumptionCostType* dinConsumptionCostType) { + int grammarID = 177; + int done = 0; + + init_dinConsumptionCostType(dinConsumptionCostType); + + while(!done) { + switch(grammarID) { + case 177: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &dinConsumptionCostType->startValue); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 178; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 178: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Cost), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinConsumptionCostType->Cost.arrayLen < dinConsumptionCostType_Cost_ARRAY_SIZE) { + errn = decode_dinCostType(stream, &dinConsumptionCostType->Cost.array[dinConsumptionCostType->Cost.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 178; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,RSAKeyValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Modulus,"http://www.w3.org/2000/09/xmldsig#":Exponent)', derivedBy='RESTRICTION'. */ +static int decode_dinRSAKeyValueType(bitstream_t* stream, struct dinRSAKeyValueType* dinRSAKeyValueType) { + int grammarID = 179; + int done = 0; + + init_dinRSAKeyValueType(dinRSAKeyValueType); + + while(!done) { + switch(grammarID) { + case 179: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinRSAKeyValueType->Modulus.bytesLen); + if (errn == 0) { + errn = (dinRSAKeyValueType->Modulus.bytesLen) <= dinRSAKeyValueType_Modulus_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinRSAKeyValueType->Modulus.bytesLen, dinRSAKeyValueType->Modulus.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 180; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 180: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Exponent)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinRSAKeyValueType->Exponent.bytesLen); + if (errn == 0) { + errn = (dinRSAKeyValueType->Exponent.bytesLen) <= dinRSAKeyValueType_Exponent_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinRSAKeyValueType->Exponent.bytesLen, dinRSAKeyValueType->Exponent.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Exponent) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceTag,"urn:iso:15118:2:2010:MsgDataTypes":FreeService)', derivedBy='RESTRICTION'. */ +static int decode_dinServiceType(bitstream_t* stream, struct dinServiceType* dinServiceType) { + int grammarID = 181; + int done = 0; + + init_dinServiceType(dinServiceType); + + while(!done) { + switch(grammarID) { + case 181: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinServiceTagType(stream, &dinServiceType->ServiceTag); + grammarID = 182; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 182: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinServiceType->FreeService); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceTagListType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Service{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinServiceTagListType(bitstream_t* stream, struct dinServiceTagListType* dinServiceTagListType) { + int grammarID = 183; + int done = 0; + + init_dinServiceTagListType(dinServiceTagListType); + + while(!done) { + switch(grammarID) { + case 183: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinServiceTagListType->Service.arrayLen < dinServiceTagListType_Service_ARRAY_SIZE) { + errn = decode_dinServiceType(stream, &dinServiceTagListType->Service.array[dinServiceTagListType->Service.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 184; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 184: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinServiceTagListType->Service.arrayLen < dinServiceTagListType_Service_ARRAY_SIZE) { + errn = decode_dinServiceType(stream, &dinServiceTagListType->Service.array[dinServiceTagListType->Service.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 184; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVSEStatusType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +static int decode_dinEVSEStatusType(bitstream_t* stream, struct dinEVSEStatusType* dinEVSEStatusType) { + int grammarID = 64; + int done = 0; + + init_dinEVSEStatusType(dinEVSEStatusType); + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,SessionSetupResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEID,"urn:iso:15118:2:2010:MsgBody":DateTimeNow{0-1})', derivedBy='EXTENSION'. */ +static int decode_dinSessionSetupResType(bitstream_t* stream, struct dinSessionSetupResType* dinSessionSetupResType) { + int grammarID = 185; + int done = 0; + + init_dinSessionSetupResType(dinSessionSetupResType); + + while(!done) { + switch(grammarID) { + case 185: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinSessionSetupResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 186; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 186: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinSessionSetupResType->EVSEID.bytesLen); + if (errn == 0) { + errn = (dinSessionSetupResType->EVSEID.bytesLen) <= dinSessionSetupResType_EVSEID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinSessionSetupResType->EVSEID.bytesLen, dinSessionSetupResType->EVSEID.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 187; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 187: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger64(stream, &dinSessionSetupResType->DateTimeNow); + dinSessionSetupResType->DateTimeNow_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVPowerDeliveryParameterType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +static int decode_dinEVPowerDeliveryParameterType(bitstream_t* stream, struct dinEVPowerDeliveryParameterType* dinEVPowerDeliveryParameterType) { + int grammarID = 64; + int done = 0; + + init_dinEVPowerDeliveryParameterType(dinEVPowerDeliveryParameterType); + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)', derivedBy='RESTRICTION'. */ +static int decode_dinX509IssuerSerialType(bitstream_t* stream, struct dinX509IssuerSerialType* dinX509IssuerSerialType) { + int grammarID = 188; + int done = 0; + + init_dinX509IssuerSerialType(dinX509IssuerSerialType); + + while(!done) { + switch(grammarID) { + case 188: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinX509IssuerSerialType->X509IssuerName.charactersLen); + if (errn == 0) { + if (dinX509IssuerSerialType->X509IssuerName.charactersLen >= 2) { + dinX509IssuerSerialType->X509IssuerName.charactersLen = (uint16_t)(dinX509IssuerSerialType->X509IssuerName.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinX509IssuerSerialType->X509IssuerName.charactersLen, dinX509IssuerSerialType->X509IssuerName.characters, dinX509IssuerSerialType_X509IssuerName_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 189; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 189: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SerialNumber)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger64(stream, &dinX509IssuerSerialType->X509SerialNumber); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SerialNumber) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SelectedServiceType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceID,"urn:iso:15118:2:2010:MsgDataTypes":ParameterSetID{0-1})', derivedBy='RESTRICTION'. */ +static int decode_dinSelectedServiceType(bitstream_t* stream, struct dinSelectedServiceType* dinSelectedServiceType) { + int grammarID = 190; + int done = 0; + + init_dinSelectedServiceType(dinSelectedServiceType); + + while(!done) { + switch(grammarID) { + case 190: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinSelectedServiceType->ServiceID); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 191; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 191: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinSelectedServiceType->ParameterSetID); + dinSelectedServiceType->ParameterSetID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,MeteringReceiptResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":AC_EVSEStatus)', derivedBy='EXTENSION'. */ +static int decode_dinMeteringReceiptResType(bitstream_t* stream, struct dinMeteringReceiptResType* dinMeteringReceiptResType) { + int grammarID = 192; + int done = 0; + + init_dinMeteringReceiptResType(dinMeteringReceiptResType); + + while(!done) { + switch(grammarID) { + case 192: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinMeteringReceiptResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 54; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 54: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinAC_EVSEStatusType(stream, &dinMeteringReceiptResType->AC_EVSEStatus); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVStatusType', base type name='EVStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVReady,"urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC)', derivedBy='EXTENSION'. */ +static int decode_dinDC_EVStatusType(bitstream_t* stream, struct dinDC_EVStatusType* dinDC_EVStatusType) { + int grammarID = 193; + int done = 0; + + init_dinDC_EVStatusType(dinDC_EVStatusType); + + while(!done) { + switch(grammarID) { + case 193: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinDC_EVStatusType->EVReady); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 194; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 194: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinDC_EVStatusType->EVCabinConditioning); + dinDC_EVStatusType->EVCabinConditioning_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 195; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinDC_EVStatusType->EVRESSConditioning); + dinDC_EVStatusType->EVRESSConditioning_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 196; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 2: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 4, &uint32); + dinDC_EVStatusType->EVErrorCode = (dinDC_EVErrorCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 197; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 195: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinDC_EVStatusType->EVRESSConditioning); + dinDC_EVStatusType->EVRESSConditioning_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 196; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 4, &uint32); + dinDC_EVStatusType->EVErrorCode = (dinDC_EVErrorCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 197; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 196: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 4, &uint32); + dinDC_EVStatusType->EVErrorCode = (dinDC_EVErrorCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 197; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 197: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 7, &(uint32)); + dinDC_EVStatusType->EVRESSSOC = (int8_t)(uint32 + 0); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ +static int decode_dinPhysicalValueType(bitstream_t* stream, struct dinPhysicalValueType* dinPhysicalValueType) { + int grammarID = 198; + int done = 0; + + init_dinPhysicalValueType(dinPhysicalValueType); + + while(!done) { + switch(grammarID) { + case 198: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 3, &(uint32)); + dinPhysicalValueType->Multiplier = (int8_t)(uint32 -3); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 199; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 199: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 4, &uint32); + dinPhysicalValueType->Unit = (dinunitSymbolType) uint32; + dinPhysicalValueType->Unit_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 200; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinPhysicalValueType->Value); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 200: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinPhysicalValueType->Value); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ManifestType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinManifestType(bitstream_t* stream, struct dinManifestType* dinManifestType) { + int grammarID = 201; + int done = 0; + + init_dinManifestType(dinManifestType); + + while(!done) { + switch(grammarID) { + case 201: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinManifestType->Id.charactersLen); + if (errn == 0) { + if (dinManifestType->Id.charactersLen >= 2) { + dinManifestType->Id.charactersLen = (uint16_t)(dinManifestType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinManifestType->Id.charactersLen, dinManifestType->Id.characters, dinManifestType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinManifestType->Id_isUsed = 1u; + grammarID = 202; + break; + case 1: + if (dinManifestType->Reference.arrayLen < dinManifestType_Reference_ARRAY_SIZE) { + errn = decode_dinReferenceType(stream, &dinManifestType->Reference.array[dinManifestType->Reference.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 203; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 202: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinManifestType->Reference.arrayLen < dinManifestType_Reference_ARRAY_SIZE) { + errn = decode_dinReferenceType(stream, &dinManifestType->Reference.array[dinManifestType->Reference.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 203; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 203: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinManifestType->Reference.arrayLen < dinManifestType_Reference_ARRAY_SIZE) { + errn = decode_dinReferenceType(stream, &dinManifestType->Reference.array[dinManifestType->Reference.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 203; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PMaxScheduleEntryType', base type name='EntryType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("urn:iso:15118:2:2010:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2010:MsgDataTypes":PMax))', derivedBy='EXTENSION'. */ +static int decode_dinPMaxScheduleEntryType(bitstream_t* stream, struct dinPMaxScheduleEntryType* dinPMaxScheduleEntryType) { + int grammarID = 204; + int done = 0; + + init_dinPMaxScheduleEntryType(dinPMaxScheduleEntryType); + + while(!done) { + switch(grammarID) { + case 204: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinRelativeTimeIntervalType(stream, &dinPMaxScheduleEntryType->RelativeTimeInterval); + dinPMaxScheduleEntryType->RelativeTimeInterval_isUsed = 1u; + grammarID = 205; + break; + case 1: + errn = decode_dinIntervalType(stream, &dinPMaxScheduleEntryType->TimeInterval); + dinPMaxScheduleEntryType->TimeInterval_isUsed = 1u; + grammarID = 205; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 205: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMax)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinPMaxScheduleEntryType->PMax); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMax) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceParameterListType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ParameterSet{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinServiceParameterListType(bitstream_t* stream, struct dinServiceParameterListType* dinServiceParameterListType) { + int grammarID = 206; + int done = 0; + + init_dinServiceParameterListType(dinServiceParameterListType); + + while(!done) { + switch(grammarID) { + case 206: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinServiceParameterListType->ParameterSet.arrayLen < dinServiceParameterListType_ParameterSet_ARRAY_SIZE) { + errn = decode_dinParameterSetType(stream, &dinServiceParameterListType->ParameterSet.array[dinServiceParameterListType->ParameterSet.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 207; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 207: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinServiceParameterListType->ParameterSet.arrayLen < dinServiceParameterListType_ParameterSet_ARRAY_SIZE) { + errn = decode_dinParameterSetType(stream, &dinServiceParameterListType->ParameterSet.array[dinServiceParameterListType->ParameterSet.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 207; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureValueType', base type name='base64Binary', content type='SIMPLE', isAbstract='false', hasTypeId='false', final='0', block='0', derivedBy='EXTENSION'. */ +static int decode_dinSignatureValueType(bitstream_t* stream, struct dinSignatureValueType* dinSignatureValueType) { + int grammarID = 208; + int done = 0; + + init_dinSignatureValueType(dinSignatureValueType); + + while(!done) { + switch(grammarID) { + case 208: + /* FirstStartTag[ATTRIBUTE[STRING](Id), CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinSignatureValueType->Id.charactersLen); + if (errn == 0) { + if (dinSignatureValueType->Id.charactersLen >= 2) { + dinSignatureValueType->Id.charactersLen = (uint16_t)(dinSignatureValueType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinSignatureValueType->Id.charactersLen, dinSignatureValueType->Id.characters, dinSignatureValueType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinSignatureValueType->Id_isUsed = 1u; + grammarID = 209; + break; + case 1: + errn = decodeUnsignedInteger16(stream, &dinSignatureValueType->CONTENT.bytesLen); + if (errn == 0) { + errn = (dinSignatureValueType->CONTENT.bytesLen) <= dinSignatureValueType_CONTENT_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinSignatureValueType->CONTENT.bytesLen, dinSignatureValueType->CONTENT.bytes); + } + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 209: + /* StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinSignatureValueType->CONTENT.bytesLen); + if (errn == 0) { + errn = (dinSignatureValueType->CONTENT.bytesLen) <= dinSignatureValueType_CONTENT_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinSignatureValueType->CONTENT.bytesLen, dinSignatureValueType->CONTENT.bytes); + } + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PaymentOptionsType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":PaymentOption{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinPaymentOptionsType(bitstream_t* stream, struct dinPaymentOptionsType* dinPaymentOptionsType) { + int grammarID = 210; + int done = 0; + + init_dinPaymentOptionsType(dinPaymentOptionsType); + + while(!done) { + switch(grammarID) { + case 210: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinPaymentOptionsType->PaymentOption.arrayLen < dinPaymentOptionsType_PaymentOption_ARRAY_SIZE) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 1, &uint32); + dinPaymentOptionsType->PaymentOption.array[dinPaymentOptionsType->PaymentOption.arrayLen] = (dinpaymentOptionType) uint32; + dinPaymentOptionsType->PaymentOption.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 211; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 211: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinPaymentOptionsType->PaymentOption.arrayLen < dinPaymentOptionsType_PaymentOption_ARRAY_SIZE) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 1, &uint32); + dinPaymentOptionsType->PaymentOption.array[dinPaymentOptionsType->PaymentOption.arrayLen] = (dinpaymentOptionType) uint32; + dinPaymentOptionsType->PaymentOption.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 211; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceTagType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceID,"urn:iso:15118:2:2010:MsgDataTypes":ServiceName{0-1},"urn:iso:15118:2:2010:MsgDataTypes":ServiceCategory,"urn:iso:15118:2:2010:MsgDataTypes":ServiceScope{0-1})', derivedBy='RESTRICTION'. */ +static int decode_dinServiceTagType(bitstream_t* stream, struct dinServiceTagType* dinServiceTagType) { + int grammarID = 212; + int done = 0; + + init_dinServiceTagType(dinServiceTagType); + + while(!done) { + switch(grammarID) { + case 212: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinServiceTagType->ServiceID); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 213; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 213: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinServiceTagType->ServiceName.charactersLen); + if (errn == 0) { + if (dinServiceTagType->ServiceName.charactersLen >= 2) { + dinServiceTagType->ServiceName.charactersLen = (uint16_t)(dinServiceTagType->ServiceName.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinServiceTagType->ServiceName.charactersLen, dinServiceTagType->ServiceName.characters, dinServiceTagType_ServiceName_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinServiceTagType->ServiceName_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 214; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + dinServiceTagType->ServiceCategory = (dinserviceCategoryType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 215; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 214: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + dinServiceTagType->ServiceCategory = (dinserviceCategoryType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 215; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 215: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinServiceTagType->ServiceScope.charactersLen); + if (errn == 0) { + if (dinServiceTagType->ServiceScope.charactersLen >= 2) { + dinServiceTagType->ServiceScope.charactersLen = (uint16_t)(dinServiceTagType->ServiceScope.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinServiceTagType->ServiceScope.charactersLen, dinServiceTagType->ServiceScope.characters, dinServiceTagType_ServiceScope_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinServiceTagType->ServiceScope_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEStatusType', base type name='EVSEStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":PowerSwitchClosed,"urn:iso:15118:2:2010:MsgDataTypes":RCD,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)', derivedBy='EXTENSION'. */ +static int decode_dinAC_EVSEStatusType(bitstream_t* stream, struct dinAC_EVSEStatusType* dinAC_EVSEStatusType) { + int grammarID = 216; + int done = 0; + + init_dinAC_EVSEStatusType(dinAC_EVSEStatusType); + + while(!done) { + switch(grammarID) { + case 216: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinAC_EVSEStatusType->PowerSwitchClosed); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 217; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 217: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinAC_EVSEStatusType->RCD); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 218; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 218: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &dinAC_EVSEStatusType->NotificationMaxDelay); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 219; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 219: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + dinAC_EVSEStatusType->EVSENotification = (dinEVSENotificationType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateUpdateReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":ListOfRootCertificateIDs,"urn:iso:15118:2:2010:MsgBody":DHParams)', derivedBy='EXTENSION'. */ +static int decode_dinCertificateUpdateReqType(bitstream_t* stream, struct dinCertificateUpdateReqType* dinCertificateUpdateReqType) { + int grammarID = 220; + int done = 0; + + init_dinCertificateUpdateReqType(dinCertificateUpdateReqType); + + while(!done) { + switch(grammarID) { + case 220: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinCertificateUpdateReqType->Id.charactersLen); + if (errn == 0) { + if (dinCertificateUpdateReqType->Id.charactersLen >= 2) { + dinCertificateUpdateReqType->Id.charactersLen = (uint16_t)(dinCertificateUpdateReqType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinCertificateUpdateReqType->Id.charactersLen, dinCertificateUpdateReqType->Id.characters, dinCertificateUpdateReqType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinCertificateUpdateReqType->Id_isUsed = 1u; + grammarID = 221; + break; + case 1: + errn = decode_dinCertificateChainType(stream, &dinCertificateUpdateReqType->ContractSignatureCertChain); + grammarID = 222; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 221: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinCertificateChainType(stream, &dinCertificateUpdateReqType->ContractSignatureCertChain); + grammarID = 222; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 222: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinCertificateUpdateReqType->ContractID.charactersLen); + if (errn == 0) { + if (dinCertificateUpdateReqType->ContractID.charactersLen >= 2) { + dinCertificateUpdateReqType->ContractID.charactersLen = (uint16_t)(dinCertificateUpdateReqType->ContractID.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinCertificateUpdateReqType->ContractID.charactersLen, dinCertificateUpdateReqType->ContractID.characters, dinCertificateUpdateReqType_ContractID_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 135; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 135: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinListOfRootCertificateIDsType(stream, &dinCertificateUpdateReqType->ListOfRootCertificateIDs); + grammarID = 136; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 136: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinCertificateUpdateReqType->DHParams.bytesLen); + if (errn == 0) { + errn = (dinCertificateUpdateReqType->DHParams.bytesLen) <= dinCertificateUpdateReqType_DHParams_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinCertificateUpdateReqType->DHParams.bytesLen, dinCertificateUpdateReqType->DHParams.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServicePaymentSelectionResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode)', derivedBy='EXTENSION'. */ +static int decode_dinServicePaymentSelectionResType(bitstream_t* stream, struct dinServicePaymentSelectionResType* dinServicePaymentSelectionResType) { + int grammarID = 223; + int done = 0; + + init_dinServicePaymentSelectionResType(dinServicePaymentSelectionResType); + + while(!done) { + switch(grammarID) { + case 223: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinServicePaymentSelectionResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SAScheduleTupleType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgDataTypes":PMaxSchedule,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariff{0-1})', derivedBy='RESTRICTION'. */ +static int decode_dinSAScheduleTupleType(bitstream_t* stream, struct dinSAScheduleTupleType* dinSAScheduleTupleType) { + int grammarID = 224; + int done = 0; + + init_dinSAScheduleTupleType(dinSAScheduleTupleType); + + while(!done) { + switch(grammarID) { + case 224: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinSAScheduleTupleType->SAScheduleTupleID); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 225; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 225: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxSchedule)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPMaxScheduleType(stream, &dinSAScheduleTupleType->PMaxSchedule); + grammarID = 226; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 226: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariff), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinSalesTariffType(stream, &dinSAScheduleTupleType->SalesTariff); + dinSAScheduleTupleType->SalesTariff_isUsed = 1u; + grammarID = 4; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ChargingProfileType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgDataTypes":ProfileEntry{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinChargingProfileType(bitstream_t* stream, struct dinChargingProfileType* dinChargingProfileType) { + int grammarID = 227; + int done = 0; + + init_dinChargingProfileType(dinChargingProfileType); + + while(!done) { + switch(grammarID) { + case 227: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinChargingProfileType->SAScheduleTupleID); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 228; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 228: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinChargingProfileType->ProfileEntry.arrayLen < dinChargingProfileType_ProfileEntry_ARRAY_SIZE) { + errn = decode_dinProfileEntryType(stream, &dinChargingProfileType->ProfileEntry.array[dinChargingProfileType->ProfileEntry.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 229; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 229: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinChargingProfileType->ProfileEntry.arrayLen < dinChargingProfileType_ProfileEntry_ARRAY_SIZE) { + errn = decode_dinProfileEntryType(stream, &dinChargingProfileType->ProfileEntry.array[dinChargingProfileType->ProfileEntry.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 229; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDiscoveryReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ServiceScope{0-1},"urn:iso:15118:2:2010:MsgBody":ServiceCategory{0-1})', derivedBy='EXTENSION'. */ +static int decode_dinServiceDiscoveryReqType(bitstream_t* stream, struct dinServiceDiscoveryReqType* dinServiceDiscoveryReqType) { + int grammarID = 230; + int done = 0; + + init_dinServiceDiscoveryReqType(dinServiceDiscoveryReqType); + + while(!done) { + switch(grammarID) { + case 230: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinServiceDiscoveryReqType->ServiceScope.charactersLen); + if (errn == 0) { + if (dinServiceDiscoveryReqType->ServiceScope.charactersLen >= 2) { + dinServiceDiscoveryReqType->ServiceScope.charactersLen = (uint16_t)(dinServiceDiscoveryReqType->ServiceScope.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinServiceDiscoveryReqType->ServiceScope.charactersLen, dinServiceDiscoveryReqType->ServiceScope.characters, dinServiceDiscoveryReqType_ServiceScope_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinServiceDiscoveryReqType->ServiceScope_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 231; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + dinServiceDiscoveryReqType->ServiceCategory = (dinserviceCategoryType) uint32; + dinServiceDiscoveryReqType->ServiceCategory_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 2: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 231: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + dinServiceDiscoveryReqType->ServiceCategory = (dinserviceCategoryType) uint32; + dinServiceDiscoveryReqType->ServiceCategory_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEChargeParameterType', base type name='EVSEChargeParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":AC_EVSEStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaxVoltage,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaxCurrent,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinCurrent)', derivedBy='EXTENSION'. */ +static int decode_dinAC_EVSEChargeParameterType(bitstream_t* stream, struct dinAC_EVSEChargeParameterType* dinAC_EVSEChargeParameterType) { + int grammarID = 232; + int done = 0; + + init_dinAC_EVSEChargeParameterType(dinAC_EVSEChargeParameterType); + + while(!done) { + switch(grammarID) { + case 232: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinAC_EVSEStatusType(stream, &dinAC_EVSEChargeParameterType->AC_EVSEStatus); + grammarID = 233; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 233: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinAC_EVSEChargeParameterType->EVSEMaxVoltage); + grammarID = 234; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 234: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinAC_EVSEChargeParameterType->EVSEMaxCurrent); + grammarID = 235; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 235: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinAC_EVSEChargeParameterType->EVSEMinCurrent); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyInfoType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":KeyName|"http://www.w3.org/2000/09/xmldsig#":KeyValue|"http://www.w3.org/2000/09/xmldsig#":RetrievalMethod|"http://www.w3.org/2000/09/xmldsig#":X509Data|"http://www.w3.org/2000/09/xmldsig#":PGPData|"http://www.w3.org/2000/09/xmldsig#":SPKIData|"http://www.w3.org/2000/09/xmldsig#":MgmtData|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}', derivedBy='RESTRICTION'. */ +static int decode_dinKeyInfoType(bitstream_t* stream, struct dinKeyInfoType* dinKeyInfoType) { + int grammarID = 236; + int done = 0; + + init_dinKeyInfoType(dinKeyInfoType); + + while(!done) { + switch(grammarID) { + case 236: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 4, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinKeyInfoType->Id.charactersLen); + if (errn == 0) { + if (dinKeyInfoType->Id.charactersLen >= 2) { + dinKeyInfoType->Id.charactersLen = (uint16_t)(dinKeyInfoType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinKeyInfoType->Id.charactersLen, dinKeyInfoType->Id.characters, dinKeyInfoType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinKeyInfoType->Id_isUsed = 1u; + grammarID = 237; + break; + case 1: + if (dinKeyInfoType->KeyName.arrayLen < dinKeyInfoType_KeyName_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen); + if (errn == 0) { + if (dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen >= 2) { + dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen = (uint16_t)(dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen, dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].characters, dinKeyInfoType_KeyName_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinKeyInfoType->KeyName.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 238; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 2: + if (dinKeyInfoType->KeyValue.arrayLen < dinKeyInfoType_KeyValue_ARRAY_SIZE) { + errn = decode_dinKeyValueType(stream, &dinKeyInfoType->KeyValue.array[dinKeyInfoType->KeyValue.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 3: + if (dinKeyInfoType->RetrievalMethod.arrayLen < dinKeyInfoType_RetrievalMethod_ARRAY_SIZE) { + errn = decode_dinRetrievalMethodType(stream, &dinKeyInfoType->RetrievalMethod.array[dinKeyInfoType->RetrievalMethod.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 4: + if (dinKeyInfoType->X509Data.arrayLen < dinKeyInfoType_X509Data_ARRAY_SIZE) { + errn = decode_dinX509DataType(stream, &dinKeyInfoType->X509Data.array[dinKeyInfoType->X509Data.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 5: + if (dinKeyInfoType->PGPData.arrayLen < dinKeyInfoType_PGPData_ARRAY_SIZE) { + errn = decode_dinPGPDataType(stream, &dinKeyInfoType->PGPData.array[dinKeyInfoType->PGPData.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 6: + if (dinKeyInfoType->SPKIData.arrayLen < dinKeyInfoType_SPKIData_ARRAY_SIZE) { + errn = decode_dinSPKIDataType(stream, &dinKeyInfoType->SPKIData.array[dinKeyInfoType->SPKIData.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 7: + if (dinKeyInfoType->MgmtData.arrayLen < dinKeyInfoType_MgmtData_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen); + if (errn == 0) { + if (dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen >= 2) { + dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen = (uint16_t)(dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen, dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].characters, dinKeyInfoType_MgmtData_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinKeyInfoType->MgmtData.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 238; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 8: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 238; + break; + case 9: + errn = decodeUnsignedInteger16(stream, &dinKeyInfoType->ANY.charactersLen); + if (errn == 0) { + if (dinKeyInfoType->ANY.charactersLen >= 2) { + dinKeyInfoType->ANY.charactersLen = (uint16_t)(dinKeyInfoType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinKeyInfoType->ANY.charactersLen, dinKeyInfoType->ANY.characters, dinKeyInfoType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinKeyInfoType->ANY_isUsed = 1u; + grammarID = 239; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 237: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 4, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinKeyInfoType->KeyName.arrayLen < dinKeyInfoType_KeyName_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen); + if (errn == 0) { + if (dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen >= 2) { + dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen = (uint16_t)(dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen, dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].characters, dinKeyInfoType_KeyName_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinKeyInfoType->KeyName.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 238; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + if (dinKeyInfoType->KeyValue.arrayLen < dinKeyInfoType_KeyValue_ARRAY_SIZE) { + errn = decode_dinKeyValueType(stream, &dinKeyInfoType->KeyValue.array[dinKeyInfoType->KeyValue.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 2: + if (dinKeyInfoType->RetrievalMethod.arrayLen < dinKeyInfoType_RetrievalMethod_ARRAY_SIZE) { + errn = decode_dinRetrievalMethodType(stream, &dinKeyInfoType->RetrievalMethod.array[dinKeyInfoType->RetrievalMethod.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 3: + if (dinKeyInfoType->X509Data.arrayLen < dinKeyInfoType_X509Data_ARRAY_SIZE) { + errn = decode_dinX509DataType(stream, &dinKeyInfoType->X509Data.array[dinKeyInfoType->X509Data.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 4: + if (dinKeyInfoType->PGPData.arrayLen < dinKeyInfoType_PGPData_ARRAY_SIZE) { + errn = decode_dinPGPDataType(stream, &dinKeyInfoType->PGPData.array[dinKeyInfoType->PGPData.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 5: + if (dinKeyInfoType->SPKIData.arrayLen < dinKeyInfoType_SPKIData_ARRAY_SIZE) { + errn = decode_dinSPKIDataType(stream, &dinKeyInfoType->SPKIData.array[dinKeyInfoType->SPKIData.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 6: + if (dinKeyInfoType->MgmtData.arrayLen < dinKeyInfoType_MgmtData_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen); + if (errn == 0) { + if (dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen >= 2) { + dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen = (uint16_t)(dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen, dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].characters, dinKeyInfoType_MgmtData_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinKeyInfoType->MgmtData.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 238; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 7: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 238; + break; + case 8: + errn = decodeUnsignedInteger16(stream, &dinKeyInfoType->ANY.charactersLen); + if (errn == 0) { + if (dinKeyInfoType->ANY.charactersLen >= 2) { + dinKeyInfoType->ANY.charactersLen = (uint16_t)(dinKeyInfoType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinKeyInfoType->ANY.charactersLen, dinKeyInfoType->ANY.characters, dinKeyInfoType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinKeyInfoType->ANY_isUsed = 1u; + grammarID = 239; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 238: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 4, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinKeyInfoType->KeyName.arrayLen < dinKeyInfoType_KeyName_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen); + if (errn == 0) { + if (dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen >= 2) { + dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen = (uint16_t)(dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen, dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].characters, dinKeyInfoType_KeyName_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinKeyInfoType->KeyName.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 238; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + if (dinKeyInfoType->KeyValue.arrayLen < dinKeyInfoType_KeyValue_ARRAY_SIZE) { + errn = decode_dinKeyValueType(stream, &dinKeyInfoType->KeyValue.array[dinKeyInfoType->KeyValue.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 2: + if (dinKeyInfoType->RetrievalMethod.arrayLen < dinKeyInfoType_RetrievalMethod_ARRAY_SIZE) { + errn = decode_dinRetrievalMethodType(stream, &dinKeyInfoType->RetrievalMethod.array[dinKeyInfoType->RetrievalMethod.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 3: + if (dinKeyInfoType->X509Data.arrayLen < dinKeyInfoType_X509Data_ARRAY_SIZE) { + errn = decode_dinX509DataType(stream, &dinKeyInfoType->X509Data.array[dinKeyInfoType->X509Data.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 4: + if (dinKeyInfoType->PGPData.arrayLen < dinKeyInfoType_PGPData_ARRAY_SIZE) { + errn = decode_dinPGPDataType(stream, &dinKeyInfoType->PGPData.array[dinKeyInfoType->PGPData.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 5: + if (dinKeyInfoType->SPKIData.arrayLen < dinKeyInfoType_SPKIData_ARRAY_SIZE) { + errn = decode_dinSPKIDataType(stream, &dinKeyInfoType->SPKIData.array[dinKeyInfoType->SPKIData.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 6: + if (dinKeyInfoType->MgmtData.arrayLen < dinKeyInfoType_MgmtData_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen); + if (errn == 0) { + if (dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen >= 2) { + dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen = (uint16_t)(dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen, dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].characters, dinKeyInfoType_MgmtData_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinKeyInfoType->MgmtData.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 238; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 7: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 238; + break; + case 8: + done = 1; + grammarID = 5; + break; + case 9: + errn = decodeUnsignedInteger16(stream, &dinKeyInfoType->ANY.charactersLen); + if (errn == 0) { + if (dinKeyInfoType->ANY.charactersLen >= 2) { + dinKeyInfoType->ANY.charactersLen = (uint16_t)(dinKeyInfoType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinKeyInfoType->ANY.charactersLen, dinKeyInfoType->ANY.characters, dinKeyInfoType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinKeyInfoType->ANY_isUsed = 1u; + grammarID = 238; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 239: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 4, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinKeyInfoType->KeyName.arrayLen < dinKeyInfoType_KeyName_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen); + if (errn == 0) { + if (dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen >= 2) { + dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen = (uint16_t)(dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].charactersLen, dinKeyInfoType->KeyName.array[dinKeyInfoType->KeyName.arrayLen].characters, dinKeyInfoType_KeyName_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinKeyInfoType->KeyName.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 238; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + if (dinKeyInfoType->KeyValue.arrayLen < dinKeyInfoType_KeyValue_ARRAY_SIZE) { + errn = decode_dinKeyValueType(stream, &dinKeyInfoType->KeyValue.array[dinKeyInfoType->KeyValue.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 2: + if (dinKeyInfoType->RetrievalMethod.arrayLen < dinKeyInfoType_RetrievalMethod_ARRAY_SIZE) { + errn = decode_dinRetrievalMethodType(stream, &dinKeyInfoType->RetrievalMethod.array[dinKeyInfoType->RetrievalMethod.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 3: + if (dinKeyInfoType->X509Data.arrayLen < dinKeyInfoType_X509Data_ARRAY_SIZE) { + errn = decode_dinX509DataType(stream, &dinKeyInfoType->X509Data.array[dinKeyInfoType->X509Data.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 4: + if (dinKeyInfoType->PGPData.arrayLen < dinKeyInfoType_PGPData_ARRAY_SIZE) { + errn = decode_dinPGPDataType(stream, &dinKeyInfoType->PGPData.array[dinKeyInfoType->PGPData.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 5: + if (dinKeyInfoType->SPKIData.arrayLen < dinKeyInfoType_SPKIData_ARRAY_SIZE) { + errn = decode_dinSPKIDataType(stream, &dinKeyInfoType->SPKIData.array[dinKeyInfoType->SPKIData.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 238; + break; + case 6: + if (dinKeyInfoType->MgmtData.arrayLen < dinKeyInfoType_MgmtData_ARRAY_SIZE) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen); + if (errn == 0) { + if (dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen >= 2) { + dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen = (uint16_t)(dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].charactersLen, dinKeyInfoType->MgmtData.array[dinKeyInfoType->MgmtData.arrayLen].characters, dinKeyInfoType_MgmtData_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinKeyInfoType->MgmtData.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 238; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 7: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 238; + break; + case 8: + errn = decodeUnsignedInteger16(stream, &dinKeyInfoType->ANY.charactersLen); + if (errn == 0) { + if (dinKeyInfoType->ANY.charactersLen >= 2) { + dinKeyInfoType->ANY.charactersLen = (uint16_t)(dinKeyInfoType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinKeyInfoType->ANY.charactersLen, dinKeyInfoType->ANY.characters, dinKeyInfoType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinKeyInfoType->ANY_isUsed = 1u; + grammarID = 239; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PaymentDetailsReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain)', derivedBy='EXTENSION'. */ +static int decode_dinPaymentDetailsReqType(bitstream_t* stream, struct dinPaymentDetailsReqType* dinPaymentDetailsReqType) { + int grammarID = 240; + int done = 0; + + init_dinPaymentDetailsReqType(dinPaymentDetailsReqType); + + while(!done) { + switch(grammarID) { + case 240: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinPaymentDetailsReqType->ContractID.charactersLen); + if (errn == 0) { + if (dinPaymentDetailsReqType->ContractID.charactersLen >= 2) { + dinPaymentDetailsReqType->ContractID.charactersLen = (uint16_t)(dinPaymentDetailsReqType->ContractID.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinPaymentDetailsReqType->ContractID.charactersLen, dinPaymentDetailsReqType->ContractID.characters, dinPaymentDetailsReqType_ContractID_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 241; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 241: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinCertificateChainType(stream, &dinPaymentDetailsReqType->ContractSignatureCertChain); + grammarID = 4; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CableCheckResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing)', derivedBy='EXTENSION'. */ +static int decode_dinCableCheckResType(bitstream_t* stream, struct dinCableCheckResType* dinCableCheckResType) { + int grammarID = 242; + int done = 0; + + init_dinCableCheckResType(dinCableCheckResType); + + while(!done) { + switch(grammarID) { + case 242: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinCableCheckResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 243; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 243: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinDC_EVSEStatusType(stream, &dinCableCheckResType->DC_EVSEStatus); + grammarID = 17; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 17: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 1, &uint32); + dinCableCheckResType->EVSEProcessing = (dinEVSEProcessingType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ObjectType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##any])){0-UNBOUNDED}', derivedBy='RESTRICTION'. */ +static int decode_dinObjectType(bitstream_t* stream, struct dinObjectType* dinObjectType) { + int grammarID = 244; + int done = 0; + + init_dinObjectType(dinObjectType); + + while(!done) { + switch(grammarID) { + case 244: + /* FirstStartTag[ATTRIBUTE[STRING](Encoding), ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinObjectType->Encoding.charactersLen); + if (errn == 0) { + if (dinObjectType->Encoding.charactersLen >= 2) { + dinObjectType->Encoding.charactersLen = (uint16_t)(dinObjectType->Encoding.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinObjectType->Encoding.charactersLen, dinObjectType->Encoding.characters, dinObjectType_Encoding_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinObjectType->Encoding_isUsed = 1u; + grammarID = 245; + break; + case 1: + errn = decodeUnsignedInteger16(stream, &dinObjectType->Id.charactersLen); + if (errn == 0) { + if (dinObjectType->Id.charactersLen >= 2) { + dinObjectType->Id.charactersLen = (uint16_t)(dinObjectType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinObjectType->Id.charactersLen, dinObjectType->Id.characters, dinObjectType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinObjectType->Id_isUsed = 1u; + grammarID = 246; + break; + case 2: + errn = decodeUnsignedInteger16(stream, &dinObjectType->MimeType.charactersLen); + if (errn == 0) { + if (dinObjectType->MimeType.charactersLen >= 2) { + dinObjectType->MimeType.charactersLen = (uint16_t)(dinObjectType->MimeType.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinObjectType->MimeType.charactersLen, dinObjectType->MimeType.characters, dinObjectType_MimeType_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinObjectType->MimeType_isUsed = 1u; + grammarID = 19; + break; + case 3: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 20; + break; + case 4: + done = 1; + grammarID = 5; + break; + case 5: + errn = decodeUnsignedInteger16(stream, &dinObjectType->ANY.charactersLen); + if (errn == 0) { + if (dinObjectType->ANY.charactersLen >= 2) { + dinObjectType->ANY.charactersLen = (uint16_t)(dinObjectType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinObjectType->ANY.charactersLen, dinObjectType->ANY.characters, dinObjectType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinObjectType->ANY_isUsed = 1u; + grammarID = 20; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 245: + /* StartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinObjectType->Id.charactersLen); + if (errn == 0) { + if (dinObjectType->Id.charactersLen >= 2) { + dinObjectType->Id.charactersLen = (uint16_t)(dinObjectType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinObjectType->Id.charactersLen, dinObjectType->Id.characters, dinObjectType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinObjectType->Id_isUsed = 1u; + grammarID = 246; + break; + case 1: + errn = decodeUnsignedInteger16(stream, &dinObjectType->MimeType.charactersLen); + if (errn == 0) { + if (dinObjectType->MimeType.charactersLen >= 2) { + dinObjectType->MimeType.charactersLen = (uint16_t)(dinObjectType->MimeType.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinObjectType->MimeType.charactersLen, dinObjectType->MimeType.characters, dinObjectType_MimeType_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinObjectType->MimeType_isUsed = 1u; + grammarID = 19; + break; + case 2: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 20; + break; + case 3: + done = 1; + grammarID = 5; + break; + case 4: + errn = decodeUnsignedInteger16(stream, &dinObjectType->ANY.charactersLen); + if (errn == 0) { + if (dinObjectType->ANY.charactersLen >= 2) { + dinObjectType->ANY.charactersLen = (uint16_t)(dinObjectType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinObjectType->ANY.charactersLen, dinObjectType->ANY.characters, dinObjectType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinObjectType->ANY_isUsed = 1u; + grammarID = 20; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 246: + /* StartTag[ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinObjectType->MimeType.charactersLen); + if (errn == 0) { + if (dinObjectType->MimeType.charactersLen >= 2) { + dinObjectType->MimeType.charactersLen = (uint16_t)(dinObjectType->MimeType.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinObjectType->MimeType.charactersLen, dinObjectType->MimeType.characters, dinObjectType_MimeType_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinObjectType->MimeType_isUsed = 1u; + grammarID = 19; + break; + case 1: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 20; + break; + case 2: + done = 1; + grammarID = 5; + break; + case 3: + errn = decodeUnsignedInteger16(stream, &dinObjectType->ANY.charactersLen); + if (errn == 0) { + if (dinObjectType->ANY.charactersLen >= 2) { + dinObjectType->ANY.charactersLen = (uint16_t)(dinObjectType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinObjectType->ANY.charactersLen, dinObjectType->ANY.characters, dinObjectType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinObjectType->ANY_isUsed = 1u; + grammarID = 20; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 19: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 20; + break; + case 1: + done = 1; + grammarID = 5; + break; + case 2: + errn = decodeUnsignedInteger16(stream, &dinObjectType->ANY.charactersLen); + if (errn == 0) { + if (dinObjectType->ANY.charactersLen >= 2) { + dinObjectType->ANY.charactersLen = (uint16_t)(dinObjectType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinObjectType->ANY.charactersLen, dinObjectType->ANY.characters, dinObjectType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinObjectType->ANY_isUsed = 1u; + grammarID = 20; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 20: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 20; + break; + case 1: + done = 1; + grammarID = 5; + break; + case 2: + errn = decodeUnsignedInteger16(stream, &dinObjectType->ANY.charactersLen); + if (errn == 0) { + if (dinObjectType->ANY.charactersLen >= 2) { + dinObjectType->ANY.charactersLen = (uint16_t)(dinObjectType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinObjectType->ANY.charactersLen, dinObjectType->ANY.characters, dinObjectType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinObjectType->ANY_isUsed = 1u; + grammarID = 20; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,SessionStopResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode)', derivedBy='EXTENSION'. */ +static int decode_dinSessionStopResType(bitstream_t* stream, struct dinSessionStopResType* dinSessionStopResType) { + int grammarID = 223; + int done = 0; + + init_dinSessionStopResType(dinSessionStopResType); + + while(!done) { + switch(grammarID) { + case 223: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinSessionStopResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignedInfoType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod,"http://www.w3.org/2000/09/xmldsig#":SignatureMethod,"http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinSignedInfoType(bitstream_t* stream, struct dinSignedInfoType* dinSignedInfoType) { + int grammarID = 247; + int done = 0; + + init_dinSignedInfoType(dinSignedInfoType); + + while(!done) { + switch(grammarID) { + case 247: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinSignedInfoType->Id.charactersLen); + if (errn == 0) { + if (dinSignedInfoType->Id.charactersLen >= 2) { + dinSignedInfoType->Id.charactersLen = (uint16_t)(dinSignedInfoType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinSignedInfoType->Id.charactersLen, dinSignedInfoType->Id.characters, dinSignedInfoType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinSignedInfoType->Id_isUsed = 1u; + grammarID = 248; + break; + case 1: + errn = decode_dinCanonicalizationMethodType(stream, &dinSignedInfoType->CanonicalizationMethod); + grammarID = 249; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 248: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinCanonicalizationMethodType(stream, &dinSignedInfoType->CanonicalizationMethod); + grammarID = 249; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 249: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinSignatureMethodType(stream, &dinSignedInfoType->SignatureMethod); + grammarID = 250; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 250: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSignedInfoType->Reference.arrayLen < dinSignedInfoType_Reference_ARRAY_SIZE) { + errn = decode_dinReferenceType(stream, &dinSignedInfoType->Reference.array[dinSignedInfoType->Reference.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 203; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 203: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSignedInfoType->Reference.arrayLen < dinSignedInfoType_Reference_ARRAY_SIZE) { + errn = decode_dinReferenceType(stream, &dinSignedInfoType->Reference.array[dinSignedInfoType->Reference.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 203; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SalesTariffType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SalesTariffID,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariffDescription{0-1},"urn:iso:15118:2:2010:MsgDataTypes":NumEPriceLevels,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariffEntry{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinSalesTariffType(bitstream_t* stream, struct dinSalesTariffType* dinSalesTariffType) { + int grammarID = 251; + int done = 0; + + init_dinSalesTariffType(dinSalesTariffType); + + while(!done) { + switch(grammarID) { + case 251: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinSalesTariffType->Id.charactersLen); + if (errn == 0) { + if (dinSalesTariffType->Id.charactersLen >= 2) { + dinSalesTariffType->Id.charactersLen = (uint16_t)(dinSalesTariffType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinSalesTariffType->Id.charactersLen, dinSalesTariffType->Id.characters, dinSalesTariffType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + grammarID = 252; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 252: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinSalesTariffType->SalesTariffID); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 253; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 253: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinSalesTariffType->SalesTariffDescription.charactersLen); + if (errn == 0) { + if (dinSalesTariffType->SalesTariffDescription.charactersLen >= 2) { + dinSalesTariffType->SalesTariffDescription.charactersLen = (uint16_t)(dinSalesTariffType->SalesTariffDescription.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinSalesTariffType->SalesTariffDescription.charactersLen, dinSalesTariffType->SalesTariffDescription.characters, dinSalesTariffType_SalesTariffDescription_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinSalesTariffType->SalesTariffDescription_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 254; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 8, &(uint32)); + dinSalesTariffType->NumEPriceLevels = (uint8_t)(uint32 + 0); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 255; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 254: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 8, &(uint32)); + dinSalesTariffType->NumEPriceLevels = (uint8_t)(uint32 + 0); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 255; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 255: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSalesTariffType->SalesTariffEntry.arrayLen < dinSalesTariffType_SalesTariffEntry_ARRAY_SIZE) { + errn = decode_dinSalesTariffEntryType(stream, &dinSalesTariffType->SalesTariffEntry.array[dinSalesTariffType->SalesTariffEntry.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 256; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 256: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSalesTariffType->SalesTariffEntry.arrayLen < dinSalesTariffType_SalesTariffEntry_ARRAY_SIZE) { + errn = decode_dinSalesTariffEntryType(stream, &dinSalesTariffType->SalesTariffEntry.array[dinSalesTariffType->SalesTariffEntry.arrayLen++]); + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + grammarID = 256; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CostType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":costKind,"urn:iso:15118:2:2010:MsgDataTypes":amount,"urn:iso:15118:2:2010:MsgDataTypes":amountMultiplier{0-1})', derivedBy='RESTRICTION'. */ +static int decode_dinCostType(bitstream_t* stream, struct dinCostType* dinCostType) { + int grammarID = 257; + int done = 0; + + init_dinCostType(dinCostType); + + while(!done) { + switch(grammarID) { + case 257: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + dinCostType->costKind = (dincostKindType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 258; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 258: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amount)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &dinCostType->amount); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amount) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 259; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 259: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 3, &(uint32)); + dinCostType->amountMultiplier = (int8_t)(uint32 -3); + dinCostType->amountMultiplier_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceChargeType', base type name='ServiceType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("urn:iso:15118:2:2010:MsgDataTypes":ServiceTag,"urn:iso:15118:2:2010:MsgDataTypes":FreeService),("urn:iso:15118:2:2010:MsgDataTypes":EnergyTransferType))', derivedBy='EXTENSION'. */ +static int decode_dinServiceChargeType(bitstream_t* stream, struct dinServiceChargeType* dinServiceChargeType) { + int grammarID = 260; + int done = 0; + + init_dinServiceChargeType(dinServiceChargeType); + + while(!done) { + switch(grammarID) { + case 260: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinServiceTagType(stream, &dinServiceChargeType->ServiceTag); + grammarID = 261; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 261: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &dinServiceChargeType->FreeService); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 262; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 262: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 4, &uint32); + dinServiceChargeType->EnergyTransferType = (dinEVSESupportedEnergyTransferType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusType', base type name='EVSEStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)', derivedBy='EXTENSION'. */ +static int decode_dinDC_EVSEStatusType(bitstream_t* stream, struct dinDC_EVSEStatusType* dinDC_EVSEStatusType) { + int grammarID = 263; + int done = 0; + + init_dinDC_EVSEStatusType(dinDC_EVSEStatusType); + + while(!done) { + switch(grammarID) { + case 263: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + dinDC_EVSEStatusType->EVSEIsolationStatus = (dinisolationLevelType) uint32; + dinDC_EVSEStatusType->EVSEIsolationStatus_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 264; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 4, &uint32); + dinDC_EVSEStatusType->EVSEStatusCode = (dinDC_EVSEStatusCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 218; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 264: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 4, &uint32); + dinDC_EVSEStatusType->EVSEStatusCode = (dinDC_EVSEStatusCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 218; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 218: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &dinDC_EVSEStatusType->NotificationMaxDelay); + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 219; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 219: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + dinDC_EVSEStatusType->EVSENotification = (dinEVSENotificationType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,RetrievalMethodType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1})', derivedBy='RESTRICTION'. */ +static int decode_dinRetrievalMethodType(bitstream_t* stream, struct dinRetrievalMethodType* dinRetrievalMethodType) { + int grammarID = 265; + int done = 0; + + init_dinRetrievalMethodType(dinRetrievalMethodType); + + while(!done) { + switch(grammarID) { + case 265: + /* FirstStartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinRetrievalMethodType->Type.charactersLen); + if (errn == 0) { + if (dinRetrievalMethodType->Type.charactersLen >= 2) { + dinRetrievalMethodType->Type.charactersLen = (uint16_t)(dinRetrievalMethodType->Type.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinRetrievalMethodType->Type.charactersLen, dinRetrievalMethodType->Type.characters, dinRetrievalMethodType_Type_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinRetrievalMethodType->Type_isUsed = 1u; + grammarID = 266; + break; + case 1: + errn = decodeUnsignedInteger16(stream, &dinRetrievalMethodType->URI.charactersLen); + if (errn == 0) { + if (dinRetrievalMethodType->URI.charactersLen >= 2) { + dinRetrievalMethodType->URI.charactersLen = (uint16_t)(dinRetrievalMethodType->URI.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinRetrievalMethodType->URI.charactersLen, dinRetrievalMethodType->URI.characters, dinRetrievalMethodType_URI_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinRetrievalMethodType->URI_isUsed = 1u; + grammarID = 267; + break; + case 2: + errn = decode_dinTransformsType(stream, &dinRetrievalMethodType->Transforms); + dinRetrievalMethodType->Transforms_isUsed = 1u; + grammarID = 4; + break; + case 3: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 266: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinRetrievalMethodType->URI.charactersLen); + if (errn == 0) { + if (dinRetrievalMethodType->URI.charactersLen >= 2) { + dinRetrievalMethodType->URI.charactersLen = (uint16_t)(dinRetrievalMethodType->URI.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinRetrievalMethodType->URI.charactersLen, dinRetrievalMethodType->URI.characters, dinRetrievalMethodType_URI_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinRetrievalMethodType->URI_isUsed = 1u; + grammarID = 267; + break; + case 1: + errn = decode_dinTransformsType(stream, &dinRetrievalMethodType->Transforms); + dinRetrievalMethodType->Transforms_isUsed = 1u; + grammarID = 4; + break; + case 2: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 267: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinTransformsType(stream, &dinRetrievalMethodType->Transforms); + dinRetrievalMethodType->Transforms_isUsed = 1u; + grammarID = 4; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,NotificationType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":FaultCode,"urn:iso:15118:2:2010:MsgDataTypes":FaultMsg{0-1})', derivedBy='RESTRICTION'. */ +static int decode_dinNotificationType(bitstream_t* stream, struct dinNotificationType* dinNotificationType) { + int grammarID = 268; + int done = 0; + + init_dinNotificationType(dinNotificationType); + + while(!done) { + switch(grammarID) { + case 268: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + dinNotificationType->FaultCode = (dinfaultCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 269; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 269: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinNotificationType->FaultMsg.charactersLen); + if (errn == 0) { + if (dinNotificationType->FaultMsg.charactersLen >= 2) { + dinNotificationType->FaultMsg.charactersLen = (uint16_t)(dinNotificationType->FaultMsg.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinNotificationType->FaultMsg.charactersLen, dinNotificationType->FaultMsg.characters, dinNotificationType_FaultMsg_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinNotificationType->FaultMsg_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,PGPDataType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("http://www.w3.org/2000/09/xmldsig#":PGPKeyID,"http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})|("http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED}))', derivedBy='RESTRICTION'. */ +static int decode_dinPGPDataType(bitstream_t* stream, struct dinPGPDataType* dinPGPDataType) { + int grammarID = 270; + int done = 0; + + init_dinPGPDataType(dinPGPDataType); + + while(!done) { + switch(grammarID) { + case 270: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinPGPDataType->PGPKeyID.bytesLen); + if (errn == 0) { + errn = (dinPGPDataType->PGPKeyID.bytesLen) <= dinPGPDataType_PGPKeyID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinPGPDataType->PGPKeyID.bytesLen, dinPGPDataType->PGPKeyID.bytes); + } + dinPGPDataType->PGPKeyID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 271; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinPGPDataType->PGPKeyPacket.bytesLen); + if (errn == 0) { + errn = (dinPGPDataType->PGPKeyPacket.bytesLen) <= dinPGPDataType_PGPKeyPacket_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinPGPDataType->PGPKeyPacket.bytesLen, dinPGPDataType->PGPKeyPacket.bytes); + } + dinPGPDataType->PGPKeyPacket_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 272; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 271: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket), START_ELEMENT_GENERIC, END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinPGPDataType->PGPKeyPacket.bytesLen); + if (errn == 0) { + errn = (dinPGPDataType->PGPKeyPacket.bytesLen) <= dinPGPDataType_PGPKeyPacket_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinPGPDataType->PGPKeyPacket.bytesLen, dinPGPDataType->PGPKeyPacket.bytes); + } + dinPGPDataType->PGPKeyPacket_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 272; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 272; + break; + case 2: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 272: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 272; + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateInstallationResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2010:MsgBody":DHParams,"urn:iso:15118:2:2010:MsgBody":ContractID)', derivedBy='EXTENSION'. */ +static int decode_dinCertificateInstallationResType(bitstream_t* stream, struct dinCertificateInstallationResType* dinCertificateInstallationResType) { + int grammarID = 273; + int done = 0; + + init_dinCertificateInstallationResType(dinCertificateInstallationResType); + + while(!done) { + switch(grammarID) { + case 273: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinCertificateInstallationResType->Id.charactersLen); + if (errn == 0) { + if (dinCertificateInstallationResType->Id.charactersLen >= 2) { + dinCertificateInstallationResType->Id.charactersLen = (uint16_t)(dinCertificateInstallationResType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinCertificateInstallationResType->Id.charactersLen, dinCertificateInstallationResType->Id.characters, dinCertificateInstallationResType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + grammarID = 274; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 274: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + dinCertificateInstallationResType->ResponseCode = (dinresponseCodeType) uint32; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 275; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 275: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinCertificateChainType(stream, &dinCertificateInstallationResType->ContractSignatureCertChain); + grammarID = 276; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 276: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinCertificateInstallationResType->ContractSignatureEncryptedPrivateKey.bytesLen); + if (errn == 0) { + errn = (dinCertificateInstallationResType->ContractSignatureEncryptedPrivateKey.bytesLen) <= dinCertificateInstallationResType_ContractSignatureEncryptedPrivateKey_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinCertificateInstallationResType->ContractSignatureEncryptedPrivateKey.bytesLen, dinCertificateInstallationResType->ContractSignatureEncryptedPrivateKey.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 277; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 277: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinCertificateInstallationResType->DHParams.bytesLen); + if (errn == 0) { + errn = (dinCertificateInstallationResType->DHParams.bytesLen) <= dinCertificateInstallationResType_DHParams_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinCertificateInstallationResType->DHParams.bytesLen, dinCertificateInstallationResType->DHParams.bytes); + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 278; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 278: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinCertificateInstallationResType->ContractID.charactersLen); + if (errn == 0) { + if (dinCertificateInstallationResType->ContractID.charactersLen >= 2) { + dinCertificateInstallationResType->ContractID.charactersLen = (uint16_t)(dinCertificateInstallationResType->ContractID.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinCertificateInstallationResType->ContractID.charactersLen, dinCertificateInstallationResType->ContractID.characters, dinCertificateInstallationResType_ContractID_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertyType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}', derivedBy='RESTRICTION'. */ +static int decode_dinSignaturePropertyType(bitstream_t* stream, struct dinSignaturePropertyType* dinSignaturePropertyType) { + int grammarID = 279; + int done = 0; + + init_dinSignaturePropertyType(dinSignaturePropertyType); + + while(!done) { + switch(grammarID) { + case 279: + /* FirstStartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](Target)] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinSignaturePropertyType->Id.charactersLen); + if (errn == 0) { + if (dinSignaturePropertyType->Id.charactersLen >= 2) { + dinSignaturePropertyType->Id.charactersLen = (uint16_t)(dinSignaturePropertyType->Id.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinSignaturePropertyType->Id.charactersLen, dinSignaturePropertyType->Id.characters, dinSignaturePropertyType_Id_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinSignaturePropertyType->Id_isUsed = 1u; + grammarID = 280; + break; + case 1: + errn = decodeUnsignedInteger16(stream, &dinSignaturePropertyType->Target.charactersLen); + if (errn == 0) { + if (dinSignaturePropertyType->Target.charactersLen >= 2) { + dinSignaturePropertyType->Target.charactersLen = (uint16_t)(dinSignaturePropertyType->Target.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinSignaturePropertyType->Target.charactersLen, dinSignaturePropertyType->Target.characters, dinSignaturePropertyType_Target_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + grammarID = 281; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 280: + /* StartTag[ATTRIBUTE[STRING](Target)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decodeUnsignedInteger16(stream, &dinSignaturePropertyType->Target.charactersLen); + if (errn == 0) { + if (dinSignaturePropertyType->Target.charactersLen >= 2) { + dinSignaturePropertyType->Target.charactersLen = (uint16_t)(dinSignaturePropertyType->Target.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinSignaturePropertyType->Target.charactersLen, dinSignaturePropertyType->Target.characters, dinSignaturePropertyType_Target_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + grammarID = 281; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 281: + /* StartTag[START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 20; + break; + case 1: + errn = decodeUnsignedInteger16(stream, &dinSignaturePropertyType->ANY.charactersLen); + if (errn == 0) { + if (dinSignaturePropertyType->ANY.charactersLen >= 2) { + dinSignaturePropertyType->ANY.charactersLen = (uint16_t)(dinSignaturePropertyType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinSignaturePropertyType->ANY.charactersLen, dinSignaturePropertyType->ANY.characters, dinSignaturePropertyType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinSignaturePropertyType->ANY_isUsed = 1u; + grammarID = 282; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 20: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 20; + break; + case 1: + done = 1; + grammarID = 5; + break; + case 2: + errn = decodeUnsignedInteger16(stream, &dinSignaturePropertyType->ANY.charactersLen); + if (errn == 0) { + if (dinSignaturePropertyType->ANY.charactersLen >= 2) { + dinSignaturePropertyType->ANY.charactersLen = (uint16_t)(dinSignaturePropertyType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinSignaturePropertyType->ANY.charactersLen, dinSignaturePropertyType->ANY.characters, dinSignaturePropertyType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinSignaturePropertyType->ANY_isUsed = 1u; + grammarID = 20; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 282: + /* Element[START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + /* TODO unsupported event : START_ELEMENT_GENERIC */ + grammarID = 20; + break; + case 1: + errn = decodeUnsignedInteger16(stream, &dinSignaturePropertyType->ANY.charactersLen); + if (errn == 0) { + if (dinSignaturePropertyType->ANY.charactersLen >= 2) { + dinSignaturePropertyType->ANY.charactersLen = (uint16_t)(dinSignaturePropertyType->ANY.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinSignaturePropertyType->ANY.charactersLen, dinSignaturePropertyType->ANY.characters, dinSignaturePropertyType_ANY_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + dinSignaturePropertyType->ANY_isUsed = 1u; + grammarID = 282; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,MeterInfoType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":MeterID,"urn:iso:15118:2:2010:MsgDataTypes":MeterReading{0-1},"urn:iso:15118:2:2010:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2010:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":TMeter{0-1})', derivedBy='RESTRICTION'. */ +static int decode_dinMeterInfoType(bitstream_t* stream, struct dinMeterInfoType* dinMeterInfoType) { + int grammarID = 283; + int done = 0; + + init_dinMeterInfoType(dinMeterInfoType); + + while(!done) { + switch(grammarID) { + case 283: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinMeterInfoType->MeterID.charactersLen); + if (errn == 0) { + if (dinMeterInfoType->MeterID.charactersLen >= 2) { + dinMeterInfoType->MeterID.charactersLen = (uint16_t)(dinMeterInfoType->MeterID.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, dinMeterInfoType->MeterID.charactersLen, dinMeterInfoType->MeterID.characters, dinMeterInfoType_MeterID_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 284; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 284: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + errn = decode_dinPhysicalValueType(stream, &dinMeterInfoType->MeterReading); + dinMeterInfoType->MeterReading_isUsed = 1u; + grammarID = 285; + break; + case 1: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinMeterInfoType->SigMeterReading.bytesLen); + if (errn == 0) { + errn = (dinMeterInfoType->SigMeterReading.bytesLen) <= dinMeterInfoType_SigMeterReading_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinMeterInfoType->SigMeterReading.bytesLen, dinMeterInfoType->SigMeterReading.bytes); + } + dinMeterInfoType->SigMeterReading_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 286; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 2: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinMeterInfoType->MeterStatus); + dinMeterInfoType->MeterStatus_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 287; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 3: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger64(stream, &dinMeterInfoType->TMeter); + dinMeterInfoType->TMeter_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 4: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 285: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 3, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinMeterInfoType->SigMeterReading.bytesLen); + if (errn == 0) { + errn = (dinMeterInfoType->SigMeterReading.bytesLen) <= dinMeterInfoType_SigMeterReading_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinMeterInfoType->SigMeterReading.bytesLen, dinMeterInfoType->SigMeterReading.bytes); + } + dinMeterInfoType->SigMeterReading_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 286; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinMeterInfoType->MeterStatus); + dinMeterInfoType->MeterStatus_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 287; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 2: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger64(stream, &dinMeterInfoType->TMeter); + dinMeterInfoType->TMeter_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 3: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 286: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &dinMeterInfoType->MeterStatus); + dinMeterInfoType->MeterStatus_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 287; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger64(stream, &dinMeterInfoType->TMeter); + dinMeterInfoType->TMeter_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 2: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 287: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger64(stream, &dinMeterInfoType->TMeter); + dinMeterInfoType->TMeter_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 4; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 4: + /* Element[END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SubCertificatesType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int decode_dinSubCertificatesType(bitstream_t* stream, struct dinSubCertificatesType* dinSubCertificatesType) { + int grammarID = 288; + int done = 0; + + init_dinSubCertificatesType(dinSubCertificatesType); + + while(!done) { + switch(grammarID) { + case 288: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSubCertificatesType->Certificate.arrayLen < dinSubCertificatesType_Certificate_ARRAY_SIZE) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinSubCertificatesType->Certificate.array[dinSubCertificatesType->Certificate.arrayLen].bytesLen); + if (errn == 0) { + errn = (dinSubCertificatesType->Certificate.array[dinSubCertificatesType->Certificate.arrayLen].bytesLen) <= dinSubCertificatesType_Certificate_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinSubCertificatesType->Certificate.array[dinSubCertificatesType->Certificate.arrayLen].bytesLen, dinSubCertificatesType->Certificate.array[dinSubCertificatesType->Certificate.arrayLen].bytes); + } + dinSubCertificatesType->Certificate.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 289; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + case 289: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate), END_ELEMENT] */ + errn = decodeNBitUnsignedInteger(stream, 2, &eventCode); + if (errn == 0) { + switch(eventCode) { + case 0: + if (dinSubCertificatesType->Certificate.arrayLen < dinSubCertificatesType_Certificate_ARRAY_SIZE) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &dinSubCertificatesType->Certificate.array[dinSubCertificatesType->Certificate.arrayLen].bytesLen); + if (errn == 0) { + errn = (dinSubCertificatesType->Certificate.array[dinSubCertificatesType->Certificate.arrayLen].bytesLen) <= dinSubCertificatesType_Certificate_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, dinSubCertificatesType->Certificate.array[dinSubCertificatesType->Certificate.arrayLen].bytesLen, dinSubCertificatesType->Certificate.array[dinSubCertificatesType->Certificate.arrayLen].bytes); + } + dinSubCertificatesType->Certificate.arrayLen++; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + } else { + errn = EXI_ERROR_OUT_OF_BOUNDS; + } + if(errn == 0) { + /* valid EE for simple element START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate) ? */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(eventCode == 0) { + grammarID = 289; + } else { + errn = EXI_DEVIANT_SUPPORT_NOT_DEPLOYED; /* or also typecast and nillable */ + } + } + break; + case 1: + done = 1; + grammarID = 5; + break; + default: + errn = EXI_ERROR_UNKOWN_EVENT_CODE; + break; + } + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + + + + +int decode_dinExiDocument(bitstream_t* stream, struct dinEXIDocument* exiDoc) { + errn = readEXIHeader(stream); + + if(errn == 0) { + /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Entry), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperties), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}V2G_Message), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT_GENERIC] */ + init_dinEXIDocument(exiDoc); + errn = decodeNBitUnsignedInteger(stream, 7, &eventCode); + if(errn == 0) { + switch(eventCode) { + case 0: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter) */ + errn = decode_dinAC_EVChargeParameterType(stream, &exiDoc->AC_EVChargeParameter); + exiDoc->AC_EVChargeParameter_isUsed = 1u; + break; + case 1: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter) */ + errn = decode_dinAC_EVSEChargeParameterType(stream, &exiDoc->AC_EVSEChargeParameter); + exiDoc->AC_EVSEChargeParameter_isUsed = 1u; + break; + case 2: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus) */ + errn = decode_dinAC_EVSEStatusType(stream, &exiDoc->AC_EVSEStatus); + exiDoc->AC_EVSEStatus_isUsed = 1u; + break; + case 3: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement) */ + errn = decode_dinBodyBaseType(stream, &exiDoc->BodyElement); + exiDoc->BodyElement_isUsed = 1u; + break; + case 4: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq) */ + errn = decode_dinCableCheckReqType(stream, &exiDoc->CableCheckReq); + exiDoc->CableCheckReq_isUsed = 1u; + break; + case 5: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes) */ + errn = decode_dinCableCheckResType(stream, &exiDoc->CableCheckRes); + exiDoc->CableCheckRes_isUsed = 1u; + break; + case 6: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod) */ + errn = decode_dinCanonicalizationMethodType(stream, &exiDoc->CanonicalizationMethod); + exiDoc->CanonicalizationMethod_isUsed = 1u; + break; + case 7: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq) */ + errn = decode_dinCertificateInstallationReqType(stream, &exiDoc->CertificateInstallationReq); + exiDoc->CertificateInstallationReq_isUsed = 1u; + break; + case 8: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes) */ + errn = decode_dinCertificateInstallationResType(stream, &exiDoc->CertificateInstallationRes); + exiDoc->CertificateInstallationRes_isUsed = 1u; + break; + case 9: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq) */ + errn = decode_dinCertificateUpdateReqType(stream, &exiDoc->CertificateUpdateReq); + exiDoc->CertificateUpdateReq_isUsed = 1u; + break; + case 10: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes) */ + errn = decode_dinCertificateUpdateResType(stream, &exiDoc->CertificateUpdateRes); + exiDoc->CertificateUpdateRes_isUsed = 1u; + break; + case 11: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq) */ + errn = decode_dinChargeParameterDiscoveryReqType(stream, &exiDoc->ChargeParameterDiscoveryReq); + exiDoc->ChargeParameterDiscoveryReq_isUsed = 1u; + break; + case 12: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes) */ + errn = decode_dinChargeParameterDiscoveryResType(stream, &exiDoc->ChargeParameterDiscoveryRes); + exiDoc->ChargeParameterDiscoveryRes_isUsed = 1u; + break; + case 13: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq) */ + errn = decode_dinChargingStatusReqType(stream, &exiDoc->ChargingStatusReq); + exiDoc->ChargingStatusReq_isUsed = 1u; + break; + case 14: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes) */ + errn = decode_dinChargingStatusResType(stream, &exiDoc->ChargingStatusRes); + exiDoc->ChargingStatusRes_isUsed = 1u; + break; + case 15: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq) */ + errn = decode_dinContractAuthenticationReqType(stream, &exiDoc->ContractAuthenticationReq); + exiDoc->ContractAuthenticationReq_isUsed = 1u; + break; + case 16: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes) */ + errn = decode_dinContractAuthenticationResType(stream, &exiDoc->ContractAuthenticationRes); + exiDoc->ContractAuthenticationRes_isUsed = 1u; + break; + case 17: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq) */ + errn = decode_dinCurrentDemandReqType(stream, &exiDoc->CurrentDemandReq); + exiDoc->CurrentDemandReq_isUsed = 1u; + break; + case 18: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes) */ + errn = decode_dinCurrentDemandResType(stream, &exiDoc->CurrentDemandRes); + exiDoc->CurrentDemandRes_isUsed = 1u; + break; + case 19: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter) */ + errn = decode_dinDC_EVChargeParameterType(stream, &exiDoc->DC_EVChargeParameter); + exiDoc->DC_EVChargeParameter_isUsed = 1u; + break; + case 20: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter) */ + errn = decode_dinDC_EVPowerDeliveryParameterType(stream, &exiDoc->DC_EVPowerDeliveryParameter); + exiDoc->DC_EVPowerDeliveryParameter_isUsed = 1u; + break; + case 21: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter) */ + errn = decode_dinDC_EVSEChargeParameterType(stream, &exiDoc->DC_EVSEChargeParameter); + exiDoc->DC_EVSEChargeParameter_isUsed = 1u; + break; + case 22: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus) */ + errn = decode_dinDC_EVSEStatusType(stream, &exiDoc->DC_EVSEStatus); + exiDoc->DC_EVSEStatus_isUsed = 1u; + break; + case 23: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus) */ + errn = decode_dinDC_EVStatusType(stream, &exiDoc->DC_EVStatus); + exiDoc->DC_EVStatus_isUsed = 1u; + break; + case 24: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue) */ + errn = decode_dinDSAKeyValueType(stream, &exiDoc->DSAKeyValue); + exiDoc->DSAKeyValue_isUsed = 1u; + break; + case 25: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod) */ + errn = decode_dinDigestMethodType(stream, &exiDoc->DigestMethod); + exiDoc->DigestMethod_isUsed = 1u; + break; + case 26: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue) */ + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiDoc->DigestValue.bytesLen); + if (errn == 0) { + errn = (exiDoc->DigestValue.bytesLen) <= dinEXIDocument_DigestValue_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiDoc->DigestValue.bytesLen, exiDoc->DigestValue.bytes); + } + exiDoc->DigestValue_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 27: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter) */ + errn = decode_dinEVChargeParameterType(stream, &exiDoc->EVChargeParameter); + exiDoc->EVChargeParameter_isUsed = 1u; + break; + case 28: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter) */ + errn = decode_dinEVPowerDeliveryParameterType(stream, &exiDoc->EVPowerDeliveryParameter); + exiDoc->EVPowerDeliveryParameter_isUsed = 1u; + break; + case 29: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter) */ + errn = decode_dinEVSEChargeParameterType(stream, &exiDoc->EVSEChargeParameter); + exiDoc->EVSEChargeParameter_isUsed = 1u; + break; + case 30: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus) */ + errn = decode_dinEVSEStatusType(stream, &exiDoc->EVSEStatus); + exiDoc->EVSEStatus_isUsed = 1u; + break; + case 31: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVStatus) */ + errn = decode_dinEVStatusType(stream, &exiDoc->EVStatus); + exiDoc->EVStatus_isUsed = 1u; + break; + case 32: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Entry) */ + errn = decode_dinEntryType(stream, &exiDoc->Entry); + exiDoc->Entry_isUsed = 1u; + break; + case 33: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo) */ + errn = decode_dinKeyInfoType(stream, &exiDoc->KeyInfo); + exiDoc->KeyInfo_isUsed = 1u; + break; + case 34: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName) */ + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiDoc->KeyName.charactersLen); + if (errn == 0) { + if (exiDoc->KeyName.charactersLen >= 2) { + exiDoc->KeyName.charactersLen = (uint16_t)(exiDoc->KeyName.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiDoc->KeyName.charactersLen, exiDoc->KeyName.characters, dinEXIDocument_KeyName_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiDoc->KeyName_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 35: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue) */ + errn = decode_dinKeyValueType(stream, &exiDoc->KeyValue); + exiDoc->KeyValue_isUsed = 1u; + break; + case 36: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest) */ + errn = decode_dinManifestType(stream, &exiDoc->Manifest); + exiDoc->Manifest_isUsed = 1u; + break; + case 37: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq) */ + errn = decode_dinMeteringReceiptReqType(stream, &exiDoc->MeteringReceiptReq); + exiDoc->MeteringReceiptReq_isUsed = 1u; + break; + case 38: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes) */ + errn = decode_dinMeteringReceiptResType(stream, &exiDoc->MeteringReceiptRes); + exiDoc->MeteringReceiptRes_isUsed = 1u; + break; + case 39: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData) */ + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiDoc->MgmtData.charactersLen); + if (errn == 0) { + if (exiDoc->MgmtData.charactersLen >= 2) { + exiDoc->MgmtData.charactersLen = (uint16_t)(exiDoc->MgmtData.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiDoc->MgmtData.charactersLen, exiDoc->MgmtData.characters, dinEXIDocument_MgmtData_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiDoc->MgmtData_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 40: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object) */ + errn = decode_dinObjectType(stream, &exiDoc->Object); + exiDoc->Object_isUsed = 1u; + break; + case 41: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData) */ + errn = decode_dinPGPDataType(stream, &exiDoc->PGPData); + exiDoc->PGPData_isUsed = 1u; + break; + case 42: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry) */ + errn = decode_dinPMaxScheduleEntryType(stream, &exiDoc->PMaxScheduleEntry); + exiDoc->PMaxScheduleEntry_isUsed = 1u; + break; + case 43: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq) */ + errn = decode_dinPaymentDetailsReqType(stream, &exiDoc->PaymentDetailsReq); + exiDoc->PaymentDetailsReq_isUsed = 1u; + break; + case 44: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes) */ + errn = decode_dinPaymentDetailsResType(stream, &exiDoc->PaymentDetailsRes); + exiDoc->PaymentDetailsRes_isUsed = 1u; + break; + case 45: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq) */ + errn = decode_dinPowerDeliveryReqType(stream, &exiDoc->PowerDeliveryReq); + exiDoc->PowerDeliveryReq_isUsed = 1u; + break; + case 46: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes) */ + errn = decode_dinPowerDeliveryResType(stream, &exiDoc->PowerDeliveryRes); + exiDoc->PowerDeliveryRes_isUsed = 1u; + break; + case 47: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq) */ + errn = decode_dinPreChargeReqType(stream, &exiDoc->PreChargeReq); + exiDoc->PreChargeReq_isUsed = 1u; + break; + case 48: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes) */ + errn = decode_dinPreChargeResType(stream, &exiDoc->PreChargeRes); + exiDoc->PreChargeRes_isUsed = 1u; + break; + case 49: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue) */ + errn = decode_dinRSAKeyValueType(stream, &exiDoc->RSAKeyValue); + exiDoc->RSAKeyValue_isUsed = 1u; + break; + case 50: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference) */ + errn = decode_dinReferenceType(stream, &exiDoc->Reference); + exiDoc->Reference_isUsed = 1u; + break; + case 51: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval) */ + errn = decode_dinRelativeTimeIntervalType(stream, &exiDoc->RelativeTimeInterval); + exiDoc->RelativeTimeInterval_isUsed = 1u; + break; + case 52: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod) */ + errn = decode_dinRetrievalMethodType(stream, &exiDoc->RetrievalMethod); + exiDoc->RetrievalMethod_isUsed = 1u; + break; + case 53: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList) */ + errn = decode_dinSAScheduleListType(stream, &exiDoc->SAScheduleList); + exiDoc->SAScheduleList_isUsed = 1u; + break; + case 54: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules) */ + errn = decode_dinSASchedulesType(stream, &exiDoc->SASchedules); + exiDoc->SASchedules_isUsed = 1u; + break; + case 55: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData) */ + errn = decode_dinSPKIDataType(stream, &exiDoc->SPKIData); + exiDoc->SPKIData_isUsed = 1u; + break; + case 56: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry) */ + errn = decode_dinSalesTariffEntryType(stream, &exiDoc->SalesTariffEntry); + exiDoc->SalesTariffEntry_isUsed = 1u; + break; + case 57: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge) */ + errn = decode_dinServiceChargeType(stream, &exiDoc->ServiceCharge); + exiDoc->ServiceCharge_isUsed = 1u; + break; + case 58: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq) */ + errn = decode_dinServiceDetailReqType(stream, &exiDoc->ServiceDetailReq); + exiDoc->ServiceDetailReq_isUsed = 1u; + break; + case 59: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes) */ + errn = decode_dinServiceDetailResType(stream, &exiDoc->ServiceDetailRes); + exiDoc->ServiceDetailRes_isUsed = 1u; + break; + case 60: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq) */ + errn = decode_dinServiceDiscoveryReqType(stream, &exiDoc->ServiceDiscoveryReq); + exiDoc->ServiceDiscoveryReq_isUsed = 1u; + break; + case 61: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes) */ + errn = decode_dinServiceDiscoveryResType(stream, &exiDoc->ServiceDiscoveryRes); + exiDoc->ServiceDiscoveryRes_isUsed = 1u; + break; + case 62: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq) */ + errn = decode_dinServicePaymentSelectionReqType(stream, &exiDoc->ServicePaymentSelectionReq); + exiDoc->ServicePaymentSelectionReq_isUsed = 1u; + break; + case 63: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes) */ + errn = decode_dinServicePaymentSelectionResType(stream, &exiDoc->ServicePaymentSelectionRes); + exiDoc->ServicePaymentSelectionRes_isUsed = 1u; + break; + case 64: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq) */ + errn = decode_dinSessionSetupReqType(stream, &exiDoc->SessionSetupReq); + exiDoc->SessionSetupReq_isUsed = 1u; + break; + case 65: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes) */ + errn = decode_dinSessionSetupResType(stream, &exiDoc->SessionSetupRes); + exiDoc->SessionSetupRes_isUsed = 1u; + break; + case 66: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq) */ + errn = decode_dinSessionStopType(stream, &exiDoc->SessionStopReq); + exiDoc->SessionStopReq_isUsed = 1u; + break; + case 67: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes) */ + errn = decode_dinSessionStopResType(stream, &exiDoc->SessionStopRes); + exiDoc->SessionStopRes_isUsed = 1u; + break; + case 68: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature) */ + errn = decode_dinSignatureType(stream, &exiDoc->Signature); + exiDoc->Signature_isUsed = 1u; + break; + case 69: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod) */ + errn = decode_dinSignatureMethodType(stream, &exiDoc->SignatureMethod); + exiDoc->SignatureMethod_isUsed = 1u; + break; + case 70: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperties) */ + errn = decode_dinSignaturePropertiesType(stream, &exiDoc->SignatureProperties); + exiDoc->SignatureProperties_isUsed = 1u; + break; + case 71: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty) */ + errn = decode_dinSignaturePropertyType(stream, &exiDoc->SignatureProperty); + exiDoc->SignatureProperty_isUsed = 1u; + break; + case 72: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue) */ + errn = decode_dinSignatureValueType(stream, &exiDoc->SignatureValue); + exiDoc->SignatureValue_isUsed = 1u; + break; + case 73: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo) */ + errn = decode_dinSignedInfoType(stream, &exiDoc->SignedInfo); + exiDoc->SignedInfo_isUsed = 1u; + break; + case 74: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval) */ + errn = decode_dinIntervalType(stream, &exiDoc->TimeInterval); + exiDoc->TimeInterval_isUsed = 1u; + break; + case 75: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform) */ + errn = decode_dinTransformType(stream, &exiDoc->Transform); + exiDoc->Transform_isUsed = 1u; + break; + case 76: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms) */ + errn = decode_dinTransformsType(stream, &exiDoc->Transforms); + exiDoc->Transforms_isUsed = 1u; + break; + case 77: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}V2G_Message) */ + errn = decode_dinAnonType_V2G_Message(stream, &exiDoc->V2G_Message); + exiDoc->V2G_Message_isUsed = 1u; + break; + case 78: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq) */ + errn = decode_dinWeldingDetectionReqType(stream, &exiDoc->WeldingDetectionReq); + exiDoc->WeldingDetectionReq_isUsed = 1u; + break; + case 79: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes) */ + errn = decode_dinWeldingDetectionResType(stream, &exiDoc->WeldingDetectionRes); + exiDoc->WeldingDetectionRes_isUsed = 1u; + break; + case 80: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data) */ + errn = decode_dinX509DataType(stream, &exiDoc->X509Data); + exiDoc->X509Data_isUsed = 1u; + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + } + + } + + (void)exiDoc; /* avoid unused warning */ + (void)eventCode; /* avoid unused warning */ + (void)uint32; /* avoid unused warning */ + + return errn; +} + +#if DEPLOY_DIN_CODEC_FRAGMENT == SUPPORT_YES +int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) { + errn = readEXIHeader(stream); + + if(errn == 0) { + /* FragmentContent[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeService), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Cost), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EAmount), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSECurrentRegulationTolerance), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Entry), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Exponent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}J), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier), START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}Notification), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMax), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxSchedule), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentOptions), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PgenCounter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Q), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToFullSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RetryCounter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariff), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedServiceList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceParameterList), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID), START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperties), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SubCertificates), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}V2G_Message), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SerialNumber), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amount), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}duration), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue), START_ELEMENT_GENERIC, END_DOCUMENT] */ + init_dinEXIFragment(exiFrag); + errn = decodeNBitUnsignedInteger(stream, 8, &eventCode); + if(errn == 0) { + switch(eventCode) { + case 0: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter) */ + errn = decode_dinAC_EVChargeParameterType(stream, &exiFrag->AC_EVChargeParameter); + exiFrag->AC_EVChargeParameter_isUsed = 1u; + break; + case 1: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter) */ + errn = decode_dinAC_EVSEChargeParameterType(stream, &exiFrag->AC_EVSEChargeParameter); + exiFrag->AC_EVSEChargeParameter_isUsed = 1u; + break; + case 2: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus) */ + errn = decode_dinAC_EVSEStatusType(stream, &exiFrag->AC_EVSEStatus); + exiFrag->AC_EVSEStatus_isUsed = 1u; + break; + case 3: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus) */ + errn = decode_dinAC_EVSEStatusType(stream, &exiFrag->AC_EVSEStatus); + exiFrag->AC_EVSEStatus_isUsed = 1u; + break; + case 4: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body) */ + errn = decode_dinBodyType(stream, &exiFrag->Body); + exiFrag->Body_isUsed = 1u; + break; + case 5: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement) */ + errn = decode_dinBodyBaseType(stream, &exiFrag->BodyElement); + exiFrag->BodyElement_isUsed = 1u; + break; + case 6: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete) */ + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &exiFrag->BulkChargingComplete); + exiFrag->BulkChargingComplete_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 7: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete) */ + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &exiFrag->BulkChargingComplete); + exiFrag->BulkChargingComplete_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 8: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC) */ + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 7, &(uint32)); + exiFrag->BulkSOC = (int8_t)(uint32 + 0); + exiFrag->BulkSOC_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 9: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq) */ + errn = decode_dinCableCheckReqType(stream, &exiFrag->CableCheckReq); + exiFrag->CableCheckReq_isUsed = 1u; + break; + case 10: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes) */ + errn = decode_dinCableCheckResType(stream, &exiFrag->CableCheckRes); + exiFrag->CableCheckRes_isUsed = 1u; + break; + case 11: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod) */ + errn = decode_dinCanonicalizationMethodType(stream, &exiFrag->CanonicalizationMethod); + exiFrag->CanonicalizationMethod_isUsed = 1u; + break; + case 12: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate) */ + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->Certificate.bytesLen); + if (errn == 0) { + errn = (exiFrag->Certificate.bytesLen) <= dinEXIFragment_Certificate_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->Certificate.bytesLen, exiFrag->Certificate.bytes); + } + exiFrag->Certificate_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 13: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq) */ + errn = decode_dinCertificateInstallationReqType(stream, &exiFrag->CertificateInstallationReq); + exiFrag->CertificateInstallationReq_isUsed = 1u; + break; + case 14: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes) */ + errn = decode_dinCertificateInstallationResType(stream, &exiFrag->CertificateInstallationRes); + exiFrag->CertificateInstallationRes_isUsed = 1u; + break; + case 15: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq) */ + errn = decode_dinCertificateUpdateReqType(stream, &exiFrag->CertificateUpdateReq); + exiFrag->CertificateUpdateReq_isUsed = 1u; + break; + case 16: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes) */ + errn = decode_dinCertificateUpdateResType(stream, &exiFrag->CertificateUpdateRes); + exiFrag->CertificateUpdateRes_isUsed = 1u; + break; + case 17: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq) */ + errn = decode_dinChargeParameterDiscoveryReqType(stream, &exiFrag->ChargeParameterDiscoveryReq); + exiFrag->ChargeParameterDiscoveryReq_isUsed = 1u; + break; + case 18: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes) */ + errn = decode_dinChargeParameterDiscoveryResType(stream, &exiFrag->ChargeParameterDiscoveryRes); + exiFrag->ChargeParameterDiscoveryRes_isUsed = 1u; + break; + case 19: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeService) */ + errn = decode_dinServiceChargeType(stream, &exiFrag->ChargeService); + exiFrag->ChargeService_isUsed = 1u; + break; + case 20: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete) */ + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &exiFrag->ChargingComplete); + exiFrag->ChargingComplete_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 21: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete) */ + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &exiFrag->ChargingComplete); + exiFrag->ChargingComplete_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 22: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile) */ + errn = decode_dinChargingProfileType(stream, &exiFrag->ChargingProfile); + exiFrag->ChargingProfile_isUsed = 1u; + break; + case 23: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower) */ + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &exiFrag->ChargingProfileEntryMaxPower); + exiFrag->ChargingProfileEntryMaxPower_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 24: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart) */ + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &exiFrag->ChargingProfileEntryStart); + exiFrag->ChargingProfileEntryStart_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 25: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq) */ + errn = decode_dinChargingStatusReqType(stream, &exiFrag->ChargingStatusReq); + exiFrag->ChargingStatusReq_isUsed = 1u; + break; + case 26: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes) */ + errn = decode_dinChargingStatusResType(stream, &exiFrag->ChargingStatusRes); + exiFrag->ChargingStatusRes_isUsed = 1u; + break; + case 27: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost) */ + errn = decode_dinConsumptionCostType(stream, &exiFrag->ConsumptionCost); + exiFrag->ConsumptionCost_isUsed = 1u; + break; + case 28: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq) */ + errn = decode_dinContractAuthenticationReqType(stream, &exiFrag->ContractAuthenticationReq); + exiFrag->ContractAuthenticationReq_isUsed = 1u; + break; + case 29: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes) */ + errn = decode_dinContractAuthenticationResType(stream, &exiFrag->ContractAuthenticationRes); + exiFrag->ContractAuthenticationRes_isUsed = 1u; + break; + case 30: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID) */ + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->ContractID.charactersLen); + if (errn == 0) { + if (exiFrag->ContractID.charactersLen >= 2) { + exiFrag->ContractID.charactersLen = (uint16_t)(exiFrag->ContractID.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiFrag->ContractID.charactersLen, exiFrag->ContractID.characters, dinEXIFragment_ContractID_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiFrag->ContractID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 31: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain) */ + errn = decode_dinCertificateChainType(stream, &exiFrag->ContractSignatureCertChain); + exiFrag->ContractSignatureCertChain_isUsed = 1u; + break; + case 32: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey) */ + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->ContractSignatureEncryptedPrivateKey.bytesLen); + if (errn == 0) { + errn = (exiFrag->ContractSignatureEncryptedPrivateKey.bytesLen) <= dinEXIFragment_ContractSignatureEncryptedPrivateKey_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->ContractSignatureEncryptedPrivateKey.bytesLen, exiFrag->ContractSignatureEncryptedPrivateKey.bytes); + } + exiFrag->ContractSignatureEncryptedPrivateKey_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 33: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Cost) */ + errn = decode_dinCostType(stream, &exiFrag->Cost); + exiFrag->Cost_isUsed = 1u; + break; + case 34: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq) */ + errn = decode_dinCurrentDemandReqType(stream, &exiFrag->CurrentDemandReq); + exiFrag->CurrentDemandReq_isUsed = 1u; + break; + case 35: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes) */ + errn = decode_dinCurrentDemandResType(stream, &exiFrag->CurrentDemandRes); + exiFrag->CurrentDemandRes_isUsed = 1u; + break; + case 36: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter) */ + errn = decode_dinDC_EVChargeParameterType(stream, &exiFrag->DC_EVChargeParameter); + exiFrag->DC_EVChargeParameter_isUsed = 1u; + break; + case 37: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter) */ + errn = decode_dinDC_EVPowerDeliveryParameterType(stream, &exiFrag->DC_EVPowerDeliveryParameter); + exiFrag->DC_EVPowerDeliveryParameter_isUsed = 1u; + break; + case 38: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter) */ + errn = decode_dinDC_EVSEChargeParameterType(stream, &exiFrag->DC_EVSEChargeParameter); + exiFrag->DC_EVSEChargeParameter_isUsed = 1u; + break; + case 39: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus) */ + errn = decode_dinDC_EVSEStatusType(stream, &exiFrag->DC_EVSEStatus); + exiFrag->DC_EVSEStatus_isUsed = 1u; + break; + case 40: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus) */ + errn = decode_dinDC_EVSEStatusType(stream, &exiFrag->DC_EVSEStatus); + exiFrag->DC_EVSEStatus_isUsed = 1u; + break; + case 41: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus) */ + errn = decode_dinDC_EVStatusType(stream, &exiFrag->DC_EVStatus); + exiFrag->DC_EVStatus_isUsed = 1u; + break; + case 42: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus) */ + errn = decode_dinDC_EVStatusType(stream, &exiFrag->DC_EVStatus); + exiFrag->DC_EVStatus_isUsed = 1u; + break; + case 43: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams) */ + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->DHParams.bytesLen); + if (errn == 0) { + errn = (exiFrag->DHParams.bytesLen) <= dinEXIFragment_DHParams_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->DHParams.bytesLen, exiFrag->DHParams.bytes); + } + exiFrag->DHParams_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 44: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue) */ + errn = decode_dinDSAKeyValueType(stream, &exiFrag->DSAKeyValue); + exiFrag->DSAKeyValue_isUsed = 1u; + break; + case 45: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow) */ + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger64(stream, &exiFrag->DateTimeNow); + exiFrag->DateTimeNow_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 46: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime) */ + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &exiFrag->DepartureTime); + exiFrag->DepartureTime_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 47: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod) */ + errn = decode_dinDigestMethodType(stream, &exiFrag->DigestMethod); + exiFrag->DigestMethod_isUsed = 1u; + break; + case 48: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue) */ + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->DigestValue.bytesLen); + if (errn == 0) { + errn = (exiFrag->DigestValue.bytesLen) <= dinEXIFragment_DigestValue_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->DigestValue.bytesLen, exiFrag->DigestValue.bytes); + } + exiFrag->DigestValue_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 49: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EAmount) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EAmount); + exiFrag->EAmount_isUsed = 1u; + break; + case 50: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel) */ + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 8, &(uint32)); + exiFrag->EPriceLevel = (uint8_t)(uint32 + 0); + exiFrag->EPriceLevel_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 51: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID) */ + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->EVCCID.bytesLen); + if (errn == 0) { + errn = (exiFrag->EVCCID.bytesLen) <= dinEXIFragment_EVCCID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->EVCCID.bytesLen, exiFrag->EVCCID.bytes); + } + exiFrag->EVCCID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 52: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning) */ + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &exiFrag->EVCabinConditioning); + exiFrag->EVCabinConditioning_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 53: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter) */ + errn = decode_dinEVChargeParameterType(stream, &exiFrag->EVChargeParameter); + exiFrag->EVChargeParameter_isUsed = 1u; + break; + case 54: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVEnergyCapacity); + exiFrag->EVEnergyCapacity_isUsed = 1u; + break; + case 55: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVEnergyRequest); + exiFrag->EVEnergyRequest_isUsed = 1u; + break; + case 56: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode) */ + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 4, &uint32); + exiFrag->EVErrorCode = (dinDC_EVErrorCodeType) uint32; + exiFrag->EVErrorCode_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 57: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxCurrent) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVMaxCurrent); + exiFrag->EVMaxCurrent_isUsed = 1u; + break; + case 58: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxVoltage) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVMaxVoltage); + exiFrag->EVMaxVoltage_isUsed = 1u; + break; + case 59: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVMaximumCurrentLimit); + exiFrag->EVMaximumCurrentLimit_isUsed = 1u; + break; + case 60: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVMaximumCurrentLimit); + exiFrag->EVMaximumCurrentLimit_isUsed = 1u; + break; + case 61: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVMaximumPowerLimit); + exiFrag->EVMaximumPowerLimit_isUsed = 1u; + break; + case 62: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVMaximumPowerLimit); + exiFrag->EVMaximumPowerLimit_isUsed = 1u; + break; + case 63: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVMaximumVoltageLimit); + exiFrag->EVMaximumVoltageLimit_isUsed = 1u; + break; + case 64: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVMaximumVoltageLimit); + exiFrag->EVMaximumVoltageLimit_isUsed = 1u; + break; + case 65: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVMinCurrent); + exiFrag->EVMinCurrent_isUsed = 1u; + break; + case 66: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter) */ + errn = decode_dinEVPowerDeliveryParameterType(stream, &exiFrag->EVPowerDeliveryParameter); + exiFrag->EVPowerDeliveryParameter_isUsed = 1u; + break; + case 67: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning) */ + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &exiFrag->EVRESSConditioning); + exiFrag->EVRESSConditioning_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 68: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC) */ + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 7, &(uint32)); + exiFrag->EVRESSSOC = (int8_t)(uint32 + 0); + exiFrag->EVRESSSOC_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 69: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady) */ + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &exiFrag->EVReady); + exiFrag->EVReady_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 70: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType) */ + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 3, &uint32); + exiFrag->EVRequestedEnergyTransferType = (dinEVRequestedEnergyTransferType) uint32; + exiFrag->EVRequestedEnergyTransferType_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 71: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter) */ + errn = decode_dinEVSEChargeParameterType(stream, &exiFrag->EVSEChargeParameter); + exiFrag->EVSEChargeParameter_isUsed = 1u; + break; + case 72: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved) */ + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &exiFrag->EVSECurrentLimitAchieved); + exiFrag->EVSECurrentLimitAchieved_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 73: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSECurrentRegulationTolerance) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSECurrentRegulationTolerance); + exiFrag->EVSECurrentRegulationTolerance_isUsed = 1u; + break; + case 74: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEEnergyToBeDelivered); + exiFrag->EVSEEnergyToBeDelivered_isUsed = 1u; + break; + case 75: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID) */ + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->EVSEID.bytesLen); + if (errn == 0) { + errn = (exiFrag->EVSEID.bytesLen) <= dinEXIFragment_EVSEID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->EVSEID.bytesLen, exiFrag->EVSEID.bytes); + } + exiFrag->EVSEID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 76: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus) */ + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + exiFrag->EVSEIsolationStatus = (dinisolationLevelType) uint32; + exiFrag->EVSEIsolationStatus_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 77: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaxCurrent); + exiFrag->EVSEMaxCurrent_isUsed = 1u; + break; + case 78: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaxCurrent); + exiFrag->EVSEMaxCurrent_isUsed = 1u; + break; + case 79: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaxVoltage); + exiFrag->EVSEMaxVoltage_isUsed = 1u; + break; + case 80: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumCurrentLimit); + exiFrag->EVSEMaximumCurrentLimit_isUsed = 1u; + break; + case 81: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumCurrentLimit); + exiFrag->EVSEMaximumCurrentLimit_isUsed = 1u; + break; + case 82: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumPowerLimit); + exiFrag->EVSEMaximumPowerLimit_isUsed = 1u; + break; + case 83: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumPowerLimit); + exiFrag->EVSEMaximumPowerLimit_isUsed = 1u; + break; + case 84: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumVoltageLimit); + exiFrag->EVSEMaximumVoltageLimit_isUsed = 1u; + break; + case 85: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumVoltageLimit); + exiFrag->EVSEMaximumVoltageLimit_isUsed = 1u; + break; + case 86: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMinCurrent); + exiFrag->EVSEMinCurrent_isUsed = 1u; + break; + case 87: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumCurrentLimit) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMinimumCurrentLimit); + exiFrag->EVSEMinimumCurrentLimit_isUsed = 1u; + break; + case 88: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumVoltageLimit) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEMinimumVoltageLimit); + exiFrag->EVSEMinimumVoltageLimit_isUsed = 1u; + break; + case 89: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification) */ + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + exiFrag->EVSENotification = (dinEVSENotificationType) uint32; + exiFrag->EVSENotification_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 90: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEPeakCurrentRipple); + exiFrag->EVSEPeakCurrentRipple_isUsed = 1u; + break; + case 91: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved) */ + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &exiFrag->EVSEPowerLimitAchieved); + exiFrag->EVSEPowerLimitAchieved_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 92: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentCurrent) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEPresentCurrent); + exiFrag->EVSEPresentCurrent_isUsed = 1u; + break; + case 93: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVSEPresentVoltage); + exiFrag->EVSEPresentVoltage_isUsed = 1u; + break; + case 94: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing) */ + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 1, &uint32); + exiFrag->EVSEProcessing = (dinEVSEProcessingType) uint32; + exiFrag->EVSEProcessing_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 95: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus) */ + errn = decode_dinEVSEStatusType(stream, &exiFrag->EVSEStatus); + exiFrag->EVSEStatus_isUsed = 1u; + break; + case 96: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode) */ + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 4, &uint32); + exiFrag->EVSEStatusCode = (dinDC_EVSEStatusCodeType) uint32; + exiFrag->EVSEStatusCode_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 97: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved) */ + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &exiFrag->EVSEVoltageLimitAchieved); + exiFrag->EVSEVoltageLimitAchieved_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 98: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVStatus) */ + errn = decode_dinEVStatusType(stream, &exiFrag->EVStatus); + exiFrag->EVStatus_isUsed = 1u; + break; + case 99: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVTargetCurrent); + exiFrag->EVTargetCurrent_isUsed = 1u; + break; + case 100: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->EVTargetVoltage); + exiFrag->EVTargetVoltage_isUsed = 1u; + break; + case 101: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType) */ + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 4, &uint32); + exiFrag->EnergyTransferType = (dinEVSESupportedEnergyTransferType) uint32; + exiFrag->EnergyTransferType_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 102: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Entry) */ + errn = decode_dinEntryType(stream, &exiFrag->Entry); + exiFrag->Entry_isUsed = 1u; + break; + case 103: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Exponent) */ + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->Exponent.bytesLen); + if (errn == 0) { + errn = (exiFrag->Exponent.bytesLen) <= dinEXIFragment_Exponent_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->Exponent.bytesLen, exiFrag->Exponent.bytes); + } + exiFrag->Exponent_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 104: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode) */ + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + exiFrag->FaultCode = (dinfaultCodeType) uint32; + exiFrag->FaultCode_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 105: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg) */ + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->FaultMsg.charactersLen); + if (errn == 0) { + if (exiFrag->FaultMsg.charactersLen >= 2) { + exiFrag->FaultMsg.charactersLen = (uint16_t)(exiFrag->FaultMsg.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiFrag->FaultMsg.charactersLen, exiFrag->FaultMsg.characters, dinEXIFragment_FaultMsg_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiFrag->FaultMsg_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 106: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService) */ + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &exiFrag->FreeService); + exiFrag->FreeService_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 107: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC) */ + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 7, &(uint32)); + exiFrag->FullSOC = (int8_t)(uint32 + 0); + exiFrag->FullSOC_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 108: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G) */ + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->G.bytesLen); + if (errn == 0) { + errn = (exiFrag->G.bytesLen) <= dinEXIFragment_G_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->G.bytesLen, exiFrag->G.bytes); + } + exiFrag->G_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 109: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge) */ + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->GenChallenge.charactersLen); + if (errn == 0) { + if (exiFrag->GenChallenge.charactersLen >= 2) { + exiFrag->GenChallenge.charactersLen = (uint16_t)(exiFrag->GenChallenge.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiFrag->GenChallenge.charactersLen, exiFrag->GenChallenge.characters, dinEXIFragment_GenChallenge_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiFrag->GenChallenge_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 110: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength) */ + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger64(stream, &exiFrag->HMACOutputLength); + exiFrag->HMACOutputLength_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 111: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header) */ + errn = decode_dinMessageHeaderType(stream, &exiFrag->Header); + exiFrag->Header_isUsed = 1u; + break; + case 112: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}J) */ + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->J.bytesLen); + if (errn == 0) { + errn = (exiFrag->J.bytesLen) <= dinEXIFragment_J_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->J.bytesLen, exiFrag->J.bytes); + } + exiFrag->J_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 113: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo) */ + errn = decode_dinKeyInfoType(stream, &exiFrag->KeyInfo); + exiFrag->KeyInfo_isUsed = 1u; + break; + case 114: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName) */ + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->KeyName.charactersLen); + if (errn == 0) { + if (exiFrag->KeyName.charactersLen >= 2) { + exiFrag->KeyName.charactersLen = (uint16_t)(exiFrag->KeyName.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiFrag->KeyName.charactersLen, exiFrag->KeyName.characters, dinEXIFragment_KeyName_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiFrag->KeyName_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 115: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue) */ + errn = decode_dinKeyValueType(stream, &exiFrag->KeyValue); + exiFrag->KeyValue_isUsed = 1u; + break; + case 116: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs) */ + errn = decode_dinListOfRootCertificateIDsType(stream, &exiFrag->ListOfRootCertificateIDs); + exiFrag->ListOfRootCertificateIDs_isUsed = 1u; + break; + case 117: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest) */ + errn = decode_dinManifestType(stream, &exiFrag->Manifest); + exiFrag->Manifest_isUsed = 1u; + break; + case 118: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID) */ + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->MeterID.charactersLen); + if (errn == 0) { + if (exiFrag->MeterID.charactersLen >= 2) { + exiFrag->MeterID.charactersLen = (uint16_t)(exiFrag->MeterID.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiFrag->MeterID.charactersLen, exiFrag->MeterID.characters, dinEXIFragment_MeterID_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiFrag->MeterID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 119: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo) */ + errn = decode_dinMeterInfoType(stream, &exiFrag->MeterInfo); + exiFrag->MeterInfo_isUsed = 1u; + break; + case 120: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->MeterReading); + exiFrag->MeterReading_isUsed = 1u; + break; + case 121: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus) */ + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &exiFrag->MeterStatus); + exiFrag->MeterStatus_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 122: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq) */ + errn = decode_dinMeteringReceiptReqType(stream, &exiFrag->MeteringReceiptReq); + exiFrag->MeteringReceiptReq_isUsed = 1u; + break; + case 123: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes) */ + errn = decode_dinMeteringReceiptResType(stream, &exiFrag->MeteringReceiptRes); + exiFrag->MeteringReceiptRes_isUsed = 1u; + break; + case 124: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData) */ + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->MgmtData.charactersLen); + if (errn == 0) { + if (exiFrag->MgmtData.charactersLen >= 2) { + exiFrag->MgmtData.charactersLen = (uint16_t)(exiFrag->MgmtData.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiFrag->MgmtData.charactersLen, exiFrag->MgmtData.characters, dinEXIFragment_MgmtData_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiFrag->MgmtData_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 125: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus) */ + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->Modulus.bytesLen); + if (errn == 0) { + errn = (exiFrag->Modulus.bytesLen) <= dinEXIFragment_Modulus_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->Modulus.bytesLen, exiFrag->Modulus.bytes); + } + exiFrag->Modulus_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 126: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier) */ + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 3, &(uint32)); + exiFrag->Multiplier = (int8_t)(uint32 -3); + exiFrag->Multiplier_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 127: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}Notification) */ + errn = decode_dinNotificationType(stream, &exiFrag->Notification); + exiFrag->Notification_isUsed = 1u; + break; + case 128: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay) */ + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &exiFrag->NotificationMaxDelay); + exiFrag->NotificationMaxDelay_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 129: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels) */ + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 8, &(uint32)); + exiFrag->NumEPriceLevels = (uint8_t)(uint32 + 0); + exiFrag->NumEPriceLevels_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 130: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert) */ + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->OEMProvisioningCert.bytesLen); + if (errn == 0) { + errn = (exiFrag->OEMProvisioningCert.bytesLen) <= dinEXIFragment_OEMProvisioningCert_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->OEMProvisioningCert.bytesLen, exiFrag->OEMProvisioningCert.bytes); + } + exiFrag->OEMProvisioningCert_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 131: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object) */ + errn = decode_dinObjectType(stream, &exiFrag->Object); + exiFrag->Object_isUsed = 1u; + break; + case 132: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P) */ + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->P.bytesLen); + if (errn == 0) { + errn = (exiFrag->P.bytesLen) <= dinEXIFragment_P_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->P.bytesLen, exiFrag->P.bytes); + } + exiFrag->P_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 133: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData) */ + errn = decode_dinPGPDataType(stream, &exiFrag->PGPData); + exiFrag->PGPData_isUsed = 1u; + break; + case 134: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID) */ + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->PGPKeyID.bytesLen); + if (errn == 0) { + errn = (exiFrag->PGPKeyID.bytesLen) <= dinEXIFragment_PGPKeyID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->PGPKeyID.bytesLen, exiFrag->PGPKeyID.bytes); + } + exiFrag->PGPKeyID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 135: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket) */ + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->PGPKeyPacket.bytesLen); + if (errn == 0) { + errn = (exiFrag->PGPKeyPacket.bytesLen) <= dinEXIFragment_PGPKeyPacket_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->PGPKeyPacket.bytesLen, exiFrag->PGPKeyPacket.bytes); + } + exiFrag->PGPKeyPacket_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 136: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMax) */ + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &exiFrag->PMax); + exiFrag->PMax_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 137: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxSchedule) */ + errn = decode_dinPMaxScheduleType(stream, &exiFrag->PMaxSchedule); + exiFrag->PMaxSchedule_isUsed = 1u; + break; + case 138: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry) */ + errn = decode_dinPMaxScheduleEntryType(stream, &exiFrag->PMaxScheduleEntry); + exiFrag->PMaxScheduleEntry_isUsed = 1u; + break; + case 139: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID) */ + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &exiFrag->PMaxScheduleID); + exiFrag->PMaxScheduleID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 140: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter) */ + errn = decode_dinParameterType(stream, &exiFrag->Parameter); + exiFrag->Parameter_isUsed = 1u; + break; + case 141: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet) */ + errn = decode_dinParameterSetType(stream, &exiFrag->ParameterSet); + exiFrag->ParameterSet_isUsed = 1u; + break; + case 142: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID) */ + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &exiFrag->ParameterSetID); + exiFrag->ParameterSetID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 143: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq) */ + errn = decode_dinPaymentDetailsReqType(stream, &exiFrag->PaymentDetailsReq); + exiFrag->PaymentDetailsReq_isUsed = 1u; + break; + case 144: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes) */ + errn = decode_dinPaymentDetailsResType(stream, &exiFrag->PaymentDetailsRes); + exiFrag->PaymentDetailsRes_isUsed = 1u; + break; + case 145: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption) */ + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 1, &uint32); + exiFrag->PaymentOption = (dinpaymentOptionType) uint32; + exiFrag->PaymentOption_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 146: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentOptions) */ + errn = decode_dinPaymentOptionsType(stream, &exiFrag->PaymentOptions); + exiFrag->PaymentOptions_isUsed = 1u; + break; + case 147: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PgenCounter) */ + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->PgenCounter.bytesLen); + if (errn == 0) { + errn = (exiFrag->PgenCounter.bytesLen) <= dinEXIFragment_PgenCounter_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->PgenCounter.bytesLen, exiFrag->PgenCounter.bytes); + } + exiFrag->PgenCounter_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 148: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq) */ + errn = decode_dinPowerDeliveryReqType(stream, &exiFrag->PowerDeliveryReq); + exiFrag->PowerDeliveryReq_isUsed = 1u; + break; + case 149: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes) */ + errn = decode_dinPowerDeliveryResType(stream, &exiFrag->PowerDeliveryRes); + exiFrag->PowerDeliveryRes_isUsed = 1u; + break; + case 150: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed) */ + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &exiFrag->PowerSwitchClosed); + exiFrag->PowerSwitchClosed_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 151: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq) */ + errn = decode_dinPreChargeReqType(stream, &exiFrag->PreChargeReq); + exiFrag->PreChargeReq_isUsed = 1u; + break; + case 152: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes) */ + errn = decode_dinPreChargeResType(stream, &exiFrag->PreChargeRes); + exiFrag->PreChargeRes_isUsed = 1u; + break; + case 153: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry) */ + errn = decode_dinProfileEntryType(stream, &exiFrag->ProfileEntry); + exiFrag->ProfileEntry_isUsed = 1u; + break; + case 154: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Q) */ + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->Q.bytesLen); + if (errn == 0) { + errn = (exiFrag->Q.bytesLen) <= dinEXIFragment_Q_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->Q.bytesLen, exiFrag->Q.bytes); + } + exiFrag->Q_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 155: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD) */ + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &exiFrag->RCD); + exiFrag->RCD_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 156: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue) */ + errn = decode_dinRSAKeyValueType(stream, &exiFrag->RSAKeyValue); + exiFrag->RSAKeyValue_isUsed = 1u; + break; + case 157: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState) */ + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &exiFrag->ReadyToChargeState); + exiFrag->ReadyToChargeState_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 158: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired) */ + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &exiFrag->ReceiptRequired); + exiFrag->ReceiptRequired_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 159: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference) */ + errn = decode_dinReferenceType(stream, &exiFrag->Reference); + exiFrag->Reference_isUsed = 1u; + break; + case 160: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval) */ + errn = decode_dinRelativeTimeIntervalType(stream, &exiFrag->RelativeTimeInterval); + exiFrag->RelativeTimeInterval_isUsed = 1u; + break; + case 161: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->RemainingTimeToBulkSoC); + exiFrag->RemainingTimeToBulkSoC_isUsed = 1u; + break; + case 162: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToFullSoC) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->RemainingTimeToFullSoC); + exiFrag->RemainingTimeToFullSoC_isUsed = 1u; + break; + case 163: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) */ + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 5, &uint32); + exiFrag->ResponseCode = (dinresponseCodeType) uint32; + exiFrag->ResponseCode_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 164: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod) */ + errn = decode_dinRetrievalMethodType(stream, &exiFrag->RetrievalMethod); + exiFrag->RetrievalMethod_isUsed = 1u; + break; + case 165: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RetryCounter) */ + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &exiFrag->RetryCounter); + exiFrag->RetryCounter_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 166: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID) */ + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->RootCertificateID.charactersLen); + if (errn == 0) { + if (exiFrag->RootCertificateID.charactersLen >= 2) { + exiFrag->RootCertificateID.charactersLen = (uint16_t)(exiFrag->RootCertificateID.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiFrag->RootCertificateID.charactersLen, exiFrag->RootCertificateID.characters, dinEXIFragment_RootCertificateID_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiFrag->RootCertificateID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 167: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList) */ + errn = decode_dinSAScheduleListType(stream, &exiFrag->SAScheduleList); + exiFrag->SAScheduleList_isUsed = 1u; + break; + case 168: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple) */ + errn = decode_dinSAScheduleTupleType(stream, &exiFrag->SAScheduleTuple); + exiFrag->SAScheduleTuple_isUsed = 1u; + break; + case 169: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID) */ + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &exiFrag->SAScheduleTupleID); + exiFrag->SAScheduleTupleID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 170: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID) */ + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &exiFrag->SAScheduleTupleID); + exiFrag->SAScheduleTupleID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 171: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules) */ + errn = decode_dinSASchedulesType(stream, &exiFrag->SASchedules); + exiFrag->SASchedules_isUsed = 1u; + break; + case 172: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData) */ + errn = decode_dinSPKIDataType(stream, &exiFrag->SPKIData); + exiFrag->SPKIData_isUsed = 1u; + break; + case 173: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp) */ + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->SPKISexp.bytesLen); + if (errn == 0) { + errn = (exiFrag->SPKISexp.bytesLen) <= dinEXIFragment_SPKISexp_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->SPKISexp.bytesLen, exiFrag->SPKISexp.bytes); + } + exiFrag->SPKISexp_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 174: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariff) */ + errn = decode_dinSalesTariffType(stream, &exiFrag->SalesTariff); + exiFrag->SalesTariff_isUsed = 1u; + break; + case 175: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription) */ + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->SalesTariffDescription.charactersLen); + if (errn == 0) { + if (exiFrag->SalesTariffDescription.charactersLen >= 2) { + exiFrag->SalesTariffDescription.charactersLen = (uint16_t)(exiFrag->SalesTariffDescription.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiFrag->SalesTariffDescription.charactersLen, exiFrag->SalesTariffDescription.characters, dinEXIFragment_SalesTariffDescription_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiFrag->SalesTariffDescription_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 176: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry) */ + errn = decode_dinSalesTariffEntryType(stream, &exiFrag->SalesTariffEntry); + exiFrag->SalesTariffEntry_isUsed = 1u; + break; + case 177: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID) */ + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &exiFrag->SalesTariffID); + exiFrag->SalesTariffID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 178: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed) */ + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->Seed.bytesLen); + if (errn == 0) { + errn = (exiFrag->Seed.bytesLen) <= dinEXIFragment_Seed_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->Seed.bytesLen, exiFrag->Seed.bytes); + } + exiFrag->Seed_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 179: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption) */ + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 1, &uint32); + exiFrag->SelectedPaymentOption = (dinpaymentOptionType) uint32; + exiFrag->SelectedPaymentOption_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 180: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService) */ + errn = decode_dinSelectedServiceType(stream, &exiFrag->SelectedService); + exiFrag->SelectedService_isUsed = 1u; + break; + case 181: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedServiceList) */ + errn = decode_dinSelectedServiceListType(stream, &exiFrag->SelectedServiceList); + exiFrag->SelectedServiceList_isUsed = 1u; + break; + case 182: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service) */ + errn = decode_dinServiceType(stream, &exiFrag->Service); + exiFrag->Service_isUsed = 1u; + break; + case 183: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory) */ + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + exiFrag->ServiceCategory = (dinserviceCategoryType) uint32; + exiFrag->ServiceCategory_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 184: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory) */ + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + exiFrag->ServiceCategory = (dinserviceCategoryType) uint32; + exiFrag->ServiceCategory_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 185: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge) */ + errn = decode_dinServiceChargeType(stream, &exiFrag->ServiceCharge); + exiFrag->ServiceCharge_isUsed = 1u; + break; + case 186: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq) */ + errn = decode_dinServiceDetailReqType(stream, &exiFrag->ServiceDetailReq); + exiFrag->ServiceDetailReq_isUsed = 1u; + break; + case 187: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes) */ + errn = decode_dinServiceDetailResType(stream, &exiFrag->ServiceDetailRes); + exiFrag->ServiceDetailRes_isUsed = 1u; + break; + case 188: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq) */ + errn = decode_dinServiceDiscoveryReqType(stream, &exiFrag->ServiceDiscoveryReq); + exiFrag->ServiceDiscoveryReq_isUsed = 1u; + break; + case 189: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes) */ + errn = decode_dinServiceDiscoveryResType(stream, &exiFrag->ServiceDiscoveryRes); + exiFrag->ServiceDiscoveryRes_isUsed = 1u; + break; + case 190: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID) */ + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->ServiceID); + exiFrag->ServiceID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 191: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID) */ + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->ServiceID); + exiFrag->ServiceID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 192: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList) */ + errn = decode_dinServiceTagListType(stream, &exiFrag->ServiceList); + exiFrag->ServiceList_isUsed = 1u; + break; + case 193: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName) */ + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->ServiceName.charactersLen); + if (errn == 0) { + if (exiFrag->ServiceName.charactersLen >= 2) { + exiFrag->ServiceName.charactersLen = (uint16_t)(exiFrag->ServiceName.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiFrag->ServiceName.charactersLen, exiFrag->ServiceName.characters, dinEXIFragment_ServiceName_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiFrag->ServiceName_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 194: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceParameterList) */ + errn = decode_dinServiceParameterListType(stream, &exiFrag->ServiceParameterList); + exiFrag->ServiceParameterList_isUsed = 1u; + break; + case 195: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq) */ + errn = decode_dinServicePaymentSelectionReqType(stream, &exiFrag->ServicePaymentSelectionReq); + exiFrag->ServicePaymentSelectionReq_isUsed = 1u; + break; + case 196: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes) */ + errn = decode_dinServicePaymentSelectionResType(stream, &exiFrag->ServicePaymentSelectionRes); + exiFrag->ServicePaymentSelectionRes_isUsed = 1u; + break; + case 197: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope) */ + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->ServiceScope.charactersLen); + if (errn == 0) { + if (exiFrag->ServiceScope.charactersLen >= 2) { + exiFrag->ServiceScope.charactersLen = (uint16_t)(exiFrag->ServiceScope.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiFrag->ServiceScope.charactersLen, exiFrag->ServiceScope.characters, dinEXIFragment_ServiceScope_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiFrag->ServiceScope_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 198: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope) */ + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->ServiceScope.charactersLen); + if (errn == 0) { + if (exiFrag->ServiceScope.charactersLen >= 2) { + exiFrag->ServiceScope.charactersLen = (uint16_t)(exiFrag->ServiceScope.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiFrag->ServiceScope.charactersLen, exiFrag->ServiceScope.characters, dinEXIFragment_ServiceScope_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiFrag->ServiceScope_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 199: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag) */ + errn = decode_dinServiceTagType(stream, &exiFrag->ServiceTag); + exiFrag->ServiceTag_isUsed = 1u; + break; + case 200: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID) */ + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->SessionID.bytesLen); + if (errn == 0) { + errn = (exiFrag->SessionID.bytesLen) <= dinEXIFragment_SessionID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->SessionID.bytesLen, exiFrag->SessionID.bytes); + } + exiFrag->SessionID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 201: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID) */ + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->SessionID.bytesLen); + if (errn == 0) { + errn = (exiFrag->SessionID.bytesLen) <= dinEXIFragment_SessionID_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->SessionID.bytesLen, exiFrag->SessionID.bytes); + } + exiFrag->SessionID_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 202: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq) */ + errn = decode_dinSessionSetupReqType(stream, &exiFrag->SessionSetupReq); + exiFrag->SessionSetupReq_isUsed = 1u; + break; + case 203: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes) */ + errn = decode_dinSessionSetupResType(stream, &exiFrag->SessionSetupRes); + exiFrag->SessionSetupRes_isUsed = 1u; + break; + case 204: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq) */ + errn = decode_dinSessionStopType(stream, &exiFrag->SessionStopReq); + exiFrag->SessionStopReq_isUsed = 1u; + break; + case 205: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes) */ + errn = decode_dinSessionStopResType(stream, &exiFrag->SessionStopRes); + exiFrag->SessionStopRes_isUsed = 1u; + break; + case 206: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading) */ + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->SigMeterReading.bytesLen); + if (errn == 0) { + errn = (exiFrag->SigMeterReading.bytesLen) <= dinEXIFragment_SigMeterReading_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->SigMeterReading.bytesLen, exiFrag->SigMeterReading.bytes); + } + exiFrag->SigMeterReading_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 207: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature) */ + errn = decode_dinSignatureType(stream, &exiFrag->Signature); + exiFrag->Signature_isUsed = 1u; + break; + case 208: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod) */ + errn = decode_dinSignatureMethodType(stream, &exiFrag->SignatureMethod); + exiFrag->SignatureMethod_isUsed = 1u; + break; + case 209: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperties) */ + errn = decode_dinSignaturePropertiesType(stream, &exiFrag->SignatureProperties); + exiFrag->SignatureProperties_isUsed = 1u; + break; + case 210: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty) */ + errn = decode_dinSignaturePropertyType(stream, &exiFrag->SignatureProperty); + exiFrag->SignatureProperty_isUsed = 1u; + break; + case 211: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue) */ + errn = decode_dinSignatureValueType(stream, &exiFrag->SignatureValue); + exiFrag->SignatureValue_isUsed = 1u; + break; + case 212: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo) */ + errn = decode_dinSignedInfoType(stream, &exiFrag->SignedInfo); + exiFrag->SignedInfo_isUsed = 1u; + break; + case 213: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SubCertificates) */ + errn = decode_dinSubCertificatesType(stream, &exiFrag->SubCertificates); + exiFrag->SubCertificates_isUsed = 1u; + break; + case 214: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter) */ + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger64(stream, &exiFrag->TMeter); + exiFrag->TMeter_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 215: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval) */ + errn = decode_dinIntervalType(stream, &exiFrag->TimeInterval); + exiFrag->TimeInterval_isUsed = 1u; + break; + case 216: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform) */ + errn = decode_dinTransformType(stream, &exiFrag->Transform); + exiFrag->Transform_isUsed = 1u; + break; + case 217: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms) */ + errn = decode_dinTransformsType(stream, &exiFrag->Transforms); + exiFrag->Transforms_isUsed = 1u; + break; + case 218: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit) */ + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 4, &uint32); + exiFrag->Unit = (dinunitSymbolType) uint32; + exiFrag->Unit_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 219: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}V2G_Message) */ + errn = decode_dinAnonType_V2G_Message(stream, &exiFrag->V2G_Message); + exiFrag->V2G_Message_isUsed = 1u; + break; + case 220: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value) */ + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &exiFrag->Value); + exiFrag->Value_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 221: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq) */ + errn = decode_dinWeldingDetectionReqType(stream, &exiFrag->WeldingDetectionReq); + exiFrag->WeldingDetectionReq_isUsed = 1u; + break; + case 222: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes) */ + errn = decode_dinWeldingDetectionResType(stream, &exiFrag->WeldingDetectionRes); + exiFrag->WeldingDetectionRes_isUsed = 1u; + break; + case 223: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL) */ + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->X509CRL.bytesLen); + if (errn == 0) { + errn = (exiFrag->X509CRL.bytesLen) <= dinEXIFragment_X509CRL_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->X509CRL.bytesLen, exiFrag->X509CRL.bytes); + } + exiFrag->X509CRL_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 224: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate) */ + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->X509Certificate.bytesLen); + if (errn == 0) { + errn = (exiFrag->X509Certificate.bytesLen) <= dinEXIFragment_X509Certificate_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->X509Certificate.bytesLen, exiFrag->X509Certificate.bytes); + } + exiFrag->X509Certificate_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 225: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data) */ + errn = decode_dinX509DataType(stream, &exiFrag->X509Data); + exiFrag->X509Data_isUsed = 1u; + break; + case 226: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName) */ + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->X509IssuerName.charactersLen); + if (errn == 0) { + if (exiFrag->X509IssuerName.charactersLen >= 2) { + exiFrag->X509IssuerName.charactersLen = (uint16_t)(exiFrag->X509IssuerName.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiFrag->X509IssuerName.charactersLen, exiFrag->X509IssuerName.characters, dinEXIFragment_X509IssuerName_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiFrag->X509IssuerName_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 227: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial) */ + errn = decode_dinX509IssuerSerialType(stream, &exiFrag->X509IssuerSerial); + exiFrag->X509IssuerSerial_isUsed = 1u; + break; + case 228: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI) */ + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->X509SKI.bytesLen); + if (errn == 0) { + errn = (exiFrag->X509SKI.bytesLen) <= dinEXIFragment_X509SKI_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->X509SKI.bytesLen, exiFrag->X509SKI.bytes); + } + exiFrag->X509SKI_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 229: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SerialNumber) */ + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger64(stream, &exiFrag->X509SerialNumber); + exiFrag->X509SerialNumber_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 230: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName) */ + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->X509SubjectName.charactersLen); + if (errn == 0) { + if (exiFrag->X509SubjectName.charactersLen >= 2) { + exiFrag->X509SubjectName.charactersLen = (uint16_t)(exiFrag->X509SubjectName.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiFrag->X509SubjectName.charactersLen, exiFrag->X509SubjectName.characters, dinEXIFragment_X509SubjectName_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiFrag->X509SubjectName_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 231: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath) */ + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->XPath.charactersLen); + if (errn == 0) { + if (exiFrag->XPath.charactersLen >= 2) { + exiFrag->XPath.charactersLen = (uint16_t)(exiFrag->XPath.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiFrag->XPath.charactersLen, exiFrag->XPath.characters, dinEXIFragment_XPath_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiFrag->XPath_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 232: + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y) */ + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->Y.bytesLen); + if (errn == 0) { + errn = (exiFrag->Y.bytesLen) <= dinEXIFragment_Y_BYTES_SIZE ? 0 : EXI_ERROR_OUT_OF_BYTE_BUFFER; + } + if (errn == 0) { + errn = decodeBytes(stream, exiFrag->Y.bytesLen, exiFrag->Y.bytes); + } + exiFrag->Y_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 233: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amount) */ + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &exiFrag->amount); + exiFrag->amount_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 234: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier) */ + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 3, &(uint32)); + exiFrag->amountMultiplier = (int8_t)(uint32 -3); + exiFrag->amountMultiplier_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 235: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue) */ + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeBoolean(stream, &exiFrag->boolValue); + exiFrag->boolValue_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 236: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue) */ + /* First(xsi:type)StartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 8, &(uint32)); + exiFrag->byteValue = (int8_t)(uint32 -128); + exiFrag->byteValue_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 237: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind) */ + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeNBitUnsignedInteger(stream, 2, &uint32); + exiFrag->costKind = (dincostKindType) uint32; + exiFrag->costKind_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 238: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}duration) */ + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &exiFrag->duration); + exiFrag->duration_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 239: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue) */ + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger32(stream, &exiFrag->intValue); + exiFrag->intValue_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 240: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue) */ + errn = decode_dinPhysicalValueType(stream, &exiFrag->physicalValue); + exiFrag->physicalValue_isUsed = 1u; + break; + case 241: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue) */ + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeInteger16(stream, &exiFrag->shortValue); + exiFrag->shortValue_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 242: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start) */ + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &exiFrag->start); + exiFrag->start_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 243: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue) */ + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger32(stream, &exiFrag->startValue); + exiFrag->startValue_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + case 244: + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue) */ + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = decodeNBitUnsignedInteger(stream, 1, &eventCode); + if(errn == 0) { + if(eventCode == 0) { + errn = decodeUnsignedInteger16(stream, &exiFrag->stringValue.charactersLen); + if (errn == 0) { + if (exiFrag->stringValue.charactersLen >= 2) { + exiFrag->stringValue.charactersLen = (uint16_t)(exiFrag->stringValue.charactersLen - 2); /* string table miss */ + errn = decodeCharacters(stream, exiFrag->stringValue.charactersLen, exiFrag->stringValue.characters, dinEXIFragment_stringValue_CHARACTERS_SIZE); + } else { + /* string table hit */ + errn = EXI_ERROR_STRINGVALUES_NOT_SUPPORTED; + } + } + exiFrag->stringValue_isUsed = 1u; + } else { + /* Second level event (e.g., xsi:type, xsi:nil, ...) */ + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + } + } + break; + default: + errn = EXI_ERROR_UNEXPECTED_EVENT_LEVEL1; + break; + } + } + if(errn == 0) { + /* EndDocument */ + errn = decodeNBitUnsignedInteger(stream, 8, &eventCode); + if (eventCode != 246) { + errn = EXI_UNSUPPORTED_FRAGMENT_ELEMENT; + } + } + + } + + (void)exiFrag; /* avoid unused warning */ + + return errn; +} +#endif /* DEPLOY_DIN_CODEC_FRAGMENT */ + + +#endif /* DEPLOY_DIN_CODEC */ + +#endif + diff --git a/src/src/exi/dinEXIDatatypesDecoder.h b/src/src/exi/dinEXIDatatypesDecoder.h new file mode 100644 index 0000000..d1cb133 --- /dev/null +++ b/src/src/exi/dinEXIDatatypesDecoder.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file EXIDatatypesDecoder.h + * \brief Decoder for datatype definitions + * + */ + +#ifndef EXI_din_DATATYPES_DECODER_H +#define EXI_din_DATATYPES_DECODER_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "dinEXIDatatypes.h" + +#if DEPLOY_DIN_CODEC == SUPPORT_YES + +#include + +#include "EXITypes.h" + +int decode_dinExiDocument(bitstream_t* stream, struct dinEXIDocument* exiDoc); + +#if DEPLOY_DIN_CODEC_FRAGMENT == SUPPORT_YES +int decode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag); +#endif /* DEPLOY_DIN_CODEC_FRAGMENT */ + +#endif /* DEPLOY_DIN_CODEC */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/src/exi/dinEXIDatatypesEncoder.c b/src/src/exi/dinEXIDatatypesEncoder.c new file mode 100644 index 0000000..08a2cca --- /dev/null +++ b/src/src/exi/dinEXIDatatypesEncoder.c @@ -0,0 +1,12826 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + + +#include "dinEXIDatatypesEncoder.h" + +#include "EncoderChannel.h" +#include "EXIHeaderEncoder.h" + +#include "dinEXIDatatypes.h" +#include "ErrorCodes.h" + +#ifndef EXI_din_DATATYPES_ENCODER_C +#define EXI_din_DATATYPES_ENCODER_C + +#if DEPLOY_DIN_CODEC == SUPPORT_YES + +static int errn; + +/* Forward Declarations */ +static int encode_dinMeteringReceiptReqType(bitstream_t* stream, struct dinMeteringReceiptReqType* dinMeteringReceiptReqType); +static int encode_dinBodyType(bitstream_t* stream, struct dinBodyType* dinBodyType); +static int encode_dinSessionSetupReqType(bitstream_t* stream, struct dinSessionSetupReqType* dinSessionSetupReqType); +static int encode_dinPowerDeliveryResType(bitstream_t* stream, struct dinPowerDeliveryResType* dinPowerDeliveryResType); +static int encode_dinServiceDetailResType(bitstream_t* stream, struct dinServiceDetailResType* dinServiceDetailResType); +static int encode_dinWeldingDetectionResType(bitstream_t* stream, struct dinWeldingDetectionResType* dinWeldingDetectionResType); +static int encode_dinContractAuthenticationResType(bitstream_t* stream, struct dinContractAuthenticationResType* dinContractAuthenticationResType); +static int encode_dinCanonicalizationMethodType(bitstream_t* stream, struct dinCanonicalizationMethodType* dinCanonicalizationMethodType); +static int encode_dinSPKIDataType(bitstream_t* stream, struct dinSPKIDataType* dinSPKIDataType); +static int encode_dinListOfRootCertificateIDsType(bitstream_t* stream, struct dinListOfRootCertificateIDsType* dinListOfRootCertificateIDsType); +static int encode_dinSelectedServiceListType(bitstream_t* stream, struct dinSelectedServiceListType* dinSelectedServiceListType); +static int encode_dinCurrentDemandResType(bitstream_t* stream, struct dinCurrentDemandResType* dinCurrentDemandResType); +static int encode_dinTransformType(bitstream_t* stream, struct dinTransformType* dinTransformType); +static int encode_dinAC_EVChargeParameterType(bitstream_t* stream, struct dinAC_EVChargeParameterType* dinAC_EVChargeParameterType); +static int encode_dinX509DataType(bitstream_t* stream, struct dinX509DataType* dinX509DataType); +static int encode_dinChargingStatusResType(bitstream_t* stream, struct dinChargingStatusResType* dinChargingStatusResType); +static int encode_dinWeldingDetectionReqType(bitstream_t* stream, struct dinWeldingDetectionReqType* dinWeldingDetectionReqType); +static int encode_dinSignaturePropertiesType(bitstream_t* stream, struct dinSignaturePropertiesType* dinSignaturePropertiesType); +static int encode_dinContractAuthenticationReqType(bitstream_t* stream, struct dinContractAuthenticationReqType* dinContractAuthenticationReqType); +static int encode_dinDC_EVPowerDeliveryParameterType(bitstream_t* stream, struct dinDC_EVPowerDeliveryParameterType* dinDC_EVPowerDeliveryParameterType); +static int encode_dinEVSEChargeParameterType(bitstream_t* stream, struct dinEVSEChargeParameterType* dinEVSEChargeParameterType); +static int encode_dinCableCheckReqType(bitstream_t* stream, struct dinCableCheckReqType* dinCableCheckReqType); +static int encode_dinDC_EVChargeParameterType(bitstream_t* stream, struct dinDC_EVChargeParameterType* dinDC_EVChargeParameterType); +static int encode_dinSAScheduleListType(bitstream_t* stream, struct dinSAScheduleListType* dinSAScheduleListType); +static int encode_dinPMaxScheduleType(bitstream_t* stream, struct dinPMaxScheduleType* dinPMaxScheduleType); +static int encode_dinServicePaymentSelectionReqType(bitstream_t* stream, struct dinServicePaymentSelectionReqType* dinServicePaymentSelectionReqType); +static int encode_dinRelativeTimeIntervalType(bitstream_t* stream, struct dinRelativeTimeIntervalType* dinRelativeTimeIntervalType); +static int encode_dinEVStatusType(bitstream_t* stream, struct dinEVStatusType* dinEVStatusType); +static int encode_dinPreChargeResType(bitstream_t* stream, struct dinPreChargeResType* dinPreChargeResType); +static int encode_dinDC_EVSEChargeParameterType(bitstream_t* stream, struct dinDC_EVSEChargeParameterType* dinDC_EVSEChargeParameterType); +static int encode_dinPaymentDetailsResType(bitstream_t* stream, struct dinPaymentDetailsResType* dinPaymentDetailsResType); +static int encode_dinDSAKeyValueType(bitstream_t* stream, struct dinDSAKeyValueType* dinDSAKeyValueType); +static int encode_dinSASchedulesType(bitstream_t* stream, struct dinSASchedulesType* dinSASchedulesType); +static int encode_dinCertificateUpdateResType(bitstream_t* stream, struct dinCertificateUpdateResType* dinCertificateUpdateResType); +static int encode_dinEVChargeParameterType(bitstream_t* stream, struct dinEVChargeParameterType* dinEVChargeParameterType); +static int encode_dinMessageHeaderType(bitstream_t* stream, struct dinMessageHeaderType* dinMessageHeaderType); +static int encode_dinBodyBaseType(bitstream_t* stream, struct dinBodyBaseType* dinBodyBaseType); +static int encode_dinKeyValueType(bitstream_t* stream, struct dinKeyValueType* dinKeyValueType); +static int encode_dinIntervalType(bitstream_t* stream, struct dinIntervalType* dinIntervalType); +static int encode_dinChargeParameterDiscoveryResType(bitstream_t* stream, struct dinChargeParameterDiscoveryResType* dinChargeParameterDiscoveryResType); +static int encode_dinPowerDeliveryReqType(bitstream_t* stream, struct dinPowerDeliveryReqType* dinPowerDeliveryReqType); +static int encode_dinCertificateChainType(bitstream_t* stream, struct dinCertificateChainType* dinCertificateChainType); +static int encode_dinTransformsType(bitstream_t* stream, struct dinTransformsType* dinTransformsType); +static int encode_dinEntryType(bitstream_t* stream, struct dinEntryType* dinEntryType); +static int encode_dinSessionStopType(bitstream_t* stream, struct dinSessionStopType* dinSessionStopType); +static int encode_dinServiceDetailReqType(bitstream_t* stream, struct dinServiceDetailReqType* dinServiceDetailReqType); +static int encode_dinDigestMethodType(bitstream_t* stream, struct dinDigestMethodType* dinDigestMethodType); +static int encode_dinParameterType(bitstream_t* stream, struct dinParameterType* dinParameterType); +static int encode_dinChargingStatusReqType(bitstream_t* stream, struct dinChargingStatusReqType* dinChargingStatusReqType); +static int encode_dinSignatureMethodType(bitstream_t* stream, struct dinSignatureMethodType* dinSignatureMethodType); +static int encode_dinCertificateInstallationReqType(bitstream_t* stream, struct dinCertificateInstallationReqType* dinCertificateInstallationReqType); +static int encode_dinSalesTariffEntryType(bitstream_t* stream, struct dinSalesTariffEntryType* dinSalesTariffEntryType); +static int encode_dinServiceDiscoveryResType(bitstream_t* stream, struct dinServiceDiscoveryResType* dinServiceDiscoveryResType); +static int encode_dinParameterSetType(bitstream_t* stream, struct dinParameterSetType* dinParameterSetType); +static int encode_dinCurrentDemandReqType(bitstream_t* stream, struct dinCurrentDemandReqType* dinCurrentDemandReqType); +static int encode_dinPreChargeReqType(bitstream_t* stream, struct dinPreChargeReqType* dinPreChargeReqType); +static int encode_dinSignatureType(bitstream_t* stream, struct dinSignatureType* dinSignatureType); +static int encode_dinReferenceType(bitstream_t* stream, struct dinReferenceType* dinReferenceType); +static int encode_dinProfileEntryType(bitstream_t* stream, struct dinProfileEntryType* dinProfileEntryType); +static int encode_dinAnonType_V2G_Message(bitstream_t* stream, struct dinAnonType_V2G_Message* dinAnonType_V2G_Message); +static int encode_dinChargeParameterDiscoveryReqType(bitstream_t* stream, struct dinChargeParameterDiscoveryReqType* dinChargeParameterDiscoveryReqType); +static int encode_dinConsumptionCostType(bitstream_t* stream, struct dinConsumptionCostType* dinConsumptionCostType); +static int encode_dinRSAKeyValueType(bitstream_t* stream, struct dinRSAKeyValueType* dinRSAKeyValueType); +static int encode_dinServiceType(bitstream_t* stream, struct dinServiceType* dinServiceType); +static int encode_dinServiceTagListType(bitstream_t* stream, struct dinServiceTagListType* dinServiceTagListType); +static int encode_dinEVSEStatusType(bitstream_t* stream, struct dinEVSEStatusType* dinEVSEStatusType); +static int encode_dinSessionSetupResType(bitstream_t* stream, struct dinSessionSetupResType* dinSessionSetupResType); +static int encode_dinEVPowerDeliveryParameterType(bitstream_t* stream, struct dinEVPowerDeliveryParameterType* dinEVPowerDeliveryParameterType); +static int encode_dinX509IssuerSerialType(bitstream_t* stream, struct dinX509IssuerSerialType* dinX509IssuerSerialType); +static int encode_dinSelectedServiceType(bitstream_t* stream, struct dinSelectedServiceType* dinSelectedServiceType); +static int encode_dinMeteringReceiptResType(bitstream_t* stream, struct dinMeteringReceiptResType* dinMeteringReceiptResType); +static int encode_dinDC_EVStatusType(bitstream_t* stream, struct dinDC_EVStatusType* dinDC_EVStatusType); +static int encode_dinPhysicalValueType(bitstream_t* stream, struct dinPhysicalValueType* dinPhysicalValueType); +static int encode_dinManifestType(bitstream_t* stream, struct dinManifestType* dinManifestType); +static int encode_dinPMaxScheduleEntryType(bitstream_t* stream, struct dinPMaxScheduleEntryType* dinPMaxScheduleEntryType); +static int encode_dinServiceParameterListType(bitstream_t* stream, struct dinServiceParameterListType* dinServiceParameterListType); +static int encode_dinSignatureValueType(bitstream_t* stream, struct dinSignatureValueType* dinSignatureValueType); +static int encode_dinPaymentOptionsType(bitstream_t* stream, struct dinPaymentOptionsType* dinPaymentOptionsType); +static int encode_dinServiceTagType(bitstream_t* stream, struct dinServiceTagType* dinServiceTagType); +static int encode_dinAC_EVSEStatusType(bitstream_t* stream, struct dinAC_EVSEStatusType* dinAC_EVSEStatusType); +static int encode_dinCertificateUpdateReqType(bitstream_t* stream, struct dinCertificateUpdateReqType* dinCertificateUpdateReqType); +static int encode_dinServicePaymentSelectionResType(bitstream_t* stream, struct dinServicePaymentSelectionResType* dinServicePaymentSelectionResType); +static int encode_dinSAScheduleTupleType(bitstream_t* stream, struct dinSAScheduleTupleType* dinSAScheduleTupleType); +static int encode_dinChargingProfileType(bitstream_t* stream, struct dinChargingProfileType* dinChargingProfileType); +static int encode_dinServiceDiscoveryReqType(bitstream_t* stream, struct dinServiceDiscoveryReqType* dinServiceDiscoveryReqType); +static int encode_dinAC_EVSEChargeParameterType(bitstream_t* stream, struct dinAC_EVSEChargeParameterType* dinAC_EVSEChargeParameterType); +static int encode_dinKeyInfoType(bitstream_t* stream, struct dinKeyInfoType* dinKeyInfoType); +static int encode_dinPaymentDetailsReqType(bitstream_t* stream, struct dinPaymentDetailsReqType* dinPaymentDetailsReqType); +static int encode_dinCableCheckResType(bitstream_t* stream, struct dinCableCheckResType* dinCableCheckResType); +static int encode_dinObjectType(bitstream_t* stream, struct dinObjectType* dinObjectType); +static int encode_dinSessionStopResType(bitstream_t* stream, struct dinSessionStopResType* dinSessionStopResType); +static int encode_dinSignedInfoType(bitstream_t* stream, struct dinSignedInfoType* dinSignedInfoType); +static int encode_dinSalesTariffType(bitstream_t* stream, struct dinSalesTariffType* dinSalesTariffType); +static int encode_dinCostType(bitstream_t* stream, struct dinCostType* dinCostType); +static int encode_dinServiceChargeType(bitstream_t* stream, struct dinServiceChargeType* dinServiceChargeType); +static int encode_dinDC_EVSEStatusType(bitstream_t* stream, struct dinDC_EVSEStatusType* dinDC_EVSEStatusType); +static int encode_dinRetrievalMethodType(bitstream_t* stream, struct dinRetrievalMethodType* dinRetrievalMethodType); +static int encode_dinNotificationType(bitstream_t* stream, struct dinNotificationType* dinNotificationType); +static int encode_dinPGPDataType(bitstream_t* stream, struct dinPGPDataType* dinPGPDataType); +static int encode_dinCertificateInstallationResType(bitstream_t* stream, struct dinCertificateInstallationResType* dinCertificateInstallationResType); +static int encode_dinSignaturePropertyType(bitstream_t* stream, struct dinSignaturePropertyType* dinSignaturePropertyType); +static int encode_dinMeterInfoType(bitstream_t* stream, struct dinMeterInfoType* dinMeterInfoType); +static int encode_dinSubCertificatesType(bitstream_t* stream, struct dinSubCertificatesType* dinSubCertificatesType); + + + /* Complex type name='urn:iso:15118:2:2010:MsgBody,MeteringReceiptReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":SessionID,"urn:iso:15118:2:2010:MsgBody":SAScheduleTupleID{0-1},"urn:iso:15118:2:2010:MsgBody":MeterInfo)', derivedBy='EXTENSION'. */ +static int encode_dinMeteringReceiptReqType(bitstream_t* stream, struct dinMeteringReceiptReqType* dinMeteringReceiptReqType) { + int grammarID = 0; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 0: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + if ( dinMeteringReceiptReqType->Id_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinMeteringReceiptReqType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinMeteringReceiptReqType->Id.characters, dinMeteringReceiptReqType->Id.charactersLen); + } + } + grammarID = 1; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinMeteringReceiptReqType->SessionID.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinMeteringReceiptReqType->SessionID.bytes, dinMeteringReceiptReqType->SessionID.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 2; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 1: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinMeteringReceiptReqType->SessionID.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinMeteringReceiptReqType->SessionID.bytes, dinMeteringReceiptReqType->SessionID.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 2; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 2: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo)] */ + if ( dinMeteringReceiptReqType->SAScheduleTupleID_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinMeteringReceiptReqType->SAScheduleTupleID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 3; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinMeterInfoType(stream, &dinMeteringReceiptReqType->MeterInfo ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 3: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinMeterInfoType(stream, &dinMeteringReceiptReqType->MeterInfo ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDef,BodyType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDef":BodyElement{0-1})', derivedBy='RESTRICTION'. */ +static int encode_dinBodyType(bitstream_t* stream, struct dinBodyType* dinBodyType) { + int grammarID = 6; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 6: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), END_ELEMENT] */ + if ( dinBodyType->BodyElement_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 0); + if(errn == 0) { + errn = encode_dinBodyBaseType(stream, &dinBodyType->BodyElement ); + } + grammarID = 4; + } else if ( dinBodyType->CableCheckReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 1); + if(errn == 0) { + errn = encode_dinCableCheckReqType(stream, &dinBodyType->CableCheckReq ); + } + grammarID = 4; + } else if ( dinBodyType->CableCheckRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 2); + if(errn == 0) { + errn = encode_dinCableCheckResType(stream, &dinBodyType->CableCheckRes ); + } + grammarID = 4; + } else if ( dinBodyType->CertificateInstallationReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 3); + if(errn == 0) { + errn = encode_dinCertificateInstallationReqType(stream, &dinBodyType->CertificateInstallationReq ); + } + grammarID = 4; + } else if ( dinBodyType->CertificateInstallationRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 4); + if(errn == 0) { + errn = encode_dinCertificateInstallationResType(stream, &dinBodyType->CertificateInstallationRes ); + } + grammarID = 4; + } else if ( dinBodyType->CertificateUpdateReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 5); + if(errn == 0) { + errn = encode_dinCertificateUpdateReqType(stream, &dinBodyType->CertificateUpdateReq ); + } + grammarID = 4; + } else if ( dinBodyType->CertificateUpdateRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 6); + if(errn == 0) { + errn = encode_dinCertificateUpdateResType(stream, &dinBodyType->CertificateUpdateRes ); + } + grammarID = 4; + } else if ( dinBodyType->ChargeParameterDiscoveryReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 7); + if(errn == 0) { + errn = encode_dinChargeParameterDiscoveryReqType(stream, &dinBodyType->ChargeParameterDiscoveryReq ); + } + grammarID = 4; + } else if ( dinBodyType->ChargeParameterDiscoveryRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 8); + if(errn == 0) { + errn = encode_dinChargeParameterDiscoveryResType(stream, &dinBodyType->ChargeParameterDiscoveryRes ); + } + grammarID = 4; + } else if ( dinBodyType->ChargingStatusReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 9); + if(errn == 0) { + errn = encode_dinChargingStatusReqType(stream, &dinBodyType->ChargingStatusReq ); + } + grammarID = 4; + } else if ( dinBodyType->ChargingStatusRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 10); + if(errn == 0) { + errn = encode_dinChargingStatusResType(stream, &dinBodyType->ChargingStatusRes ); + } + grammarID = 4; + } else if ( dinBodyType->ContractAuthenticationReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 11); + if(errn == 0) { + errn = encode_dinContractAuthenticationReqType(stream, &dinBodyType->ContractAuthenticationReq ); + } + grammarID = 4; + } else if ( dinBodyType->ContractAuthenticationRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 12); + if(errn == 0) { + errn = encode_dinContractAuthenticationResType(stream, &dinBodyType->ContractAuthenticationRes ); + } + grammarID = 4; + } else if ( dinBodyType->CurrentDemandReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 13); + if(errn == 0) { + errn = encode_dinCurrentDemandReqType(stream, &dinBodyType->CurrentDemandReq ); + } + grammarID = 4; + } else if ( dinBodyType->CurrentDemandRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 14); + if(errn == 0) { + errn = encode_dinCurrentDemandResType(stream, &dinBodyType->CurrentDemandRes ); + } + grammarID = 4; + } else if ( dinBodyType->MeteringReceiptReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 15); + if(errn == 0) { + errn = encode_dinMeteringReceiptReqType(stream, &dinBodyType->MeteringReceiptReq ); + } + grammarID = 4; + } else if ( dinBodyType->MeteringReceiptRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 16); + if(errn == 0) { + errn = encode_dinMeteringReceiptResType(stream, &dinBodyType->MeteringReceiptRes ); + } + grammarID = 4; + } else if ( dinBodyType->PaymentDetailsReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 17); + if(errn == 0) { + errn = encode_dinPaymentDetailsReqType(stream, &dinBodyType->PaymentDetailsReq ); + } + grammarID = 4; + } else if ( dinBodyType->PaymentDetailsRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 18); + if(errn == 0) { + errn = encode_dinPaymentDetailsResType(stream, &dinBodyType->PaymentDetailsRes ); + } + grammarID = 4; + } else if ( dinBodyType->PowerDeliveryReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 19); + if(errn == 0) { + errn = encode_dinPowerDeliveryReqType(stream, &dinBodyType->PowerDeliveryReq ); + } + grammarID = 4; + } else if ( dinBodyType->PowerDeliveryRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 20); + if(errn == 0) { + errn = encode_dinPowerDeliveryResType(stream, &dinBodyType->PowerDeliveryRes ); + } + grammarID = 4; + } else if ( dinBodyType->PreChargeReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 21); + if(errn == 0) { + errn = encode_dinPreChargeReqType(stream, &dinBodyType->PreChargeReq ); + } + grammarID = 4; + } else if ( dinBodyType->PreChargeRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 22); + if(errn == 0) { + errn = encode_dinPreChargeResType(stream, &dinBodyType->PreChargeRes ); + } + grammarID = 4; + } else if ( dinBodyType->ServiceDetailReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 23); + if(errn == 0) { + errn = encode_dinServiceDetailReqType(stream, &dinBodyType->ServiceDetailReq ); + } + grammarID = 4; + } else if ( dinBodyType->ServiceDetailRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 24); + if(errn == 0) { + errn = encode_dinServiceDetailResType(stream, &dinBodyType->ServiceDetailRes ); + } + grammarID = 4; + } else if ( dinBodyType->ServiceDiscoveryReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 25); + if(errn == 0) { + errn = encode_dinServiceDiscoveryReqType(stream, &dinBodyType->ServiceDiscoveryReq ); + } + grammarID = 4; + } else if ( dinBodyType->ServiceDiscoveryRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 26); + if(errn == 0) { + errn = encode_dinServiceDiscoveryResType(stream, &dinBodyType->ServiceDiscoveryRes ); + } + grammarID = 4; + } else if ( dinBodyType->ServicePaymentSelectionReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 27); + if(errn == 0) { + errn = encode_dinServicePaymentSelectionReqType(stream, &dinBodyType->ServicePaymentSelectionReq ); + } + grammarID = 4; + } else if ( dinBodyType->ServicePaymentSelectionRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 28); + if(errn == 0) { + errn = encode_dinServicePaymentSelectionResType(stream, &dinBodyType->ServicePaymentSelectionRes ); + } + grammarID = 4; + } else if ( dinBodyType->SessionSetupReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 29); + if(errn == 0) { + errn = encode_dinSessionSetupReqType(stream, &dinBodyType->SessionSetupReq ); + } + grammarID = 4; + } else if ( dinBodyType->SessionSetupRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 30); + if(errn == 0) { + errn = encode_dinSessionSetupResType(stream, &dinBodyType->SessionSetupRes ); + } + grammarID = 4; + } else if ( dinBodyType->SessionStopReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 31); + if(errn == 0) { + errn = encode_dinSessionStopType(stream, &dinBodyType->SessionStopReq ); + } + grammarID = 4; + } else if ( dinBodyType->SessionStopRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 32); + if(errn == 0) { + errn = encode_dinSessionStopResType(stream, &dinBodyType->SessionStopRes ); + } + grammarID = 4; + } else if ( dinBodyType->WeldingDetectionReq_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 33); + if(errn == 0) { + errn = encode_dinWeldingDetectionReqType(stream, &dinBodyType->WeldingDetectionReq ); + } + grammarID = 4; + } else if ( dinBodyType->WeldingDetectionRes_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 6, 34); + if(errn == 0) { + errn = encode_dinWeldingDetectionResType(stream, &dinBodyType->WeldingDetectionRes ); + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 6, 35); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,SessionSetupReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":EVCCID)', derivedBy='EXTENSION'. */ +static int encode_dinSessionSetupReqType(bitstream_t* stream, struct dinSessionSetupReqType* dinSessionSetupReqType) { + int grammarID = 7; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 7: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSessionSetupReqType->EVCCID.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinSessionSetupReqType->EVCCID.bytes, dinSessionSetupReqType->EVCCID.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PowerDeliveryResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatus)', derivedBy='EXTENSION'. */ +static int encode_dinPowerDeliveryResType(bitstream_t* stream, struct dinPowerDeliveryResType* dinPowerDeliveryResType) { + int grammarID = 8; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 8: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinPowerDeliveryResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 9; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 9: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus)] */ + if ( dinPowerDeliveryResType->AC_EVSEStatus_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinAC_EVSEStatusType(stream, &dinPowerDeliveryResType->AC_EVSEStatus ); + } + grammarID = 4; + } else if ( dinPowerDeliveryResType->DC_EVSEStatus_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinDC_EVSEStatusType(stream, &dinPowerDeliveryResType->DC_EVSEStatus ); + } + grammarID = 4; + } else if ( dinPowerDeliveryResType->EVSEStatus_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + errn = encode_dinEVSEStatusType(stream, &dinPowerDeliveryResType->EVSEStatus ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDetailResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ServiceID,"urn:iso:15118:2:2010:MsgBody":ServiceParameterList{0-1})', derivedBy='EXTENSION'. */ +static int encode_dinServiceDetailResType(bitstream_t* stream, struct dinServiceDetailResType* dinServiceDetailResType) { + int grammarID = 10; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 10: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinServiceDetailResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 11; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 11: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, dinServiceDetailResType->ServiceID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 12; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 12: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceParameterList), END_ELEMENT] */ + if ( dinServiceDetailResType->ServiceParameterList_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinServiceParameterListType(stream, &dinServiceDetailResType->ServiceParameterList ); + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,WeldingDetectionResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage)', derivedBy='EXTENSION'. */ +static int encode_dinWeldingDetectionResType(bitstream_t* stream, struct dinWeldingDetectionResType* dinWeldingDetectionResType) { + int grammarID = 13; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 13: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinWeldingDetectionResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 14; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 14: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinDC_EVSEStatusType(stream, &dinWeldingDetectionResType->DC_EVSEStatus ); + } + grammarID = 15; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 15: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinWeldingDetectionResType->EVSEPresentVoltage ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ContractAuthenticationResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing)', derivedBy='EXTENSION'. */ +static int encode_dinContractAuthenticationResType(bitstream_t* stream, struct dinContractAuthenticationResType* dinContractAuthenticationResType) { + int grammarID = 16; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 16: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinContractAuthenticationResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 17; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 17: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 1, dinContractAuthenticationResType->EVSEProcessing); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,CanonicalizationMethodType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##any]){0-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinCanonicalizationMethodType(bitstream_t* stream, struct dinCanonicalizationMethodType* dinCanonicalizationMethodType) { + int grammarID = 18; + int done = 0; + int wcDone = 0; + + + while(!done) { + switch(grammarID) { + case 18: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCanonicalizationMethodType->Algorithm.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinCanonicalizationMethodType->Algorithm.characters, dinCanonicalizationMethodType->Algorithm.charactersLen); + } + } + grammarID = 19; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 19: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 20; + } else if ( dinCanonicalizationMethodType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinCanonicalizationMethodType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCanonicalizationMethodType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinCanonicalizationMethodType->ANY.characters, dinCanonicalizationMethodType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 20; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 20: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 20; + } else if ( dinCanonicalizationMethodType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinCanonicalizationMethodType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCanonicalizationMethodType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinCanonicalizationMethodType->ANY.characters, dinCanonicalizationMethodType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 20; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SPKIDataType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":SPKISexp,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-1}){1-UNBOUNDED}', derivedBy='RESTRICTION'. */ +static int encode_dinSPKIDataType(bitstream_t* stream, struct dinSPKIDataType* dinSPKIDataType) { + int grammarID = 21; + int done = 0; + int wcDone = 0; + + unsigned int dinSPKIDataType_SPKISexp_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 21: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp)] */ + if (dinSPKIDataType_SPKISexp_currArrayIndex < dinSPKIDataType->SPKISexp.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSPKIDataType->SPKISexp.array[dinSPKIDataType_SPKISexp_currArrayIndex].bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinSPKIDataType->SPKISexp.array[dinSPKIDataType_SPKISexp_currArrayIndex].bytes, dinSPKIDataType->SPKISexp.array[dinSPKIDataType_SPKISexp_currArrayIndex].bytesLen); + dinSPKIDataType_SPKISexp_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 22; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 22: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), START_ELEMENT_GENERIC, END_ELEMENT] */ + if (dinSPKIDataType_SPKISexp_currArrayIndex < dinSPKIDataType->SPKISexp.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSPKIDataType->SPKISexp.array[dinSPKIDataType_SPKISexp_currArrayIndex].bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinSPKIDataType->SPKISexp.array[dinSPKIDataType_SPKISexp_currArrayIndex].bytes, dinSPKIDataType->SPKISexp.array[dinSPKIDataType_SPKISexp_currArrayIndex].bytesLen); + dinSPKIDataType_SPKISexp_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 22; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 23; + } else if ( dinSPKIDataType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 23: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), END_ELEMENT] */ + if (dinSPKIDataType_SPKISexp_currArrayIndex < dinSPKIDataType->SPKISexp.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSPKIDataType->SPKISexp.array[dinSPKIDataType_SPKISexp_currArrayIndex].bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinSPKIDataType->SPKISexp.array[dinSPKIDataType_SPKISexp_currArrayIndex].bytes, dinSPKIDataType->SPKISexp.array[dinSPKIDataType_SPKISexp_currArrayIndex].bytesLen); + dinSPKIDataType_SPKISexp_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 22; + } else if ( dinSPKIDataType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ListOfRootCertificateIDsType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":RootCertificateID{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinListOfRootCertificateIDsType(bitstream_t* stream, struct dinListOfRootCertificateIDsType* dinListOfRootCertificateIDsType) { + int grammarID = 24; + int done = 0; + + unsigned int dinListOfRootCertificateIDsType_RootCertificateID_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 24: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID)] */ + if (dinListOfRootCertificateIDsType_RootCertificateID_currArrayIndex < dinListOfRootCertificateIDsType->RootCertificateID.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType_RootCertificateID_currArrayIndex].charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType_RootCertificateID_currArrayIndex].characters, dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType_RootCertificateID_currArrayIndex].charactersLen); + dinListOfRootCertificateIDsType_RootCertificateID_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 25; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 25: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID), END_ELEMENT] */ + if (dinListOfRootCertificateIDsType_RootCertificateID_currArrayIndex < dinListOfRootCertificateIDsType->RootCertificateID.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType_RootCertificateID_currArrayIndex].charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType_RootCertificateID_currArrayIndex].characters, dinListOfRootCertificateIDsType->RootCertificateID.array[dinListOfRootCertificateIDsType_RootCertificateID_currArrayIndex].charactersLen); + dinListOfRootCertificateIDsType_RootCertificateID_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 25; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SelectedServiceListType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SelectedService{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinSelectedServiceListType(bitstream_t* stream, struct dinSelectedServiceListType* dinSelectedServiceListType) { + int grammarID = 26; + int done = 0; + + unsigned int dinSelectedServiceListType_SelectedService_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 26: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService)] */ + if (dinSelectedServiceListType_SelectedService_currArrayIndex < dinSelectedServiceListType->SelectedService.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinSelectedServiceType(stream, &dinSelectedServiceListType->SelectedService.array [dinSelectedServiceListType_SelectedService_currArrayIndex++]); + } + grammarID = 27; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 27: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService), END_ELEMENT] */ + if (dinSelectedServiceListType_SelectedService_currArrayIndex < dinSelectedServiceListType->SelectedService.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinSelectedServiceType(stream, &dinSelectedServiceListType->SelectedService.array [dinSelectedServiceListType_SelectedService_currArrayIndex++]); + } + grammarID = 27; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CurrentDemandResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage,"urn:iso:15118:2:2010:MsgBody":EVSEPresentCurrent,"urn:iso:15118:2:2010:MsgBody":EVSECurrentLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEVoltageLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEPowerLimitAchieved,"urn:iso:15118:2:2010:MsgBody":EVSEMaximumVoltageLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVSEMaximumCurrentLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVSEMaximumPowerLimit{0-1})', derivedBy='EXTENSION'. */ +static int encode_dinCurrentDemandResType(bitstream_t* stream, struct dinCurrentDemandResType* dinCurrentDemandResType) { + int grammarID = 28; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 28: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinCurrentDemandResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 29; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 29: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinDC_EVSEStatusType(stream, &dinCurrentDemandResType->DC_EVSEStatus ); + } + grammarID = 30; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 30: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandResType->EVSEPresentVoltage ); + } + grammarID = 31; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 31: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentCurrent)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandResType->EVSEPresentCurrent ); + } + grammarID = 32; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 32: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinCurrentDemandResType->EVSECurrentLimitAchieved); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 33; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 33: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinCurrentDemandResType->EVSEVoltageLimitAchieved); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 34; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 34: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinCurrentDemandResType->EVSEPowerLimitAchieved); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 35; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 35: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + if ( dinCurrentDemandResType->EVSEMaximumVoltageLimit_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandResType->EVSEMaximumVoltageLimit ); + } + grammarID = 36; + } else if ( dinCurrentDemandResType->EVSEMaximumCurrentLimit_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandResType->EVSEMaximumCurrentLimit ); + } + grammarID = 37; + } else if ( dinCurrentDemandResType->EVSEMaximumPowerLimit_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandResType->EVSEMaximumPowerLimit ); + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 36: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + if ( dinCurrentDemandResType->EVSEMaximumCurrentLimit_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandResType->EVSEMaximumCurrentLimit ); + } + grammarID = 37; + } else if ( dinCurrentDemandResType->EVSEMaximumPowerLimit_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandResType->EVSEMaximumPowerLimit ); + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 37: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), END_ELEMENT] */ + if ( dinCurrentDemandResType->EVSEMaximumPowerLimit_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandResType->EVSEMaximumPowerLimit ); + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])|"http://www.w3.org/2000/09/xmldsig#":XPath){0-UNBOUNDED}', derivedBy='RESTRICTION'. */ +static int encode_dinTransformType(bitstream_t* stream, struct dinTransformType* dinTransformType) { + int grammarID = 38; + int done = 0; + int wcDone = 0; + + unsigned int dinTransformType_XPath_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 38: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinTransformType->Algorithm.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinTransformType->Algorithm.characters, dinTransformType->Algorithm.charactersLen); + } + } + grammarID = 39; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 39: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (dinTransformType_XPath_currArrayIndex < dinTransformType->XPath.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinTransformType->XPath.array[dinTransformType_XPath_currArrayIndex].charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinTransformType->XPath.array[dinTransformType_XPath_currArrayIndex].characters, dinTransformType->XPath.array[dinTransformType_XPath_currArrayIndex].charactersLen); + dinTransformType_XPath_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 40; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 40; + } else if ( dinTransformType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinTransformType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinTransformType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinTransformType->ANY.characters, dinTransformType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 40; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 40: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (dinTransformType_XPath_currArrayIndex < dinTransformType->XPath.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinTransformType->XPath.array[dinTransformType_XPath_currArrayIndex].charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinTransformType->XPath.array[dinTransformType_XPath_currArrayIndex].characters, dinTransformType->XPath.array[dinTransformType_XPath_currArrayIndex].charactersLen); + dinTransformType_XPath_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 40; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 40; + } else if ( dinTransformType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinTransformType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinTransformType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinTransformType->ANY.characters, dinTransformType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 40; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVChargeParameterType', base type name='EVChargeParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":DepartureTime,"urn:iso:15118:2:2010:MsgDataTypes":EAmount,"urn:iso:15118:2:2010:MsgDataTypes":EVMaxVoltage,"urn:iso:15118:2:2010:MsgDataTypes":EVMaxCurrent,"urn:iso:15118:2:2010:MsgDataTypes":EVMinCurrent)', derivedBy='EXTENSION'. */ +static int encode_dinAC_EVChargeParameterType(bitstream_t* stream, struct dinAC_EVChargeParameterType* dinAC_EVChargeParameterType) { + int grammarID = 41; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 41: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, dinAC_EVChargeParameterType->DepartureTime); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 42; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 42: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EAmount)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinAC_EVChargeParameterType->EAmount ); + } + grammarID = 43; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 43: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxVoltage)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinAC_EVChargeParameterType->EVMaxVoltage ); + } + grammarID = 44; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 44: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxCurrent)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinAC_EVChargeParameterType->EVMaxCurrent ); + } + grammarID = 45; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 45: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinAC_EVChargeParameterType->EVMinCurrent ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,X509DataType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("http://www.w3.org/2000/09/xmldsig#":X509IssuerSerial|"http://www.w3.org/2000/09/xmldsig#":X509SKI|"http://www.w3.org/2000/09/xmldsig#":X509SubjectName|"http://www.w3.org/2000/09/xmldsig#":X509Certificate|"http://www.w3.org/2000/09/xmldsig#":X509CRL|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))){1-UNBOUNDED}', derivedBy='RESTRICTION'. */ +static int encode_dinX509DataType(bitstream_t* stream, struct dinX509DataType* dinX509DataType) { + int grammarID = 46; + int done = 0; + int wcDone = 0; + + unsigned int dinX509DataType_X509IssuerSerial_currArrayIndex = 0; + unsigned int dinX509DataType_X509SKI_currArrayIndex = 0; + unsigned int dinX509DataType_X509SubjectName_currArrayIndex = 0; + unsigned int dinX509DataType_X509Certificate_currArrayIndex = 0; + unsigned int dinX509DataType_X509CRL_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 46: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC] */ + if (dinX509DataType_X509IssuerSerial_currArrayIndex < dinX509DataType->X509IssuerSerial.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + errn = encode_dinX509IssuerSerialType(stream, &dinX509DataType->X509IssuerSerial.array [dinX509DataType_X509IssuerSerial_currArrayIndex++]); + } + grammarID = 47; + } else if (dinX509DataType_X509SKI_currArrayIndex < dinX509DataType->X509SKI.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinX509DataType->X509SKI.array[dinX509DataType_X509SKI_currArrayIndex].bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinX509DataType->X509SKI.array[dinX509DataType_X509SKI_currArrayIndex].bytes, dinX509DataType->X509SKI.array[dinX509DataType_X509SKI_currArrayIndex].bytesLen); + dinX509DataType_X509SKI_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 47; + } else if (dinX509DataType_X509SubjectName_currArrayIndex < dinX509DataType->X509SubjectName.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinX509DataType->X509SubjectName.array[dinX509DataType_X509SubjectName_currArrayIndex].charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinX509DataType->X509SubjectName.array[dinX509DataType_X509SubjectName_currArrayIndex].characters, dinX509DataType->X509SubjectName.array[dinX509DataType_X509SubjectName_currArrayIndex].charactersLen); + dinX509DataType_X509SubjectName_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 47; + } else if (dinX509DataType_X509Certificate_currArrayIndex < dinX509DataType->X509Certificate.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinX509DataType->X509Certificate.array[dinX509DataType_X509Certificate_currArrayIndex].bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinX509DataType->X509Certificate.array[dinX509DataType_X509Certificate_currArrayIndex].bytes, dinX509DataType->X509Certificate.array[dinX509DataType_X509Certificate_currArrayIndex].bytesLen); + dinX509DataType_X509Certificate_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 47; + } else if (dinX509DataType_X509CRL_currArrayIndex < dinX509DataType->X509CRL.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 3, 4); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinX509DataType->X509CRL.array[dinX509DataType_X509CRL_currArrayIndex].bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinX509DataType->X509CRL.array[dinX509DataType_X509CRL_currArrayIndex].bytes, dinX509DataType->X509CRL.array[dinX509DataType_X509CRL_currArrayIndex].bytesLen); + dinX509DataType_X509CRL_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 47; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 47; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 47: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT_GENERIC, END_ELEMENT] */ + if (dinX509DataType_X509IssuerSerial_currArrayIndex < dinX509DataType->X509IssuerSerial.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + errn = encode_dinX509IssuerSerialType(stream, &dinX509DataType->X509IssuerSerial.array [dinX509DataType_X509IssuerSerial_currArrayIndex++]); + } + grammarID = 47; + } else if (dinX509DataType_X509SKI_currArrayIndex < dinX509DataType->X509SKI.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinX509DataType->X509SKI.array[dinX509DataType_X509SKI_currArrayIndex].bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinX509DataType->X509SKI.array[dinX509DataType_X509SKI_currArrayIndex].bytes, dinX509DataType->X509SKI.array[dinX509DataType_X509SKI_currArrayIndex].bytesLen); + dinX509DataType_X509SKI_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 47; + } else if (dinX509DataType_X509SubjectName_currArrayIndex < dinX509DataType->X509SubjectName.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinX509DataType->X509SubjectName.array[dinX509DataType_X509SubjectName_currArrayIndex].charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinX509DataType->X509SubjectName.array[dinX509DataType_X509SubjectName_currArrayIndex].characters, dinX509DataType->X509SubjectName.array[dinX509DataType_X509SubjectName_currArrayIndex].charactersLen); + dinX509DataType_X509SubjectName_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 47; + } else if (dinX509DataType_X509Certificate_currArrayIndex < dinX509DataType->X509Certificate.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinX509DataType->X509Certificate.array[dinX509DataType_X509Certificate_currArrayIndex].bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinX509DataType->X509Certificate.array[dinX509DataType_X509Certificate_currArrayIndex].bytes, dinX509DataType->X509Certificate.array[dinX509DataType_X509Certificate_currArrayIndex].bytesLen); + dinX509DataType_X509Certificate_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 47; + } else if (dinX509DataType_X509CRL_currArrayIndex < dinX509DataType->X509CRL.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 3, 4); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinX509DataType->X509CRL.array[dinX509DataType_X509CRL_currArrayIndex].bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinX509DataType->X509CRL.array[dinX509DataType_X509CRL_currArrayIndex].bytes, dinX509DataType->X509CRL.array[dinX509DataType_X509CRL_currArrayIndex].bytesLen); + dinX509DataType_X509CRL_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 47; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 47; + } else if ( dinX509DataType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 3, 6); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ChargingStatusResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEID,"urn:iso:15118:2:2010:MsgBody":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgBody":EVSEMaxCurrent{0-1},"urn:iso:15118:2:2010:MsgBody":MeterInfo{0-1},"urn:iso:15118:2:2010:MsgBody":ReceiptRequired,"urn:iso:15118:2:2010:MsgBody":AC_EVSEStatus)', derivedBy='EXTENSION'. */ +static int encode_dinChargingStatusResType(bitstream_t* stream, struct dinChargingStatusResType* dinChargingStatusResType) { + int grammarID = 48; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 48: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinChargingStatusResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 49; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 49: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinChargingStatusResType->EVSEID.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinChargingStatusResType->EVSEID.bytes, dinChargingStatusResType->EVSEID.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 50; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 50: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinChargingStatusResType->SAScheduleTupleID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 51; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 51: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + if ( dinChargingStatusResType->EVSEMaxCurrent_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinChargingStatusResType->EVSEMaxCurrent ); + } + grammarID = 52; + } else if ( dinChargingStatusResType->MeterInfo_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinMeterInfoType(stream, &dinChargingStatusResType->MeterInfo ); + } + grammarID = 53; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinChargingStatusResType->ReceiptRequired); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 54; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 52: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + if ( dinChargingStatusResType->MeterInfo_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinMeterInfoType(stream, &dinChargingStatusResType->MeterInfo ); + } + grammarID = 53; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinChargingStatusResType->ReceiptRequired); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 54; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 53: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinChargingStatusResType->ReceiptRequired); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 54; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 54: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinAC_EVSEStatusType(stream, &dinChargingStatusResType->AC_EVSEStatus ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,WeldingDetectionReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus)', derivedBy='EXTENSION'. */ +static int encode_dinWeldingDetectionReqType(bitstream_t* stream, struct dinWeldingDetectionReqType* dinWeldingDetectionReqType) { + int grammarID = 55; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 55: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinDC_EVStatusType(stream, &dinWeldingDetectionReqType->DC_EVStatus ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertiesType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":SignatureProperty{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinSignaturePropertiesType(bitstream_t* stream, struct dinSignaturePropertiesType* dinSignaturePropertiesType) { + int grammarID = 56; + int done = 0; + + unsigned int dinSignaturePropertiesType_SignatureProperty_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 56: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + if ( dinSignaturePropertiesType->Id_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSignaturePropertiesType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinSignaturePropertiesType->Id.characters, dinSignaturePropertiesType->Id.charactersLen); + } + } + grammarID = 57; + } else if (dinSignaturePropertiesType_SignatureProperty_currArrayIndex < dinSignaturePropertiesType->SignatureProperty.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinSignaturePropertyType(stream, &dinSignaturePropertiesType->SignatureProperty.array [dinSignaturePropertiesType_SignatureProperty_currArrayIndex++]); + } + grammarID = 58; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 57: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty)] */ + if (dinSignaturePropertiesType_SignatureProperty_currArrayIndex < dinSignaturePropertiesType->SignatureProperty.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinSignaturePropertyType(stream, &dinSignaturePropertiesType->SignatureProperty.array [dinSignaturePropertiesType_SignatureProperty_currArrayIndex++]); + } + grammarID = 58; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 58: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), END_ELEMENT] */ + if (dinSignaturePropertiesType_SignatureProperty_currArrayIndex < dinSignaturePropertiesType->SignatureProperty.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinSignaturePropertyType(stream, &dinSignaturePropertiesType->SignatureProperty.array [dinSignaturePropertiesType_SignatureProperty_currArrayIndex++]); + } + grammarID = 58; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ContractAuthenticationReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":GenChallenge{0-1})', derivedBy='EXTENSION'. */ +static int encode_dinContractAuthenticationReqType(bitstream_t* stream, struct dinContractAuthenticationReqType* dinContractAuthenticationReqType) { + int grammarID = 59; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 59: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + if ( dinContractAuthenticationReqType->Id_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinContractAuthenticationReqType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinContractAuthenticationReqType->Id.characters, dinContractAuthenticationReqType->Id.charactersLen); + } + } + grammarID = 60; + } else if ( dinContractAuthenticationReqType->GenChallenge_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinContractAuthenticationReqType->GenChallenge.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinContractAuthenticationReqType->GenChallenge.characters, dinContractAuthenticationReqType->GenChallenge.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 60: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), END_ELEMENT] */ + if ( dinContractAuthenticationReqType->GenChallenge_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinContractAuthenticationReqType->GenChallenge.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinContractAuthenticationReqType->GenChallenge.characters, dinContractAuthenticationReqType->GenChallenge.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVPowerDeliveryParameterType', base type name='EVPowerDeliveryParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2010:MsgDataTypes":BulkChargingComplete{0-1},"urn:iso:15118:2:2010:MsgDataTypes":ChargingComplete)', derivedBy='EXTENSION'. */ +static int encode_dinDC_EVPowerDeliveryParameterType(bitstream_t* stream, struct dinDC_EVPowerDeliveryParameterType* dinDC_EVPowerDeliveryParameterType) { + int grammarID = 61; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 61: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinDC_EVStatusType(stream, &dinDC_EVPowerDeliveryParameterType->DC_EVStatus ); + } + grammarID = 62; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 62: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete)] */ + if ( dinDC_EVPowerDeliveryParameterType->BulkChargingComplete_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinDC_EVPowerDeliveryParameterType->BulkChargingComplete); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 63; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinDC_EVPowerDeliveryParameterType->ChargingComplete); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 63: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinDC_EVPowerDeliveryParameterType->ChargingComplete); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVSEChargeParameterType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +static int encode_dinEVSEChargeParameterType(bitstream_t* stream, struct dinEVSEChargeParameterType* dinEVSEChargeParameterType) { + int grammarID = 64; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CableCheckReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus)', derivedBy='EXTENSION'. */ +static int encode_dinCableCheckReqType(bitstream_t* stream, struct dinCableCheckReqType* dinCableCheckReqType) { + int grammarID = 55; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 55: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinDC_EVStatusType(stream, &dinCableCheckReqType->DC_EVStatus ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVChargeParameterType', base type name='EVChargeParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVMaximumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVEnergyCapacity{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVEnergyRequest{0-1},"urn:iso:15118:2:2010:MsgDataTypes":FullSOC{0-1},"urn:iso:15118:2:2010:MsgDataTypes":BulkSOC{0-1})', derivedBy='EXTENSION'. */ +static int encode_dinDC_EVChargeParameterType(bitstream_t* stream, struct dinDC_EVChargeParameterType* dinDC_EVChargeParameterType) { + int grammarID = 65; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 65: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinDC_EVStatusType(stream, &dinDC_EVChargeParameterType->DC_EVStatus ); + } + grammarID = 66; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 66: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVChargeParameterType->EVMaximumCurrentLimit ); + } + grammarID = 67; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 67: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit)] */ + if ( dinDC_EVChargeParameterType->EVMaximumPowerLimit_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVChargeParameterType->EVMaximumPowerLimit ); + } + grammarID = 68; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVChargeParameterType->EVMaximumVoltageLimit ); + } + grammarID = 69; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 68: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVChargeParameterType->EVMaximumVoltageLimit ); + } + grammarID = 69; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 69: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + if ( dinDC_EVChargeParameterType->EVEnergyCapacity_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVChargeParameterType->EVEnergyCapacity ); + } + grammarID = 70; + } else if ( dinDC_EVChargeParameterType->EVEnergyRequest_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVChargeParameterType->EVEnergyRequest ); + } + grammarID = 71; + } else if ( dinDC_EVChargeParameterType->FullSOC_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 7, (uint32_t)(dinDC_EVChargeParameterType->FullSOC - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 72; + } else if ( dinDC_EVChargeParameterType->BulkSOC_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 7, (uint32_t)(dinDC_EVChargeParameterType->BulkSOC - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 3, 4); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 70: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + if ( dinDC_EVChargeParameterType->EVEnergyRequest_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVChargeParameterType->EVEnergyRequest ); + } + grammarID = 71; + } else if ( dinDC_EVChargeParameterType->FullSOC_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 7, (uint32_t)(dinDC_EVChargeParameterType->FullSOC - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 72; + } else if ( dinDC_EVChargeParameterType->BulkSOC_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 7, (uint32_t)(dinDC_EVChargeParameterType->BulkSOC - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 71: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + if ( dinDC_EVChargeParameterType->FullSOC_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 7, (uint32_t)(dinDC_EVChargeParameterType->FullSOC - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 72; + } else if ( dinDC_EVChargeParameterType->BulkSOC_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 7, (uint32_t)(dinDC_EVChargeParameterType->BulkSOC - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 72: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), END_ELEMENT] */ + if ( dinDC_EVChargeParameterType->BulkSOC_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 7, (uint32_t)(dinDC_EVChargeParameterType->BulkSOC - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SAScheduleListType', base type name='SASchedulesType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTuple{1-UNBOUNDED})', derivedBy='EXTENSION'. */ +static int encode_dinSAScheduleListType(bitstream_t* stream, struct dinSAScheduleListType* dinSAScheduleListType) { + int grammarID = 73; + int done = 0; + + unsigned int dinSAScheduleListType_SAScheduleTuple_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 73: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple)] */ + if (dinSAScheduleListType_SAScheduleTuple_currArrayIndex < dinSAScheduleListType->SAScheduleTuple.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinSAScheduleTupleType(stream, &dinSAScheduleListType->SAScheduleTuple.array [dinSAScheduleListType_SAScheduleTuple_currArrayIndex++]); + } + grammarID = 74; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 74: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple), END_ELEMENT] */ + if (dinSAScheduleListType_SAScheduleTuple_currArrayIndex < dinSAScheduleListType->SAScheduleTuple.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinSAScheduleTupleType(stream, &dinSAScheduleListType->SAScheduleTuple.array [dinSAScheduleListType_SAScheduleTuple_currArrayIndex++]); + } + grammarID = 74; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PMaxScheduleType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleID,"urn:iso:15118:2:2010:MsgDataTypes":PMaxScheduleEntry{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinPMaxScheduleType(bitstream_t* stream, struct dinPMaxScheduleType* dinPMaxScheduleType) { + int grammarID = 75; + int done = 0; + + unsigned int dinPMaxScheduleType_PMaxScheduleEntry_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 75: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinPMaxScheduleType->PMaxScheduleID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 76; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 76: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry)] */ + if (dinPMaxScheduleType_PMaxScheduleEntry_currArrayIndex < dinPMaxScheduleType->PMaxScheduleEntry.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPMaxScheduleEntryType(stream, &dinPMaxScheduleType->PMaxScheduleEntry.array [dinPMaxScheduleType_PMaxScheduleEntry_currArrayIndex++]); + } + grammarID = 77; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 77: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), END_ELEMENT] */ + if (dinPMaxScheduleType_PMaxScheduleEntry_currArrayIndex < dinPMaxScheduleType->PMaxScheduleEntry.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinPMaxScheduleEntryType(stream, &dinPMaxScheduleType->PMaxScheduleEntry.array [dinPMaxScheduleType_PMaxScheduleEntry_currArrayIndex++]); + } + grammarID = 77; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServicePaymentSelectionReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":SelectedPaymentOption,"urn:iso:15118:2:2010:MsgBody":SelectedServiceList)', derivedBy='EXTENSION'. */ +static int encode_dinServicePaymentSelectionReqType(bitstream_t* stream, struct dinServicePaymentSelectionReqType* dinServicePaymentSelectionReqType) { + int grammarID = 78; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 78: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 1, dinServicePaymentSelectionReqType->SelectedPaymentOption); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 79; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 79: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedServiceList)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinSelectedServiceListType(stream, &dinServicePaymentSelectionReqType->SelectedServiceList ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,RelativeTimeIntervalType', base type name='IntervalType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":start,"urn:iso:15118:2:2010:MsgDataTypes":duration{0-1})', derivedBy='EXTENSION'. */ +static int encode_dinRelativeTimeIntervalType(bitstream_t* stream, struct dinRelativeTimeIntervalType* dinRelativeTimeIntervalType) { + int grammarID = 80; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 80: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, dinRelativeTimeIntervalType->start); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 81; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 81: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}duration), END_ELEMENT] */ + if ( dinRelativeTimeIntervalType->duration_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, dinRelativeTimeIntervalType->duration); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVStatusType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +static int encode_dinEVStatusType(bitstream_t* stream, struct dinEVStatusType* dinEVStatusType) { + int grammarID = 64; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PreChargeResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEPresentVoltage)', derivedBy='EXTENSION'. */ +static int encode_dinPreChargeResType(bitstream_t* stream, struct dinPreChargeResType* dinPreChargeResType) { + int grammarID = 13; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 13: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinPreChargeResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 14; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 14: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinDC_EVSEStatusType(stream, &dinPreChargeResType->DC_EVSEStatus ); + } + grammarID = 15; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 15: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinPreChargeResType->EVSEPresentVoltage ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEChargeParameterType', base type name='EVSEChargeParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaximumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinimumCurrentLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinimumVoltageLimit,"urn:iso:15118:2:2010:MsgDataTypes":EVSECurrentRegulationTolerance{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEPeakCurrentRipple,"urn:iso:15118:2:2010:MsgDataTypes":EVSEEnergyToBeDelivered{0-1})', derivedBy='EXTENSION'. */ +static int encode_dinDC_EVSEChargeParameterType(bitstream_t* stream, struct dinDC_EVSEChargeParameterType* dinDC_EVSEChargeParameterType) { + int grammarID = 82; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 82: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinDC_EVSEStatusType(stream, &dinDC_EVSEChargeParameterType->DC_EVSEStatus ); + } + grammarID = 83; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 83: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEMaximumCurrentLimit ); + } + grammarID = 84; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 84: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit)] */ + if ( dinDC_EVSEChargeParameterType->EVSEMaximumPowerLimit_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEMaximumPowerLimit ); + } + grammarID = 85; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEMaximumVoltageLimit ); + } + grammarID = 86; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 85: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEMaximumVoltageLimit ); + } + grammarID = 86; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 86: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumCurrentLimit)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEMinimumCurrentLimit ); + } + grammarID = 87; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 87: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumVoltageLimit)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEMinimumVoltageLimit ); + } + grammarID = 88; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 88: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSECurrentRegulationTolerance), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple)] */ + if ( dinDC_EVSEChargeParameterType->EVSECurrentRegulationTolerance_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSECurrentRegulationTolerance ); + } + grammarID = 89; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEPeakCurrentRipple ); + } + grammarID = 90; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 89: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEPeakCurrentRipple ); + } + grammarID = 90; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 90: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered), END_ELEMENT] */ + if ( dinDC_EVSEChargeParameterType->EVSEEnergyToBeDelivered_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinDC_EVSEChargeParameterType->EVSEEnergyToBeDelivered ); + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PaymentDetailsResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":GenChallenge,"urn:iso:15118:2:2010:MsgBody":DateTimeNow)', derivedBy='EXTENSION'. */ +static int encode_dinPaymentDetailsResType(bitstream_t* stream, struct dinPaymentDetailsResType* dinPaymentDetailsResType) { + int grammarID = 91; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 91: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinPaymentDetailsResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 92; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 92: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinPaymentDetailsResType->GenChallenge.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinPaymentDetailsResType->GenChallenge.characters, dinPaymentDetailsResType->GenChallenge.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 93; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 93: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger64(stream, dinPaymentDetailsResType->DateTimeNow); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,DSAKeyValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("http://www.w3.org/2000/09/xmldsig#":P,"http://www.w3.org/2000/09/xmldsig#":Q){0-1},"http://www.w3.org/2000/09/xmldsig#":G{0-1},"http://www.w3.org/2000/09/xmldsig#":Y,"http://www.w3.org/2000/09/xmldsig#":J{0-1},("http://www.w3.org/2000/09/xmldsig#":Seed,"http://www.w3.org/2000/09/xmldsig#":PgenCounter){0-1})', derivedBy='RESTRICTION'. */ +static int encode_dinDSAKeyValueType(bitstream_t* stream, struct dinDSAKeyValueType* dinDSAKeyValueType) { + int grammarID = 94; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 94: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + if ( dinDSAKeyValueType->P_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinDSAKeyValueType->P.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinDSAKeyValueType->P.bytes, dinDSAKeyValueType->P.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 95; + } else if ( dinDSAKeyValueType->G_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinDSAKeyValueType->G.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinDSAKeyValueType->G.bytes, dinDSAKeyValueType->G.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 96; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinDSAKeyValueType->Y.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinDSAKeyValueType->Y.bytes, dinDSAKeyValueType->Y.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 97; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 95: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Q)] */ + if ( dinDSAKeyValueType->Q_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinDSAKeyValueType->Q.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinDSAKeyValueType->Q.bytes, dinDSAKeyValueType->Q.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 98; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 98: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + if ( dinDSAKeyValueType->G_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinDSAKeyValueType->G.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinDSAKeyValueType->G.bytes, dinDSAKeyValueType->G.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 96; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinDSAKeyValueType->Y.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinDSAKeyValueType->Y.bytes, dinDSAKeyValueType->Y.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 97; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 96: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinDSAKeyValueType->Y.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinDSAKeyValueType->Y.bytes, dinDSAKeyValueType->Y.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 97; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 97: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}J), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), END_ELEMENT] */ + if ( dinDSAKeyValueType->J_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinDSAKeyValueType->J.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinDSAKeyValueType->J.bytes, dinDSAKeyValueType->J.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 99; + } else if ( dinDSAKeyValueType->Seed_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinDSAKeyValueType->Seed.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinDSAKeyValueType->Seed.bytes, dinDSAKeyValueType->Seed.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 100; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 99: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), END_ELEMENT] */ + if ( dinDSAKeyValueType->Seed_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinDSAKeyValueType->Seed.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinDSAKeyValueType->Seed.bytes, dinDSAKeyValueType->Seed.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 100; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 100: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PgenCounter)] */ + if ( dinDSAKeyValueType->PgenCounter_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinDSAKeyValueType->PgenCounter.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinDSAKeyValueType->PgenCounter.bytes, dinDSAKeyValueType->PgenCounter.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SASchedulesType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +static int encode_dinSASchedulesType(bitstream_t* stream, struct dinSASchedulesType* dinSASchedulesType) { + int grammarID = 64; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateUpdateResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2010:MsgBody":DHParams,"urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":RetryCounter)', derivedBy='EXTENSION'. */ +static int encode_dinCertificateUpdateResType(bitstream_t* stream, struct dinCertificateUpdateResType* dinCertificateUpdateResType) { + int grammarID = 101; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 101: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCertificateUpdateResType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinCertificateUpdateResType->Id.characters, dinCertificateUpdateResType->Id.charactersLen); + } + } + grammarID = 102; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 102: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinCertificateUpdateResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 103; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 103: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinCertificateChainType(stream, &dinCertificateUpdateResType->ContractSignatureCertChain ); + } + grammarID = 104; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 104: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCertificateUpdateResType->ContractSignatureEncryptedPrivateKey.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinCertificateUpdateResType->ContractSignatureEncryptedPrivateKey.bytes, dinCertificateUpdateResType->ContractSignatureEncryptedPrivateKey.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 105; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 105: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCertificateUpdateResType->DHParams.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinCertificateUpdateResType->DHParams.bytes, dinCertificateUpdateResType->DHParams.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 106; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 106: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCertificateUpdateResType->ContractID.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinCertificateUpdateResType->ContractID.characters, dinCertificateUpdateResType->ContractID.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 107; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 107: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RetryCounter)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinCertificateUpdateResType->RetryCounter); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVChargeParameterType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +static int encode_dinEVChargeParameterType(bitstream_t* stream, struct dinEVChargeParameterType* dinEVChargeParameterType) { + int grammarID = 64; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgHeader,MessageHeaderType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgHeader":SessionID,"urn:iso:15118:2:2010:MsgHeader":Notification{0-1},"http://www.w3.org/2000/09/xmldsig#":Signature{0-1})', derivedBy='RESTRICTION'. */ +static int encode_dinMessageHeaderType(bitstream_t* stream, struct dinMessageHeaderType* dinMessageHeaderType) { + int grammarID = 108; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 108: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinMessageHeaderType->SessionID.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinMessageHeaderType->SessionID.bytes, dinMessageHeaderType->SessionID.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 109; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 109: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}Notification), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), END_ELEMENT] */ + if ( dinMessageHeaderType->Notification_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinNotificationType(stream, &dinMessageHeaderType->Notification ); + } + grammarID = 110; + } else if ( dinMessageHeaderType->Signature_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinSignatureType(stream, &dinMessageHeaderType->Signature ); + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 110: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), END_ELEMENT] */ + if ( dinMessageHeaderType->Signature_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinSignatureType(stream, &dinMessageHeaderType->Signature ); + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDef,BodyBaseType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +static int encode_dinBodyBaseType(bitstream_t* stream, struct dinBodyBaseType* dinBodyBaseType) { + int grammarID = 64; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyValueType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":DSAKeyValue|"http://www.w3.org/2000/09/xmldsig#":RSAKeyValue|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]))', derivedBy='RESTRICTION'. */ +static int encode_dinKeyValueType(bitstream_t* stream, struct dinKeyValueType* dinKeyValueType) { + int grammarID = 111; + int done = 0; + int wcDone = 0; + + + while(!done) { + switch(grammarID) { + case 111: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + if ( dinKeyValueType->DSAKeyValue_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + errn = encode_dinDSAKeyValueType(stream, &dinKeyValueType->DSAKeyValue ); + } + grammarID = 112; + } else if ( dinKeyValueType->RSAKeyValue_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + errn = encode_dinRSAKeyValueType(stream, &dinKeyValueType->RSAKeyValue ); + } + grammarID = 112; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 112; + } else if ( dinKeyValueType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinKeyValueType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinKeyValueType->ANY.characters, dinKeyValueType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 113; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 112: + /* Element[END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if ( dinKeyValueType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinKeyValueType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinKeyValueType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinKeyValueType->ANY.characters, dinKeyValueType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 112; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 113: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + if ( dinKeyValueType->DSAKeyValue_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + errn = encode_dinDSAKeyValueType(stream, &dinKeyValueType->DSAKeyValue ); + } + grammarID = 112; + } else if ( dinKeyValueType->RSAKeyValue_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + errn = encode_dinRSAKeyValueType(stream, &dinKeyValueType->RSAKeyValue ); + } + grammarID = 112; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 112; + } else if ( dinKeyValueType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinKeyValueType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinKeyValueType->ANY.characters, dinKeyValueType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 113; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,IntervalType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +static int encode_dinIntervalType(bitstream_t* stream, struct dinIntervalType* dinIntervalType) { + int grammarID = 64; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ChargeParameterDiscoveryResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing,"urn:iso:15118:2:2010:MsgDataTypes":SASchedules,"urn:iso:15118:2:2010:MsgDataTypes":EVSEChargeParameter)', derivedBy='EXTENSION'. */ +static int encode_dinChargeParameterDiscoveryResType(bitstream_t* stream, struct dinChargeParameterDiscoveryResType* dinChargeParameterDiscoveryResType) { + int grammarID = 114; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 114: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinChargeParameterDiscoveryResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 115; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 115: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 1, dinChargeParameterDiscoveryResType->EVSEProcessing); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 116; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 116: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules)] */ + if ( dinChargeParameterDiscoveryResType->SAScheduleList_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinSAScheduleListType(stream, &dinChargeParameterDiscoveryResType->SAScheduleList ); + } + grammarID = 117; + } else if ( dinChargeParameterDiscoveryResType->SASchedules_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinSASchedulesType(stream, &dinChargeParameterDiscoveryResType->SASchedules ); + } + grammarID = 117; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 117: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter)] */ + if ( dinChargeParameterDiscoveryResType->AC_EVSEChargeParameter_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinAC_EVSEChargeParameterType(stream, &dinChargeParameterDiscoveryResType->AC_EVSEChargeParameter ); + } + grammarID = 4; + } else if ( dinChargeParameterDiscoveryResType->DC_EVSEChargeParameter_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinDC_EVSEChargeParameterType(stream, &dinChargeParameterDiscoveryResType->DC_EVSEChargeParameter ); + } + grammarID = 4; + } else if ( dinChargeParameterDiscoveryResType->EVSEChargeParameter_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + errn = encode_dinEVSEChargeParameterType(stream, &dinChargeParameterDiscoveryResType->EVSEChargeParameter ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PowerDeliveryReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ReadyToChargeState,"urn:iso:15118:2:2010:MsgBody":ChargingProfile{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVPowerDeliveryParameter{0-1})', derivedBy='EXTENSION'. */ +static int encode_dinPowerDeliveryReqType(bitstream_t* stream, struct dinPowerDeliveryReqType* dinPowerDeliveryReqType) { + int grammarID = 118; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 118: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinPowerDeliveryReqType->ReadyToChargeState); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 119; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 119: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), END_ELEMENT] */ + if ( dinPowerDeliveryReqType->ChargingProfile_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + errn = encode_dinChargingProfileType(stream, &dinPowerDeliveryReqType->ChargingProfile ); + } + grammarID = 120; + } else if ( dinPowerDeliveryReqType->DC_EVPowerDeliveryParameter_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + errn = encode_dinDC_EVPowerDeliveryParameterType(stream, &dinPowerDeliveryReqType->DC_EVPowerDeliveryParameter ); + } + grammarID = 4; + } else if ( dinPowerDeliveryReqType->EVPowerDeliveryParameter_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + errn = encode_dinEVPowerDeliveryParameterType(stream, &dinPowerDeliveryReqType->EVPowerDeliveryParameter ); + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 120: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), END_ELEMENT] */ + if ( dinPowerDeliveryReqType->DC_EVPowerDeliveryParameter_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinDC_EVPowerDeliveryParameterType(stream, &dinPowerDeliveryReqType->DC_EVPowerDeliveryParameter ); + } + grammarID = 4; + } else if ( dinPowerDeliveryReqType->EVPowerDeliveryParameter_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinEVPowerDeliveryParameterType(stream, &dinPowerDeliveryReqType->EVPowerDeliveryParameter ); + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CertificateChainType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate,"urn:iso:15118:2:2010:MsgDataTypes":SubCertificates{0-1})', derivedBy='RESTRICTION'. */ +static int encode_dinCertificateChainType(bitstream_t* stream, struct dinCertificateChainType* dinCertificateChainType) { + int grammarID = 121; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 121: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCertificateChainType->Certificate.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinCertificateChainType->Certificate.bytes, dinCertificateChainType->Certificate.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 122; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 122: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SubCertificates), END_ELEMENT] */ + if ( dinCertificateChainType->SubCertificates_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinSubCertificatesType(stream, &dinCertificateChainType->SubCertificates ); + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,TransformsType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Transform{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinTransformsType(bitstream_t* stream, struct dinTransformsType* dinTransformsType) { + int grammarID = 123; + int done = 0; + + unsigned int dinTransformsType_Transform_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 123: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform)] */ + if (dinTransformsType_Transform_currArrayIndex < dinTransformsType->Transform.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinTransformType(stream, &dinTransformsType->Transform.array [dinTransformsType_Transform_currArrayIndex++]); + } + grammarID = 124; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 124: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), END_ELEMENT] */ + if (dinTransformsType_Transform_currArrayIndex < dinTransformsType->Transform.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinTransformType(stream, &dinTransformsType->Transform.array [dinTransformsType_Transform_currArrayIndex++]); + } + grammarID = 124; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EntryType', base type name='anyType', content type='ELEMENT', isAbstract='true', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":TimeInterval)', derivedBy='RESTRICTION'. */ +static int encode_dinEntryType(bitstream_t* stream, struct dinEntryType* dinEntryType) { + int grammarID = 125; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 125: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + if ( dinEntryType->RelativeTimeInterval_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinRelativeTimeIntervalType(stream, &dinEntryType->RelativeTimeInterval ); + } + grammarID = 4; + } else if ( dinEntryType->TimeInterval_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinIntervalType(stream, &dinEntryType->TimeInterval ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,SessionStopType', base type name='BodyBaseType', content type='EMPTY', isAbstract='false', hasTypeId='false', final='0', block='0', derivedBy='EXTENSION'. */ +static int encode_dinSessionStopType(bitstream_t* stream, struct dinSessionStopType* dinSessionStopType) { + int grammarID = 64; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDetailReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ServiceID)', derivedBy='EXTENSION'. */ +static int encode_dinServiceDetailReqType(bitstream_t* stream, struct dinServiceDetailReqType* dinServiceDetailReqType) { + int grammarID = 126; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 126: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, dinServiceDetailReqType->ServiceID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,DigestMethodType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinDigestMethodType(bitstream_t* stream, struct dinDigestMethodType* dinDigestMethodType) { + int grammarID = 18; + int done = 0; + int wcDone = 0; + + + while(!done) { + switch(grammarID) { + case 18: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinDigestMethodType->Algorithm.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinDigestMethodType->Algorithm.characters, dinDigestMethodType->Algorithm.charactersLen); + } + } + grammarID = 19; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 19: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 20; + } else if ( dinDigestMethodType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinDigestMethodType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinDigestMethodType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinDigestMethodType->ANY.characters, dinDigestMethodType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 20; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 20: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 20; + } else if ( dinDigestMethodType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinDigestMethodType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinDigestMethodType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinDigestMethodType->ANY.characters, dinDigestMethodType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 20; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ParameterType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":boolValue|"urn:iso:15118:2:2010:MsgDataTypes":byteValue|"urn:iso:15118:2:2010:MsgDataTypes":shortValue|"urn:iso:15118:2:2010:MsgDataTypes":intValue|"urn:iso:15118:2:2010:MsgDataTypes":physicalValue|"urn:iso:15118:2:2010:MsgDataTypes":stringValue)', derivedBy='RESTRICTION'. */ +static int encode_dinParameterType(bitstream_t* stream, struct dinParameterType* dinParameterType) { + int grammarID = 127; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 127: + /* FirstStartTag[ATTRIBUTE[STRING](Name)] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinParameterType->Name.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinParameterType->Name.characters, dinParameterType->Name.charactersLen); + } + } + grammarID = 128; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 128: + /* StartTag[ATTRIBUTE[ENUMERATION](ValueType)] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 3, dinParameterType->ValueType); + } + grammarID = 129; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 129: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue)] */ + if ( dinParameterType->boolValue_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinParameterType->boolValue); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if ( dinParameterType->byteValue_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 8, (uint32_t)(dinParameterType->byteValue + 128)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if ( dinParameterType->shortValue_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinParameterType->shortValue); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if ( dinParameterType->intValue_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger32(stream, dinParameterType->intValue); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if ( dinParameterType->physicalValue_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 4); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinParameterType->physicalValue ); + } + grammarID = 4; + } else if ( dinParameterType->stringValue_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 5); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinParameterType->stringValue.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinParameterType->stringValue.characters, dinParameterType->stringValue.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ChargingStatusReqType', base type name='BodyBaseType', content type='EMPTY', isAbstract='false', hasTypeId='false', final='0', block='0', derivedBy='EXTENSION'. */ +static int encode_dinChargingStatusReqType(bitstream_t* stream, struct dinChargingStatusReqType* dinChargingStatusReqType) { + int grammarID = 64; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureMethodType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":HMACOutputLength{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinSignatureMethodType(bitstream_t* stream, struct dinSignatureMethodType* dinSignatureMethodType) { + int grammarID = 130; + int done = 0; + int wcDone = 0; + + + while(!done) { + switch(grammarID) { + case 130: + /* FirstStartTag[ATTRIBUTE[STRING](Algorithm)] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSignatureMethodType->Algorithm.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinSignatureMethodType->Algorithm.characters, dinSignatureMethodType->Algorithm.charactersLen); + } + } + grammarID = 131; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 131: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if ( dinSignatureMethodType->HMACOutputLength_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger64(stream, dinSignatureMethodType->HMACOutputLength); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 20; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 20; + } else if ( dinSignatureMethodType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinSignatureMethodType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSignatureMethodType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinSignatureMethodType->ANY.characters, dinSignatureMethodType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 132; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 20: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 20; + } else if ( dinSignatureMethodType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinSignatureMethodType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSignatureMethodType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinSignatureMethodType->ANY.characters, dinSignatureMethodType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 20; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 132: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if ( dinSignatureMethodType->HMACOutputLength_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger64(stream, dinSignatureMethodType->HMACOutputLength); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 20; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 20; + } else if ( dinSignatureMethodType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinSignatureMethodType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSignatureMethodType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinSignatureMethodType->ANY.characters, dinSignatureMethodType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 132; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateInstallationReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":OEMProvisioningCert,"urn:iso:15118:2:2010:MsgBody":ListOfRootCertificateIDs,"urn:iso:15118:2:2010:MsgBody":DHParams)', derivedBy='EXTENSION'. */ +static int encode_dinCertificateInstallationReqType(bitstream_t* stream, struct dinCertificateInstallationReqType* dinCertificateInstallationReqType) { + int grammarID = 133; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 133: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + if ( dinCertificateInstallationReqType->Id_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCertificateInstallationReqType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinCertificateInstallationReqType->Id.characters, dinCertificateInstallationReqType->Id.charactersLen); + } + } + grammarID = 134; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCertificateInstallationReqType->OEMProvisioningCert.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinCertificateInstallationReqType->OEMProvisioningCert.bytes, dinCertificateInstallationReqType->OEMProvisioningCert.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 135; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 134: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCertificateInstallationReqType->OEMProvisioningCert.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinCertificateInstallationReqType->OEMProvisioningCert.bytes, dinCertificateInstallationReqType->OEMProvisioningCert.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 135; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 135: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinListOfRootCertificateIDsType(stream, &dinCertificateInstallationReqType->ListOfRootCertificateIDs ); + } + grammarID = 136; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 136: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCertificateInstallationReqType->DHParams.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinCertificateInstallationReqType->DHParams.bytes, dinCertificateInstallationReqType->DHParams.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SalesTariffEntryType', base type name='EntryType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("urn:iso:15118:2:2010:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2010:MsgDataTypes":EPriceLevel,"urn:iso:15118:2:2010:MsgDataTypes":ConsumptionCost{0-UNBOUNDED}))', derivedBy='EXTENSION'. */ +static int encode_dinSalesTariffEntryType(bitstream_t* stream, struct dinSalesTariffEntryType* dinSalesTariffEntryType) { + int grammarID = 137; + int done = 0; + + unsigned int dinSalesTariffEntryType_ConsumptionCost_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 137: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + if ( dinSalesTariffEntryType->RelativeTimeInterval_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinRelativeTimeIntervalType(stream, &dinSalesTariffEntryType->RelativeTimeInterval ); + } + grammarID = 138; + } else if ( dinSalesTariffEntryType->TimeInterval_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinIntervalType(stream, &dinSalesTariffEntryType->TimeInterval ); + } + grammarID = 138; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 138: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 8, (uint32_t)(dinSalesTariffEntryType->EPriceLevel - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 139; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 139: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost), END_ELEMENT] */ + if (dinSalesTariffEntryType_ConsumptionCost_currArrayIndex < dinSalesTariffEntryType->ConsumptionCost.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinConsumptionCostType(stream, &dinSalesTariffEntryType->ConsumptionCost.array [dinSalesTariffEntryType_ConsumptionCost_currArrayIndex++]); + } + grammarID = 139; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDiscoveryResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":PaymentOptions,"urn:iso:15118:2:2010:MsgBody":ChargeService,"urn:iso:15118:2:2010:MsgBody":ServiceList{0-1})', derivedBy='EXTENSION'. */ +static int encode_dinServiceDiscoveryResType(bitstream_t* stream, struct dinServiceDiscoveryResType* dinServiceDiscoveryResType) { + int grammarID = 140; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 140: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinServiceDiscoveryResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 141; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 141: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentOptions)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPaymentOptionsType(stream, &dinServiceDiscoveryResType->PaymentOptions ); + } + grammarID = 142; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 142: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeService)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinServiceChargeType(stream, &dinServiceDiscoveryResType->ChargeService ); + } + grammarID = 143; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 143: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList), END_ELEMENT] */ + if ( dinServiceDiscoveryResType->ServiceList_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinServiceTagListType(stream, &dinServiceDiscoveryResType->ServiceList ); + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ParameterSetType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ParameterSetID,"urn:iso:15118:2:2010:MsgDataTypes":Parameter{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinParameterSetType(bitstream_t* stream, struct dinParameterSetType* dinParameterSetType) { + int grammarID = 144; + int done = 0; + + unsigned int dinParameterSetType_Parameter_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 144: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinParameterSetType->ParameterSetID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 145; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 145: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter)] */ + if (dinParameterSetType_Parameter_currArrayIndex < dinParameterSetType->Parameter.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinParameterType(stream, &dinParameterSetType->Parameter.array [dinParameterSetType_Parameter_currArrayIndex++]); + } + grammarID = 146; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 146: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter), END_ELEMENT] */ + if (dinParameterSetType_Parameter_currArrayIndex < dinParameterSetType->Parameter.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinParameterType(stream, &dinParameterSetType->Parameter.array [dinParameterSetType_Parameter_currArrayIndex++]); + } + grammarID = 146; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CurrentDemandReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus,"urn:iso:15118:2:2010:MsgBody":EVTargetCurrent,"urn:iso:15118:2:2010:MsgBody":EVMaximumVoltageLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVMaximumCurrentLimit{0-1},"urn:iso:15118:2:2010:MsgBody":EVMaximumPowerLimit{0-1},"urn:iso:15118:2:2010:MsgBody":BulkChargingComplete{0-1},"urn:iso:15118:2:2010:MsgBody":ChargingComplete,"urn:iso:15118:2:2010:MsgBody":RemainingTimeToFullSoC{0-1},"urn:iso:15118:2:2010:MsgBody":RemainingTimeToBulkSoC{0-1},"urn:iso:15118:2:2010:MsgBody":EVTargetVoltage)', derivedBy='EXTENSION'. */ +static int encode_dinCurrentDemandReqType(bitstream_t* stream, struct dinCurrentDemandReqType* dinCurrentDemandReqType) { + int grammarID = 147; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 147: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinDC_EVStatusType(stream, &dinCurrentDemandReqType->DC_EVStatus ); + } + grammarID = 148; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 148: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVTargetCurrent ); + } + grammarID = 149; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 149: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + if ( dinCurrentDemandReqType->EVMaximumVoltageLimit_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVMaximumVoltageLimit ); + } + grammarID = 150; + } else if ( dinCurrentDemandReqType->EVMaximumCurrentLimit_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVMaximumCurrentLimit ); + } + grammarID = 151; + } else if ( dinCurrentDemandReqType->EVMaximumPowerLimit_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVMaximumPowerLimit ); + } + grammarID = 152; + } else if ( dinCurrentDemandReqType->BulkChargingComplete_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinCurrentDemandReqType->BulkChargingComplete); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 153; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 3, 4); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinCurrentDemandReqType->ChargingComplete); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 154; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 150: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + if ( dinCurrentDemandReqType->EVMaximumCurrentLimit_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVMaximumCurrentLimit ); + } + grammarID = 151; + } else if ( dinCurrentDemandReqType->EVMaximumPowerLimit_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVMaximumPowerLimit ); + } + grammarID = 152; + } else if ( dinCurrentDemandReqType->BulkChargingComplete_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinCurrentDemandReqType->BulkChargingComplete); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 153; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinCurrentDemandReqType->ChargingComplete); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 154; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 151: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + if ( dinCurrentDemandReqType->EVMaximumPowerLimit_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVMaximumPowerLimit ); + } + grammarID = 152; + } else if ( dinCurrentDemandReqType->BulkChargingComplete_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinCurrentDemandReqType->BulkChargingComplete); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 153; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinCurrentDemandReqType->ChargingComplete); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 154; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 152: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + if ( dinCurrentDemandReqType->BulkChargingComplete_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinCurrentDemandReqType->BulkChargingComplete); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 153; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinCurrentDemandReqType->ChargingComplete); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 154; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 153: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinCurrentDemandReqType->ChargingComplete); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 154; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 154: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToFullSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + if ( dinCurrentDemandReqType->RemainingTimeToFullSoC_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->RemainingTimeToFullSoC ); + } + grammarID = 155; + } else if ( dinCurrentDemandReqType->RemainingTimeToBulkSoC_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->RemainingTimeToBulkSoC ); + } + grammarID = 156; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVTargetVoltage ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 155: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + if ( dinCurrentDemandReqType->RemainingTimeToBulkSoC_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->RemainingTimeToBulkSoC ); + } + grammarID = 156; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVTargetVoltage ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 156: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinCurrentDemandReqType->EVTargetVoltage ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PreChargeReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":DC_EVStatus,"urn:iso:15118:2:2010:MsgBody":EVTargetVoltage,"urn:iso:15118:2:2010:MsgBody":EVTargetCurrent)', derivedBy='EXTENSION'. */ +static int encode_dinPreChargeReqType(bitstream_t* stream, struct dinPreChargeReqType* dinPreChargeReqType) { + int grammarID = 157; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 157: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinDC_EVStatusType(stream, &dinPreChargeReqType->DC_EVStatus ); + } + grammarID = 158; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 158: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinPreChargeReqType->EVTargetVoltage ); + } + grammarID = 159; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 159: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinPreChargeReqType->EVTargetCurrent ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":SignedInfo,"http://www.w3.org/2000/09/xmldsig#":SignatureValue,"http://www.w3.org/2000/09/xmldsig#":KeyInfo{0-1},"http://www.w3.org/2000/09/xmldsig#":Object{0-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinSignatureType(bitstream_t* stream, struct dinSignatureType* dinSignatureType) { + int grammarID = 160; + int done = 0; + + unsigned int dinSignatureType_Object_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 160: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + if ( dinSignatureType->Id_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSignatureType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinSignatureType->Id.characters, dinSignatureType->Id.charactersLen); + } + } + grammarID = 161; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinSignedInfoType(stream, &dinSignatureType->SignedInfo ); + } + grammarID = 162; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 161: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinSignedInfoType(stream, &dinSignatureType->SignedInfo ); + } + grammarID = 162; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 162: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinSignatureValueType(stream, &dinSignatureType->SignatureValue ); + } + grammarID = 163; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 163: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), END_ELEMENT] */ + if ( dinSignatureType->KeyInfo_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinKeyInfoType(stream, &dinSignatureType->KeyInfo ); + } + grammarID = 164; + } else if (dinSignatureType_Object_currArrayIndex < dinSignatureType->Object.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinObjectType(stream, &dinSignatureType->Object.array [dinSignatureType_Object_currArrayIndex++]); + } + grammarID = 164; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 164: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), END_ELEMENT] */ + if (dinSignatureType_Object_currArrayIndex < dinSignatureType->Object.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinObjectType(stream, &dinSignatureType->Object.array [dinSignatureType_Object_currArrayIndex++]); + } + grammarID = 164; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ReferenceType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1},"http://www.w3.org/2000/09/xmldsig#":DigestMethod,"http://www.w3.org/2000/09/xmldsig#":DigestValue)', derivedBy='RESTRICTION'. */ +static int encode_dinReferenceType(bitstream_t* stream, struct dinReferenceType* dinReferenceType) { + int grammarID = 165; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 165: + /* FirstStartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + if ( dinReferenceType->Id_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinReferenceType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinReferenceType->Id.characters, dinReferenceType->Id.charactersLen); + } + } + grammarID = 166; + } else if ( dinReferenceType->Type_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinReferenceType->Type.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinReferenceType->Type.characters, dinReferenceType->Type.charactersLen); + } + } + grammarID = 167; + } else if ( dinReferenceType->URI_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinReferenceType->URI.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinReferenceType->URI.characters, dinReferenceType->URI.charactersLen); + } + } + grammarID = 168; + } else if ( dinReferenceType->Transforms_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + errn = encode_dinTransformsType(stream, &dinReferenceType->Transforms ); + } + grammarID = 169; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 3, 4); + if(errn == 0) { + errn = encode_dinDigestMethodType(stream, &dinReferenceType->DigestMethod ); + } + grammarID = 170; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 166: + /* StartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + if ( dinReferenceType->Type_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinReferenceType->Type.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinReferenceType->Type.characters, dinReferenceType->Type.charactersLen); + } + } + grammarID = 167; + } else if ( dinReferenceType->URI_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinReferenceType->URI.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinReferenceType->URI.characters, dinReferenceType->URI.charactersLen); + } + } + grammarID = 168; + } else if ( dinReferenceType->Transforms_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + errn = encode_dinTransformsType(stream, &dinReferenceType->Transforms ); + } + grammarID = 169; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + errn = encode_dinDigestMethodType(stream, &dinReferenceType->DigestMethod ); + } + grammarID = 170; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 167: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + if ( dinReferenceType->URI_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinReferenceType->URI.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinReferenceType->URI.characters, dinReferenceType->URI.charactersLen); + } + } + grammarID = 168; + } else if ( dinReferenceType->Transforms_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinTransformsType(stream, &dinReferenceType->Transforms ); + } + grammarID = 169; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + errn = encode_dinDigestMethodType(stream, &dinReferenceType->DigestMethod ); + } + grammarID = 170; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 168: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + if ( dinReferenceType->Transforms_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinTransformsType(stream, &dinReferenceType->Transforms ); + } + grammarID = 169; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinDigestMethodType(stream, &dinReferenceType->DigestMethod ); + } + grammarID = 170; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 169: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinDigestMethodType(stream, &dinReferenceType->DigestMethod ); + } + grammarID = 170; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 170: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinReferenceType->DigestValue.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinReferenceType->DigestValue.bytes, dinReferenceType->DigestValue.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ProfileEntryType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ChargingProfileEntryStart,"urn:iso:15118:2:2010:MsgDataTypes":ChargingProfileEntryMaxPower)', derivedBy='RESTRICTION'. */ +static int encode_dinProfileEntryType(bitstream_t* stream, struct dinProfileEntryType* dinProfileEntryType) { + int grammarID = 171; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 171: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, dinProfileEntryType->ChargingProfileEntryStart); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 172; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 172: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinProfileEntryType->ChargingProfileEntryMaxPower); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDef,#AnonType_V2G_Message', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDef":Header,"urn:iso:15118:2:2010:MsgDef":Body)', derivedBy='RESTRICTION'. */ +static int encode_dinAnonType_V2G_Message(bitstream_t* stream, struct dinAnonType_V2G_Message* dinAnonType_V2G_Message) { + int grammarID = 173; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 173: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinMessageHeaderType(stream, &dinAnonType_V2G_Message->Header ); + } + grammarID = 174; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 174: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinBodyType(stream, &dinAnonType_V2G_Message->Body ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ChargeParameterDiscoveryReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":EVRequestedEnergyTransferType,"urn:iso:15118:2:2010:MsgDataTypes":EVChargeParameter)', derivedBy='EXTENSION'. */ +static int encode_dinChargeParameterDiscoveryReqType(bitstream_t* stream, struct dinChargeParameterDiscoveryReqType* dinChargeParameterDiscoveryReqType) { + int grammarID = 175; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 175: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 3, dinChargeParameterDiscoveryReqType->EVRequestedEnergyTransferType); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 176; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 176: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter)] */ + if ( dinChargeParameterDiscoveryReqType->AC_EVChargeParameter_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinAC_EVChargeParameterType(stream, &dinChargeParameterDiscoveryReqType->AC_EVChargeParameter ); + } + grammarID = 4; + } else if ( dinChargeParameterDiscoveryReqType->DC_EVChargeParameter_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinDC_EVChargeParameterType(stream, &dinChargeParameterDiscoveryReqType->DC_EVChargeParameter ); + } + grammarID = 4; + } else if ( dinChargeParameterDiscoveryReqType->EVChargeParameter_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + errn = encode_dinEVChargeParameterType(stream, &dinChargeParameterDiscoveryReqType->EVChargeParameter ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ConsumptionCostType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":startValue,"urn:iso:15118:2:2010:MsgDataTypes":Cost{0-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinConsumptionCostType(bitstream_t* stream, struct dinConsumptionCostType* dinConsumptionCostType) { + int grammarID = 177; + int done = 0; + + unsigned int dinConsumptionCostType_Cost_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 177: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, dinConsumptionCostType->startValue); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 178; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 178: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Cost), END_ELEMENT] */ + if (dinConsumptionCostType_Cost_currArrayIndex < dinConsumptionCostType->Cost.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinCostType(stream, &dinConsumptionCostType->Cost.array [dinConsumptionCostType_Cost_currArrayIndex++]); + } + grammarID = 178; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,RSAKeyValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Modulus,"http://www.w3.org/2000/09/xmldsig#":Exponent)', derivedBy='RESTRICTION'. */ +static int encode_dinRSAKeyValueType(bitstream_t* stream, struct dinRSAKeyValueType* dinRSAKeyValueType) { + int grammarID = 179; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 179: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinRSAKeyValueType->Modulus.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinRSAKeyValueType->Modulus.bytes, dinRSAKeyValueType->Modulus.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 180; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 180: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Exponent)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinRSAKeyValueType->Exponent.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinRSAKeyValueType->Exponent.bytes, dinRSAKeyValueType->Exponent.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceTag,"urn:iso:15118:2:2010:MsgDataTypes":FreeService)', derivedBy='RESTRICTION'. */ +static int encode_dinServiceType(bitstream_t* stream, struct dinServiceType* dinServiceType) { + int grammarID = 181; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 181: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinServiceTagType(stream, &dinServiceType->ServiceTag ); + } + grammarID = 182; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 182: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinServiceType->FreeService); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceTagListType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Service{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinServiceTagListType(bitstream_t* stream, struct dinServiceTagListType* dinServiceTagListType) { + int grammarID = 183; + int done = 0; + + unsigned int dinServiceTagListType_Service_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 183: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service)] */ + if (dinServiceTagListType_Service_currArrayIndex < dinServiceTagListType->Service.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinServiceType(stream, &dinServiceTagListType->Service.array [dinServiceTagListType_Service_currArrayIndex++]); + } + grammarID = 184; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 184: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service), END_ELEMENT] */ + if (dinServiceTagListType_Service_currArrayIndex < dinServiceTagListType->Service.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinServiceType(stream, &dinServiceTagListType->Service.array [dinServiceTagListType_Service_currArrayIndex++]); + } + grammarID = 184; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVSEStatusType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +static int encode_dinEVSEStatusType(bitstream_t* stream, struct dinEVSEStatusType* dinEVSEStatusType) { + int grammarID = 64; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,SessionSetupResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":EVSEID,"urn:iso:15118:2:2010:MsgBody":DateTimeNow{0-1})', derivedBy='EXTENSION'. */ +static int encode_dinSessionSetupResType(bitstream_t* stream, struct dinSessionSetupResType* dinSessionSetupResType) { + int grammarID = 185; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 185: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinSessionSetupResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 186; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 186: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSessionSetupResType->EVSEID.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinSessionSetupResType->EVSEID.bytes, dinSessionSetupResType->EVSEID.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 187; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 187: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow), END_ELEMENT] */ + if ( dinSessionSetupResType->DateTimeNow_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger64(stream, dinSessionSetupResType->DateTimeNow); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,EVPowerDeliveryParameterType', base type name='anyType', content type='EMPTY', isAbstract='true', hasTypeId='false', final='0', block='0', derivedBy='RESTRICTION'. */ +static int encode_dinEVPowerDeliveryParameterType(bitstream_t* stream, struct dinEVPowerDeliveryParameterType* dinEVPowerDeliveryParameterType) { + int grammarID = 64; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 64: + /* FirstStartTag[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,X509IssuerSerialType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":X509IssuerName,"http://www.w3.org/2000/09/xmldsig#":X509SerialNumber)', derivedBy='RESTRICTION'. */ +static int encode_dinX509IssuerSerialType(bitstream_t* stream, struct dinX509IssuerSerialType* dinX509IssuerSerialType) { + int grammarID = 188; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 188: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinX509IssuerSerialType->X509IssuerName.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinX509IssuerSerialType->X509IssuerName.characters, dinX509IssuerSerialType->X509IssuerName.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 189; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 189: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SerialNumber)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger64(stream, dinX509IssuerSerialType->X509SerialNumber); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SelectedServiceType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceID,"urn:iso:15118:2:2010:MsgDataTypes":ParameterSetID{0-1})', derivedBy='RESTRICTION'. */ +static int encode_dinSelectedServiceType(bitstream_t* stream, struct dinSelectedServiceType* dinSelectedServiceType) { + int grammarID = 190; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 190: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, dinSelectedServiceType->ServiceID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 191; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 191: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID), END_ELEMENT] */ + if ( dinSelectedServiceType->ParameterSetID_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinSelectedServiceType->ParameterSetID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,MeteringReceiptResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":AC_EVSEStatus)', derivedBy='EXTENSION'. */ +static int encode_dinMeteringReceiptResType(bitstream_t* stream, struct dinMeteringReceiptResType* dinMeteringReceiptResType) { + int grammarID = 192; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 192: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinMeteringReceiptResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 54; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 54: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinAC_EVSEStatusType(stream, &dinMeteringReceiptResType->AC_EVSEStatus ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVStatusType', base type name='EVStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVReady,"urn:iso:15118:2:2010:MsgDataTypes":EVCabinConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVRESSConditioning{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVErrorCode,"urn:iso:15118:2:2010:MsgDataTypes":EVRESSSOC)', derivedBy='EXTENSION'. */ +static int encode_dinDC_EVStatusType(bitstream_t* stream, struct dinDC_EVStatusType* dinDC_EVStatusType) { + int grammarID = 193; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 193: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinDC_EVStatusType->EVReady); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 194; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 194: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + if ( dinDC_EVStatusType->EVCabinConditioning_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinDC_EVStatusType->EVCabinConditioning); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 195; + } else if ( dinDC_EVStatusType->EVRESSConditioning_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinDC_EVStatusType->EVRESSConditioning); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 196; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 4, dinDC_EVStatusType->EVErrorCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 197; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 195: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + if ( dinDC_EVStatusType->EVRESSConditioning_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinDC_EVStatusType->EVRESSConditioning); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 196; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 4, dinDC_EVStatusType->EVErrorCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 197; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 196: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 4, dinDC_EVStatusType->EVErrorCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 197; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 197: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 7, (uint32_t)(dinDC_EVStatusType->EVRESSSOC - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PhysicalValueType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Multiplier,"urn:iso:15118:2:2010:MsgDataTypes":Unit{0-1},"urn:iso:15118:2:2010:MsgDataTypes":Value)', derivedBy='RESTRICTION'. */ +static int encode_dinPhysicalValueType(bitstream_t* stream, struct dinPhysicalValueType* dinPhysicalValueType) { + int grammarID = 198; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 198: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 3, (uint32_t)(dinPhysicalValueType->Multiplier + 3)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 199; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 199: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value)] */ + if ( dinPhysicalValueType->Unit_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 4, dinPhysicalValueType->Unit); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 200; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinPhysicalValueType->Value); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 200: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinPhysicalValueType->Value); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ManifestType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinManifestType(bitstream_t* stream, struct dinManifestType* dinManifestType) { + int grammarID = 201; + int done = 0; + + unsigned int dinManifestType_Reference_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 201: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + if ( dinManifestType->Id_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinManifestType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinManifestType->Id.characters, dinManifestType->Id.charactersLen); + } + } + grammarID = 202; + } else if (dinManifestType_Reference_currArrayIndex < dinManifestType->Reference.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinReferenceType(stream, &dinManifestType->Reference.array [dinManifestType_Reference_currArrayIndex++]); + } + grammarID = 203; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 202: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + if (dinManifestType_Reference_currArrayIndex < dinManifestType->Reference.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinReferenceType(stream, &dinManifestType->Reference.array [dinManifestType_Reference_currArrayIndex++]); + } + grammarID = 203; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 203: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), END_ELEMENT] */ + if (dinManifestType_Reference_currArrayIndex < dinManifestType->Reference.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinReferenceType(stream, &dinManifestType->Reference.array [dinManifestType_Reference_currArrayIndex++]); + } + grammarID = 203; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PMaxScheduleEntryType', base type name='EntryType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("urn:iso:15118:2:2010:MsgDataTypes":TimeInterval),("urn:iso:15118:2:2010:MsgDataTypes":PMax))', derivedBy='EXTENSION'. */ +static int encode_dinPMaxScheduleEntryType(bitstream_t* stream, struct dinPMaxScheduleEntryType* dinPMaxScheduleEntryType) { + int grammarID = 204; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 204: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval)] */ + if ( dinPMaxScheduleEntryType->RelativeTimeInterval_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinRelativeTimeIntervalType(stream, &dinPMaxScheduleEntryType->RelativeTimeInterval ); + } + grammarID = 205; + } else if ( dinPMaxScheduleEntryType->TimeInterval_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinIntervalType(stream, &dinPMaxScheduleEntryType->TimeInterval ); + } + grammarID = 205; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 205: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMax)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinPMaxScheduleEntryType->PMax); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceParameterListType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ParameterSet{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinServiceParameterListType(bitstream_t* stream, struct dinServiceParameterListType* dinServiceParameterListType) { + int grammarID = 206; + int done = 0; + + unsigned int dinServiceParameterListType_ParameterSet_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 206: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet)] */ + if (dinServiceParameterListType_ParameterSet_currArrayIndex < dinServiceParameterListType->ParameterSet.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinParameterSetType(stream, &dinServiceParameterListType->ParameterSet.array [dinServiceParameterListType_ParameterSet_currArrayIndex++]); + } + grammarID = 207; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 207: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet), END_ELEMENT] */ + if (dinServiceParameterListType_ParameterSet_currArrayIndex < dinServiceParameterListType->ParameterSet.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinParameterSetType(stream, &dinServiceParameterListType->ParameterSet.array [dinServiceParameterListType_ParameterSet_currArrayIndex++]); + } + grammarID = 207; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignatureValueType', base type name='base64Binary', content type='SIMPLE', isAbstract='false', hasTypeId='false', final='0', block='0', derivedBy='EXTENSION'. */ +static int encode_dinSignatureValueType(bitstream_t* stream, struct dinSignatureValueType* dinSignatureValueType) { + int grammarID = 208; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 208: + /* FirstStartTag[ATTRIBUTE[STRING](Id), CHARACTERS[BINARY_BASE64]] */ + if ( dinSignatureValueType->Id_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSignatureValueType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinSignatureValueType->Id.characters, dinSignatureValueType->Id.charactersLen); + } + } + grammarID = 209; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSignatureValueType->CONTENT.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinSignatureValueType->CONTENT.bytes, dinSignatureValueType->CONTENT.bytesLen); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 209: + /* StartTag[CHARACTERS[BINARY_BASE64]] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSignatureValueType->CONTENT.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinSignatureValueType->CONTENT.bytes, dinSignatureValueType->CONTENT.bytesLen); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,PaymentOptionsType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":PaymentOption{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinPaymentOptionsType(bitstream_t* stream, struct dinPaymentOptionsType* dinPaymentOptionsType) { + int grammarID = 210; + int done = 0; + + unsigned int dinPaymentOptionsType_PaymentOption_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 210: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption)] */ + if (dinPaymentOptionsType_PaymentOption_currArrayIndex < dinPaymentOptionsType->PaymentOption.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 1, dinPaymentOptionsType->PaymentOption.array[dinPaymentOptionsType_PaymentOption_currArrayIndex++]); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 211; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 211: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption), END_ELEMENT] */ + if (dinPaymentOptionsType_PaymentOption_currArrayIndex < dinPaymentOptionsType->PaymentOption.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 1, dinPaymentOptionsType->PaymentOption.array[dinPaymentOptionsType_PaymentOption_currArrayIndex++]); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 211; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceTagType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":ServiceID,"urn:iso:15118:2:2010:MsgDataTypes":ServiceName{0-1},"urn:iso:15118:2:2010:MsgDataTypes":ServiceCategory,"urn:iso:15118:2:2010:MsgDataTypes":ServiceScope{0-1})', derivedBy='RESTRICTION'. */ +static int encode_dinServiceTagType(bitstream_t* stream, struct dinServiceTagType* dinServiceTagType) { + int grammarID = 212; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 212: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, dinServiceTagType->ServiceID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 213; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 213: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory)] */ + if ( dinServiceTagType->ServiceName_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinServiceTagType->ServiceName.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinServiceTagType->ServiceName.characters, dinServiceTagType->ServiceName.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 214; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 2, dinServiceTagType->ServiceCategory); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 215; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 214: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 2, dinServiceTagType->ServiceCategory); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 215; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 215: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), END_ELEMENT] */ + if ( dinServiceTagType->ServiceScope_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinServiceTagType->ServiceScope.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinServiceTagType->ServiceScope.characters, dinServiceTagType->ServiceScope.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEStatusType', base type name='EVSEStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":PowerSwitchClosed,"urn:iso:15118:2:2010:MsgDataTypes":RCD,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)', derivedBy='EXTENSION'. */ +static int encode_dinAC_EVSEStatusType(bitstream_t* stream, struct dinAC_EVSEStatusType* dinAC_EVSEStatusType) { + int grammarID = 216; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 216: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinAC_EVSEStatusType->PowerSwitchClosed); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 217; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 217: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinAC_EVSEStatusType->RCD); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 218; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 218: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, dinAC_EVSEStatusType->NotificationMaxDelay); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 219; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 219: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 2, dinAC_EVSEStatusType->EVSENotification); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateUpdateReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":ListOfRootCertificateIDs,"urn:iso:15118:2:2010:MsgBody":DHParams)', derivedBy='EXTENSION'. */ +static int encode_dinCertificateUpdateReqType(bitstream_t* stream, struct dinCertificateUpdateReqType* dinCertificateUpdateReqType) { + int grammarID = 220; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 220: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + if ( dinCertificateUpdateReqType->Id_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCertificateUpdateReqType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinCertificateUpdateReqType->Id.characters, dinCertificateUpdateReqType->Id.charactersLen); + } + } + grammarID = 221; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinCertificateChainType(stream, &dinCertificateUpdateReqType->ContractSignatureCertChain ); + } + grammarID = 222; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 221: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinCertificateChainType(stream, &dinCertificateUpdateReqType->ContractSignatureCertChain ); + } + grammarID = 222; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 222: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCertificateUpdateReqType->ContractID.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinCertificateUpdateReqType->ContractID.characters, dinCertificateUpdateReqType->ContractID.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 135; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 135: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinListOfRootCertificateIDsType(stream, &dinCertificateUpdateReqType->ListOfRootCertificateIDs ); + } + grammarID = 136; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 136: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCertificateUpdateReqType->DHParams.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinCertificateUpdateReqType->DHParams.bytes, dinCertificateUpdateReqType->DHParams.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServicePaymentSelectionResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode)', derivedBy='EXTENSION'. */ +static int encode_dinServicePaymentSelectionResType(bitstream_t* stream, struct dinServicePaymentSelectionResType* dinServicePaymentSelectionResType) { + int grammarID = 223; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 223: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinServicePaymentSelectionResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SAScheduleTupleType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgDataTypes":PMaxSchedule,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariff{0-1})', derivedBy='RESTRICTION'. */ +static int encode_dinSAScheduleTupleType(bitstream_t* stream, struct dinSAScheduleTupleType* dinSAScheduleTupleType) { + int grammarID = 224; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 224: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinSAScheduleTupleType->SAScheduleTupleID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 225; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 225: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxSchedule)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPMaxScheduleType(stream, &dinSAScheduleTupleType->PMaxSchedule ); + } + grammarID = 226; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 226: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariff), END_ELEMENT] */ + if ( dinSAScheduleTupleType->SalesTariff_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinSalesTariffType(stream, &dinSAScheduleTupleType->SalesTariff ); + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ChargingProfileType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SAScheduleTupleID,"urn:iso:15118:2:2010:MsgDataTypes":ProfileEntry{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinChargingProfileType(bitstream_t* stream, struct dinChargingProfileType* dinChargingProfileType) { + int grammarID = 227; + int done = 0; + + unsigned int dinChargingProfileType_ProfileEntry_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 227: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinChargingProfileType->SAScheduleTupleID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 228; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 228: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry)] */ + if (dinChargingProfileType_ProfileEntry_currArrayIndex < dinChargingProfileType->ProfileEntry.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinProfileEntryType(stream, &dinChargingProfileType->ProfileEntry.array [dinChargingProfileType_ProfileEntry_currArrayIndex++]); + } + grammarID = 229; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 229: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry), END_ELEMENT] */ + if (dinChargingProfileType_ProfileEntry_currArrayIndex < dinChargingProfileType->ProfileEntry.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinProfileEntryType(stream, &dinChargingProfileType->ProfileEntry.array [dinChargingProfileType_ProfileEntry_currArrayIndex++]); + } + grammarID = 229; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,ServiceDiscoveryReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ServiceScope{0-1},"urn:iso:15118:2:2010:MsgBody":ServiceCategory{0-1})', derivedBy='EXTENSION'. */ +static int encode_dinServiceDiscoveryReqType(bitstream_t* stream, struct dinServiceDiscoveryReqType* dinServiceDiscoveryReqType) { + int grammarID = 230; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 230: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + if ( dinServiceDiscoveryReqType->ServiceScope_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinServiceDiscoveryReqType->ServiceScope.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinServiceDiscoveryReqType->ServiceScope.characters, dinServiceDiscoveryReqType->ServiceScope.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 231; + } else if ( dinServiceDiscoveryReqType->ServiceCategory_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 2, dinServiceDiscoveryReqType->ServiceCategory); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 231: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), END_ELEMENT] */ + if ( dinServiceDiscoveryReqType->ServiceCategory_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 2, dinServiceDiscoveryReqType->ServiceCategory); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,AC_EVSEChargeParameterType', base type name='EVSEChargeParameterType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":AC_EVSEStatus,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaxVoltage,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMaxCurrent,"urn:iso:15118:2:2010:MsgDataTypes":EVSEMinCurrent)', derivedBy='EXTENSION'. */ +static int encode_dinAC_EVSEChargeParameterType(bitstream_t* stream, struct dinAC_EVSEChargeParameterType* dinAC_EVSEChargeParameterType) { + int grammarID = 232; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 232: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinAC_EVSEStatusType(stream, &dinAC_EVSEChargeParameterType->AC_EVSEStatus ); + } + grammarID = 233; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 233: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinAC_EVSEChargeParameterType->EVSEMaxVoltage ); + } + grammarID = 234; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 234: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinAC_EVSEChargeParameterType->EVSEMaxCurrent ); + } + grammarID = 235; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 235: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinAC_EVSEChargeParameterType->EVSEMinCurrent ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,KeyInfoType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":KeyName|"http://www.w3.org/2000/09/xmldsig#":KeyValue|"http://www.w3.org/2000/09/xmldsig#":RetrievalMethod|"http://www.w3.org/2000/09/xmldsig#":X509Data|"http://www.w3.org/2000/09/xmldsig#":PGPData|"http://www.w3.org/2000/09/xmldsig#":SPKIData|"http://www.w3.org/2000/09/xmldsig#":MgmtData|(WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}', derivedBy='RESTRICTION'. */ +static int encode_dinKeyInfoType(bitstream_t* stream, struct dinKeyInfoType* dinKeyInfoType) { + int grammarID = 236; + int done = 0; + int wcDone = 0; + + unsigned int dinKeyInfoType_KeyName_currArrayIndex = 0; + unsigned int dinKeyInfoType_KeyValue_currArrayIndex = 0; + unsigned int dinKeyInfoType_RetrievalMethod_currArrayIndex = 0; + unsigned int dinKeyInfoType_X509Data_currArrayIndex = 0; + unsigned int dinKeyInfoType_PGPData_currArrayIndex = 0; + unsigned int dinKeyInfoType_SPKIData_currArrayIndex = 0; + unsigned int dinKeyInfoType_MgmtData_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 236: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + if ( dinKeyInfoType->Id_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 4, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinKeyInfoType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinKeyInfoType->Id.characters, dinKeyInfoType->Id.charactersLen); + } + } + grammarID = 237; + } else if (dinKeyInfoType_KeyName_currArrayIndex < dinKeyInfoType->KeyName.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 1); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinKeyInfoType->KeyName.array[dinKeyInfoType_KeyName_currArrayIndex].charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinKeyInfoType->KeyName.array[dinKeyInfoType_KeyName_currArrayIndex].characters, dinKeyInfoType->KeyName.array[dinKeyInfoType_KeyName_currArrayIndex].charactersLen); + dinKeyInfoType_KeyName_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 238; + } else if (dinKeyInfoType_KeyValue_currArrayIndex < dinKeyInfoType->KeyValue.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 2); + if(errn == 0) { + errn = encode_dinKeyValueType(stream, &dinKeyInfoType->KeyValue.array [dinKeyInfoType_KeyValue_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_RetrievalMethod_currArrayIndex < dinKeyInfoType->RetrievalMethod.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 3); + if(errn == 0) { + errn = encode_dinRetrievalMethodType(stream, &dinKeyInfoType->RetrievalMethod.array [dinKeyInfoType_RetrievalMethod_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_X509Data_currArrayIndex < dinKeyInfoType->X509Data.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 4); + if(errn == 0) { + errn = encode_dinX509DataType(stream, &dinKeyInfoType->X509Data.array [dinKeyInfoType_X509Data_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_PGPData_currArrayIndex < dinKeyInfoType->PGPData.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 5); + if(errn == 0) { + errn = encode_dinPGPDataType(stream, &dinKeyInfoType->PGPData.array [dinKeyInfoType_PGPData_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_SPKIData_currArrayIndex < dinKeyInfoType->SPKIData.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 6); + if(errn == 0) { + errn = encode_dinSPKIDataType(stream, &dinKeyInfoType->SPKIData.array [dinKeyInfoType_SPKIData_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_MgmtData_currArrayIndex < dinKeyInfoType->MgmtData.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 7); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinKeyInfoType->MgmtData.array[dinKeyInfoType_MgmtData_currArrayIndex].charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinKeyInfoType->MgmtData.array[dinKeyInfoType_MgmtData_currArrayIndex].characters, dinKeyInfoType->MgmtData.array[dinKeyInfoType_MgmtData_currArrayIndex].charactersLen); + dinKeyInfoType_MgmtData_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 238; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 238; + } else if ( dinKeyInfoType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 4, 9); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinKeyInfoType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinKeyInfoType->ANY.characters, dinKeyInfoType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 239; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 237: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + if (dinKeyInfoType_KeyName_currArrayIndex < dinKeyInfoType->KeyName.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinKeyInfoType->KeyName.array[dinKeyInfoType_KeyName_currArrayIndex].charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinKeyInfoType->KeyName.array[dinKeyInfoType_KeyName_currArrayIndex].characters, dinKeyInfoType->KeyName.array[dinKeyInfoType_KeyName_currArrayIndex].charactersLen); + dinKeyInfoType_KeyName_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 238; + } else if (dinKeyInfoType_KeyValue_currArrayIndex < dinKeyInfoType->KeyValue.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 1); + if(errn == 0) { + errn = encode_dinKeyValueType(stream, &dinKeyInfoType->KeyValue.array [dinKeyInfoType_KeyValue_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_RetrievalMethod_currArrayIndex < dinKeyInfoType->RetrievalMethod.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 2); + if(errn == 0) { + errn = encode_dinRetrievalMethodType(stream, &dinKeyInfoType->RetrievalMethod.array [dinKeyInfoType_RetrievalMethod_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_X509Data_currArrayIndex < dinKeyInfoType->X509Data.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 3); + if(errn == 0) { + errn = encode_dinX509DataType(stream, &dinKeyInfoType->X509Data.array [dinKeyInfoType_X509Data_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_PGPData_currArrayIndex < dinKeyInfoType->PGPData.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 4); + if(errn == 0) { + errn = encode_dinPGPDataType(stream, &dinKeyInfoType->PGPData.array [dinKeyInfoType_PGPData_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_SPKIData_currArrayIndex < dinKeyInfoType->SPKIData.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 5); + if(errn == 0) { + errn = encode_dinSPKIDataType(stream, &dinKeyInfoType->SPKIData.array [dinKeyInfoType_SPKIData_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_MgmtData_currArrayIndex < dinKeyInfoType->MgmtData.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 6); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinKeyInfoType->MgmtData.array[dinKeyInfoType_MgmtData_currArrayIndex].charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinKeyInfoType->MgmtData.array[dinKeyInfoType_MgmtData_currArrayIndex].characters, dinKeyInfoType->MgmtData.array[dinKeyInfoType_MgmtData_currArrayIndex].charactersLen); + dinKeyInfoType_MgmtData_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 238; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 238; + } else if ( dinKeyInfoType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 4, 8); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinKeyInfoType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinKeyInfoType->ANY.characters, dinKeyInfoType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 239; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 238: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (dinKeyInfoType_KeyName_currArrayIndex < dinKeyInfoType->KeyName.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinKeyInfoType->KeyName.array[dinKeyInfoType_KeyName_currArrayIndex].charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinKeyInfoType->KeyName.array[dinKeyInfoType_KeyName_currArrayIndex].characters, dinKeyInfoType->KeyName.array[dinKeyInfoType_KeyName_currArrayIndex].charactersLen); + dinKeyInfoType_KeyName_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 238; + } else if (dinKeyInfoType_KeyValue_currArrayIndex < dinKeyInfoType->KeyValue.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 1); + if(errn == 0) { + errn = encode_dinKeyValueType(stream, &dinKeyInfoType->KeyValue.array [dinKeyInfoType_KeyValue_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_RetrievalMethod_currArrayIndex < dinKeyInfoType->RetrievalMethod.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 2); + if(errn == 0) { + errn = encode_dinRetrievalMethodType(stream, &dinKeyInfoType->RetrievalMethod.array [dinKeyInfoType_RetrievalMethod_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_X509Data_currArrayIndex < dinKeyInfoType->X509Data.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 3); + if(errn == 0) { + errn = encode_dinX509DataType(stream, &dinKeyInfoType->X509Data.array [dinKeyInfoType_X509Data_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_PGPData_currArrayIndex < dinKeyInfoType->PGPData.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 4); + if(errn == 0) { + errn = encode_dinPGPDataType(stream, &dinKeyInfoType->PGPData.array [dinKeyInfoType_PGPData_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_SPKIData_currArrayIndex < dinKeyInfoType->SPKIData.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 5); + if(errn == 0) { + errn = encode_dinSPKIDataType(stream, &dinKeyInfoType->SPKIData.array [dinKeyInfoType_SPKIData_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_MgmtData_currArrayIndex < dinKeyInfoType->MgmtData.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 6); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinKeyInfoType->MgmtData.array[dinKeyInfoType_MgmtData_currArrayIndex].charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinKeyInfoType->MgmtData.array[dinKeyInfoType_MgmtData_currArrayIndex].characters, dinKeyInfoType->MgmtData.array[dinKeyInfoType_MgmtData_currArrayIndex].charactersLen); + dinKeyInfoType_MgmtData_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 238; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 238; + } else if ( dinKeyInfoType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 4, 8); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinKeyInfoType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 4, 9); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinKeyInfoType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinKeyInfoType->ANY.characters, dinKeyInfoType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 238; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 239: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + if (dinKeyInfoType_KeyName_currArrayIndex < dinKeyInfoType->KeyName.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinKeyInfoType->KeyName.array[dinKeyInfoType_KeyName_currArrayIndex].charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinKeyInfoType->KeyName.array[dinKeyInfoType_KeyName_currArrayIndex].characters, dinKeyInfoType->KeyName.array[dinKeyInfoType_KeyName_currArrayIndex].charactersLen); + dinKeyInfoType_KeyName_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 238; + } else if (dinKeyInfoType_KeyValue_currArrayIndex < dinKeyInfoType->KeyValue.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 1); + if(errn == 0) { + errn = encode_dinKeyValueType(stream, &dinKeyInfoType->KeyValue.array [dinKeyInfoType_KeyValue_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_RetrievalMethod_currArrayIndex < dinKeyInfoType->RetrievalMethod.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 2); + if(errn == 0) { + errn = encode_dinRetrievalMethodType(stream, &dinKeyInfoType->RetrievalMethod.array [dinKeyInfoType_RetrievalMethod_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_X509Data_currArrayIndex < dinKeyInfoType->X509Data.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 3); + if(errn == 0) { + errn = encode_dinX509DataType(stream, &dinKeyInfoType->X509Data.array [dinKeyInfoType_X509Data_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_PGPData_currArrayIndex < dinKeyInfoType->PGPData.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 4); + if(errn == 0) { + errn = encode_dinPGPDataType(stream, &dinKeyInfoType->PGPData.array [dinKeyInfoType_PGPData_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_SPKIData_currArrayIndex < dinKeyInfoType->SPKIData.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 5); + if(errn == 0) { + errn = encode_dinSPKIDataType(stream, &dinKeyInfoType->SPKIData.array [dinKeyInfoType_SPKIData_currArrayIndex++]); + } + grammarID = 238; + } else if (dinKeyInfoType_MgmtData_currArrayIndex < dinKeyInfoType->MgmtData.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 4, 6); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinKeyInfoType->MgmtData.array[dinKeyInfoType_MgmtData_currArrayIndex].charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinKeyInfoType->MgmtData.array[dinKeyInfoType_MgmtData_currArrayIndex].characters, dinKeyInfoType->MgmtData.array[dinKeyInfoType_MgmtData_currArrayIndex].charactersLen); + dinKeyInfoType_MgmtData_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 238; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 238; + } else if ( dinKeyInfoType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 4, 8); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinKeyInfoType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinKeyInfoType->ANY.characters, dinKeyInfoType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 239; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,PaymentDetailsReqType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ContractID,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain)', derivedBy='EXTENSION'. */ +static int encode_dinPaymentDetailsReqType(bitstream_t* stream, struct dinPaymentDetailsReqType* dinPaymentDetailsReqType) { + int grammarID = 240; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 240: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinPaymentDetailsReqType->ContractID.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinPaymentDetailsReqType->ContractID.characters, dinPaymentDetailsReqType->ContractID.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 241; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 241: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinCertificateChainType(stream, &dinPaymentDetailsReqType->ContractSignatureCertChain ); + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CableCheckResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":DC_EVSEStatus,"urn:iso:15118:2:2010:MsgBody":EVSEProcessing)', derivedBy='EXTENSION'. */ +static int encode_dinCableCheckResType(bitstream_t* stream, struct dinCableCheckResType* dinCableCheckResType) { + int grammarID = 242; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 242: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinCableCheckResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 243; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 243: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinDC_EVSEStatusType(stream, &dinCableCheckResType->DC_EVSEStatus ); + } + grammarID = 17; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 17: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 1, dinCableCheckResType->EVSEProcessing); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,ObjectType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##any])){0-UNBOUNDED}', derivedBy='RESTRICTION'. */ +static int encode_dinObjectType(bitstream_t* stream, struct dinObjectType* dinObjectType) { + int grammarID = 244; + int done = 0; + int wcDone = 0; + + + while(!done) { + switch(grammarID) { + case 244: + /* FirstStartTag[ATTRIBUTE[STRING](Encoding), ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if ( dinObjectType->Encoding_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinObjectType->Encoding.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinObjectType->Encoding.characters, dinObjectType->Encoding.charactersLen); + } + } + grammarID = 245; + } else if ( dinObjectType->Id_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinObjectType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinObjectType->Id.characters, dinObjectType->Id.charactersLen); + } + } + grammarID = 246; + } else if ( dinObjectType->MimeType_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinObjectType->MimeType.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinObjectType->MimeType.characters, dinObjectType->MimeType.charactersLen); + } + } + grammarID = 19; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 20; + } else if ( dinObjectType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 3, 4); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinObjectType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 5); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinObjectType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinObjectType->ANY.characters, dinObjectType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 20; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 245: + /* StartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if ( dinObjectType->Id_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinObjectType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinObjectType->Id.characters, dinObjectType->Id.charactersLen); + } + } + grammarID = 246; + } else if ( dinObjectType->MimeType_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinObjectType->MimeType.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinObjectType->MimeType.characters, dinObjectType->MimeType.charactersLen); + } + } + grammarID = 19; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 20; + } else if ( dinObjectType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinObjectType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 4); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinObjectType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinObjectType->ANY.characters, dinObjectType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 20; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 246: + /* StartTag[ATTRIBUTE[STRING](MimeType), START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if ( dinObjectType->MimeType_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinObjectType->MimeType.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinObjectType->MimeType.characters, dinObjectType->MimeType.charactersLen); + } + } + grammarID = 19; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 20; + } else if ( dinObjectType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinObjectType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinObjectType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinObjectType->ANY.characters, dinObjectType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 20; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 19: + /* StartTag[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 20; + } else if ( dinObjectType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinObjectType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinObjectType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinObjectType->ANY.characters, dinObjectType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 20; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 20: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 20; + } else if ( dinObjectType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinObjectType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinObjectType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinObjectType->ANY.characters, dinObjectType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 20; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,SessionStopResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode)', derivedBy='EXTENSION'. */ +static int encode_dinSessionStopResType(bitstream_t* stream, struct dinSessionStopResType* dinSessionStopResType) { + int grammarID = 223; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 223: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinSessionStopResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignedInfoType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":CanonicalizationMethod,"http://www.w3.org/2000/09/xmldsig#":SignatureMethod,"http://www.w3.org/2000/09/xmldsig#":Reference{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinSignedInfoType(bitstream_t* stream, struct dinSignedInfoType* dinSignedInfoType) { + int grammarID = 247; + int done = 0; + + unsigned int dinSignedInfoType_Reference_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 247: + /* FirstStartTag[ATTRIBUTE[STRING](Id), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + if ( dinSignedInfoType->Id_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSignedInfoType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinSignedInfoType->Id.characters, dinSignedInfoType->Id.charactersLen); + } + } + grammarID = 248; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinCanonicalizationMethodType(stream, &dinSignedInfoType->CanonicalizationMethod ); + } + grammarID = 249; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 248: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinCanonicalizationMethodType(stream, &dinSignedInfoType->CanonicalizationMethod ); + } + grammarID = 249; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 249: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinSignatureMethodType(stream, &dinSignedInfoType->SignatureMethod ); + } + grammarID = 250; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 250: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference)] */ + if (dinSignedInfoType_Reference_currArrayIndex < dinSignedInfoType->Reference.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinReferenceType(stream, &dinSignedInfoType->Reference.array [dinSignedInfoType_Reference_currArrayIndex++]); + } + grammarID = 203; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 203: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), END_ELEMENT] */ + if (dinSignedInfoType_Reference_currArrayIndex < dinSignedInfoType->Reference.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinReferenceType(stream, &dinSignedInfoType->Reference.array [dinSignedInfoType_Reference_currArrayIndex++]); + } + grammarID = 203; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SalesTariffType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":SalesTariffID,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariffDescription{0-1},"urn:iso:15118:2:2010:MsgDataTypes":NumEPriceLevels,"urn:iso:15118:2:2010:MsgDataTypes":SalesTariffEntry{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinSalesTariffType(bitstream_t* stream, struct dinSalesTariffType* dinSalesTariffType) { + int grammarID = 251; + int done = 0; + + unsigned int dinSalesTariffType_SalesTariffEntry_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 251: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSalesTariffType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinSalesTariffType->Id.characters, dinSalesTariffType->Id.charactersLen); + } + } + grammarID = 252; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 252: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinSalesTariffType->SalesTariffID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 253; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 253: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels)] */ + if ( dinSalesTariffType->SalesTariffDescription_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSalesTariffType->SalesTariffDescription.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinSalesTariffType->SalesTariffDescription.characters, dinSalesTariffType->SalesTariffDescription.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 254; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 8, (uint32_t)(dinSalesTariffType->NumEPriceLevels - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 255; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 254: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 8, (uint32_t)(dinSalesTariffType->NumEPriceLevels - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 255; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 255: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry)] */ + if (dinSalesTariffType_SalesTariffEntry_currArrayIndex < dinSalesTariffType->SalesTariffEntry.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinSalesTariffEntryType(stream, &dinSalesTariffType->SalesTariffEntry.array [dinSalesTariffType_SalesTariffEntry_currArrayIndex++]); + } + grammarID = 256; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 256: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), END_ELEMENT] */ + if (dinSalesTariffType_SalesTariffEntry_currArrayIndex < dinSalesTariffType->SalesTariffEntry.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinSalesTariffEntryType(stream, &dinSalesTariffType->SalesTariffEntry.array [dinSalesTariffType_SalesTariffEntry_currArrayIndex++]); + } + grammarID = 256; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,CostType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":costKind,"urn:iso:15118:2:2010:MsgDataTypes":amount,"urn:iso:15118:2:2010:MsgDataTypes":amountMultiplier{0-1})', derivedBy='RESTRICTION'. */ +static int encode_dinCostType(bitstream_t* stream, struct dinCostType* dinCostType) { + int grammarID = 257; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 257: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 2, dinCostType->costKind); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 258; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 258: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amount)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, dinCostType->amount); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 259; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 259: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier), END_ELEMENT] */ + if ( dinCostType->amountMultiplier_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 3, (uint32_t)(dinCostType->amountMultiplier + 3)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,ServiceChargeType', base type name='ServiceType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("urn:iso:15118:2:2010:MsgDataTypes":ServiceTag,"urn:iso:15118:2:2010:MsgDataTypes":FreeService),("urn:iso:15118:2:2010:MsgDataTypes":EnergyTransferType))', derivedBy='EXTENSION'. */ +static int encode_dinServiceChargeType(bitstream_t* stream, struct dinServiceChargeType* dinServiceChargeType) { + int grammarID = 260; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 260: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinServiceTagType(stream, &dinServiceChargeType->ServiceTag ); + } + grammarID = 261; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 261: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, dinServiceChargeType->FreeService); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 262; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 262: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 4, dinServiceChargeType->EnergyTransferType); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,DC_EVSEStatusType', base type name='EVSEStatusType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":EVSEIsolationStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":EVSEStatusCode,"urn:iso:15118:2:2010:MsgDataTypes":NotificationMaxDelay,"urn:iso:15118:2:2010:MsgDataTypes":EVSENotification)', derivedBy='EXTENSION'. */ +static int encode_dinDC_EVSEStatusType(bitstream_t* stream, struct dinDC_EVSEStatusType* dinDC_EVSEStatusType) { + int grammarID = 263; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 263: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode)] */ + if ( dinDC_EVSEStatusType->EVSEIsolationStatus_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 2, dinDC_EVSEStatusType->EVSEIsolationStatus); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 264; + } else if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 4, dinDC_EVSEStatusType->EVSEStatusCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 218; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 264: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 4, dinDC_EVSEStatusType->EVSEStatusCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 218; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 218: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, dinDC_EVSEStatusType->NotificationMaxDelay); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 219; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 219: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 2, dinDC_EVSEStatusType->EVSENotification); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,RetrievalMethodType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("http://www.w3.org/2000/09/xmldsig#":Transforms{0-1})', derivedBy='RESTRICTION'. */ +static int encode_dinRetrievalMethodType(bitstream_t* stream, struct dinRetrievalMethodType* dinRetrievalMethodType) { + int grammarID = 265; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 265: + /* FirstStartTag[ATTRIBUTE[STRING](Type), ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + if ( dinRetrievalMethodType->Type_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinRetrievalMethodType->Type.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinRetrievalMethodType->Type.characters, dinRetrievalMethodType->Type.charactersLen); + } + } + grammarID = 266; + } else if ( dinRetrievalMethodType->URI_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinRetrievalMethodType->URI.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinRetrievalMethodType->URI.characters, dinRetrievalMethodType->URI.charactersLen); + } + } + grammarID = 267; + } else if ( dinRetrievalMethodType->Transforms_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + errn = encode_dinTransformsType(stream, &dinRetrievalMethodType->Transforms ); + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 266: + /* StartTag[ATTRIBUTE[STRING](URI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + if ( dinRetrievalMethodType->URI_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinRetrievalMethodType->URI.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinRetrievalMethodType->URI.characters, dinRetrievalMethodType->URI.charactersLen); + } + } + grammarID = 267; + } else if ( dinRetrievalMethodType->Transforms_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + errn = encode_dinTransformsType(stream, &dinRetrievalMethodType->Transforms ); + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 267: + /* StartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), END_ELEMENT] */ + if ( dinRetrievalMethodType->Transforms_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + errn = encode_dinTransformsType(stream, &dinRetrievalMethodType->Transforms ); + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,NotificationType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":FaultCode,"urn:iso:15118:2:2010:MsgDataTypes":FaultMsg{0-1})', derivedBy='RESTRICTION'. */ +static int encode_dinNotificationType(bitstream_t* stream, struct dinNotificationType* dinNotificationType) { + int grammarID = 268; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 268: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 2, dinNotificationType->FaultCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 269; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 269: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg), END_ELEMENT] */ + if ( dinNotificationType->FaultMsg_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinNotificationType->FaultMsg.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinNotificationType->FaultMsg.characters, dinNotificationType->FaultMsg.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,PGPDataType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='(("http://www.w3.org/2000/09/xmldsig#":PGPKeyID,"http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket{0-1},(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED})|("http://www.w3.org/2000/09/xmldsig#":PGPKeyPacket,(WC[##other:"http://www.w3.org/2000/09/xmldsig#"]){0-UNBOUNDED}))', derivedBy='RESTRICTION'. */ +static int encode_dinPGPDataType(bitstream_t* stream, struct dinPGPDataType* dinPGPDataType) { + int grammarID = 270; + int done = 0; + int wcDone = 0; + + + while(!done) { + switch(grammarID) { + case 270: + /* FirstStartTag[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket)] */ + if ( dinPGPDataType->PGPKeyID_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinPGPDataType->PGPKeyID.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinPGPDataType->PGPKeyID.bytes, dinPGPDataType->PGPKeyID.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 271; + } else if ( dinPGPDataType->PGPKeyPacket_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinPGPDataType->PGPKeyPacket.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinPGPDataType->PGPKeyPacket.bytes, dinPGPDataType->PGPKeyPacket.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 272; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 271: + /* Element[START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket), START_ELEMENT_GENERIC, END_ELEMENT] */ + if ( dinPGPDataType->PGPKeyPacket_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinPGPDataType->PGPKeyPacket.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinPGPDataType->PGPKeyPacket.bytes, dinPGPDataType->PGPKeyPacket.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 272; + } else if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 272; + } else if ( dinPGPDataType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 272: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT] */ + if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 272; + } else if ( dinPGPDataType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgBody,CertificateInstallationResType', base type name='BodyBaseType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgBody":ResponseCode,"urn:iso:15118:2:2010:MsgBody":ContractSignatureCertChain,"urn:iso:15118:2:2010:MsgBody":ContractSignatureEncryptedPrivateKey,"urn:iso:15118:2:2010:MsgBody":DHParams,"urn:iso:15118:2:2010:MsgBody":ContractID)', derivedBy='EXTENSION'. */ +static int encode_dinCertificateInstallationResType(bitstream_t* stream, struct dinCertificateInstallationResType* dinCertificateInstallationResType) { + int grammarID = 273; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 273: + /* FirstStartTag[ATTRIBUTE[STRING](Id)] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCertificateInstallationResType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinCertificateInstallationResType->Id.characters, dinCertificateInstallationResType->Id.charactersLen); + } + } + grammarID = 274; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 274: + /* StartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, dinCertificateInstallationResType->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 275; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 275: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encode_dinCertificateChainType(stream, &dinCertificateInstallationResType->ContractSignatureCertChain ); + } + grammarID = 276; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 276: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCertificateInstallationResType->ContractSignatureEncryptedPrivateKey.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinCertificateInstallationResType->ContractSignatureEncryptedPrivateKey.bytes, dinCertificateInstallationResType->ContractSignatureEncryptedPrivateKey.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 277; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 277: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCertificateInstallationResType->DHParams.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinCertificateInstallationResType->DHParams.bytes, dinCertificateInstallationResType->DHParams.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 278; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 278: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinCertificateInstallationResType->ContractID.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinCertificateInstallationResType->ContractID.characters, dinCertificateInstallationResType->ContractID.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='http://www.w3.org/2000/09/xmldsig#,SignaturePropertyType', base type name='anyType', content type='MIXED', isAbstract='false', hasTypeId='false', final='0', block='0', particle='((WC[##other:"http://www.w3.org/2000/09/xmldsig#"])){1-UNBOUNDED}', derivedBy='RESTRICTION'. */ +static int encode_dinSignaturePropertyType(bitstream_t* stream, struct dinSignaturePropertyType* dinSignaturePropertyType) { + int grammarID = 279; + int done = 0; + int wcDone = 0; + + + while(!done) { + switch(grammarID) { + case 279: + /* FirstStartTag[ATTRIBUTE[STRING](Id), ATTRIBUTE[STRING](Target)] */ + if ( dinSignaturePropertyType->Id_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSignaturePropertyType->Id.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinSignaturePropertyType->Id.characters, dinSignaturePropertyType->Id.charactersLen); + } + } + grammarID = 280; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSignaturePropertyType->Target.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinSignaturePropertyType->Target.characters, dinSignaturePropertyType->Target.charactersLen); + } + } + grammarID = 281; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 280: + /* StartTag[ATTRIBUTE[STRING](Target)] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSignaturePropertyType->Target.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinSignaturePropertyType->Target.characters, dinSignaturePropertyType->Target.charactersLen); + } + } + grammarID = 281; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 281: + /* StartTag[START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 20; + } else if ( dinSignaturePropertyType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSignaturePropertyType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinSignaturePropertyType->ANY.characters, dinSignaturePropertyType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 282; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 20: + /* Element[START_ELEMENT_GENERIC, END_ELEMENT, CHARACTERS_GENERIC[STRING]] */ + if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 20; + } else if ( dinSignaturePropertyType->ANY_isUsed == 0u || wcDone ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else if ( dinSignaturePropertyType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSignaturePropertyType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinSignaturePropertyType->ANY.characters, dinSignaturePropertyType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 20; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 282: + /* Element[START_ELEMENT_GENERIC, CHARACTERS_GENERIC[STRING]] */ + if (1==0) { + errn = EXI_UNSUPPORTED_EVENT_CODE_CHARACTERISTICS; + grammarID = 20; + } else if ( dinSignaturePropertyType->ANY_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSignaturePropertyType->ANY.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinSignaturePropertyType->ANY.characters, dinSignaturePropertyType->ANY.charactersLen); + } + } + wcDone = 1; + grammarID = 282; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,MeterInfoType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":MeterID,"urn:iso:15118:2:2010:MsgDataTypes":MeterReading{0-1},"urn:iso:15118:2:2010:MsgDataTypes":SigMeterReading{0-1},"urn:iso:15118:2:2010:MsgDataTypes":MeterStatus{0-1},"urn:iso:15118:2:2010:MsgDataTypes":TMeter{0-1})', derivedBy='RESTRICTION'. */ +static int encode_dinMeterInfoType(bitstream_t* stream, struct dinMeterInfoType* dinMeterInfoType) { + int grammarID = 283; + int done = 0; + + + while(!done) { + switch(grammarID) { + case 283: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID)] */ + if ( 1 == 1 ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinMeterInfoType->MeterID.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, dinMeterInfoType->MeterID.characters, dinMeterInfoType->MeterID.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 284; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 284: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + if ( dinMeterInfoType->MeterReading_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &dinMeterInfoType->MeterReading ); + } + grammarID = 285; + } else if ( dinMeterInfoType->SigMeterReading_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinMeterInfoType->SigMeterReading.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinMeterInfoType->SigMeterReading.bytes, dinMeterInfoType->SigMeterReading.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 286; + } else if ( dinMeterInfoType->MeterStatus_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinMeterInfoType->MeterStatus); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 287; + } else if ( dinMeterInfoType->TMeter_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger64(stream, dinMeterInfoType->TMeter); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 3, 4); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 285: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + if ( dinMeterInfoType->SigMeterReading_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinMeterInfoType->SigMeterReading.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinMeterInfoType->SigMeterReading.bytes, dinMeterInfoType->SigMeterReading.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 286; + } else if ( dinMeterInfoType->MeterStatus_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 1); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinMeterInfoType->MeterStatus); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 287; + } else if ( dinMeterInfoType->TMeter_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 3, 2); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger64(stream, dinMeterInfoType->TMeter); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 3, 3); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 286: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + if ( dinMeterInfoType->MeterStatus_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, dinMeterInfoType->MeterStatus); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 287; + } else if ( dinMeterInfoType->TMeter_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger64(stream, dinMeterInfoType->TMeter); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 2); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 287: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), END_ELEMENT] */ + if ( dinMeterInfoType->TMeter_isUsed == 1u ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger64(stream, dinMeterInfoType->TMeter); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 4; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 4: + /* Element[END_ELEMENT] */ + if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + +/* Complex type name='urn:iso:15118:2:2010:MsgDataTypes,SubCertificatesType', base type name='anyType', content type='ELEMENT', isAbstract='false', hasTypeId='false', final='0', block='0', particle='("urn:iso:15118:2:2010:MsgDataTypes":Certificate{1-UNBOUNDED})', derivedBy='RESTRICTION'. */ +static int encode_dinSubCertificatesType(bitstream_t* stream, struct dinSubCertificatesType* dinSubCertificatesType) { + int grammarID = 288; + int done = 0; + + unsigned int dinSubCertificatesType_Certificate_currArrayIndex = 0; + + while(!done) { + switch(grammarID) { + case 288: + /* FirstStartTag[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate)] */ + if (dinSubCertificatesType_Certificate_currArrayIndex < dinSubCertificatesType->Certificate.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSubCertificatesType->Certificate.array[dinSubCertificatesType_Certificate_currArrayIndex].bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinSubCertificatesType->Certificate.array[dinSubCertificatesType_Certificate_currArrayIndex].bytes, dinSubCertificatesType->Certificate.array[dinSubCertificatesType_Certificate_currArrayIndex].bytesLen); + dinSubCertificatesType_Certificate_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 289; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + case 289: + /* Element[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate), END_ELEMENT] */ + if (dinSubCertificatesType_Certificate_currArrayIndex < dinSubCertificatesType->Certificate.arrayLen ) { + errn = encodeNBitUnsignedInteger(stream, 2, 0); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(dinSubCertificatesType->Certificate.array[dinSubCertificatesType_Certificate_currArrayIndex].bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, dinSubCertificatesType->Certificate.array[dinSubCertificatesType_Certificate_currArrayIndex].bytes, dinSubCertificatesType->Certificate.array[dinSubCertificatesType_Certificate_currArrayIndex].bytesLen); + dinSubCertificatesType_Certificate_currArrayIndex++; + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + grammarID = 289; + } else if (1==1) { + errn = encodeNBitUnsignedInteger(stream, 2, 1); + if(errn == 0) { + done = 1; + } + grammarID = 5; + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + break; + default: + errn = EXI_ERROR_UNKOWN_GRAMMAR_ID; + break; + } + if(errn) { + done = 1; + } + } + return errn; +} + + + +int encode_dinExiDocument(bitstream_t* stream, struct dinEXIDocument* exiDoc) { + errn = writeEXIHeader(stream); + + if(errn == 0) { + /* DocContent[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Entry), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperties), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}V2G_Message), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT_GENERIC] */ + if ( exiDoc->AC_EVChargeParameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter) */ + errn = encodeNBitUnsignedInteger(stream, 7, 0); + if(errn == 0) { + errn = encode_dinAC_EVChargeParameterType(stream, &exiDoc->AC_EVChargeParameter ); + } + } else if ( exiDoc->AC_EVSEChargeParameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter) */ + errn = encodeNBitUnsignedInteger(stream, 7, 1); + if(errn == 0) { + errn = encode_dinAC_EVSEChargeParameterType(stream, &exiDoc->AC_EVSEChargeParameter ); + } + } else if ( exiDoc->AC_EVSEStatus_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus) */ + errn = encodeNBitUnsignedInteger(stream, 7, 2); + if(errn == 0) { + errn = encode_dinAC_EVSEStatusType(stream, &exiDoc->AC_EVSEStatus ); + } + } else if ( exiDoc->BodyElement_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement) */ + errn = encodeNBitUnsignedInteger(stream, 7, 3); + if(errn == 0) { + errn = encode_dinBodyBaseType(stream, &exiDoc->BodyElement ); + } + } else if ( exiDoc->CableCheckReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 4); + if(errn == 0) { + errn = encode_dinCableCheckReqType(stream, &exiDoc->CableCheckReq ); + } + } else if ( exiDoc->CableCheckRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 5); + if(errn == 0) { + errn = encode_dinCableCheckResType(stream, &exiDoc->CableCheckRes ); + } + } else if ( exiDoc->CanonicalizationMethod_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod) */ + errn = encodeNBitUnsignedInteger(stream, 7, 6); + if(errn == 0) { + errn = encode_dinCanonicalizationMethodType(stream, &exiDoc->CanonicalizationMethod ); + } + } else if ( exiDoc->CertificateInstallationReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 7); + if(errn == 0) { + errn = encode_dinCertificateInstallationReqType(stream, &exiDoc->CertificateInstallationReq ); + } + } else if ( exiDoc->CertificateInstallationRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 8); + if(errn == 0) { + errn = encode_dinCertificateInstallationResType(stream, &exiDoc->CertificateInstallationRes ); + } + } else if ( exiDoc->CertificateUpdateReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 9); + if(errn == 0) { + errn = encode_dinCertificateUpdateReqType(stream, &exiDoc->CertificateUpdateReq ); + } + } else if ( exiDoc->CertificateUpdateRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 10); + if(errn == 0) { + errn = encode_dinCertificateUpdateResType(stream, &exiDoc->CertificateUpdateRes ); + } + } else if ( exiDoc->ChargeParameterDiscoveryReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 11); + if(errn == 0) { + errn = encode_dinChargeParameterDiscoveryReqType(stream, &exiDoc->ChargeParameterDiscoveryReq ); + } + } else if ( exiDoc->ChargeParameterDiscoveryRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 12); + if(errn == 0) { + errn = encode_dinChargeParameterDiscoveryResType(stream, &exiDoc->ChargeParameterDiscoveryRes ); + } + } else if ( exiDoc->ChargingStatusReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 13); + if(errn == 0) { + errn = encode_dinChargingStatusReqType(stream, &exiDoc->ChargingStatusReq ); + } + } else if ( exiDoc->ChargingStatusRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 14); + if(errn == 0) { + errn = encode_dinChargingStatusResType(stream, &exiDoc->ChargingStatusRes ); + } + } else if ( exiDoc->ContractAuthenticationReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 15); + if(errn == 0) { + errn = encode_dinContractAuthenticationReqType(stream, &exiDoc->ContractAuthenticationReq ); + } + } else if ( exiDoc->ContractAuthenticationRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 16); + if(errn == 0) { + errn = encode_dinContractAuthenticationResType(stream, &exiDoc->ContractAuthenticationRes ); + } + } else if ( exiDoc->CurrentDemandReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 17); + if(errn == 0) { + errn = encode_dinCurrentDemandReqType(stream, &exiDoc->CurrentDemandReq ); + } + } else if ( exiDoc->CurrentDemandRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 18); + if(errn == 0) { + errn = encode_dinCurrentDemandResType(stream, &exiDoc->CurrentDemandRes ); + } + } else if ( exiDoc->DC_EVChargeParameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter) */ + errn = encodeNBitUnsignedInteger(stream, 7, 19); + if(errn == 0) { + errn = encode_dinDC_EVChargeParameterType(stream, &exiDoc->DC_EVChargeParameter ); + } + } else if ( exiDoc->DC_EVPowerDeliveryParameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter) */ + errn = encodeNBitUnsignedInteger(stream, 7, 20); + if(errn == 0) { + errn = encode_dinDC_EVPowerDeliveryParameterType(stream, &exiDoc->DC_EVPowerDeliveryParameter ); + } + } else if ( exiDoc->DC_EVSEChargeParameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter) */ + errn = encodeNBitUnsignedInteger(stream, 7, 21); + if(errn == 0) { + errn = encode_dinDC_EVSEChargeParameterType(stream, &exiDoc->DC_EVSEChargeParameter ); + } + } else if ( exiDoc->DC_EVSEStatus_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus) */ + errn = encodeNBitUnsignedInteger(stream, 7, 22); + if(errn == 0) { + errn = encode_dinDC_EVSEStatusType(stream, &exiDoc->DC_EVSEStatus ); + } + } else if ( exiDoc->DC_EVStatus_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus) */ + errn = encodeNBitUnsignedInteger(stream, 7, 23); + if(errn == 0) { + errn = encode_dinDC_EVStatusType(stream, &exiDoc->DC_EVStatus ); + } + } else if ( exiDoc->DSAKeyValue_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue) */ + errn = encodeNBitUnsignedInteger(stream, 7, 24); + if(errn == 0) { + errn = encode_dinDSAKeyValueType(stream, &exiDoc->DSAKeyValue ); + } + } else if ( exiDoc->DigestMethod_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod) */ + errn = encodeNBitUnsignedInteger(stream, 7, 25); + if(errn == 0) { + errn = encode_dinDigestMethodType(stream, &exiDoc->DigestMethod ); + } + } else if ( exiDoc->DigestValue_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue) */ + errn = encodeNBitUnsignedInteger(stream, 7, 26); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiDoc->DigestValue.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiDoc->DigestValue.bytes, exiDoc->DigestValue.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiDoc->EVChargeParameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter) */ + errn = encodeNBitUnsignedInteger(stream, 7, 27); + if(errn == 0) { + errn = encode_dinEVChargeParameterType(stream, &exiDoc->EVChargeParameter ); + } + } else if ( exiDoc->EVPowerDeliveryParameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter) */ + errn = encodeNBitUnsignedInteger(stream, 7, 28); + if(errn == 0) { + errn = encode_dinEVPowerDeliveryParameterType(stream, &exiDoc->EVPowerDeliveryParameter ); + } + } else if ( exiDoc->EVSEChargeParameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter) */ + errn = encodeNBitUnsignedInteger(stream, 7, 29); + if(errn == 0) { + errn = encode_dinEVSEChargeParameterType(stream, &exiDoc->EVSEChargeParameter ); + } + } else if ( exiDoc->EVSEStatus_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus) */ + errn = encodeNBitUnsignedInteger(stream, 7, 30); + if(errn == 0) { + errn = encode_dinEVSEStatusType(stream, &exiDoc->EVSEStatus ); + } + } else if ( exiDoc->EVStatus_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVStatus) */ + errn = encodeNBitUnsignedInteger(stream, 7, 31); + if(errn == 0) { + errn = encode_dinEVStatusType(stream, &exiDoc->EVStatus ); + } + } else if ( exiDoc->Entry_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Entry) */ + errn = encodeNBitUnsignedInteger(stream, 7, 32); + if(errn == 0) { + errn = encode_dinEntryType(stream, &exiDoc->Entry ); + } + } else if ( exiDoc->KeyInfo_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo) */ + errn = encodeNBitUnsignedInteger(stream, 7, 33); + if(errn == 0) { + errn = encode_dinKeyInfoType(stream, &exiDoc->KeyInfo ); + } + } else if ( exiDoc->KeyName_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName) */ + errn = encodeNBitUnsignedInteger(stream, 7, 34); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiDoc->KeyName.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiDoc->KeyName.characters, exiDoc->KeyName.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiDoc->KeyValue_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue) */ + errn = encodeNBitUnsignedInteger(stream, 7, 35); + if(errn == 0) { + errn = encode_dinKeyValueType(stream, &exiDoc->KeyValue ); + } + } else if ( exiDoc->Manifest_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest) */ + errn = encodeNBitUnsignedInteger(stream, 7, 36); + if(errn == 0) { + errn = encode_dinManifestType(stream, &exiDoc->Manifest ); + } + } else if ( exiDoc->MeteringReceiptReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 37); + if(errn == 0) { + errn = encode_dinMeteringReceiptReqType(stream, &exiDoc->MeteringReceiptReq ); + } + } else if ( exiDoc->MeteringReceiptRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 38); + if(errn == 0) { + errn = encode_dinMeteringReceiptResType(stream, &exiDoc->MeteringReceiptRes ); + } + } else if ( exiDoc->MgmtData_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData) */ + errn = encodeNBitUnsignedInteger(stream, 7, 39); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiDoc->MgmtData.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiDoc->MgmtData.characters, exiDoc->MgmtData.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiDoc->Object_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object) */ + errn = encodeNBitUnsignedInteger(stream, 7, 40); + if(errn == 0) { + errn = encode_dinObjectType(stream, &exiDoc->Object ); + } + } else if ( exiDoc->PGPData_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData) */ + errn = encodeNBitUnsignedInteger(stream, 7, 41); + if(errn == 0) { + errn = encode_dinPGPDataType(stream, &exiDoc->PGPData ); + } + } else if ( exiDoc->PMaxScheduleEntry_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry) */ + errn = encodeNBitUnsignedInteger(stream, 7, 42); + if(errn == 0) { + errn = encode_dinPMaxScheduleEntryType(stream, &exiDoc->PMaxScheduleEntry ); + } + } else if ( exiDoc->PaymentDetailsReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 43); + if(errn == 0) { + errn = encode_dinPaymentDetailsReqType(stream, &exiDoc->PaymentDetailsReq ); + } + } else if ( exiDoc->PaymentDetailsRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 44); + if(errn == 0) { + errn = encode_dinPaymentDetailsResType(stream, &exiDoc->PaymentDetailsRes ); + } + } else if ( exiDoc->PowerDeliveryReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 45); + if(errn == 0) { + errn = encode_dinPowerDeliveryReqType(stream, &exiDoc->PowerDeliveryReq ); + } + } else if ( exiDoc->PowerDeliveryRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 46); + if(errn == 0) { + errn = encode_dinPowerDeliveryResType(stream, &exiDoc->PowerDeliveryRes ); + } + } else if ( exiDoc->PreChargeReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 47); + if(errn == 0) { + errn = encode_dinPreChargeReqType(stream, &exiDoc->PreChargeReq ); + } + } else if ( exiDoc->PreChargeRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 48); + if(errn == 0) { + errn = encode_dinPreChargeResType(stream, &exiDoc->PreChargeRes ); + } + } else if ( exiDoc->RSAKeyValue_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue) */ + errn = encodeNBitUnsignedInteger(stream, 7, 49); + if(errn == 0) { + errn = encode_dinRSAKeyValueType(stream, &exiDoc->RSAKeyValue ); + } + } else if ( exiDoc->Reference_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference) */ + errn = encodeNBitUnsignedInteger(stream, 7, 50); + if(errn == 0) { + errn = encode_dinReferenceType(stream, &exiDoc->Reference ); + } + } else if ( exiDoc->RelativeTimeInterval_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval) */ + errn = encodeNBitUnsignedInteger(stream, 7, 51); + if(errn == 0) { + errn = encode_dinRelativeTimeIntervalType(stream, &exiDoc->RelativeTimeInterval ); + } + } else if ( exiDoc->RetrievalMethod_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod) */ + errn = encodeNBitUnsignedInteger(stream, 7, 52); + if(errn == 0) { + errn = encode_dinRetrievalMethodType(stream, &exiDoc->RetrievalMethod ); + } + } else if ( exiDoc->SAScheduleList_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList) */ + errn = encodeNBitUnsignedInteger(stream, 7, 53); + if(errn == 0) { + errn = encode_dinSAScheduleListType(stream, &exiDoc->SAScheduleList ); + } + } else if ( exiDoc->SASchedules_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules) */ + errn = encodeNBitUnsignedInteger(stream, 7, 54); + if(errn == 0) { + errn = encode_dinSASchedulesType(stream, &exiDoc->SASchedules ); + } + } else if ( exiDoc->SPKIData_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData) */ + errn = encodeNBitUnsignedInteger(stream, 7, 55); + if(errn == 0) { + errn = encode_dinSPKIDataType(stream, &exiDoc->SPKIData ); + } + } else if ( exiDoc->SalesTariffEntry_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry) */ + errn = encodeNBitUnsignedInteger(stream, 7, 56); + if(errn == 0) { + errn = encode_dinSalesTariffEntryType(stream, &exiDoc->SalesTariffEntry ); + } + } else if ( exiDoc->ServiceCharge_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge) */ + errn = encodeNBitUnsignedInteger(stream, 7, 57); + if(errn == 0) { + errn = encode_dinServiceChargeType(stream, &exiDoc->ServiceCharge ); + } + } else if ( exiDoc->ServiceDetailReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 58); + if(errn == 0) { + errn = encode_dinServiceDetailReqType(stream, &exiDoc->ServiceDetailReq ); + } + } else if ( exiDoc->ServiceDetailRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 59); + if(errn == 0) { + errn = encode_dinServiceDetailResType(stream, &exiDoc->ServiceDetailRes ); + } + } else if ( exiDoc->ServiceDiscoveryReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 60); + if(errn == 0) { + errn = encode_dinServiceDiscoveryReqType(stream, &exiDoc->ServiceDiscoveryReq ); + } + } else if ( exiDoc->ServiceDiscoveryRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 61); + if(errn == 0) { + errn = encode_dinServiceDiscoveryResType(stream, &exiDoc->ServiceDiscoveryRes ); + } + } else if ( exiDoc->ServicePaymentSelectionReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 62); + if(errn == 0) { + errn = encode_dinServicePaymentSelectionReqType(stream, &exiDoc->ServicePaymentSelectionReq ); + } + } else if ( exiDoc->ServicePaymentSelectionRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 63); + if(errn == 0) { + errn = encode_dinServicePaymentSelectionResType(stream, &exiDoc->ServicePaymentSelectionRes ); + } + } else if ( exiDoc->SessionSetupReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 64); + if(errn == 0) { + errn = encode_dinSessionSetupReqType(stream, &exiDoc->SessionSetupReq ); + } + } else if ( exiDoc->SessionSetupRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 65); + if(errn == 0) { + errn = encode_dinSessionSetupResType(stream, &exiDoc->SessionSetupRes ); + } + } else if ( exiDoc->SessionStopReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 66); + if(errn == 0) { + errn = encode_dinSessionStopType(stream, &exiDoc->SessionStopReq ); + } + } else if ( exiDoc->SessionStopRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 67); + if(errn == 0) { + errn = encode_dinSessionStopResType(stream, &exiDoc->SessionStopRes ); + } + } else if ( exiDoc->Signature_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature) */ + errn = encodeNBitUnsignedInteger(stream, 7, 68); + if(errn == 0) { + errn = encode_dinSignatureType(stream, &exiDoc->Signature ); + } + } else if ( exiDoc->SignatureMethod_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod) */ + errn = encodeNBitUnsignedInteger(stream, 7, 69); + if(errn == 0) { + errn = encode_dinSignatureMethodType(stream, &exiDoc->SignatureMethod ); + } + } else if ( exiDoc->SignatureProperties_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperties) */ + errn = encodeNBitUnsignedInteger(stream, 7, 70); + if(errn == 0) { + errn = encode_dinSignaturePropertiesType(stream, &exiDoc->SignatureProperties ); + } + } else if ( exiDoc->SignatureProperty_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty) */ + errn = encodeNBitUnsignedInteger(stream, 7, 71); + if(errn == 0) { + errn = encode_dinSignaturePropertyType(stream, &exiDoc->SignatureProperty ); + } + } else if ( exiDoc->SignatureValue_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue) */ + errn = encodeNBitUnsignedInteger(stream, 7, 72); + if(errn == 0) { + errn = encode_dinSignatureValueType(stream, &exiDoc->SignatureValue ); + } + } else if ( exiDoc->SignedInfo_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo) */ + errn = encodeNBitUnsignedInteger(stream, 7, 73); + if(errn == 0) { + errn = encode_dinSignedInfoType(stream, &exiDoc->SignedInfo ); + } + } else if ( exiDoc->TimeInterval_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval) */ + errn = encodeNBitUnsignedInteger(stream, 7, 74); + if(errn == 0) { + errn = encode_dinIntervalType(stream, &exiDoc->TimeInterval ); + } + } else if ( exiDoc->Transform_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform) */ + errn = encodeNBitUnsignedInteger(stream, 7, 75); + if(errn == 0) { + errn = encode_dinTransformType(stream, &exiDoc->Transform ); + } + } else if ( exiDoc->Transforms_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms) */ + errn = encodeNBitUnsignedInteger(stream, 7, 76); + if(errn == 0) { + errn = encode_dinTransformsType(stream, &exiDoc->Transforms ); + } + } else if ( exiDoc->V2G_Message_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}V2G_Message) */ + errn = encodeNBitUnsignedInteger(stream, 7, 77); + if(errn == 0) { + errn = encode_dinAnonType_V2G_Message(stream, &exiDoc->V2G_Message ); + } + } else if ( exiDoc->WeldingDetectionReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq) */ + errn = encodeNBitUnsignedInteger(stream, 7, 78); + if(errn == 0) { + errn = encode_dinWeldingDetectionReqType(stream, &exiDoc->WeldingDetectionReq ); + } + } else if ( exiDoc->WeldingDetectionRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes) */ + errn = encodeNBitUnsignedInteger(stream, 7, 79); + if(errn == 0) { + errn = encode_dinWeldingDetectionResType(stream, &exiDoc->WeldingDetectionRes ); + } + } else if ( exiDoc->X509Data_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data) */ + errn = encodeNBitUnsignedInteger(stream, 7, 80); + if(errn == 0) { + errn = encode_dinX509DataType(stream, &exiDoc->X509Data ); + } + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + + } + + if(errn == 0) { + /* flush any pending bits */ + errn = encodeFinish(stream); + } + + return errn; +} + +#if DEPLOY_DIN_CODEC_FRAGMENT == SUPPORT_YES +int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag) { + errn = writeEXIHeader(stream); + + if(errn == 0) { + /* FragmentContent[START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeService), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Cost), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EAmount), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSECurrentRegulationTolerance), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumCurrentLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumVoltageLimit), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Entry), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Exponent), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}J), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier), START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}Notification), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMax), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxSchedule), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentOptions), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PgenCounter), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Q), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToFullSoC), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RetryCounter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariff), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedServiceList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceParameterList), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID), START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperties), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SubCertificates), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit), START_ELEMENT({urn:iso:15118:2:2010:MsgDef}V2G_Message), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq), START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SerialNumber), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath), START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amount), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}duration), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue), START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue), START_ELEMENT_GENERIC, END_DOCUMENT] */ + if ( exiFrag->AC_EVChargeParameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVChargeParameter) */ + errn = encodeNBitUnsignedInteger(stream, 8, 0); + if(errn == 0) { + errn = encode_dinAC_EVChargeParameterType(stream, &exiFrag->AC_EVChargeParameter ); + } + } else if ( exiFrag->AC_EVSEChargeParameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEChargeParameter) */ + errn = encodeNBitUnsignedInteger(stream, 8, 1); + if(errn == 0) { + errn = encode_dinAC_EVSEChargeParameterType(stream, &exiFrag->AC_EVSEChargeParameter ); + } + } else if ( exiFrag->AC_EVSEStatus_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}AC_EVSEStatus) */ + errn = encodeNBitUnsignedInteger(stream, 8, 2); + if(errn == 0) { + errn = encode_dinAC_EVSEStatusType(stream, &exiFrag->AC_EVSEStatus ); + } + } else if ( exiFrag->AC_EVSEStatus_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}AC_EVSEStatus) */ + errn = encodeNBitUnsignedInteger(stream, 8, 3); + if(errn == 0) { + errn = encode_dinAC_EVSEStatusType(stream, &exiFrag->AC_EVSEStatus ); + } + } else if ( exiFrag->Body_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Body) */ + errn = encodeNBitUnsignedInteger(stream, 8, 4); + if(errn == 0) { + errn = encode_dinBodyType(stream, &exiFrag->Body ); + } + } else if ( exiFrag->BodyElement_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}BodyElement) */ + errn = encodeNBitUnsignedInteger(stream, 8, 5); + if(errn == 0) { + errn = encode_dinBodyBaseType(stream, &exiFrag->BodyElement ); + } + } else if ( exiFrag->BulkChargingComplete_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}BulkChargingComplete) */ + errn = encodeNBitUnsignedInteger(stream, 8, 6); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, exiFrag->BulkChargingComplete); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->BulkChargingComplete_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkChargingComplete) */ + errn = encodeNBitUnsignedInteger(stream, 8, 7); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, exiFrag->BulkChargingComplete); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->BulkSOC_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}BulkSOC) */ + errn = encodeNBitUnsignedInteger(stream, 8, 8); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 7, (uint32_t)(exiFrag->BulkSOC - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->CableCheckReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 9); + if(errn == 0) { + errn = encode_dinCableCheckReqType(stream, &exiFrag->CableCheckReq ); + } + } else if ( exiFrag->CableCheckRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CableCheckRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 10); + if(errn == 0) { + errn = encode_dinCableCheckResType(stream, &exiFrag->CableCheckRes ); + } + } else if ( exiFrag->CanonicalizationMethod_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}CanonicalizationMethod) */ + errn = encodeNBitUnsignedInteger(stream, 8, 11); + if(errn == 0) { + errn = encode_dinCanonicalizationMethodType(stream, &exiFrag->CanonicalizationMethod ); + } + } else if ( exiFrag->Certificate_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Certificate) */ + errn = encodeNBitUnsignedInteger(stream, 8, 12); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->Certificate.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->Certificate.bytes, exiFrag->Certificate.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->CertificateInstallationReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 13); + if(errn == 0) { + errn = encode_dinCertificateInstallationReqType(stream, &exiFrag->CertificateInstallationReq ); + } + } else if ( exiFrag->CertificateInstallationRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateInstallationRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 14); + if(errn == 0) { + errn = encode_dinCertificateInstallationResType(stream, &exiFrag->CertificateInstallationRes ); + } + } else if ( exiFrag->CertificateUpdateReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 15); + if(errn == 0) { + errn = encode_dinCertificateUpdateReqType(stream, &exiFrag->CertificateUpdateReq ); + } + } else if ( exiFrag->CertificateUpdateRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CertificateUpdateRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 16); + if(errn == 0) { + errn = encode_dinCertificateUpdateResType(stream, &exiFrag->CertificateUpdateRes ); + } + } else if ( exiFrag->ChargeParameterDiscoveryReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 17); + if(errn == 0) { + errn = encode_dinChargeParameterDiscoveryReqType(stream, &exiFrag->ChargeParameterDiscoveryReq ); + } + } else if ( exiFrag->ChargeParameterDiscoveryRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeParameterDiscoveryRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 18); + if(errn == 0) { + errn = encode_dinChargeParameterDiscoveryResType(stream, &exiFrag->ChargeParameterDiscoveryRes ); + } + } else if ( exiFrag->ChargeService_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargeService) */ + errn = encodeNBitUnsignedInteger(stream, 8, 19); + if(errn == 0) { + errn = encode_dinServiceChargeType(stream, &exiFrag->ChargeService ); + } + } else if ( exiFrag->ChargingComplete_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingComplete) */ + errn = encodeNBitUnsignedInteger(stream, 8, 20); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, exiFrag->ChargingComplete); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->ChargingComplete_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingComplete) */ + errn = encodeNBitUnsignedInteger(stream, 8, 21); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, exiFrag->ChargingComplete); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->ChargingProfile_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingProfile) */ + errn = encodeNBitUnsignedInteger(stream, 8, 22); + if(errn == 0) { + errn = encode_dinChargingProfileType(stream, &exiFrag->ChargingProfile ); + } + } else if ( exiFrag->ChargingProfileEntryMaxPower_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryMaxPower) */ + errn = encodeNBitUnsignedInteger(stream, 8, 23); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, exiFrag->ChargingProfileEntryMaxPower); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->ChargingProfileEntryStart_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ChargingProfileEntryStart) */ + errn = encodeNBitUnsignedInteger(stream, 8, 24); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, exiFrag->ChargingProfileEntryStart); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->ChargingStatusReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 25); + if(errn == 0) { + errn = encode_dinChargingStatusReqType(stream, &exiFrag->ChargingStatusReq ); + } + } else if ( exiFrag->ChargingStatusRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ChargingStatusRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 26); + if(errn == 0) { + errn = encode_dinChargingStatusResType(stream, &exiFrag->ChargingStatusRes ); + } + } else if ( exiFrag->ConsumptionCost_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ConsumptionCost) */ + errn = encodeNBitUnsignedInteger(stream, 8, 27); + if(errn == 0) { + errn = encode_dinConsumptionCostType(stream, &exiFrag->ConsumptionCost ); + } + } else if ( exiFrag->ContractAuthenticationReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 28); + if(errn == 0) { + errn = encode_dinContractAuthenticationReqType(stream, &exiFrag->ContractAuthenticationReq ); + } + } else if ( exiFrag->ContractAuthenticationRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractAuthenticationRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 29); + if(errn == 0) { + errn = encode_dinContractAuthenticationResType(stream, &exiFrag->ContractAuthenticationRes ); + } + } else if ( exiFrag->ContractID_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractID) */ + errn = encodeNBitUnsignedInteger(stream, 8, 30); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->ContractID.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiFrag->ContractID.characters, exiFrag->ContractID.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->ContractSignatureCertChain_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureCertChain) */ + errn = encodeNBitUnsignedInteger(stream, 8, 31); + if(errn == 0) { + errn = encode_dinCertificateChainType(stream, &exiFrag->ContractSignatureCertChain ); + } + } else if ( exiFrag->ContractSignatureEncryptedPrivateKey_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ContractSignatureEncryptedPrivateKey) */ + errn = encodeNBitUnsignedInteger(stream, 8, 32); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->ContractSignatureEncryptedPrivateKey.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->ContractSignatureEncryptedPrivateKey.bytes, exiFrag->ContractSignatureEncryptedPrivateKey.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->Cost_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Cost) */ + errn = encodeNBitUnsignedInteger(stream, 8, 33); + if(errn == 0) { + errn = encode_dinCostType(stream, &exiFrag->Cost ); + } + } else if ( exiFrag->CurrentDemandReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 34); + if(errn == 0) { + errn = encode_dinCurrentDemandReqType(stream, &exiFrag->CurrentDemandReq ); + } + } else if ( exiFrag->CurrentDemandRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}CurrentDemandRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 35); + if(errn == 0) { + errn = encode_dinCurrentDemandResType(stream, &exiFrag->CurrentDemandRes ); + } + } else if ( exiFrag->DC_EVChargeParameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVChargeParameter) */ + errn = encodeNBitUnsignedInteger(stream, 8, 36); + if(errn == 0) { + errn = encode_dinDC_EVChargeParameterType(stream, &exiFrag->DC_EVChargeParameter ); + } + } else if ( exiFrag->DC_EVPowerDeliveryParameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVPowerDeliveryParameter) */ + errn = encodeNBitUnsignedInteger(stream, 8, 37); + if(errn == 0) { + errn = encode_dinDC_EVPowerDeliveryParameterType(stream, &exiFrag->DC_EVPowerDeliveryParameter ); + } + } else if ( exiFrag->DC_EVSEChargeParameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEChargeParameter) */ + errn = encodeNBitUnsignedInteger(stream, 8, 38); + if(errn == 0) { + errn = encode_dinDC_EVSEChargeParameterType(stream, &exiFrag->DC_EVSEChargeParameter ); + } + } else if ( exiFrag->DC_EVSEStatus_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVSEStatus) */ + errn = encodeNBitUnsignedInteger(stream, 8, 39); + if(errn == 0) { + errn = encode_dinDC_EVSEStatusType(stream, &exiFrag->DC_EVSEStatus ); + } + } else if ( exiFrag->DC_EVSEStatus_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVSEStatus) */ + errn = encodeNBitUnsignedInteger(stream, 8, 40); + if(errn == 0) { + errn = encode_dinDC_EVSEStatusType(stream, &exiFrag->DC_EVSEStatus ); + } + } else if ( exiFrag->DC_EVStatus_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DC_EVStatus) */ + errn = encodeNBitUnsignedInteger(stream, 8, 41); + if(errn == 0) { + errn = encode_dinDC_EVStatusType(stream, &exiFrag->DC_EVStatus ); + } + } else if ( exiFrag->DC_EVStatus_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DC_EVStatus) */ + errn = encodeNBitUnsignedInteger(stream, 8, 42); + if(errn == 0) { + errn = encode_dinDC_EVStatusType(stream, &exiFrag->DC_EVStatus ); + } + } else if ( exiFrag->DHParams_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DHParams) */ + errn = encodeNBitUnsignedInteger(stream, 8, 43); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->DHParams.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->DHParams.bytes, exiFrag->DHParams.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->DSAKeyValue_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DSAKeyValue) */ + errn = encodeNBitUnsignedInteger(stream, 8, 44); + if(errn == 0) { + errn = encode_dinDSAKeyValueType(stream, &exiFrag->DSAKeyValue ); + } + } else if ( exiFrag->DateTimeNow_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}DateTimeNow) */ + errn = encodeNBitUnsignedInteger(stream, 8, 45); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger64(stream, exiFrag->DateTimeNow); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->DepartureTime_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}DepartureTime) */ + errn = encodeNBitUnsignedInteger(stream, 8, 46); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, exiFrag->DepartureTime); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->DigestMethod_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestMethod) */ + errn = encodeNBitUnsignedInteger(stream, 8, 47); + if(errn == 0) { + errn = encode_dinDigestMethodType(stream, &exiFrag->DigestMethod ); + } + } else if ( exiFrag->DigestValue_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}DigestValue) */ + errn = encodeNBitUnsignedInteger(stream, 8, 48); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->DigestValue.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->DigestValue.bytes, exiFrag->DigestValue.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EAmount_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EAmount) */ + errn = encodeNBitUnsignedInteger(stream, 8, 49); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EAmount ); + } + } else if ( exiFrag->EPriceLevel_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EPriceLevel) */ + errn = encodeNBitUnsignedInteger(stream, 8, 50); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 8, (uint32_t)(exiFrag->EPriceLevel - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EVCCID_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVCCID) */ + errn = encodeNBitUnsignedInteger(stream, 8, 51); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->EVCCID.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->EVCCID.bytes, exiFrag->EVCCID.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EVCabinConditioning_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVCabinConditioning) */ + errn = encodeNBitUnsignedInteger(stream, 8, 52); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, exiFrag->EVCabinConditioning); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EVChargeParameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVChargeParameter) */ + errn = encodeNBitUnsignedInteger(stream, 8, 53); + if(errn == 0) { + errn = encode_dinEVChargeParameterType(stream, &exiFrag->EVChargeParameter ); + } + } else if ( exiFrag->EVEnergyCapacity_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyCapacity) */ + errn = encodeNBitUnsignedInteger(stream, 8, 54); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVEnergyCapacity ); + } + } else if ( exiFrag->EVEnergyRequest_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVEnergyRequest) */ + errn = encodeNBitUnsignedInteger(stream, 8, 55); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVEnergyRequest ); + } + } else if ( exiFrag->EVErrorCode_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVErrorCode) */ + errn = encodeNBitUnsignedInteger(stream, 8, 56); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 4, exiFrag->EVErrorCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EVMaxCurrent_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxCurrent) */ + errn = encodeNBitUnsignedInteger(stream, 8, 57); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVMaxCurrent ); + } + } else if ( exiFrag->EVMaxVoltage_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaxVoltage) */ + errn = encodeNBitUnsignedInteger(stream, 8, 58); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVMaxVoltage ); + } + } else if ( exiFrag->EVMaximumCurrentLimit_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumCurrentLimit) */ + errn = encodeNBitUnsignedInteger(stream, 8, 59); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVMaximumCurrentLimit ); + } + } else if ( exiFrag->EVMaximumCurrentLimit_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumCurrentLimit) */ + errn = encodeNBitUnsignedInteger(stream, 8, 60); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVMaximumCurrentLimit ); + } + } else if ( exiFrag->EVMaximumPowerLimit_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumPowerLimit) */ + errn = encodeNBitUnsignedInteger(stream, 8, 61); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVMaximumPowerLimit ); + } + } else if ( exiFrag->EVMaximumPowerLimit_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumPowerLimit) */ + errn = encodeNBitUnsignedInteger(stream, 8, 62); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVMaximumPowerLimit ); + } + } else if ( exiFrag->EVMaximumVoltageLimit_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVMaximumVoltageLimit) */ + errn = encodeNBitUnsignedInteger(stream, 8, 63); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVMaximumVoltageLimit ); + } + } else if ( exiFrag->EVMaximumVoltageLimit_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMaximumVoltageLimit) */ + errn = encodeNBitUnsignedInteger(stream, 8, 64); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVMaximumVoltageLimit ); + } + } else if ( exiFrag->EVMinCurrent_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVMinCurrent) */ + errn = encodeNBitUnsignedInteger(stream, 8, 65); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVMinCurrent ); + } + } else if ( exiFrag->EVPowerDeliveryParameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVPowerDeliveryParameter) */ + errn = encodeNBitUnsignedInteger(stream, 8, 66); + if(errn == 0) { + errn = encode_dinEVPowerDeliveryParameterType(stream, &exiFrag->EVPowerDeliveryParameter ); + } + } else if ( exiFrag->EVRESSConditioning_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSConditioning) */ + errn = encodeNBitUnsignedInteger(stream, 8, 67); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, exiFrag->EVRESSConditioning); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EVRESSSOC_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVRESSSOC) */ + errn = encodeNBitUnsignedInteger(stream, 8, 68); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 7, (uint32_t)(exiFrag->EVRESSSOC - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EVReady_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVReady) */ + errn = encodeNBitUnsignedInteger(stream, 8, 69); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, exiFrag->EVReady); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EVRequestedEnergyTransferType_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVRequestedEnergyTransferType) */ + errn = encodeNBitUnsignedInteger(stream, 8, 70); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 3, exiFrag->EVRequestedEnergyTransferType); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EVSEChargeParameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEChargeParameter) */ + errn = encodeNBitUnsignedInteger(stream, 8, 71); + if(errn == 0) { + errn = encode_dinEVSEChargeParameterType(stream, &exiFrag->EVSEChargeParameter ); + } + } else if ( exiFrag->EVSECurrentLimitAchieved_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSECurrentLimitAchieved) */ + errn = encodeNBitUnsignedInteger(stream, 8, 72); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, exiFrag->EVSECurrentLimitAchieved); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EVSECurrentRegulationTolerance_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSECurrentRegulationTolerance) */ + errn = encodeNBitUnsignedInteger(stream, 8, 73); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSECurrentRegulationTolerance ); + } + } else if ( exiFrag->EVSEEnergyToBeDelivered_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEEnergyToBeDelivered) */ + errn = encodeNBitUnsignedInteger(stream, 8, 74); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEEnergyToBeDelivered ); + } + } else if ( exiFrag->EVSEID_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEID) */ + errn = encodeNBitUnsignedInteger(stream, 8, 75); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->EVSEID.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->EVSEID.bytes, exiFrag->EVSEID.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EVSEIsolationStatus_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEIsolationStatus) */ + errn = encodeNBitUnsignedInteger(stream, 8, 76); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 2, exiFrag->EVSEIsolationStatus); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EVSEMaxCurrent_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaxCurrent) */ + errn = encodeNBitUnsignedInteger(stream, 8, 77); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaxCurrent ); + } + } else if ( exiFrag->EVSEMaxCurrent_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxCurrent) */ + errn = encodeNBitUnsignedInteger(stream, 8, 78); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaxCurrent ); + } + } else if ( exiFrag->EVSEMaxVoltage_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaxVoltage) */ + errn = encodeNBitUnsignedInteger(stream, 8, 79); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaxVoltage ); + } + } else if ( exiFrag->EVSEMaximumCurrentLimit_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumCurrentLimit) */ + errn = encodeNBitUnsignedInteger(stream, 8, 80); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumCurrentLimit ); + } + } else if ( exiFrag->EVSEMaximumCurrentLimit_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumCurrentLimit) */ + errn = encodeNBitUnsignedInteger(stream, 8, 81); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumCurrentLimit ); + } + } else if ( exiFrag->EVSEMaximumPowerLimit_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumPowerLimit) */ + errn = encodeNBitUnsignedInteger(stream, 8, 82); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumPowerLimit ); + } + } else if ( exiFrag->EVSEMaximumPowerLimit_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumPowerLimit) */ + errn = encodeNBitUnsignedInteger(stream, 8, 83); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumPowerLimit ); + } + } else if ( exiFrag->EVSEMaximumVoltageLimit_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEMaximumVoltageLimit) */ + errn = encodeNBitUnsignedInteger(stream, 8, 84); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumVoltageLimit ); + } + } else if ( exiFrag->EVSEMaximumVoltageLimit_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMaximumVoltageLimit) */ + errn = encodeNBitUnsignedInteger(stream, 8, 85); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMaximumVoltageLimit ); + } + } else if ( exiFrag->EVSEMinCurrent_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinCurrent) */ + errn = encodeNBitUnsignedInteger(stream, 8, 86); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMinCurrent ); + } + } else if ( exiFrag->EVSEMinimumCurrentLimit_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumCurrentLimit) */ + errn = encodeNBitUnsignedInteger(stream, 8, 87); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMinimumCurrentLimit ); + } + } else if ( exiFrag->EVSEMinimumVoltageLimit_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEMinimumVoltageLimit) */ + errn = encodeNBitUnsignedInteger(stream, 8, 88); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEMinimumVoltageLimit ); + } + } else if ( exiFrag->EVSENotification_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSENotification) */ + errn = encodeNBitUnsignedInteger(stream, 8, 89); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 2, exiFrag->EVSENotification); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EVSEPeakCurrentRipple_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEPeakCurrentRipple) */ + errn = encodeNBitUnsignedInteger(stream, 8, 90); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEPeakCurrentRipple ); + } + } else if ( exiFrag->EVSEPowerLimitAchieved_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPowerLimitAchieved) */ + errn = encodeNBitUnsignedInteger(stream, 8, 91); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, exiFrag->EVSEPowerLimitAchieved); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EVSEPresentCurrent_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentCurrent) */ + errn = encodeNBitUnsignedInteger(stream, 8, 92); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEPresentCurrent ); + } + } else if ( exiFrag->EVSEPresentVoltage_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEPresentVoltage) */ + errn = encodeNBitUnsignedInteger(stream, 8, 93); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVSEPresentVoltage ); + } + } else if ( exiFrag->EVSEProcessing_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEProcessing) */ + errn = encodeNBitUnsignedInteger(stream, 8, 94); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 1, exiFrag->EVSEProcessing); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EVSEStatus_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatus) */ + errn = encodeNBitUnsignedInteger(stream, 8, 95); + if(errn == 0) { + errn = encode_dinEVSEStatusType(stream, &exiFrag->EVSEStatus ); + } + } else if ( exiFrag->EVSEStatusCode_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVSEStatusCode) */ + errn = encodeNBitUnsignedInteger(stream, 8, 96); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 4, exiFrag->EVSEStatusCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EVSEVoltageLimitAchieved_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVSEVoltageLimitAchieved) */ + errn = encodeNBitUnsignedInteger(stream, 8, 97); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, exiFrag->EVSEVoltageLimitAchieved); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->EVStatus_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EVStatus) */ + errn = encodeNBitUnsignedInteger(stream, 8, 98); + if(errn == 0) { + errn = encode_dinEVStatusType(stream, &exiFrag->EVStatus ); + } + } else if ( exiFrag->EVTargetCurrent_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetCurrent) */ + errn = encodeNBitUnsignedInteger(stream, 8, 99); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVTargetCurrent ); + } + } else if ( exiFrag->EVTargetVoltage_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}EVTargetVoltage) */ + errn = encodeNBitUnsignedInteger(stream, 8, 100); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->EVTargetVoltage ); + } + } else if ( exiFrag->EnergyTransferType_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}EnergyTransferType) */ + errn = encodeNBitUnsignedInteger(stream, 8, 101); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 4, exiFrag->EnergyTransferType); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->Entry_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Entry) */ + errn = encodeNBitUnsignedInteger(stream, 8, 102); + if(errn == 0) { + errn = encode_dinEntryType(stream, &exiFrag->Entry ); + } + } else if ( exiFrag->Exponent_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Exponent) */ + errn = encodeNBitUnsignedInteger(stream, 8, 103); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->Exponent.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->Exponent.bytes, exiFrag->Exponent.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->FaultCode_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultCode) */ + errn = encodeNBitUnsignedInteger(stream, 8, 104); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 2, exiFrag->FaultCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->FaultMsg_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FaultMsg) */ + errn = encodeNBitUnsignedInteger(stream, 8, 105); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->FaultMsg.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiFrag->FaultMsg.characters, exiFrag->FaultMsg.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->FreeService_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FreeService) */ + errn = encodeNBitUnsignedInteger(stream, 8, 106); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, exiFrag->FreeService); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->FullSOC_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}FullSOC) */ + errn = encodeNBitUnsignedInteger(stream, 8, 107); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 7, (uint32_t)(exiFrag->FullSOC - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->G_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}G) */ + errn = encodeNBitUnsignedInteger(stream, 8, 108); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->G.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->G.bytes, exiFrag->G.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->GenChallenge_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}GenChallenge) */ + errn = encodeNBitUnsignedInteger(stream, 8, 109); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->GenChallenge.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiFrag->GenChallenge.characters, exiFrag->GenChallenge.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->HMACOutputLength_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}HMACOutputLength) */ + errn = encodeNBitUnsignedInteger(stream, 8, 110); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger64(stream, exiFrag->HMACOutputLength); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->Header_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}Header) */ + errn = encodeNBitUnsignedInteger(stream, 8, 111); + if(errn == 0) { + errn = encode_dinMessageHeaderType(stream, &exiFrag->Header ); + } + } else if ( exiFrag->J_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}J) */ + errn = encodeNBitUnsignedInteger(stream, 8, 112); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->J.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->J.bytes, exiFrag->J.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->KeyInfo_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyInfo) */ + errn = encodeNBitUnsignedInteger(stream, 8, 113); + if(errn == 0) { + errn = encode_dinKeyInfoType(stream, &exiFrag->KeyInfo ); + } + } else if ( exiFrag->KeyName_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyName) */ + errn = encodeNBitUnsignedInteger(stream, 8, 114); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->KeyName.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiFrag->KeyName.characters, exiFrag->KeyName.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->KeyValue_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}KeyValue) */ + errn = encodeNBitUnsignedInteger(stream, 8, 115); + if(errn == 0) { + errn = encode_dinKeyValueType(stream, &exiFrag->KeyValue ); + } + } else if ( exiFrag->ListOfRootCertificateIDs_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ListOfRootCertificateIDs) */ + errn = encodeNBitUnsignedInteger(stream, 8, 116); + if(errn == 0) { + errn = encode_dinListOfRootCertificateIDsType(stream, &exiFrag->ListOfRootCertificateIDs ); + } + } else if ( exiFrag->Manifest_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Manifest) */ + errn = encodeNBitUnsignedInteger(stream, 8, 117); + if(errn == 0) { + errn = encode_dinManifestType(stream, &exiFrag->Manifest ); + } + } else if ( exiFrag->MeterID_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterID) */ + errn = encodeNBitUnsignedInteger(stream, 8, 118); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->MeterID.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiFrag->MeterID.characters, exiFrag->MeterID.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->MeterInfo_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeterInfo) */ + errn = encodeNBitUnsignedInteger(stream, 8, 119); + if(errn == 0) { + errn = encode_dinMeterInfoType(stream, &exiFrag->MeterInfo ); + } + } else if ( exiFrag->MeterReading_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterReading) */ + errn = encodeNBitUnsignedInteger(stream, 8, 120); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->MeterReading ); + } + } else if ( exiFrag->MeterStatus_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}MeterStatus) */ + errn = encodeNBitUnsignedInteger(stream, 8, 121); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, exiFrag->MeterStatus); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->MeteringReceiptReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 122); + if(errn == 0) { + errn = encode_dinMeteringReceiptReqType(stream, &exiFrag->MeteringReceiptReq ); + } + } else if ( exiFrag->MeteringReceiptRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}MeteringReceiptRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 123); + if(errn == 0) { + errn = encode_dinMeteringReceiptResType(stream, &exiFrag->MeteringReceiptRes ); + } + } else if ( exiFrag->MgmtData_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}MgmtData) */ + errn = encodeNBitUnsignedInteger(stream, 8, 124); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->MgmtData.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiFrag->MgmtData.characters, exiFrag->MgmtData.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->Modulus_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Modulus) */ + errn = encodeNBitUnsignedInteger(stream, 8, 125); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->Modulus.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->Modulus.bytes, exiFrag->Modulus.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->Multiplier_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Multiplier) */ + errn = encodeNBitUnsignedInteger(stream, 8, 126); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 3, (uint32_t)(exiFrag->Multiplier + 3)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->Notification_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}Notification) */ + errn = encodeNBitUnsignedInteger(stream, 8, 127); + if(errn == 0) { + errn = encode_dinNotificationType(stream, &exiFrag->Notification ); + } + } else if ( exiFrag->NotificationMaxDelay_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NotificationMaxDelay) */ + errn = encodeNBitUnsignedInteger(stream, 8, 128); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, exiFrag->NotificationMaxDelay); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->NumEPriceLevels_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}NumEPriceLevels) */ + errn = encodeNBitUnsignedInteger(stream, 8, 129); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 8, (uint32_t)(exiFrag->NumEPriceLevels - 0)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->OEMProvisioningCert_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}OEMProvisioningCert) */ + errn = encodeNBitUnsignedInteger(stream, 8, 130); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->OEMProvisioningCert.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->OEMProvisioningCert.bytes, exiFrag->OEMProvisioningCert.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->Object_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Object) */ + errn = encodeNBitUnsignedInteger(stream, 8, 131); + if(errn == 0) { + errn = encode_dinObjectType(stream, &exiFrag->Object ); + } + } else if ( exiFrag->P_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}P) */ + errn = encodeNBitUnsignedInteger(stream, 8, 132); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->P.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->P.bytes, exiFrag->P.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->PGPData_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPData) */ + errn = encodeNBitUnsignedInteger(stream, 8, 133); + if(errn == 0) { + errn = encode_dinPGPDataType(stream, &exiFrag->PGPData ); + } + } else if ( exiFrag->PGPKeyID_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyID) */ + errn = encodeNBitUnsignedInteger(stream, 8, 134); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->PGPKeyID.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->PGPKeyID.bytes, exiFrag->PGPKeyID.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->PGPKeyPacket_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PGPKeyPacket) */ + errn = encodeNBitUnsignedInteger(stream, 8, 135); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->PGPKeyPacket.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->PGPKeyPacket.bytes, exiFrag->PGPKeyPacket.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->PMax_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMax) */ + errn = encodeNBitUnsignedInteger(stream, 8, 136); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, exiFrag->PMax); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->PMaxSchedule_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxSchedule) */ + errn = encodeNBitUnsignedInteger(stream, 8, 137); + if(errn == 0) { + errn = encode_dinPMaxScheduleType(stream, &exiFrag->PMaxSchedule ); + } + } else if ( exiFrag->PMaxScheduleEntry_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleEntry) */ + errn = encodeNBitUnsignedInteger(stream, 8, 138); + if(errn == 0) { + errn = encode_dinPMaxScheduleEntryType(stream, &exiFrag->PMaxScheduleEntry ); + } + } else if ( exiFrag->PMaxScheduleID_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PMaxScheduleID) */ + errn = encodeNBitUnsignedInteger(stream, 8, 139); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, exiFrag->PMaxScheduleID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->Parameter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Parameter) */ + errn = encodeNBitUnsignedInteger(stream, 8, 140); + if(errn == 0) { + errn = encode_dinParameterType(stream, &exiFrag->Parameter ); + } + } else if ( exiFrag->ParameterSet_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSet) */ + errn = encodeNBitUnsignedInteger(stream, 8, 141); + if(errn == 0) { + errn = encode_dinParameterSetType(stream, &exiFrag->ParameterSet ); + } + } else if ( exiFrag->ParameterSetID_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ParameterSetID) */ + errn = encodeNBitUnsignedInteger(stream, 8, 142); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, exiFrag->ParameterSetID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->PaymentDetailsReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 143); + if(errn == 0) { + errn = encode_dinPaymentDetailsReqType(stream, &exiFrag->PaymentDetailsReq ); + } + } else if ( exiFrag->PaymentDetailsRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentDetailsRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 144); + if(errn == 0) { + errn = encode_dinPaymentDetailsResType(stream, &exiFrag->PaymentDetailsRes ); + } + } else if ( exiFrag->PaymentOption_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PaymentOption) */ + errn = encodeNBitUnsignedInteger(stream, 8, 145); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 1, exiFrag->PaymentOption); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->PaymentOptions_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PaymentOptions) */ + errn = encodeNBitUnsignedInteger(stream, 8, 146); + if(errn == 0) { + errn = encode_dinPaymentOptionsType(stream, &exiFrag->PaymentOptions ); + } + } else if ( exiFrag->PgenCounter_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}PgenCounter) */ + errn = encodeNBitUnsignedInteger(stream, 8, 147); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->PgenCounter.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->PgenCounter.bytes, exiFrag->PgenCounter.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->PowerDeliveryReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 148); + if(errn == 0) { + errn = encode_dinPowerDeliveryReqType(stream, &exiFrag->PowerDeliveryReq ); + } + } else if ( exiFrag->PowerDeliveryRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PowerDeliveryRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 149); + if(errn == 0) { + errn = encode_dinPowerDeliveryResType(stream, &exiFrag->PowerDeliveryRes ); + } + } else if ( exiFrag->PowerSwitchClosed_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}PowerSwitchClosed) */ + errn = encodeNBitUnsignedInteger(stream, 8, 150); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, exiFrag->PowerSwitchClosed); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->PreChargeReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 151); + if(errn == 0) { + errn = encode_dinPreChargeReqType(stream, &exiFrag->PreChargeReq ); + } + } else if ( exiFrag->PreChargeRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}PreChargeRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 152); + if(errn == 0) { + errn = encode_dinPreChargeResType(stream, &exiFrag->PreChargeRes ); + } + } else if ( exiFrag->ProfileEntry_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ProfileEntry) */ + errn = encodeNBitUnsignedInteger(stream, 8, 153); + if(errn == 0) { + errn = encode_dinProfileEntryType(stream, &exiFrag->ProfileEntry ); + } + } else if ( exiFrag->Q_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Q) */ + errn = encodeNBitUnsignedInteger(stream, 8, 154); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->Q.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->Q.bytes, exiFrag->Q.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->RCD_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RCD) */ + errn = encodeNBitUnsignedInteger(stream, 8, 155); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, exiFrag->RCD); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->RSAKeyValue_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RSAKeyValue) */ + errn = encodeNBitUnsignedInteger(stream, 8, 156); + if(errn == 0) { + errn = encode_dinRSAKeyValueType(stream, &exiFrag->RSAKeyValue ); + } + } else if ( exiFrag->ReadyToChargeState_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReadyToChargeState) */ + errn = encodeNBitUnsignedInteger(stream, 8, 157); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, exiFrag->ReadyToChargeState); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->ReceiptRequired_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ReceiptRequired) */ + errn = encodeNBitUnsignedInteger(stream, 8, 158); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, exiFrag->ReceiptRequired); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->Reference_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Reference) */ + errn = encodeNBitUnsignedInteger(stream, 8, 159); + if(errn == 0) { + errn = encode_dinReferenceType(stream, &exiFrag->Reference ); + } + } else if ( exiFrag->RelativeTimeInterval_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RelativeTimeInterval) */ + errn = encodeNBitUnsignedInteger(stream, 8, 160); + if(errn == 0) { + errn = encode_dinRelativeTimeIntervalType(stream, &exiFrag->RelativeTimeInterval ); + } + } else if ( exiFrag->RemainingTimeToBulkSoC_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToBulkSoC) */ + errn = encodeNBitUnsignedInteger(stream, 8, 161); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->RemainingTimeToBulkSoC ); + } + } else if ( exiFrag->RemainingTimeToFullSoC_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RemainingTimeToFullSoC) */ + errn = encodeNBitUnsignedInteger(stream, 8, 162); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->RemainingTimeToFullSoC ); + } + } else if ( exiFrag->ResponseCode_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ResponseCode) */ + errn = encodeNBitUnsignedInteger(stream, 8, 163); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 5, exiFrag->ResponseCode); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->RetrievalMethod_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}RetrievalMethod) */ + errn = encodeNBitUnsignedInteger(stream, 8, 164); + if(errn == 0) { + errn = encode_dinRetrievalMethodType(stream, &exiFrag->RetrievalMethod ); + } + } else if ( exiFrag->RetryCounter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}RetryCounter) */ + errn = encodeNBitUnsignedInteger(stream, 8, 165); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, exiFrag->RetryCounter); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->RootCertificateID_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}RootCertificateID) */ + errn = encodeNBitUnsignedInteger(stream, 8, 166); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->RootCertificateID.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiFrag->RootCertificateID.characters, exiFrag->RootCertificateID.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->SAScheduleList_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleList) */ + errn = encodeNBitUnsignedInteger(stream, 8, 167); + if(errn == 0) { + errn = encode_dinSAScheduleListType(stream, &exiFrag->SAScheduleList ); + } + } else if ( exiFrag->SAScheduleTuple_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTuple) */ + errn = encodeNBitUnsignedInteger(stream, 8, 168); + if(errn == 0) { + errn = encode_dinSAScheduleTupleType(stream, &exiFrag->SAScheduleTuple ); + } + } else if ( exiFrag->SAScheduleTupleID_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SAScheduleTupleID) */ + errn = encodeNBitUnsignedInteger(stream, 8, 169); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, exiFrag->SAScheduleTupleID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->SAScheduleTupleID_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SAScheduleTupleID) */ + errn = encodeNBitUnsignedInteger(stream, 8, 170); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, exiFrag->SAScheduleTupleID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->SASchedules_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SASchedules) */ + errn = encodeNBitUnsignedInteger(stream, 8, 171); + if(errn == 0) { + errn = encode_dinSASchedulesType(stream, &exiFrag->SASchedules ); + } + } else if ( exiFrag->SPKIData_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKIData) */ + errn = encodeNBitUnsignedInteger(stream, 8, 172); + if(errn == 0) { + errn = encode_dinSPKIDataType(stream, &exiFrag->SPKIData ); + } + } else if ( exiFrag->SPKISexp_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SPKISexp) */ + errn = encodeNBitUnsignedInteger(stream, 8, 173); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->SPKISexp.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->SPKISexp.bytes, exiFrag->SPKISexp.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->SalesTariff_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariff) */ + errn = encodeNBitUnsignedInteger(stream, 8, 174); + if(errn == 0) { + errn = encode_dinSalesTariffType(stream, &exiFrag->SalesTariff ); + } + } else if ( exiFrag->SalesTariffDescription_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffDescription) */ + errn = encodeNBitUnsignedInteger(stream, 8, 175); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->SalesTariffDescription.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiFrag->SalesTariffDescription.characters, exiFrag->SalesTariffDescription.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->SalesTariffEntry_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffEntry) */ + errn = encodeNBitUnsignedInteger(stream, 8, 176); + if(errn == 0) { + errn = encode_dinSalesTariffEntryType(stream, &exiFrag->SalesTariffEntry ); + } + } else if ( exiFrag->SalesTariffID_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SalesTariffID) */ + errn = encodeNBitUnsignedInteger(stream, 8, 177); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, exiFrag->SalesTariffID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->Seed_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Seed) */ + errn = encodeNBitUnsignedInteger(stream, 8, 178); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->Seed.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->Seed.bytes, exiFrag->Seed.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->SelectedPaymentOption_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedPaymentOption) */ + errn = encodeNBitUnsignedInteger(stream, 8, 179); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 1, exiFrag->SelectedPaymentOption); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->SelectedService_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SelectedService) */ + errn = encodeNBitUnsignedInteger(stream, 8, 180); + if(errn == 0) { + errn = encode_dinSelectedServiceType(stream, &exiFrag->SelectedService ); + } + } else if ( exiFrag->SelectedServiceList_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SelectedServiceList) */ + errn = encodeNBitUnsignedInteger(stream, 8, 181); + if(errn == 0) { + errn = encode_dinSelectedServiceListType(stream, &exiFrag->SelectedServiceList ); + } + } else if ( exiFrag->Service_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Service) */ + errn = encodeNBitUnsignedInteger(stream, 8, 182); + if(errn == 0) { + errn = encode_dinServiceType(stream, &exiFrag->Service ); + } + } else if ( exiFrag->ServiceCategory_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceCategory) */ + errn = encodeNBitUnsignedInteger(stream, 8, 183); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 2, exiFrag->ServiceCategory); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->ServiceCategory_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCategory) */ + errn = encodeNBitUnsignedInteger(stream, 8, 184); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 2, exiFrag->ServiceCategory); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->ServiceCharge_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceCharge) */ + errn = encodeNBitUnsignedInteger(stream, 8, 185); + if(errn == 0) { + errn = encode_dinServiceChargeType(stream, &exiFrag->ServiceCharge ); + } + } else if ( exiFrag->ServiceDetailReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 186); + if(errn == 0) { + errn = encode_dinServiceDetailReqType(stream, &exiFrag->ServiceDetailReq ); + } + } else if ( exiFrag->ServiceDetailRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDetailRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 187); + if(errn == 0) { + errn = encode_dinServiceDetailResType(stream, &exiFrag->ServiceDetailRes ); + } + } else if ( exiFrag->ServiceDiscoveryReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 188); + if(errn == 0) { + errn = encode_dinServiceDiscoveryReqType(stream, &exiFrag->ServiceDiscoveryReq ); + } + } else if ( exiFrag->ServiceDiscoveryRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceDiscoveryRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 189); + if(errn == 0) { + errn = encode_dinServiceDiscoveryResType(stream, &exiFrag->ServiceDiscoveryRes ); + } + } else if ( exiFrag->ServiceID_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceID) */ + errn = encodeNBitUnsignedInteger(stream, 8, 190); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, exiFrag->ServiceID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->ServiceID_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceID) */ + errn = encodeNBitUnsignedInteger(stream, 8, 191); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, exiFrag->ServiceID); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->ServiceList_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceList) */ + errn = encodeNBitUnsignedInteger(stream, 8, 192); + if(errn == 0) { + errn = encode_dinServiceTagListType(stream, &exiFrag->ServiceList ); + } + } else if ( exiFrag->ServiceName_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceName) */ + errn = encodeNBitUnsignedInteger(stream, 8, 193); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->ServiceName.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiFrag->ServiceName.characters, exiFrag->ServiceName.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->ServiceParameterList_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceParameterList) */ + errn = encodeNBitUnsignedInteger(stream, 8, 194); + if(errn == 0) { + errn = encode_dinServiceParameterListType(stream, &exiFrag->ServiceParameterList ); + } + } else if ( exiFrag->ServicePaymentSelectionReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 195); + if(errn == 0) { + errn = encode_dinServicePaymentSelectionReqType(stream, &exiFrag->ServicePaymentSelectionReq ); + } + } else if ( exiFrag->ServicePaymentSelectionRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServicePaymentSelectionRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 196); + if(errn == 0) { + errn = encode_dinServicePaymentSelectionResType(stream, &exiFrag->ServicePaymentSelectionRes ); + } + } else if ( exiFrag->ServiceScope_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}ServiceScope) */ + errn = encodeNBitUnsignedInteger(stream, 8, 197); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->ServiceScope.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiFrag->ServiceScope.characters, exiFrag->ServiceScope.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->ServiceScope_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceScope) */ + errn = encodeNBitUnsignedInteger(stream, 8, 198); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->ServiceScope.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiFrag->ServiceScope.characters, exiFrag->ServiceScope.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->ServiceTag_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}ServiceTag) */ + errn = encodeNBitUnsignedInteger(stream, 8, 199); + if(errn == 0) { + errn = encode_dinServiceTagType(stream, &exiFrag->ServiceTag ); + } + } else if ( exiFrag->SessionID_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionID) */ + errn = encodeNBitUnsignedInteger(stream, 8, 200); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->SessionID.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->SessionID.bytes, exiFrag->SessionID.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->SessionID_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgHeader}SessionID) */ + errn = encodeNBitUnsignedInteger(stream, 8, 201); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_HEX]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->SessionID.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->SessionID.bytes, exiFrag->SessionID.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->SessionSetupReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 202); + if(errn == 0) { + errn = encode_dinSessionSetupReqType(stream, &exiFrag->SessionSetupReq ); + } + } else if ( exiFrag->SessionSetupRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionSetupRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 203); + if(errn == 0) { + errn = encode_dinSessionSetupResType(stream, &exiFrag->SessionSetupRes ); + } + } else if ( exiFrag->SessionStopReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 204); + if(errn == 0) { + errn = encode_dinSessionStopType(stream, &exiFrag->SessionStopReq ); + } + } else if ( exiFrag->SessionStopRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}SessionStopRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 205); + if(errn == 0) { + errn = encode_dinSessionStopResType(stream, &exiFrag->SessionStopRes ); + } + } else if ( exiFrag->SigMeterReading_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SigMeterReading) */ + errn = encodeNBitUnsignedInteger(stream, 8, 206); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->SigMeterReading.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->SigMeterReading.bytes, exiFrag->SigMeterReading.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->Signature_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Signature) */ + errn = encodeNBitUnsignedInteger(stream, 8, 207); + if(errn == 0) { + errn = encode_dinSignatureType(stream, &exiFrag->Signature ); + } + } else if ( exiFrag->SignatureMethod_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureMethod) */ + errn = encodeNBitUnsignedInteger(stream, 8, 208); + if(errn == 0) { + errn = encode_dinSignatureMethodType(stream, &exiFrag->SignatureMethod ); + } + } else if ( exiFrag->SignatureProperties_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperties) */ + errn = encodeNBitUnsignedInteger(stream, 8, 209); + if(errn == 0) { + errn = encode_dinSignaturePropertiesType(stream, &exiFrag->SignatureProperties ); + } + } else if ( exiFrag->SignatureProperty_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureProperty) */ + errn = encodeNBitUnsignedInteger(stream, 8, 210); + if(errn == 0) { + errn = encode_dinSignaturePropertyType(stream, &exiFrag->SignatureProperty ); + } + } else if ( exiFrag->SignatureValue_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignatureValue) */ + errn = encodeNBitUnsignedInteger(stream, 8, 211); + if(errn == 0) { + errn = encode_dinSignatureValueType(stream, &exiFrag->SignatureValue ); + } + } else if ( exiFrag->SignedInfo_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}SignedInfo) */ + errn = encodeNBitUnsignedInteger(stream, 8, 212); + if(errn == 0) { + errn = encode_dinSignedInfoType(stream, &exiFrag->SignedInfo ); + } + } else if ( exiFrag->SubCertificates_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}SubCertificates) */ + errn = encodeNBitUnsignedInteger(stream, 8, 213); + if(errn == 0) { + errn = encode_dinSubCertificatesType(stream, &exiFrag->SubCertificates ); + } + } else if ( exiFrag->TMeter_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TMeter) */ + errn = encodeNBitUnsignedInteger(stream, 8, 214); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger64(stream, exiFrag->TMeter); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->TimeInterval_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}TimeInterval) */ + errn = encodeNBitUnsignedInteger(stream, 8, 215); + if(errn == 0) { + errn = encode_dinIntervalType(stream, &exiFrag->TimeInterval ); + } + } else if ( exiFrag->Transform_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transform) */ + errn = encodeNBitUnsignedInteger(stream, 8, 216); + if(errn == 0) { + errn = encode_dinTransformType(stream, &exiFrag->Transform ); + } + } else if ( exiFrag->Transforms_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Transforms) */ + errn = encodeNBitUnsignedInteger(stream, 8, 217); + if(errn == 0) { + errn = encode_dinTransformsType(stream, &exiFrag->Transforms ); + } + } else if ( exiFrag->Unit_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Unit) */ + errn = encodeNBitUnsignedInteger(stream, 8, 218); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 4, exiFrag->Unit); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->V2G_Message_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDef}V2G_Message) */ + errn = encodeNBitUnsignedInteger(stream, 8, 219); + if(errn == 0) { + errn = encode_dinAnonType_V2G_Message(stream, &exiFrag->V2G_Message ); + } + } else if ( exiFrag->Value_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}Value) */ + errn = encodeNBitUnsignedInteger(stream, 8, 220); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, exiFrag->Value); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->WeldingDetectionReq_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionReq) */ + errn = encodeNBitUnsignedInteger(stream, 8, 221); + if(errn == 0) { + errn = encode_dinWeldingDetectionReqType(stream, &exiFrag->WeldingDetectionReq ); + } + } else if ( exiFrag->WeldingDetectionRes_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgBody}WeldingDetectionRes) */ + errn = encodeNBitUnsignedInteger(stream, 8, 222); + if(errn == 0) { + errn = encode_dinWeldingDetectionResType(stream, &exiFrag->WeldingDetectionRes ); + } + } else if ( exiFrag->X509CRL_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509CRL) */ + errn = encodeNBitUnsignedInteger(stream, 8, 223); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->X509CRL.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->X509CRL.bytes, exiFrag->X509CRL.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->X509Certificate_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Certificate) */ + errn = encodeNBitUnsignedInteger(stream, 8, 224); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->X509Certificate.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->X509Certificate.bytes, exiFrag->X509Certificate.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->X509Data_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509Data) */ + errn = encodeNBitUnsignedInteger(stream, 8, 225); + if(errn == 0) { + errn = encode_dinX509DataType(stream, &exiFrag->X509Data ); + } + } else if ( exiFrag->X509IssuerName_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerName) */ + errn = encodeNBitUnsignedInteger(stream, 8, 226); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->X509IssuerName.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiFrag->X509IssuerName.characters, exiFrag->X509IssuerName.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->X509IssuerSerial_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509IssuerSerial) */ + errn = encodeNBitUnsignedInteger(stream, 8, 227); + if(errn == 0) { + errn = encode_dinX509IssuerSerialType(stream, &exiFrag->X509IssuerSerial ); + } + } else if ( exiFrag->X509SKI_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SKI) */ + errn = encodeNBitUnsignedInteger(stream, 8, 228); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->X509SKI.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->X509SKI.bytes, exiFrag->X509SKI.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->X509SerialNumber_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SerialNumber) */ + errn = encodeNBitUnsignedInteger(stream, 8, 229); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger64(stream, exiFrag->X509SerialNumber); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->X509SubjectName_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}X509SubjectName) */ + errn = encodeNBitUnsignedInteger(stream, 8, 230); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->X509SubjectName.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiFrag->X509SubjectName.characters, exiFrag->X509SubjectName.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->XPath_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}XPath) */ + errn = encodeNBitUnsignedInteger(stream, 8, 231); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->XPath.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiFrag->XPath.characters, exiFrag->XPath.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->Y_isUsed == 1u ) { + /* START_ELEMENT({http://www.w3.org/2000/09/xmldsig#}Y) */ + errn = encodeNBitUnsignedInteger(stream, 8, 232); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BINARY_BASE64]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->Y.bytesLen)); + if (errn == 0) { + errn = encodeBytes(stream, exiFrag->Y.bytes, exiFrag->Y.bytesLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->amount_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amount) */ + errn = encodeNBitUnsignedInteger(stream, 8, 233); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, exiFrag->amount); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->amountMultiplier_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}amountMultiplier) */ + errn = encodeNBitUnsignedInteger(stream, 8, 234); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 3, (uint32_t)(exiFrag->amountMultiplier + 3)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->boolValue_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}boolValue) */ + errn = encodeNBitUnsignedInteger(stream, 8, 235); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[BOOLEAN]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeBoolean(stream, exiFrag->boolValue); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->byteValue_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}byteValue) */ + errn = encodeNBitUnsignedInteger(stream, 8, 236); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[NBIT_UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 8, (uint32_t)(exiFrag->byteValue + 128)); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->costKind_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}costKind) */ + errn = encodeNBitUnsignedInteger(stream, 8, 237); + if(errn == 0) { + /* FirstStartTag[CHARACTERS[ENUMERATION]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeNBitUnsignedInteger(stream, 2, exiFrag->costKind); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->duration_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}duration) */ + errn = encodeNBitUnsignedInteger(stream, 8, 238); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, exiFrag->duration); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->intValue_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}intValue) */ + errn = encodeNBitUnsignedInteger(stream, 8, 239); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger32(stream, exiFrag->intValue); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->physicalValue_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}physicalValue) */ + errn = encodeNBitUnsignedInteger(stream, 8, 240); + if(errn == 0) { + errn = encode_dinPhysicalValueType(stream, &exiFrag->physicalValue ); + } + } else if ( exiFrag->shortValue_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}shortValue) */ + errn = encodeNBitUnsignedInteger(stream, 8, 241); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeInteger16(stream, exiFrag->shortValue); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->start_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}start) */ + errn = encodeNBitUnsignedInteger(stream, 8, 242); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, exiFrag->start); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->startValue_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}startValue) */ + errn = encodeNBitUnsignedInteger(stream, 8, 243); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[UNSIGNED_INTEGER]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + errn = encodeUnsignedInteger32(stream, exiFrag->startValue); + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else if ( exiFrag->stringValue_isUsed == 1u ) { + /* START_ELEMENT({urn:iso:15118:2:2010:MsgDataTypes}stringValue) */ + errn = encodeNBitUnsignedInteger(stream, 8, 244); + if(errn == 0) { + /* First(xsi:type)StartTag[CHARACTERS[STRING]] */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + if(errn == 0) { + /* encode string as string table miss (+2 len)*/ + errn = encodeUnsignedInteger16(stream, (uint16_t)(exiFrag->stringValue.charactersLen + 2)); + if (errn == 0) { + errn = encodeCharacters(stream, exiFrag->stringValue.characters, exiFrag->stringValue.charactersLen); + } + /* valid EE */ + errn = encodeNBitUnsignedInteger(stream, 1, 0); + } + } + } else { + errn = EXI_ERROR_UNKOWN_EVENT; + } + } + if(errn == 0) { + /* EndDocument */ + errn = encodeNBitUnsignedInteger(stream, 8, 246); + } + + + if(errn == 0) { + /* flush any pending bits */ + errn = encodeFinish(stream); + } + + return errn; +} +#endif /* DEPLOY_DIN_CODEC_FRAGMENT */ + + +#endif /* DEPLOY_DIN_CODEC */ + +#endif + diff --git a/src/src/exi/dinEXIDatatypesEncoder.h b/src/src/exi/dinEXIDatatypesEncoder.h new file mode 100644 index 0000000..5e4c86e --- /dev/null +++ b/src/src/exi/dinEXIDatatypesEncoder.h @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2007-2018 Siemens AG + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +/******************************************************************* + * + * @author Daniel.Peintner.EXT@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com + * + *

Code generated by EXIdizer

+ *

Schema: V2G_CI_MsgDef.xsd

+ * + * + ********************************************************************/ + + + +/** + * \file EXIDatatypesEncoder.h + * \brief Encoder for datatype definitions + * + */ + +#ifndef EXI_din_DATATYPES_ENCODER_H +#define EXI_din_DATATYPES_ENCODER_H + +#ifdef __cplusplus +extern "C" { +#endif + + +#include "dinEXIDatatypes.h" + +#if DEPLOY_DIN_CODEC == SUPPORT_YES + +#include + +#include "EXITypes.h" + + +int encode_dinExiDocument(bitstream_t* stream, struct dinEXIDocument* exiDoc); + +#if DEPLOY_DIN_CODEC_FRAGMENT == SUPPORT_YES +int encode_dinExiFragment(bitstream_t* stream, struct dinEXIFragment* exiFrag); +#endif /* DEPLOY_DIN_CODEC_FRAGMENT */ + + +#endif /* DEPLOY_DIN_CODEC */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/src/exi/projectExiConnector.c b/src/src/exi/projectExiConnector.c new file mode 100644 index 0000000..6f71fc8 --- /dev/null +++ b/src/src/exi/projectExiConnector.c @@ -0,0 +1,146 @@ + + +#include "projectExiConnector.h" +#include + +//#include "EXITypes.h" +//#include "dinEXIDatatypes.h" +//#include "dinEXIDatatypesEncoder.h" +//#include "dinEXIDatatypesDecoder.h" + + +const uint8_t mytestbuffer[EXI_TRANSMIT_BUFFER_SIZE] = {0x80, 0x9A, 0x01, 0x01, 0xBB, 0xC0, 0x1C, 0x51, 0xE0, 0x20, 0x1B, 0x71, 0x10, 0x9C, 0x7F, 0x64, 0x6C, 0x00, 0x00 }; +const uint8_t mytestbufferLen = 19; +uint8_t exiTransmitBuffer[EXI_TRANSMIT_BUFFER_SIZE]; +struct dinEXIDocument dinDocEnc; +struct dinEXIDocument dinDocDec; +struct appHandEXIDocument aphsDoc; +struct appHandEXIDocument appHandResp; +bitstream_t global_streamEnc; +bitstream_t global_streamDec; +size_t global_streamEncPos; +size_t global_streamDecPos; +int g_errn; +char gDebugString[100]; +char gResultString[500]; +uint8_t sessionId[SESSIONID_LEN]; +uint8_t sessionIdLen; + + +#if defined(__cplusplus) +extern "C" +{ +#endif +void addToTrace_chararray(char *s); +#if defined(__cplusplus) +} +#endif + +void debugAddStringAndInt(char *s, int i) { + char sTmp[1000]; + sprintf(sTmp, "%s%d", s, i); + strcat(gDebugString, sTmp); +} + +void projectExiConnector_decode_appHandExiDocument(void) { + /* precondition: The global_streamDec.size and global_streamDec.data have been set to the byte array with EXI data. */ + + global_streamDec.pos = &global_streamDecPos; + *(global_streamDec.pos) = 0; /* the decoder shall start at the byte 0 */ + g_errn = decode_appHandExiDocument(&global_streamDec, &aphsDoc); +} + +void projectExiConnector_decode_DinExiDocument(void) { + /* precondition: The global_streamDec.size and global_streamDec.data have been set to the byte array with EXI data. */ + + global_streamDec.pos = &global_streamDecPos; + *(global_streamDec.pos) = 0; /* the decoder shall start at the byte 0 */ + g_errn = decode_dinExiDocument(&global_streamDec, &dinDocDec); +} + +#ifdef NOT_USED +void projectExiConnector_testEncode(void) { + projectExiConnector_prepare_DinExiDocument(); + dinDocEnc.V2G_Message.Body.SessionSetupReq_isUsed = 1u; + init_dinSessionSetupReqType(&dinDocEnc.V2G_Message.Body.SessionSetupReq); + /* In the session setup request, the session ID zero means: create a new session. + The format (len 8, all zero) is taken from the original Ioniq behavior. */ + dinDocEnc.V2G_Message.Header.SessionID.bytes[0] = 0; + dinDocEnc.V2G_Message.Header.SessionID.bytes[1] = 0; + dinDocEnc.V2G_Message.Header.SessionID.bytes[2] = 0; + dinDocEnc.V2G_Message.Header.SessionID.bytes[3] = 0; + dinDocEnc.V2G_Message.Header.SessionID.bytes[4] = 0; + dinDocEnc.V2G_Message.Header.SessionID.bytes[5] = 0; + dinDocEnc.V2G_Message.Header.SessionID.bytes[6] = 0; + dinDocEnc.V2G_Message.Header.SessionID.bytes[7] = 0; + dinDocEnc.V2G_Message.Header.SessionID.bytesLen = 8; + projectExiConnector_encode_DinExiDocument(); +} +#endif + +void projectExiConnector_prepare_DinExiDocument(void) { + /* before filling and encoding the dinDocEnc, we initialize here all its content. */ + init_dinEXIDocument(&dinDocEnc); + dinDocEnc.V2G_Message_isUsed = 1u; + init_dinMessageHeaderType(&dinDocEnc.V2G_Message.Header); + init_dinBodyType(&dinDocEnc.V2G_Message.Body); + /* take the sessionID from the global variable: */ + memcpy(dinDocEnc.V2G_Message.Header.SessionID.bytes, sessionId, SESSIONID_LEN); + dinDocEnc.V2G_Message.Header.SessionID.bytesLen = sessionIdLen; +} + +void projectExiConnector_encode_DinExiDocument(void) { + /* precondition: dinDocEnc structure is filled. Output: global_stream.data and global_stream.pos. */ + global_streamEnc.size = EXI_TRANSMIT_BUFFER_SIZE; + global_streamEnc.data = exiTransmitBuffer; + global_streamEnc.pos = &global_streamEncPos; + *(global_streamEnc.pos) = 0; /* start adding data at position 0 */ + g_errn = encode_dinExiDocument(&global_streamEnc, &dinDocEnc); + +} + +void projectExiConnector_encode_appHandExiDocument(uint8_t SchemaID) { + /* before filling and encoding the appHandResp, we initialize here all its content. */ + // still untested + init_appHandEXIDocument(&appHandResp); + appHandResp.supportedAppProtocolRes_isUsed = 1; + appHandResp.supportedAppProtocolRes.ResponseCode = appHandresponseCodeType_OK_SuccessfulNegotiation; + appHandResp.supportedAppProtocolRes.SchemaID = SchemaID; /* signal the protocol by the provided schema id*/ + appHandResp.supportedAppProtocolRes.SchemaID_isUsed = 1; + + global_streamEnc.size = EXI_TRANSMIT_BUFFER_SIZE; + global_streamEnc.data = exiTransmitBuffer; + global_streamEnc.pos = &global_streamEncPos; + *(global_streamEnc.pos) = 0; /* start adding data at position 0 */ + g_errn = encode_appHandExiDocument(&global_streamEnc, &appHandResp); + +} + + + +#ifdef NOT_USED +int projectExiConnector_test(int a) { + unsigned int i; + char s[100]; + char s2[100]; + strcpy(gDebugString, ""); + global_streamDec.size = mytestbufferLen; + global_streamDec.data = mytestbuffer; + global_streamDec.pos = &global_streamDecPos; + *(global_streamDec.pos) = 0; /* the decoder shall start at the byte 0 */ + + for (i=0; i<1000; i++) { /* for runtime measuremement, run the decoder n times. */ + g_errn = decode_dinExiDocument(&global_streamDec, &dinDocDec); + } + //dinDocDec.V2G_Message.Header.SessionID.bytesLen + addToTrace_chararray("Test from projectExiConnector_test"); + sprintf(s, "SessionID "); + for (i=0; i<4; i++) { + sprintf(s2, "%hx ", dinDocDec.V2G_Message.Header.SessionID.bytes[i]); + strcat(s, s2); + } + addToTrace_chararray(s); + //g_errn = encode_dinExiDocument(&global_streamEnc, &dinDocEnc); + return 2*a; +} +#endif \ No newline at end of file diff --git a/src/src/exi/projectExiConnector.h b/src/src/exi/projectExiConnector.h new file mode 100644 index 0000000..dbd88a4 --- /dev/null +++ b/src/src/exi/projectExiConnector.h @@ -0,0 +1,107 @@ + + +#include "EXITypes.h" + +#include "appHandEXIDatatypes.h" +#include "appHandEXIDatatypesEncoder.h" +#include "appHandEXIDatatypesDecoder.h" + +#include "dinEXIDatatypes.h" +#include "dinEXIDatatypesEncoder.h" +#include "dinEXIDatatypesDecoder.h" + +#define EXI_TRANSMIT_BUFFER_SIZE 256 +extern uint8_t exiTransmitBuffer[EXI_TRANSMIT_BUFFER_SIZE]; /* after encoding, here we find the exi byte stream. */ + +extern struct appHandEXIDocument aphsDoc; /* The application handshake document. */ +extern struct dinEXIDocument dinDocEnc; /* The DIN document. For encoder. */ +extern struct dinEXIDocument dinDocDec; /* The DIN document. For decoder. */ +extern bitstream_t global_streamEnc; /* The byte stream descriptor. */ +extern bitstream_t global_streamDec; /* The byte stream descriptor. */ +extern size_t global_streamEncPos; /* The position in the stream. */ +extern size_t global_streamDecPos; /* The position in the stream. */ +extern char gResultString[500]; /* Debug info from the decoder. */ +extern int g_errn; + +#define SESSIONID_LEN 8 +extern uint8_t sessionId[SESSIONID_LEN]; +extern uint8_t sessionIdLen; + + + +/* Decoder functions *****************************************************************************************/ + +#if defined(__cplusplus) +extern "C" +{ +#endif +void projectExiConnector_decode_appHandExiDocument(void); + /* precondition: The global_streamDec.size and global_streamDec.data have been set to the byte array with EXI data. */ +#if defined(__cplusplus) +} +#endif + +#if defined(__cplusplus) +extern "C" +{ +#endif +void projectExiConnector_decode_DinExiDocument(void); + /* precondition: The global_streamDec.size and global_streamDec.data have been set to the byte array with EXI data. */ +#if defined(__cplusplus) +} +#endif + + +/* Encoder functions ****************************************************************************************/ +#if defined(__cplusplus) +extern "C" +{ +#endif +void projectExiConnector_prepare_DinExiDocument(void); +/* before filling and encoding the dinDocEnc, we initialize here all its content. */ +#if defined(__cplusplus) +} +#endif + + +#if defined(__cplusplus) +extern "C" +{ +#endif +void projectExiConnector_encode_DinExiDocument(void); + /* precondition: dinDocEnc structure is filled. Output: global_stream.data and global_stream.pos. */ +#if defined(__cplusplus) +} +#endif + + +#if defined(__cplusplus) +extern "C" +{ +#endif +void projectExiConnector_encode_appHandExiDocument(uint8_t SchemaID); + +#if defined(__cplusplus) +} +#endif + + +/* Test functions, just for experimentation *****************************************************************/ +#if defined(__cplusplus) +extern "C" +{ +#endif +void projectExiConnector_testEncode(void); +#if defined(__cplusplus) +} +#endif + + +#if defined(__cplusplus) +extern "C" +{ +#endif +int projectExiConnector_test(int a); +#if defined(__cplusplus) +} +#endif diff --git a/src/tcp.cpp b/src/tcp.cpp new file mode 100644 index 0000000..b1b3cfe --- /dev/null +++ b/src/tcp.cpp @@ -0,0 +1,312 @@ +#include +#include "main.h" +#include "ipv6.h" +#include "src/exi/projectExiConnector.h" + +/* Todo: implement a retry strategy, to cover the situation that single packets are lost on the way. */ + +#define NEXT_TCP 0x06 // the next protocol is TCP + +#define TCP_FLAG_SYN 0x02 +#define TCP_FLAG_PSH 0x08 +#define TCP_FLAG_ACK 0x10 + +uint8_t tcpHeaderLen; +uint8_t tcpPayloadLen; +//uint8_t tcpPayload[TCP_PAYLOAD_LEN]; + + +#define TCP_ACTIVITY_TIMER_START (5*33) /* 5 seconds */ +uint16_t tcpActivityTimer; + +#define TCP_TRANSMIT_PACKET_LEN 200 +uint8_t TcpTransmitPacketLen; +uint8_t TcpTransmitPacket[TCP_TRANSMIT_PACKET_LEN]; + +#define TCPIP_TRANSMIT_PACKET_LEN 200 +uint8_t TcpIpRequestLen; +uint8_t TcpIpRequest[TCPIP_TRANSMIT_PACKET_LEN]; + +#define TCP_STATE_CLOSED 0 +#define TCP_STATE_SYN_ACK 1 +#define TCP_STATE_ESTABLISHED 2 +#define TCP_RECEIVE_WINDOW 1000 /* number of octets we are able to receive */ + +uint8_t tcpState = TCP_STATE_CLOSED; +uint32_t TcpSeqNr; +uint32_t TcpAckNr; + +#define TCP_RX_DATA_LEN 1000 +uint8_t tcp_rxdataLen=0; +uint8_t tcp_rxdata[TCP_RX_DATA_LEN]; + + +void routeDecoderInputData(void) { + /* connect the data from the TCP to the exiDecoder */ + /* The TCP receive data consists of two parts: 1. The V2GTP header and 2. the EXI stream. + The decoder wants only the EXI stream, so we skip the V2GTP header. + In best case, we would check also the consistency of the V2GTP header here. + */ + global_streamDec.data = &tcp_rxdata[V2GTP_HEADER_SIZE]; + global_streamDec.size = tcp_rxdataLen - V2GTP_HEADER_SIZE; + + /* We have something to decode, this is a good sign that the connection is fine. + Inform the ConnectionManager that everything is fine. */ + //connMgr_ApplOk(); +} + + +void decodeV2GTP(void) { + + uint16_t arrayLen, i; + uint8_t strNamespace[50]; + uint8_t SchemaID, n; + uint16_t NamespaceLen; + + routeDecoderInputData(); + projectExiConnector_decode_appHandExiDocument(); + //projectExiConnector_decode_DinExiDocument(); // Decode EXI + tcp_rxdataLen = 0; /* mark the input data as "consumed" */ + // process data when no errors occured during decoding + if (g_errn == 0) { + arrayLen = aphsDoc.supportedAppProtocolReq.AppProtocol.arrayLen; + Serial.printf("The car supports %u schemas.\n", arrayLen); + + // check all schemas for DIN + for(n=0; nSchemaID, aphsDoc.supportedAppProtocolReq_isUsed); + //projectExiConnector_encode_DinExiDocument(); + +} + + +void tcp_packRequestIntoEthernet(void) { + //# packs the IP packet into an ethernet packet + uint16_t i; + uint16_t length; + + length = TcpIpRequestLen + 6 + 6 + 2; // # Ethernet header needs 14 bytes: + // # 6 bytes destination MAC + // # 6 bytes source MAC + // # 2 bytes EtherType + //# fill the destination MAC with the MAC of the charger + setMacAt(pevMac, 0); + setMacAt(myMac, 6); // bytes 6 to 11 are the source MAC + txbuffer[12] = 0x86; // # 86dd is IPv6 + txbuffer[13] = 0xdd; + memcpy(txbuffer+14, TcpIpRequest, length); + + Serial.print("[TX] "); + for(int x=0; x> 8; + TcpIpRequest[5] = plen & 0xFF; + TcpIpRequest[6] = NEXT_TCP; // next level protocol, 0x06 = TCP in this case + TcpIpRequest[7] = 0x40; // hop limit + // + // We are the EVSE. So the PevIp is our own link-local IP address. + for (i=0; i<16; i++) { + TcpIpRequest[8+i] = SeccIp[i]; // source IP address + } + for (i=0; i<16; i++) { + TcpIpRequest[24+i] = EvccIp[i]; // destination IP address + } + for (i=0; i> 8); /* source port */ + TcpTransmitPacket[1] = (uint8_t)(seccPort); + TcpTransmitPacket[2] = (uint8_t)(evccTcpPort >> 8); /* destination port */ + TcpTransmitPacket[3] = (uint8_t)(evccTcpPort); + + TcpTransmitPacket[4] = (uint8_t)(TcpSeqNr>>24); /* sequence number */ + TcpTransmitPacket[5] = (uint8_t)(TcpSeqNr>>16); + TcpTransmitPacket[6] = (uint8_t)(TcpSeqNr>>8); + TcpTransmitPacket[7] = (uint8_t)(TcpSeqNr); + + TcpTransmitPacket[8] = (uint8_t)(TcpAckNr>>24); /* ack number */ + TcpTransmitPacket[9] = (uint8_t)(TcpAckNr>>16); + TcpTransmitPacket[10] = (uint8_t)(TcpAckNr>>8); + TcpTransmitPacket[11] = (uint8_t)(TcpAckNr); + TcpTransmitPacketLen = tcpHeaderLen + tcpPayloadLen; + TcpTransmitPacket[12] = (tcpHeaderLen/4) << 4; /* 70 High-nibble: DataOffset in 4-byte-steps. Low-nibble: Reserved=0. */ + + TcpTransmitPacket[13] = tcpFlag; + TcpTransmitPacket[14] = (uint8_t)(TCP_RECEIVE_WINDOW>>8); + TcpTransmitPacket[15] = (uint8_t)(TCP_RECEIVE_WINDOW); + + // checksum will be calculated afterwards + TcpTransmitPacket[16] = 0; + TcpTransmitPacket[17] = 0; + + TcpTransmitPacket[18] = 0; /* 16 bit urgentPointer. Always zero in our case. */ + TcpTransmitPacket[19] = 0; + +// TcpTransmitPacket[20] = 0x02; // Options +// TcpTransmitPacket[21] = 0x04; +// TcpTransmitPacket[22] = 0x05; +// TcpTransmitPacket[23] = 0xa0; + + + checksum = calculateUdpAndTcpChecksumForIPv6(TcpTransmitPacket, TcpTransmitPacketLen, SeccIp, EvccIp, NEXT_TCP); + TcpTransmitPacket[16] = (uint8_t)(checksum >> 8); + TcpTransmitPacket[17] = (uint8_t)(checksum); + + Serial.printf("Source:%u Dest:%u Seqnr:%08x Acknr:%08x\n", seccPort, evccTcpPort, TcpSeqNr, TcpAckNr); +} + + +void tcp_sendFirstAck(void) { + Serial.printf("[TCP] sending first ACK\n"); + tcpHeaderLen = 20; + tcpPayloadLen = 0; + tcp_prepareTcpHeader(TCP_FLAG_ACK | TCP_FLAG_SYN); + tcp_packRequestIntoIp(); +} + +void tcp_sendAck(void) { + Serial.printf("[TCP] sending ACK\n"); + tcpHeaderLen = 20; /* 20 bytes normal header, no options */ + tcpPayloadLen = 0; + tcp_prepareTcpHeader(TCP_FLAG_ACK); + tcp_packRequestIntoIp(); +} + + +void evaluateTcpPacket(void) { + uint8_t flags; + uint32_t remoteSeqNr; + uint32_t remoteAckNr; + uint16_t SourcePort, DestinationPort, pLen, hdrLen, tmpPayloadLen; + + /* todo: check the IP addresses, checksum etc */ + //nTcpPacketsReceived++; + pLen = rxbuffer[18]*256 + rxbuffer[19]; /* length of the IP payload */ + hdrLen = (rxbuffer[66]>>4) * 4; /* header length in byte */ + if (pLen >= hdrLen) { + tmpPayloadLen = pLen - hdrLen; + } else { + tmpPayloadLen = 0; /* no TCP payload data */ + } + Serial.printf("pLen=%u, hdrLen=%u, Payload=%u\n", pLen, hdrLen, tmpPayloadLen); + SourcePort = rxbuffer[54]*256 + rxbuffer[55]; + DestinationPort = rxbuffer[56]*256 + rxbuffer[57]; + if (DestinationPort != 15118) { + Serial.printf("[TCP] wrong port.\n"); + return; /* wrong port */ + } + // tcpActivityTimer=TCP_ACTIVITY_TIMER_START; + remoteSeqNr = + (((uint32_t)rxbuffer[58])<<24) + + (((uint32_t)rxbuffer[59])<<16) + + (((uint32_t)rxbuffer[60])<<8) + + (((uint32_t)rxbuffer[61])); + remoteAckNr = + (((uint32_t)rxbuffer[62])<<24) + + (((uint32_t)rxbuffer[63])<<16) + + (((uint32_t)rxbuffer[64])<<8) + + (((uint32_t)rxbuffer[65])); + Serial.printf("Source:%u Dest:%u Seqnr:%08x Acknr:%08x flags:%02x\n", SourcePort, DestinationPort, remoteSeqNr, remoteAckNr, flags); + flags = rxbuffer[67]; + if (flags == TCP_FLAG_SYN) { /* This is the connection setup reqest from the EV. */ + if (tcpState == TCP_STATE_CLOSED) { + evccTcpPort = SourcePort; // update the evccTcpPort to the new TCP port + TcpSeqNr = 0x01020304; // We start with a 'random' sequence nr + TcpAckNr = remoteSeqNr+1; // The ACK number of our next transmit packet is one more than the received seq number. + tcpState = TCP_STATE_SYN_ACK; + tcp_sendFirstAck(); + } + return; + } + if (flags == TCP_FLAG_ACK && tcpState == TCP_STATE_SYN_ACK) { + if (remoteAckNr == (TcpSeqNr + 1) ) { + Serial.printf("-------------- TCP connection established ---------------\n\n"); + tcpState = TCP_STATE_ESTABLISHED; + } + return; + } + /* It is no connection setup. We can have the following situations here: */ + if (tcpState != TCP_STATE_ESTABLISHED) { + /* received something while the connection is closed. Just ignore it. */ + Serial.printf("[TCP] ignore, not connected.\n"); + return; + } + + // It can be an ACK, or a data package, or a combination of both. We treat the ACK and the data independent from each other, + // to treat each combination. + if ((tmpPayloadLen>0) && (tmpPayloadLen< TCP_RX_DATA_LEN)) { + /* This is a data transfer packet. */ + // flag bit PSH should also be set. + tcp_rxdataLen = tmpPayloadLen; + /* rxbuffer[74] is the first payload byte. */ + memcpy(tcp_rxdata, rxbuffer+74, tcp_rxdataLen); /* provide the received data to the application */ + // connMgr_TcpOk(); + decodeV2GTP(); + TcpAckNr = remoteSeqNr + tcp_rxdataLen; /* The ACK number of our next transmit packet is tcp_rxdataLen more than the received seq number. */ + TcpSeqNr = remoteAckNr; + tcp_sendAck(); + return; + } + + if (flags & TCP_FLAG_ACK) { + //nTcpPacketsReceived+=1000; + TcpSeqNr = remoteAckNr; /* The sequence number of our next transmit packet is given by the received ACK number. */ + } +} +