diff --git a/README.txt b/README.txt index b851bda..33379da 100644 --- a/README.txt +++ b/README.txt @@ -1,12 +1,12 @@ ------------------------------------------------------------------------- OpenV2G - an open source project implementing the basic functionality of the ISO IEC 15118 vehicle to grid (V2G) communication interface -Version 1.0.0alpha, released March/April ??, 2017 +Version 0.9.4, released January 30, 2018 http://openv2g.sourceforge.net/ Please report bugs via the SourceForge bug tracking system at http://sourceforge.net/tracker/?group_id=350113. Thank you. -Copyright (C) 2007-2017 Siemens AG +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 @@ -25,7 +25,8 @@ along with this program. If not, see . ------------------------------------------------------------------------- CHANGES from version 0.9.3: ------------------------------------------------------------------------- -* Support for 15118-2-2016 (ISO2) besides 15118-2-2013 (ISO1) and DIN added +* Support for 15118-2-2016 (ISO2) started besides 15118-2-2013 (ISO1) and DIN +* fix eMAID fragment encoding/decoding support * internal coding updates * bug-fixes diff --git a/src/appHandshake/appHandEXIDatatypes.c b/src/appHandshake/appHandEXIDatatypes.c index ba88d80..a94bd8d 100644 --- a/src/appHandshake/appHandEXIDatatypes.c +++ b/src/appHandshake/appHandEXIDatatypes.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2015 Siemens AG + * 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 @@ -18,8 +18,8 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 0.9.3 - * @contact Joerg.Heuer@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_AppProtocol.xsd

diff --git a/src/appHandshake/appHandEXIDatatypes.h b/src/appHandshake/appHandEXIDatatypes.h index 9eebcf4..6dad852 100644 --- a/src/appHandshake/appHandEXIDatatypes.h +++ b/src/appHandshake/appHandEXIDatatypes.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2015 Siemens AG + * 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 @@ -18,8 +18,8 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 0.9.3 - * @contact Joerg.Heuer@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_AppProtocol.xsd

diff --git a/src/appHandshake/appHandEXIDatatypesDecoder.c b/src/appHandshake/appHandEXIDatatypesDecoder.c index 38d37b6..466af7e 100644 --- a/src/appHandshake/appHandEXIDatatypesDecoder.c +++ b/src/appHandshake/appHandEXIDatatypesDecoder.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2015 Siemens AG + * 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 @@ -18,8 +18,8 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 0.9.3 - * @contact Joerg.Heuer@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_AppProtocol.xsd

diff --git a/src/appHandshake/appHandEXIDatatypesDecoder.h b/src/appHandshake/appHandEXIDatatypesDecoder.h index bd43109..5173beb 100644 --- a/src/appHandshake/appHandEXIDatatypesDecoder.h +++ b/src/appHandshake/appHandEXIDatatypesDecoder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2015 Siemens AG + * 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 @@ -18,8 +18,8 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 0.9.3 - * @contact Joerg.Heuer@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_AppProtocol.xsd

diff --git a/src/appHandshake/appHandEXIDatatypesEncoder.c b/src/appHandshake/appHandEXIDatatypesEncoder.c index 633dc4a..dc62713 100644 --- a/src/appHandshake/appHandEXIDatatypesEncoder.c +++ b/src/appHandshake/appHandEXIDatatypesEncoder.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2015 Siemens AG + * 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 @@ -18,8 +18,8 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 0.9.3 - * @contact Joerg.Heuer@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_AppProtocol.xsd

diff --git a/src/appHandshake/appHandEXIDatatypesEncoder.h b/src/appHandshake/appHandEXIDatatypesEncoder.h index ce428e2..6701210 100644 --- a/src/appHandshake/appHandEXIDatatypesEncoder.h +++ b/src/appHandshake/appHandEXIDatatypesEncoder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2015 Siemens AG + * 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 @@ -18,8 +18,8 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 0.9.3 - * @contact Joerg.Heuer@siemens.com + * @version 0.9.4 + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_AppProtocol.xsd

diff --git a/src/codec/BitInputStream.c b/src/codec/BitInputStream.c index b07848e..c554df7 100644 --- a/src/codec/BitInputStream.c +++ b/src/codec/BitInputStream.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/BitInputStream.h b/src/codec/BitInputStream.h index 7ef68e2..5ccf72c 100644 --- a/src/codec/BitInputStream.h +++ b/src/codec/BitInputStream.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/BitOutputStream.c b/src/codec/BitOutputStream.c index 80a79fa..0813992 100644 --- a/src/codec/BitOutputStream.c +++ b/src/codec/BitOutputStream.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/BitOutputStream.h b/src/codec/BitOutputStream.h index a1d2198..c40ea4b 100644 --- a/src/codec/BitOutputStream.h +++ b/src/codec/BitOutputStream.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/ByteStream.c b/src/codec/ByteStream.c index e6791ff..fba7547 100644 --- a/src/codec/ByteStream.c +++ b/src/codec/ByteStream.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/ByteStream.h b/src/codec/ByteStream.h index 536177b..2b6ab76 100644 --- a/src/codec/ByteStream.h +++ b/src/codec/ByteStream.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/DecoderChannel.c b/src/codec/DecoderChannel.c index 9b4388d..69732da 100644 --- a/src/codec/DecoderChannel.c +++ b/src/codec/DecoderChannel.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/DecoderChannel.h b/src/codec/DecoderChannel.h index 10dfe75..d0bdfb6 100644 --- a/src/codec/DecoderChannel.h +++ b/src/codec/DecoderChannel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/EXIConfig.h b/src/codec/EXIConfig.h index a2d0810..edbb2dc 100644 --- a/src/codec/EXIConfig.h +++ b/src/codec/EXIConfig.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-23 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/EXIHeaderDecoder.c b/src/codec/EXIHeaderDecoder.c index f2dded5..a5dde69 100644 --- a/src/codec/EXIHeaderDecoder.c +++ b/src/codec/EXIHeaderDecoder.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/EXIHeaderDecoder.h b/src/codec/EXIHeaderDecoder.h index ceef546..6363d6b 100644 --- a/src/codec/EXIHeaderDecoder.h +++ b/src/codec/EXIHeaderDecoder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/EXIHeaderEncoder.c b/src/codec/EXIHeaderEncoder.c index 0d52a87..924355c 100644 --- a/src/codec/EXIHeaderEncoder.c +++ b/src/codec/EXIHeaderEncoder.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/EXIHeaderEncoder.h b/src/codec/EXIHeaderEncoder.h index ea39f54..42663bc 100644 --- a/src/codec/EXIHeaderEncoder.h +++ b/src/codec/EXIHeaderEncoder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/EXIOptions.h b/src/codec/EXIOptions.h index f2c7140..9156746 100644 --- a/src/codec/EXIOptions.h +++ b/src/codec/EXIOptions.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/EXITypes.h b/src/codec/EXITypes.h index 0c53d52..b8a2b45 100644 --- a/src/codec/EXITypes.h +++ b/src/codec/EXITypes.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/EncoderChannel.c b/src/codec/EncoderChannel.c index 8789350..d15d52a 100644 --- a/src/codec/EncoderChannel.c +++ b/src/codec/EncoderChannel.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/EncoderChannel.h b/src/codec/EncoderChannel.h index 4eba629..9523d5d 100644 --- a/src/codec/EncoderChannel.h +++ b/src/codec/EncoderChannel.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/ErrorCodes.h b/src/codec/ErrorCodes.h index 3adf726..4237205 100644 --- a/src/codec/ErrorCodes.h +++ b/src/codec/ErrorCodes.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/MethodsBag.c b/src/codec/MethodsBag.c index 399ea22..23e70ba 100644 --- a/src/codec/MethodsBag.c +++ b/src/codec/MethodsBag.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/codec/MethodsBag.h b/src/codec/MethodsBag.h index a5d0cc1..e418560 100644 --- a/src/codec/MethodsBag.h +++ b/src/codec/MethodsBag.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @version 2017-03-02 - * @contact Joerg.Heuer@siemens.com + * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

