/*
* 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
*
*
********************************************************************/
/*******************************************************************
*
* Sample program to illustrate how to read an EXI stream and
* directly write it again to an output
*
* e.g., in.exi out.exi
********************************************************************/
#include
#include
#include
/* schema-dependent */
#include "../iso1/iso1EXIDatatypes.h"
#if DEPLOY_ISO1_CODEC == SUPPORT_YES
#include "../iso1/iso1EXIDatatypesEncoder.h"
#include "../iso1/iso1EXIDatatypesDecoder.h"
#endif /* DEPLOY_ISO1_CODEC == SUPPORT_YES */
#include "../iso2/iso2EXIDatatypes.h"
#if DEPLOY_ISO2_CODEC == SUPPORT_YES
#include "../iso2/iso2EXIDatatypesEncoder.h"
#include "../iso2/iso2EXIDatatypesDecoder.h"
#endif /* DEPLOY_ISO2_CODEC == SUPPORT_YES */
#include "../codec/ByteStream.h"
/** EXI Debug mode */
#define EXI_DEBUG 0
#define BUFFER_SIZE 4096
uint8_t bufferIn[BUFFER_SIZE];
uint8_t bufferOut[BUFFER_SIZE];
#if EXI_DEBUG == 1
# define DEBUG_PRINTF(x) printf x
#else
# define DEBUG_PRINTF(x) do {} while (0)
#endif
int main_databinder(int argc, char *argv[]) {
#if DEPLOY_DIN_CODEC == SUPPORT_YES
struct dinEXIDocument dinDoc;
#endif /* DEPLOY_DIN_CODEC == SUPPORT_YES */
#if DEPLOY_ISO1_CODEC == SUPPORT_YES
struct iso1EXIDocument exi1Doc;
#endif /* DEPLOY_ISO1_CODEC == SUPPORT_YES */
#if DEPLOY_ISO2_CODEC == SUPPORT_YES
struct iso2EXIDocument exi2Doc;
#endif /* DEPLOY_ISO2_CODEC == SUPPORT_YES */
int errn = 0;
bitstream_t iStream, oStream;
#if EXI_STREAM == BYTE_ARRAY
size_t posDecode;
size_t posEncode;
#endif /* EXI_STREAM == BYTE_ARRAY */
#if EXI_DEBUG == 1
/* The Eclipse console has buffering problems on Windows e.g, Debug mode */
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
#endif /*EXI_DEBUG*/
if (argc != 3) {
printf("Usage: %s exiInput exiOutput\n", argv[0]);
return -1;
}
#if EXI_STREAM == BYTE_ARRAY
/* input pos */
posDecode = 0;
/* parse EXI stream to internal byte structures */
errn = readBytesFromFile(argv[1], bufferIn, BUFFER_SIZE, &posDecode);
if (errn != 0) {
printf("Problems while reading file into buffer, err==%d\n", errn);
return errn;
}
posDecode = 0; /* reset position */
#endif /* EXI_STREAM == BYTE_ARRAY */
/* setup input stream */
#if EXI_STREAM == BYTE_ARRAY
iStream.size = BUFFER_SIZE;
iStream.data = bufferIn;
iStream.pos = &posDecode;
#endif /* EXI_STREAM == BYTE_ARRAY */
iStream.buffer = 0;
iStream.capacity = 0;
printf("Start decoding EXI stream to databinding layer \n");
#if DEPLOY_DIN_CODEC == SUPPORT_YES
errn = decode_dinExiDocument(&iStream, &dinDoc);
#endif /* DEPLOY_DIN_CODEC == SUPPORT_YES */
#if DEPLOY_ISO1_CODEC == SUPPORT_YES
errn = decode_iso1ExiDocument(&iStream, &exi1Doc);
#endif /* DEPLOY_ISO1_CODEC == SUPPORT_YES */
#if DEPLOY_ISO2_CODEC == SUPPORT_YES
errn = decode_iso2ExiDocument(&iStream, &exi2Doc);
#endif /* DEPLOY_ISO2_CODEC == SUPPORT_YES */
if (errn != 0) {
printf("Problems while decoding EXI stream, err==%d\n", errn);
return errn;
}
#if EXI_STREAM == BYTE_ARRAY
/* setup output stream */
posEncode = 0;
oStream.size = BUFFER_SIZE;
oStream.data = bufferOut;
oStream.pos = &posEncode;
#endif
oStream.buffer = 0;
oStream.capacity = 8;
printf("Start encoding databinding layer to EXI \n");
#if DEPLOY_DIN_CODEC == SUPPORT_YES
errn = encode_dinExiDocument(&oStream, &dinDoc);
#endif /* DEPLOY_DIN_CODEC == SUPPORT_YES */
#if DEPLOY_ISO1_CODEC == SUPPORT_YES
errn = encode_iso1ExiDocument(&oStream, &exi1Doc);
#endif /* DEPLOY_ISO1_CODEC == SUPPORT_YES */
#if DEPLOY_ISO2_CODEC == SUPPORT_YES
errn = encode_iso2ExiDocument(&oStream, &exi2Doc);
#endif /* DEPLOY_ISO2_CODEC == SUPPORT_YES */
if (errn != 0) {
printf("Problems while encoding databinding layer, err==%d\n", errn);
return errn;
}
printf("EXI roundtrip done with success\n");
#if EXI_STREAM == BYTE_ARRAY
/* write to file */
writeBytesToFile(oStream.data, posEncode, argv[2]);
#endif
return errn;
}