*

Schema: V2G_CI_MsgDef.xsd

diff --git a/src/din/dinEXIDatatypes.c b/src/din/dinEXIDatatypes.c index 668f4af..af5875d 100644 --- a/src/din/dinEXIDatatypes.c +++ b/src/din/dinEXIDatatypes.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-11-16 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/din/dinEXIDatatypes.h b/src/din/dinEXIDatatypes.h index 50d4156..ad09324 100644 --- a/src/din/dinEXIDatatypes.h +++ b/src/din/dinEXIDatatypes.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-11-16 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/din/dinEXIDatatypesDecoder.c b/src/din/dinEXIDatatypesDecoder.c index c05452e..c242e8d 100644 --- a/src/din/dinEXIDatatypesDecoder.c +++ b/src/din/dinEXIDatatypesDecoder.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-11-16 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/din/dinEXIDatatypesDecoder.h b/src/din/dinEXIDatatypesDecoder.h index 26988c6..a99cb48 100644 --- a/src/din/dinEXIDatatypesDecoder.h +++ b/src/din/dinEXIDatatypesDecoder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-11-16 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/din/dinEXIDatatypesEncoder.c b/src/din/dinEXIDatatypesEncoder.c index 3904f3d..08a2cca 100644 --- a/src/din/dinEXIDatatypesEncoder.c +++ b/src/din/dinEXIDatatypesEncoder.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-11-16 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/din/dinEXIDatatypesEncoder.h b/src/din/dinEXIDatatypesEncoder.h index f10a058..d0ee4d5 100644 --- a/src/din/dinEXIDatatypesEncoder.h +++ b/src/din/dinEXIDatatypesEncoder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-11-16 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/iso1/iso1EXIDatatypes.c b/src/iso1/iso1EXIDatatypes.c index 0b10164..5640486 100644 --- a/src/iso1/iso1EXIDatatypes.c +++ b/src/iso1/iso1EXIDatatypes.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-12-12 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/iso1/iso1EXIDatatypes.h b/src/iso1/iso1EXIDatatypes.h index c394583..cc22a45 100644 --- a/src/iso1/iso1EXIDatatypes.h +++ b/src/iso1/iso1EXIDatatypes.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-12-12 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

@@ -44,8 +44,8 @@ extern "C" { #define SUPPORT_YES 1 #define SUPPORT_NO 2 -#define DEPLOY_ISO1_CODEC SUPPORT_NO -#define DEPLOY_ISO1_CODEC_FRAGMENT SUPPORT_NO +#define DEPLOY_ISO1_CODEC SUPPORT_YES +#define DEPLOY_ISO1_CODEC_FRAGMENT SUPPORT_YES #if DEPLOY_ISO1_CODEC == SUPPORT_YES diff --git a/src/iso1/iso1EXIDatatypesDecoder.c b/src/iso1/iso1EXIDatatypesDecoder.c index 6c360a5..9a76ca2 100644 --- a/src/iso1/iso1EXIDatatypesDecoder.c +++ b/src/iso1/iso1EXIDatatypesDecoder.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-12-12 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/iso1/iso1EXIDatatypesDecoder.h b/src/iso1/iso1EXIDatatypesDecoder.h index 2c9d791..6b11657 100644 --- a/src/iso1/iso1EXIDatatypesDecoder.h +++ b/src/iso1/iso1EXIDatatypesDecoder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-12-12 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/iso1/iso1EXIDatatypesEncoder.c b/src/iso1/iso1EXIDatatypesEncoder.c index 8ef3406..a54ab28 100644 --- a/src/iso1/iso1EXIDatatypesEncoder.c +++ b/src/iso1/iso1EXIDatatypesEncoder.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-12-12 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/iso1/iso1EXIDatatypesEncoder.h b/src/iso1/iso1EXIDatatypesEncoder.h index c2abd37..50ee1d7 100644 --- a/src/iso1/iso1EXIDatatypesEncoder.h +++ b/src/iso1/iso1EXIDatatypesEncoder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-12-12 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/iso2/iso2EXIDatatypes.c b/src/iso2/iso2EXIDatatypes.c index 221fadd..5dec4a3 100644 --- a/src/iso2/iso2EXIDatatypes.c +++ b/src/iso2/iso2EXIDatatypes.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-11-16 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/iso2/iso2EXIDatatypes.h b/src/iso2/iso2EXIDatatypes.h index bc11233..724685a 100644 --- a/src/iso2/iso2EXIDatatypes.h +++ b/src/iso2/iso2EXIDatatypes.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-11-16 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

@@ -44,8 +44,8 @@ extern "C" { #define SUPPORT_YES 1 #define SUPPORT_NO 2 -#define DEPLOY_ISO2_CODEC SUPPORT_YES -#define DEPLOY_ISO2_CODEC_FRAGMENT SUPPORT_YES +#define DEPLOY_ISO2_CODEC SUPPORT_NO +#define DEPLOY_ISO2_CODEC_FRAGMENT SUPPORT_NO #if DEPLOY_ISO2_CODEC == SUPPORT_YES diff --git a/src/iso2/iso2EXIDatatypesDecoder.c b/src/iso2/iso2EXIDatatypesDecoder.c index 18b3d32..067a17c 100644 --- a/src/iso2/iso2EXIDatatypesDecoder.c +++ b/src/iso2/iso2EXIDatatypesDecoder.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-11-16 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/iso2/iso2EXIDatatypesDecoder.h b/src/iso2/iso2EXIDatatypesDecoder.h index f0beda1..cc2d949 100644 --- a/src/iso2/iso2EXIDatatypesDecoder.h +++ b/src/iso2/iso2EXIDatatypesDecoder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-11-16 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/iso2/iso2EXIDatatypesEncoder.c b/src/iso2/iso2EXIDatatypesEncoder.c index 670755e..d34b268 100644 --- a/src/iso2/iso2EXIDatatypesEncoder.c +++ b/src/iso2/iso2EXIDatatypesEncoder.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-11-16 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/iso2/iso2EXIDatatypesEncoder.h b/src/iso2/iso2EXIDatatypesEncoder.h index b6aae65..1c1b497 100644 --- a/src/iso2/iso2EXIDatatypesEncoder.h +++ b/src/iso2/iso2EXIDatatypesEncoder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-11-16 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/test/main.c b/src/test/main.c index 59c3f3e..c1ce2f0 100644 --- a/src/test/main.c +++ b/src/test/main.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @author Sebastian.Kaebisch@siemens.com - * @version 1.0.0alpha + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Switch for sample programs: EXI codec only or for entire V2G example

diff --git a/src/test/main.h b/src/test/main.h index 42a4c00..ae3e0c2 100644 --- a/src/test/main.h +++ b/src/test/main.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @author Sebastian.Kaebisch@siemens.com - * @version 1.0.0alpha + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * * diff --git a/src/test/main_databinder.c b/src/test/main_databinder.c index e16e2f3..60d31f3 100644 --- a/src/test/main_databinder.c +++ b/src/test/main_databinder.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 1.0.0alpha + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

@@ -41,11 +41,17 @@ #include #include -/* schema-dependent */ -#include "iso2EXIDatatypes.h" +/* schema-dependent */ +#include "iso1EXIDatatypes.h" +#if DEPLOY_ISO1_CODEC == SUPPORT_YES +#include "iso1EXIDatatypesEncoder.h" +#include "iso1EXIDatatypesDecoder.h" +#endif /* DEPLOY_ISO1_CODEC == SUPPORT_YES */ +#include "iso2EXIDatatypes.h" +#if DEPLOY_ISO2_CODEC == SUPPORT_YES #include "iso2EXIDatatypesEncoder.h" #include "iso2EXIDatatypesDecoder.h" - +#endif /* DEPLOY_ISO2_CODEC == SUPPORT_YES */ #include "ByteStream.h" @@ -65,8 +71,13 @@ uint8_t bufferOut[BUFFER_SIZE]; int main_databinder(int argc, char *argv[]) { - - struct iso2EXIDocument exiDoc; + +#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; @@ -111,8 +122,13 @@ int main_databinder(int argc, char *argv[]) { iStream.capacity = 0; - printf("Start decoding EXI stream to databinding layer \n"); - errn = decode_iso2ExiDocument(&iStream, &exiDoc); + printf("Start decoding EXI stream to databinding layer \n"); +#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; @@ -129,8 +145,13 @@ int main_databinder(int argc, char *argv[]) { oStream.buffer = 0; oStream.capacity = 8; - printf("Start encoding databinding layer to EXI \n"); - errn = encode_iso2ExiDocument(&oStream, &exiDoc); + printf("Start encoding databinding layer to EXI \n"); +#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; diff --git a/src/test/main_example.c b/src/test/main_example.c index 2985755..e54d7be 100644 --- a/src/test/main_example.c +++ b/src/test/main_example.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -19,7 +19,7 @@ * * @author Daniel.Peintner.EXT@siemens.com * @author Sebastian.Kaebisch@siemens.com - * @version 1.0.0alpha + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * * @@ -53,6 +53,13 @@ #include "xmldsigEXIDatatypesDecoder.h" #endif /* DEPLOY_XMLDSIG_CODEC == SUPPORT_YES */ +/* Activate support for ISO1 */ +#include "iso1EXIDatatypes.h" +#if DEPLOY_ISO1_CODEC == SUPPORT_YES +#include "iso1EXIDatatypesEncoder.h" +#include "iso1EXIDatatypesDecoder.h" +#endif /* DEPLOY_ISO1_CODEC == SUPPORT_YES */ + /* Activate support for ISO2 */ #include "iso2EXIDatatypes.h" #if DEPLOY_ISO2_CODEC == SUPPORT_YES @@ -103,12 +110,6 @@ static void printASCIIString(exi_string_character_t* string, uint16_t len) { printf("\n"); } -static void printEVSEStatus(struct iso2EVSEStatusType* status) -{ - printf("\tEVSEStatus:\n"); - printf("\t\tEVSENotification=%d\n", status->EVSENotification); - printf("\t\tNotificationMaxDelay=%d\n", status->NotificationMaxDelay); -} static void printBinaryArray(uint8_t* byte, uint16_t len) { unsigned int i; @@ -126,31 +127,6 @@ static void copyBytes(uint8_t* from, uint16_t len, uint8_t* to) { } -/* serializes EXI stream and adds V2G TP header */ -static int serializeEXI2Stream(struct iso2EXIDocument* exiIn, bitstream_t* stream) { - int errn; - *stream->pos = V2GTP_HEADER_LENGTH; /* v2gtp header */ - if( (errn = encode_iso2ExiDocument(stream, exiIn)) == 0) { - errn = write_v2gtpHeader(stream->data, (*stream->pos)-V2GTP_HEADER_LENGTH, V2GTP_EXI_TYPE); - } - return errn; -} - - -/* deserializes V2G TP header and decodes right away EXI stream */ -static int deserializeStream2EXI(bitstream_t* streamIn, struct iso2EXIDocument* exi) { - int errn; - uint32_t payloadLength; - - *streamIn->pos = 0; - if ( (errn = read_v2gtpHeader(streamIn->data, &payloadLength)) == 0) { - *streamIn->pos += V2GTP_HEADER_LENGTH; - - errn = decode_iso2ExiDocument(streamIn, exi); - } - return errn; -} - /** Example implementation of the app handshake protocol for the EVSE side */ static int appHandshakeHandler(bitstream_t* iStream, bitstream_t* oStream) { struct appHandEXIDocument appHandResp; @@ -287,7 +263,44 @@ static int appHandshake() } -static int sessionSetup(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { + + + +#if DEPLOY_ISO2_CODEC == SUPPORT_YES + +static void printEVSEStatus2(struct iso2EVSEStatusType* status) +{ + printf("\tEVSEStatus:\n"); + printf("\t\tEVSENotification=%d\n", status->EVSENotification); + printf("\t\tNotificationMaxDelay=%d\n", status->NotificationMaxDelay); +} + +/* serializes EXI stream and adds V2G TP header */ +static int serialize2EXI2Stream(struct iso2EXIDocument* exiIn, bitstream_t* stream) { + int errn; + *stream->pos = V2GTP_HEADER_LENGTH; /* v2gtp header */ + if( (errn = encode_iso2ExiDocument(stream, exiIn)) == 0) { + errn = write_v2gtpHeader(stream->data, (*stream->pos)-V2GTP_HEADER_LENGTH, V2GTP_EXI_TYPE); + } + return errn; +} + + +/* deserializes V2G TP header and decodes right away EXI stream */ +static int deserialize2Stream2EXI(bitstream_t* streamIn, struct iso2EXIDocument* exi) { + int errn; + uint32_t payloadLength; + + *streamIn->pos = 0; + if ( (errn = read_v2gtpHeader(streamIn->data, &payloadLength)) == 0) { + *streamIn->pos += V2GTP_HEADER_LENGTH; + + errn = decode_iso2ExiDocument(streamIn, exi); + } + return errn; +} + +static int sessionSetup2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { printf("EVSE side: sessionSetup called\n" ); printf("\tReceived data:\n"); printf("\tHeader SessionID="); @@ -324,7 +337,7 @@ static int sessionSetup(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* e return 0; } -static int serviceDiscovery(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { +static int serviceDiscovery2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { int i; printf("EVSE side: serviceDiscovery called\n" ); @@ -362,7 +375,7 @@ static int serviceDiscovery(struct iso2EXIDocument* exiIn, struct iso2EXIDocumen } -static int serviceDetail(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { +static int serviceDetail2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { printf("EVSE side: serviceDetail called\n" ); printf("\tReceived data:\n"); @@ -433,7 +446,7 @@ static int serviceDetail(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* } -static int paymentServiceSelection(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { +static int paymentServiceSelection2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { int i; printf("EVSE side: paymentServiceSelection called\n" ); @@ -466,7 +479,7 @@ static int paymentServiceSelection(struct iso2EXIDocument* exiIn, struct iso2EXI } -static int paymentDetails(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { +static int paymentDetails2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { printf("EVSE side: paymentDetails called\n" ); printf("\tReceived data:\n"); @@ -493,7 +506,7 @@ static int paymentDetails(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* } -static int authorization(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { +static int authorization2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { printf("EVSE: Authorization called\n" ); printf("\tReceived data:\n"); @@ -520,7 +533,7 @@ static int authorization(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* } -static int chargeParameterDiscovery(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { +static int chargeParameterDiscovery2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { printf("EVSE side: chargeParameterDiscovery called\n" ); printf("\tReceived data:\n"); @@ -545,7 +558,7 @@ static int chargeParameterDiscovery(struct iso2EXIDocument* exiIn, struct iso2EX } -static int powerDelivery(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { +static int powerDelivery2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { printf("EVSE side: powerDelivery called\n" ); printf("\tReceived data:\n"); @@ -571,7 +584,7 @@ static int powerDelivery(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* } -static int chargingStatus(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { +static int chargingStatus2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { printf("EVSE side: chargingStatus called\n" ); @@ -596,7 +609,7 @@ static int chargingStatus(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* } -static int meteringReceipt(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { +static int meteringReceipt2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { printf("EVSE side: meteringReceipt called\n" ); printf("\tReceived data:\n"); @@ -619,7 +632,7 @@ static int meteringReceipt(struct iso2EXIDocument* exiIn, struct iso2EXIDocument return 0; } -static int sessionStop(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { +static int sessionStop2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { printf("EVSE side: sessionStop called\n" ); printf("\tReceived data:\n"); @@ -639,7 +652,7 @@ static int sessionStop(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* ex return 0; } -static int cableCheck(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { +static int cableCheck2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { printf("EVSE side: cableCheck called\n" ); @@ -660,7 +673,7 @@ static int cableCheck(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exi return 0; } -static int preCharge(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { +static int preCharge2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { printf("EVSE side: preCharge called\n" ); printf("\tReceived data:\n"); @@ -688,38 +701,38 @@ static int preCharge(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiO -static int create_response_message(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { +static int create_response_message2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { int errn = ERROR_UNEXPECTED_REQUEST_MESSAGE; /* create response message as EXI document */ if(exiIn->V2G_Message_isUsed) { init_iso2EXIDocument(exiOut); if (exiIn->V2G_Message.Body.SessionSetupReq_isUsed) { - errn = sessionSetup(exiIn, exiOut); + errn = sessionSetup2(exiIn, exiOut); } else if (exiIn->V2G_Message.Body.ServiceDiscoveryReq_isUsed) { - errn = serviceDiscovery(exiIn, exiOut); + errn = serviceDiscovery2(exiIn, exiOut); } else if (exiIn->V2G_Message.Body.ServiceDetailReq_isUsed) { - errn = serviceDetail(exiIn, exiOut); + errn = serviceDetail2(exiIn, exiOut); } else if (exiIn->V2G_Message.Body.PaymentServiceSelectionReq_isUsed) { - errn = paymentServiceSelection(exiIn, exiOut); + errn = paymentServiceSelection2(exiIn, exiOut); } else if (exiIn->V2G_Message.Body.PaymentDetailsReq_isUsed) { - errn = paymentDetails(exiIn, exiOut); + errn = paymentDetails2(exiIn, exiOut); } else if (exiIn->V2G_Message.Body.AuthorizationReq_isUsed) { - errn = authorization(exiIn, exiOut); + errn = authorization2(exiIn, exiOut); } else if (exiIn->V2G_Message.Body.ChargeParameterDiscoveryReq_isUsed) { - errn = chargeParameterDiscovery(exiIn, exiOut); + errn = chargeParameterDiscovery2(exiIn, exiOut); } else if (exiIn->V2G_Message.Body.PowerDeliveryReq_isUsed) { - errn = powerDelivery(exiIn, exiOut); + errn = powerDelivery2(exiIn, exiOut); } else if (exiIn->V2G_Message.Body.ChargingStatusReq_isUsed) { - errn = chargingStatus(exiIn, exiOut); + errn = chargingStatus2(exiIn, exiOut); } else if (exiIn->V2G_Message.Body.MeteringReceiptReq_isUsed) { - errn = meteringReceipt(exiIn, exiOut); + errn = meteringReceipt2(exiIn, exiOut); } else if (exiIn->V2G_Message.Body.SessionStopReq_isUsed) { - errn = sessionStop(exiIn, exiOut); + errn = sessionStop2(exiIn, exiOut); } else if (exiIn->V2G_Message.Body.CableCheckReq_isUsed) { - errn = cableCheck(exiIn, exiOut); + errn = cableCheck2(exiIn, exiOut); } else if (exiIn->V2G_Message.Body.PreChargeReq_isUsed) { - errn = preCharge(exiIn, exiOut); + errn = preCharge2(exiIn, exiOut); } } @@ -728,7 +741,7 @@ static int create_response_message(struct iso2EXIDocument* exiIn, struct iso2EXI /* Adapt this to your system setup! */ /* In this situation EV and EVSE is the same party */ -static int request_response(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { +static int request_response2(struct iso2EXIDocument* exiIn, struct iso2EXIDocument* exiOut) { int errn; bitstream_t stream1; @@ -746,20 +759,20 @@ static int request_response(struct iso2EXIDocument* exiIn, struct iso2EXIDocumen stream2.pos = &pos2; /* EV side */ - errn = serializeEXI2Stream(exiIn, &stream1); + errn = serialize2EXI2Stream(exiIn, &stream1); /* --> Start of EVSE side */ /* deserialize request message */ if (errn == 0) { - errn = deserializeStream2EXI(&stream1, exiOut); + errn = deserialize2Stream2EXI(&stream1, exiOut); } /* create response message */ if (errn == 0) { - errn = create_response_message(exiOut, exiIn); + errn = create_response_message2(exiOut, exiIn); } /* serialize response message */ if (errn == 0) { - errn = serializeEXI2Stream(exiIn, &stream2); + errn = serialize2EXI2Stream(exiIn, &stream2); } /* <-- End of EVSE side */ @@ -767,15 +780,14 @@ static int request_response(struct iso2EXIDocument* exiIn, struct iso2EXIDocumen /* EV side */ /* deserialize response message */ if (errn == 0) { - errn = deserializeStream2EXI(&stream2, exiOut); + errn = deserialize2Stream2EXI(&stream2, exiOut); } return errn; } - -static int charging() +static int charging2() { int errn = 0; int i, j; @@ -816,7 +828,7 @@ static int charging() printf("EV side: call EVSE sessionSetup"); - errn = request_response(&exiIn, &exiOut); + errn = request_response2(&exiIn, &exiOut); if(errn == 0) { /* check, if this is the right response message */ @@ -851,7 +863,7 @@ static int charging() printf("EV side: call EVSE serviceDiscovery"); - errn = request_response(&exiIn, &exiOut); + errn = request_response2(&exiIn, &exiOut); if(errn == 0) { /* check, if this is the right response message */ @@ -914,7 +926,7 @@ static int charging() printf("EV side: call EVSE ServiceDetail \n"); - errn = request_response(&exiIn, &exiOut); + errn = request_response2(&exiIn, &exiOut); if(errn == 0) { /* check, if this is the right response message */ @@ -975,7 +987,7 @@ static int charging() printf("EV side: call EVSE ServicePaymentSelection \n"); - errn = request_response(&exiIn, &exiOut); + errn = request_response2(&exiIn, &exiOut); if(errn == 0) { /* check, if this is the right response message */ @@ -1030,7 +1042,7 @@ static int charging() printf("EV side: call EVSE ServiceDetail \n"); - errn = request_response(&exiIn, &exiOut); + errn = request_response2(&exiIn, &exiOut); if(errn == 0) { /* check, if this is the right response message */ @@ -1077,7 +1089,7 @@ static int charging() printf("EV side: call EVSE Authorization \n"); - errn = request_response(&exiIn, &exiOut); + errn = request_response2(&exiIn, &exiOut); if(errn == 0) { /* check, if this is the right response message */ @@ -1141,7 +1153,7 @@ static int charging() printf("EV side: call EVSE chargeParameterDiscovery"); - errn = request_response(&exiIn, &exiOut); + errn = request_response2(&exiIn, &exiOut); if(errn == 0) { /* check, if this is the right response message */ @@ -1179,7 +1191,7 @@ static int charging() printf("EV side: call EVSE cableCheck \n"); - errn = request_response(&exiIn, &exiOut); + errn = request_response2(&exiIn, &exiOut); if(errn == 0) { /* check, if this is the right response message */ @@ -1195,7 +1207,7 @@ static int charging() printf("\tEVSEProcessing=Finished\n"); } - printEVSEStatus(&(exiOut.V2G_Message.Body.CableCheckRes.EVSEStatus)); + printEVSEStatus2(&(exiOut.V2G_Message.Body.CableCheckRes.EVSEStatus)); } else { errn = ERROR_UNEXPECTED_CABLE_CHECK_RESP_MESSAGE; return errn; @@ -1222,7 +1234,7 @@ static int charging() printf("EV side: call EVSE preCharge \n"); - errn = request_response(&exiIn, &exiOut); + errn = request_response2(&exiIn, &exiOut); if(errn == 0) { /* check, if this is the right response message */ @@ -1234,7 +1246,7 @@ static int charging() printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen); printf("\t ResponseCode=%d\n", exiOut.V2G_Message.Body.PreChargeRes.ResponseCode); - printEVSEStatus(&exiOut.V2G_Message.Body.PreChargeRes.EVSEStatus); + printEVSEStatus2(&exiOut.V2G_Message.Body.PreChargeRes.EVSEStatus); printf("\tEVSEPresentVoltage=%d (%d %d)\n", exiOut.V2G_Message.Body.PreChargeRes.EVSEPresentVoltage.Value, exiOut.V2G_Message.Body.PreChargeRes.EVSEPresentVoltage.Value, exiOut.V2G_Message.Body.PreChargeRes.EVSEPresentVoltage.Exponent); } else { @@ -1262,7 +1274,7 @@ static int charging() printf("EV side: call EVSE powerDelivery \n"); - errn = request_response(&exiIn, &exiOut); + errn = request_response2(&exiIn, &exiOut); if(errn == 0) { /* check, if this is the right response message */ @@ -1298,7 +1310,7 @@ static int charging() printf("EV side: call EVSE chargingStatus \n"); - errn = request_response(&exiIn, &exiOut); + errn = request_response2(&exiIn, &exiOut); if(errn == 0) { /* check, if this is the right response message */ @@ -1359,7 +1371,7 @@ static int charging() printf("EV side: call EVSE meteringReceipt \n"); - errn = request_response(&exiIn, &exiOut); + errn = request_response2(&exiIn, &exiOut); if(errn == 0) { /* check, if this is the right response message */ @@ -1394,7 +1406,7 @@ static int charging() printf("EV side: call EVSE stopSession \n"); - errn = request_response(&exiIn, &exiOut); + errn = request_response2(&exiIn, &exiOut); if(errn == 0) { /* check, if this is the right response message */ @@ -1419,6 +1431,777 @@ static int charging() return errn; } +#endif /* DEPLOY_ISO2_CODEC == SUPPORT_YES */ + + + + + + +#if DEPLOY_ISO1_CODEC == SUPPORT_YES + +static void printEVSEStatus1(struct iso1DC_EVSEStatusType* status) +{ + printf("\tEVSEStatus:\n"); + printf("\t\tEVSENotification=%d\n", status->EVSENotification); + printf("\t\tNotificationMaxDelay=%d\n", status->NotificationMaxDelay); +} + + +/* serializes EXI stream and adds V2G TP header */ +static int serialize1EXI2Stream(struct iso1EXIDocument* exiIn, bitstream_t* stream) { + int errn; + *stream->pos = V2GTP_HEADER_LENGTH; /* v2gtp header */ + if( (errn = encode_iso1ExiDocument(stream, exiIn)) == 0) { + errn = write_v2gtpHeader(stream->data, (*stream->pos)-V2GTP_HEADER_LENGTH, V2GTP_EXI_TYPE); + } + return errn; +} + + + +/* deserializes V2G TP header and decodes right away EXI stream */ +static int deserialize1Stream2EXI(bitstream_t* streamIn, struct iso1EXIDocument* exi) { + int errn; + uint32_t payloadLength; + + *streamIn->pos = 0; + if ( (errn = read_v2gtpHeader(streamIn->data, &payloadLength)) == 0) { + *streamIn->pos += V2GTP_HEADER_LENGTH; + + errn = decode_iso1ExiDocument(streamIn, exi); + } + return errn; +} + + + +static int sessionSetup1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) { + printf("EVSE side: sessionSetup called\n" ); + printf("\tReceived data:\n"); + printf("\tHeader SessionID="); + printBinaryArray(exiIn->V2G_Message.Header.SessionID.bytes, exiIn->V2G_Message.Header.SessionID.bytesLen); + printf("\t\t EVCCID=%d\n", exiIn->V2G_Message.Body.SessionSetupReq.EVCCID.bytes[0]); + + exiOut->V2G_Message_isUsed = 1u; + + /* generate an unique sessionID */ + init_iso1MessageHeaderType(&exiOut->V2G_Message.Header); + exiOut->V2G_Message.Header.SessionID.bytes[0] = 1; + exiOut->V2G_Message.Header.SessionID.bytes[1] = 2; + exiOut->V2G_Message.Header.SessionID.bytes[2] = 3; + exiOut->V2G_Message.Header.SessionID.bytes[3] = 4; + exiOut->V2G_Message.Header.SessionID.bytes[4] = 5; + exiOut->V2G_Message.Header.SessionID.bytes[5] = 6; + exiOut->V2G_Message.Header.SessionID.bytes[6] = 7; + exiOut->V2G_Message.Header.SessionID.bytes[7] = 8; + exiOut->V2G_Message.Header.SessionID.bytesLen = 8; + + /* Prepare data for EV */ + init_iso1BodyType(&exiOut->V2G_Message.Body); + + exiOut->V2G_Message.Body.SessionSetupRes_isUsed = 1u; + init_iso1SessionSetupResType(&exiOut->V2G_Message.Body.SessionSetupRes); + + exiOut->V2G_Message.Body.SessionSetupRes.ResponseCode = iso1responseCodeType_OK; + exiOut->V2G_Message.Body.SessionSetupRes.EVSEID.characters[0] = 0; + exiOut->V2G_Message.Body.SessionSetupRes.EVSEID.characters[1] = 20; + exiOut->V2G_Message.Body.SessionSetupRes.EVSEID.charactersLen = 2; + exiOut->V2G_Message.Body.SessionSetupRes.EVSETimeStamp_isUsed = 1u; + exiOut->V2G_Message.Body.SessionSetupRes.EVSETimeStamp = 123456789; + + return 0; +} + + + +static int serviceDetail1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) { + + printf("EVSE side: serviceDetail called\n" ); + printf("\tReceived data:\n"); + printf("\tHeader SessionID="); + printBinaryArray(exiIn->V2G_Message.Header.SessionID.bytes, exiIn->V2G_Message.Header.SessionID.bytesLen); + printf("\t\t ServiceDetailID=%d\n",exiIn->V2G_Message.Body.ServiceDetailReq.ServiceID); + + + /* Prepare data for EV */ + exiOut->V2G_Message_isUsed = 1u; + init_iso1BodyType(&exiOut->V2G_Message.Body); + + exiOut->V2G_Message.Body.ServiceDetailRes_isUsed= 1u; + init_iso1ServiceDetailResType(&exiOut->V2G_Message.Body.ServiceDetailRes); + + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceID = 1234; + + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList_isUsed = 1u; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.arrayLen = 2; + + /* Parameter Set 1*/ + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].ParameterSetID = 1; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.arrayLen = 2; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.charactersLen = 8; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[0] = 'P'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[1] = 'r'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[2] = 'o'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[3] = 't'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[4]= 'o'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[5] = 'c'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[6] = 'o'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].Name.characters[7] = 'l'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].intValue = 15119; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[0].intValue_isUsed = 1u; + + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].Name.charactersLen = 4; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].Name.characters[0] = 'N'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].Name.characters[1] = 'a'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].Name.characters[2] = 'm'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].Name.characters[3] = 'e'; + + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].stringValue_isUsed = 1u; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].stringValue.charactersLen = 3; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].stringValue.characters[0] = 'V'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].stringValue.characters[1] = '2'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[0].Parameter.array[1].stringValue.characters[2] = 'G'; + + /* Parameter Set 2 */ + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].ParameterSetID = 2; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.arrayLen = 1; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.charactersLen = 7; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[0] = 'C'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[1] = 'h'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[2] = 'a'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[3] = 'n'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[4] = 'n'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[5] = 'e'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].Name.characters[6] = 'l'; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].physicalValue_isUsed = 1u; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].physicalValue.Value = 1234; + + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].physicalValue.Multiplier = 1; + exiOut->V2G_Message.Body.ServiceDetailRes.ServiceParameterList.ParameterSet.array[1].Parameter.array[0].physicalValue.Value = 2; + + exiOut->V2G_Message.Body.ServiceDetailRes.ResponseCode = iso1responseCodeType_OK; + + return 0; +} + + + +static int authorization1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) { + + printf("EVSE: Authorization called\n" ); + printf("\tReceived data:\n"); + + if(exiIn->V2G_Message.Body.AuthorizationReq.GenChallenge_isUsed) { + printf("\t\t\t GenChallenge=%d\n", exiIn->V2G_Message.Body.AuthorizationReq.GenChallenge.bytes[0]); + } + if(exiIn->V2G_Message.Body.AuthorizationReq.Id_isUsed ) { + printf("\t\t\t ID=%c%c%c\n", exiIn->V2G_Message.Body.AuthorizationReq.Id.characters[0], exiIn->V2G_Message.Body.AuthorizationReq.Id.characters[1], exiIn->V2G_Message.Body.AuthorizationReq.Id.characters[2]); + } + + + /* Prepare data for EV */ + exiOut->V2G_Message_isUsed = 1u; + init_iso1BodyType(&exiOut->V2G_Message.Body); + + exiOut->V2G_Message.Body.AuthorizationRes_isUsed = 1u; + init_iso1AuthorizationResType(&exiOut->V2G_Message.Body.AuthorizationRes); + + exiOut->V2G_Message.Body.AuthorizationRes.ResponseCode = iso1responseCodeType_OK; + exiOut->V2G_Message.Body.AuthorizationRes.EVSEProcessing = iso1EVSEProcessingType_Finished; + + return 0; +} + + +static int powerDelivery1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) { + printf("EVSE side: powerDelivery called\n" ); + printf("\tReceived data:\n"); + + printf("\t\t ChargeProgress=%d\n", exiIn->V2G_Message.Body.PowerDeliveryReq.ChargeProgress); + printf("\t\t SAScheduleTupleID=%d\n", exiIn->V2G_Message.Body.PowerDeliveryReq.SAScheduleTupleID); + + /* Prepare data for EV */ + exiOut->V2G_Message_isUsed = 1u; + init_iso1BodyType(&exiOut->V2G_Message.Body); + + exiOut->V2G_Message.Body.PowerDeliveryRes_isUsed = 1u; + init_iso1PowerDeliveryResType(&exiOut->V2G_Message.Body.PowerDeliveryRes); + + exiOut->V2G_Message.Body.PowerDeliveryRes.ResponseCode = iso1responseCodeType_OK; + + exiOut->V2G_Message.Body.PowerDeliveryRes.EVSEStatus_isUsed = 1; + exiOut->V2G_Message.Body.PowerDeliveryRes.EVSEStatus.EVSENotification = iso1EVSENotificationType_StopCharging; + exiOut->V2G_Message.Body.PowerDeliveryRes.EVSEStatus.NotificationMaxDelay=12; + + return 0; +} + + +static int chargingStatus1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) { + + printf("EVSE side: chargingStatus called\n" ); + + /* Prepare data for EV */ + exiOut->V2G_Message_isUsed = 1u; + init_iso1BodyType(&exiOut->V2G_Message.Body); + + exiOut->V2G_Message.Body.ChargingStatusRes_isUsed = 1u; + init_iso1ChargingStatusResType(&exiOut->V2G_Message.Body.ChargingStatusRes); + + + exiOut->V2G_Message.Body.ChargingStatusRes.ResponseCode = iso1responseCodeType_OK; + exiOut->V2G_Message.Body.ChargingStatusRes.EVSEID.characters[0]= 'A'; + exiOut->V2G_Message.Body.ChargingStatusRes.EVSEID.charactersLen =1; + + exiOut->V2G_Message.Body.ChargingStatusRes.ReceiptRequired = 1; + exiOut->V2G_Message.Body.ChargingStatusRes.ReceiptRequired_isUsed = 1; + + return 0; +} + + +static int meteringReceipt1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) { + + printf("EVSE side: meteringReceipt called\n" ); + printf("\tReceived data:\n"); + + printf("\t\t ID=%c%c%c\n", exiIn->V2G_Message.Body.MeteringReceiptReq.Id.characters[0], exiIn->V2G_Message.Body.MeteringReceiptReq.Id.characters[1], exiIn->V2G_Message.Body.MeteringReceiptReq.Id.characters[2]); + printf("\t\t SAScheduleTupleID=%d\n", exiIn->V2G_Message.Body.MeteringReceiptReq.SAScheduleTupleID); + printf("\t\t SessionID=%d\n", exiIn->V2G_Message.Body.MeteringReceiptReq.SessionID.bytes[1]); + printf("\t\t MeterInfo.MeterStatus=%d\n", exiIn->V2G_Message.Body.MeteringReceiptReq.MeterInfo.MeterStatus); + printf("\t\t MeterInfo.MeterID=%d\n", exiIn->V2G_Message.Body.MeteringReceiptReq.MeterInfo.MeterID.characters[0]); + + /* Prepare data for EV */ + exiOut->V2G_Message_isUsed = 1u; + init_iso1BodyType(&exiOut->V2G_Message.Body); + + exiOut->V2G_Message.Body.MeteringReceiptRes_isUsed = 1u; + init_iso1MeteringReceiptResType(&exiOut->V2G_Message.Body.MeteringReceiptRes); + + exiOut->V2G_Message.Body.MeteringReceiptRes.ResponseCode = iso1responseCodeType_FAILED; + + return 0; +} + +static int sessionStop1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) { + + printf("EVSE side: sessionStop called\n" ); + printf("\tReceived data:\n"); + printf("\tHeader SessionID="); + printBinaryArray(exiIn->V2G_Message.Header.SessionID.bytes, exiIn->V2G_Message.Header.SessionID.bytesLen); + printf("\t\t ChargingSession=%d\n", exiIn->V2G_Message.Body.SessionStopReq.ChargingSession); + + /* Prepare data for EV */ + exiOut->V2G_Message_isUsed = 1u; + init_iso1BodyType(&exiOut->V2G_Message.Body); + + exiOut->V2G_Message.Body.SessionStopRes_isUsed = 1u; + init_iso1SessionStopResType(&exiOut->V2G_Message.Body.SessionStopRes); + + exiOut->V2G_Message.Body.SessionStopRes.ResponseCode = iso1responseCodeType_OK; + + return 0; +} + +static int cableCheck1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) { + + printf("EVSE side: cableCheck called\n" ); + + /* Prepare data for EV */ + exiOut->V2G_Message_isUsed = 1u; + init_iso1BodyType(&exiOut->V2G_Message.Body); + + exiOut->V2G_Message.Body.CableCheckRes_isUsed = 1u; + init_iso1CableCheckResType(&exiOut->V2G_Message.Body.CableCheckRes); + + exiOut->V2G_Message.Body.CableCheckRes.ResponseCode = iso1responseCodeType_OK; + + exiOut->V2G_Message.Body.CableCheckRes.DC_EVSEStatus.NotificationMaxDelay = 1234; + exiOut->V2G_Message.Body.CableCheckRes.DC_EVSEStatus.EVSENotification= iso1EVSENotificationType_ReNegotiation; + + exiOut->V2G_Message.Body.CableCheckRes.EVSEProcessing = iso1EVSEProcessingType_Finished; + + return 0; +} + +static int preCharge1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) { + + printf("EVSE side: preCharge called\n" ); + printf("\tReceived data:\n"); + + printf("\t\t EVTargetCurrent=%d (%d)\n", exiIn->V2G_Message.Body.PreChargeReq.EVTargetCurrent.Value, exiIn->V2G_Message.Body.PreChargeReq.EVTargetCurrent.Multiplier); + printf("\t\t EVTargetVoltage=%d (%d)\n", exiIn->V2G_Message.Body.PreChargeReq.EVTargetVoltage.Value, exiIn->V2G_Message.Body.PreChargeReq.EVTargetVoltage.Multiplier); + + /* Prepare data for EV */ + exiOut->V2G_Message_isUsed = 1u; + init_iso1BodyType(&exiOut->V2G_Message.Body); + + exiOut->V2G_Message.Body.PreChargeRes_isUsed = 1u; + init_iso1PreChargeResType(&exiOut->V2G_Message.Body.PreChargeRes); + + exiOut->V2G_Message.Body.PreChargeRes.ResponseCode = iso1responseCodeType_OK; + + exiOut->V2G_Message.Body.PreChargeRes.DC_EVSEStatus.EVSENotification = iso1EVSENotificationType_StopCharging; + exiOut->V2G_Message.Body.PreChargeRes.DC_EVSEStatus.NotificationMaxDelay= 1234; + + exiOut->V2G_Message.Body.PreChargeRes.EVSEPresentVoltage.Multiplier = 3; + exiOut->V2G_Message.Body.PreChargeRes.EVSEPresentVoltage.Value= 456; + + return 0; +} + + + + + +static int create_response_message1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) { + int errn = ERROR_UNEXPECTED_REQUEST_MESSAGE; + + /* create response message as EXI document */ + if(exiIn->V2G_Message_isUsed) { + init_iso1EXIDocument(exiOut); + if (exiIn->V2G_Message.Body.SessionSetupReq_isUsed) { + errn = sessionSetup1(exiIn, exiOut); + } else if (exiIn->V2G_Message.Body.ServiceDetailReq_isUsed) { + errn = serviceDetail1(exiIn, exiOut); + /*} else if (exiIn->V2G_Message.Body.PaymentDetailsReq_isUsed) { + errn = paymentDetails1(exiIn, exiOut);*/ + } else if (exiIn->V2G_Message.Body.AuthorizationReq_isUsed) { + errn = authorization1(exiIn, exiOut); + } else if (exiIn->V2G_Message.Body.PowerDeliveryReq_isUsed) { + errn = powerDelivery1(exiIn, exiOut); + } else if (exiIn->V2G_Message.Body.ChargingStatusReq_isUsed) { + errn = chargingStatus1(exiIn, exiOut); + } else if (exiIn->V2G_Message.Body.MeteringReceiptReq_isUsed) { + errn = meteringReceipt1(exiIn, exiOut); + } else if (exiIn->V2G_Message.Body.SessionStopReq_isUsed) { + errn = sessionStop1(exiIn, exiOut); + } else if (exiIn->V2G_Message.Body.CableCheckReq_isUsed) { + errn = cableCheck1(exiIn, exiOut); + } else if (exiIn->V2G_Message.Body.PreChargeReq_isUsed) { + errn = preCharge1(exiIn, exiOut); + } + } + + return errn; +} + + +/* Adapt this to your system setup! */ +/* In this situation EV and EVSE is the same party */ +static int request_response1(struct iso1EXIDocument* exiIn, struct iso1EXIDocument* exiOut) { + int errn; + + bitstream_t stream1; + bitstream_t stream2; + + size_t pos1; + size_t pos2; + + stream1.size = BUFFER_SIZE; + stream1.data = buffer1; + stream1.pos = &pos1; + + stream2.size = BUFFER_SIZE; + stream2.data = buffer2; + stream2.pos = &pos2; + + /* EV side */ + errn = serialize1EXI2Stream(exiIn, &stream1); + + /* --> Start of EVSE side */ + /* deserialize request message */ + if (errn == 0) { + errn = deserialize1Stream2EXI(&stream1, exiOut); + } + /* create response message */ + if (errn == 0) { + errn = create_response_message1(exiOut, exiIn); + } + /* serialize response message */ + if (errn == 0) { + errn = serialize1EXI2Stream(exiIn, &stream2); + } + /* <-- End of EVSE side */ + + + /* EV side */ + /* deserialize response message */ + if (errn == 0) { + errn = deserialize1Stream2EXI(&stream2, exiOut); + } + + return errn; +} + +static int charging1() +{ + int errn = 0; + int i, j; + + struct iso1EXIDocument exiIn; + struct iso1EXIDocument exiOut; + + struct iso1ServiceDetailResType serviceDetailRes; + struct iso1PaymentDetailsResType paymentDetailsRes; + + /* setup header information */ + init_iso1EXIDocument(&exiIn); + exiIn.V2G_Message_isUsed = 1u; + init_iso1MessageHeaderType(&exiIn.V2G_Message.Header); + exiIn.V2G_Message.Header.SessionID.bytes[0] = 0; /* sessionID is always '0' at the beginning (the response contains the valid sessionID)*/ + exiIn.V2G_Message.Header.SessionID.bytes[1] = 0; + exiIn.V2G_Message.Header.SessionID.bytes[2] = 0; + exiIn.V2G_Message.Header.SessionID.bytes[3] = 0; + exiIn.V2G_Message.Header.SessionID.bytes[4] = 0; + exiIn.V2G_Message.Header.SessionID.bytes[5] = 0; + exiIn.V2G_Message.Header.SessionID.bytes[6] = 0; + exiIn.V2G_Message.Header.SessionID.bytes[7] = 0; + exiIn.V2G_Message.Header.SessionID.bytesLen = 8; + exiIn.V2G_Message.Header.Signature_isUsed = 0u; + + + /************************ + * sessionSetup * + ************************/ + init_iso1BodyType(&exiIn.V2G_Message.Body); + exiIn.V2G_Message.Body.SessionSetupReq_isUsed = 1u; + + init_iso1SessionSetupReqType(&exiIn.V2G_Message.Body.SessionSetupReq); + + exiIn.V2G_Message.Body.SessionSetupReq.EVCCID.bytesLen = 1; + exiIn.V2G_Message.Body.SessionSetupReq.EVCCID.bytes[0] = 10; + + printf("EV side: call EVSE sessionSetup"); + + errn = request_response1(&exiIn, &exiOut); + + if(errn == 0) { + /* check, if this is the right response message */ + if(exiOut.V2G_Message.Body.SessionSetupRes_isUsed) { + /* show results of EVSEs answer message */ + printf("EV side: received response message from EVSE\n"); + printf("\tHeader SessionID="); + printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen); + printf("\tResponseCode=%d\n", exiOut.V2G_Message.Body.SessionSetupRes.ResponseCode); + printf("\tEVSEID=%d\n", exiOut.V2G_Message.Body.SessionSetupRes.EVSEID.characters[1]); + printf("\tEVSETimeStamp=%li\n", (long int)exiOut.V2G_Message.Body.SessionSetupRes.EVSETimeStamp); + } else { + errn = ERROR_UNEXPECTED_SESSION_SETUP_RESP_MESSAGE; + return errn; + } + } else { + return errn; + } + + + + /********************************* + * ServiceDetails * + *********************************/ + init_iso1BodyType(&exiIn.V2G_Message.Body); + exiIn.V2G_Message.Body.ServiceDetailReq_isUsed = 1u; + + init_iso1ServiceDetailReqType(&exiIn.V2G_Message.Body.ServiceDetailReq); + + exiIn.V2G_Message.Body.ServiceDetailReq.ServiceID = 22; /* Value Added Server ID */ + + printf("EV side: call EVSE ServiceDetail \n"); + + errn = request_response1(&exiIn, &exiOut); + + if(errn == 0) { + /* check, if this is the right response message */ + if(exiOut.V2G_Message.Body.ServiceDetailRes_isUsed) { + serviceDetailRes = exiOut.V2G_Message.Body.ServiceDetailRes; + /* show results of EVSEs answer message */ + printf("EV side: received response message from EVSE\n"); + printf("\tHeader SessionID="); + printBinaryArray(exiOut.V2G_Message.Header.SessionID.bytes, exiOut.V2G_Message.Header.SessionID.bytesLen); + printf("\t ResponseCode=%d\n", exiOut.V2G_Message.Body.ServiceDiscoveryRes.ResponseCode); + printf("\t ServiceID=%d\n", exiOut.V2G_Message.Body.ServiceDetailRes.ServiceID); + + if(serviceDetailRes.ServiceParameterList_isUsed) { + printf("\t\tLength=%d\n", serviceDetailRes.ServiceParameterList.ParameterSet.arrayLen );/*TEST*/ + + for(i=0; iCode generated by EXIdizer

diff --git a/src/xmldsig/xmldsigEXIDatatypes.h b/src/xmldsig/xmldsigEXIDatatypes.h index ff902fe..8b06393 100644 --- a/src/xmldsig/xmldsigEXIDatatypes.h +++ b/src/xmldsig/xmldsigEXIDatatypes.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-09-04 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/xmldsig/xmldsigEXIDatatypesDecoder.c b/src/xmldsig/xmldsigEXIDatatypesDecoder.c index fd61f25..4e4636d 100644 --- a/src/xmldsig/xmldsigEXIDatatypesDecoder.c +++ b/src/xmldsig/xmldsigEXIDatatypesDecoder.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-09-04 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/xmldsig/xmldsigEXIDatatypesDecoder.h b/src/xmldsig/xmldsigEXIDatatypesDecoder.h index b717062..fc2b046 100644 --- a/src/xmldsig/xmldsigEXIDatatypesDecoder.h +++ b/src/xmldsig/xmldsigEXIDatatypesDecoder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-09-04 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/xmldsig/xmldsigEXIDatatypesEncoder.c b/src/xmldsig/xmldsigEXIDatatypesEncoder.c index 2e4f236..1fc92d2 100644 --- a/src/xmldsig/xmldsigEXIDatatypesEncoder.c +++ b/src/xmldsig/xmldsigEXIDatatypesEncoder.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-09-04 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer

diff --git a/src/xmldsig/xmldsigEXIDatatypesEncoder.h b/src/xmldsig/xmldsigEXIDatatypesEncoder.h index d9e303d..4d8edb7 100644 --- a/src/xmldsig/xmldsigEXIDatatypesEncoder.h +++ b/src/xmldsig/xmldsigEXIDatatypesEncoder.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2017 Siemens AG + * 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 @@ -18,7 +18,7 @@ /******************************************************************* * * @author Daniel.Peintner.EXT@siemens.com - * @version 2017-09-04 + * @version 0.9.4 * @contact Richard.Kuntschke@siemens.com * *

Code generated by EXIdizer