summaryrefslogtreecommitdiff
path: root/tools/AmbSignalMapper/bin/dbc2json
diff options
context:
space:
mode:
Diffstat (limited to 'tools/AmbSignalMapper/bin/dbc2json')
-rwxr-xr-xtools/AmbSignalMapper/bin/dbc2json204
1 files changed, 204 insertions, 0 deletions
diff --git a/tools/AmbSignalMapper/bin/dbc2json b/tools/AmbSignalMapper/bin/dbc2json
new file mode 100755
index 00000000..e96f8679
--- /dev/null
+++ b/tools/AmbSignalMapper/bin/dbc2json
@@ -0,0 +1,204 @@
+#!/usr/bin/perl -w
+
+# Copyright (C) 2014 Intel Corporation
+#
+# This library 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 2.1 of the License, or (at your option) any later version.
+#
+# This library 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 library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+use strict;
+use warnings;
+
+use Intel::IviPoc::DbcGrammar;
+use Intel::IviPoc::AmbCommon;
+use File::Basename;
+use File::Spec;
+use Cwd;
+use JSON;
+
+
+=head1 NAME
+
+dbc2json - Vector CANdb++ to JSON file format converter.
+
+=head1 SYNOPSIS
+
+B<dbc2json> I<infile> [ I<outfile> ]
+
+=head1 DESCRIPTION
+
+Part of Automotive Message Broker Signal Mapper tool.
+
+B<dbc2json> converts file in Vector CANdb++ format to intermediate JSON file.
+
+Intermediate file is used to format and annotate raw data from CANDb++ file into format suitable for AMB plugin creation.
+
+=head1 OPTIONS
+
+=over 4
+
+=item I<infile>
+
+Input I<infile> file in Vector CANdb++ (*.dbc) format.
+
+=item [ I<outfile> ]
+
+Target output I<outfile> file converted to JSON, otherwise created in current directory.
+
+=back
+
+=head1 FILES
+
+=over 4
+
+=back
+
+=head1 REQUIRES
+
+Perl 5.006, Intel::IviPoc::DbcGrammar, File::Basename, File::Spec, Cwd, JSON
+
+=head1 SEE ALSO
+
+perl(1), json2amb(1)
+
+=cut
+
+local $/;
+
+# get total arg passed to this script
+my $total = $#ARGV + 1;
+
+if ( $total < 1 or $total > 2) {
+ # get script name and print usage
+ my $scriptname = $0;
+ &printUsage($scriptname);
+ exit;
+ }
+
+# First parameter is input file
+my $inputfilename = $ARGV[0];
+my $text = &readFileContent($inputfilename);
+
+# Second optional parameter is output file
+my $outputfilename = '';
+if ( $total == 1 ) {
+ my ($infilename, $indirectories, $insuffix) = fileparse($inputfilename, qr/\.[^.]*/);
+ my $targetDir = getcwd;
+ $outputfilename = File::Spec->catfile( ($targetDir), $infilename . '.json' );
+} else {
+ $outputfilename = $ARGV[1];
+}
+
+# We add one space if there is something like ""ReceiverId to get "" ReceiverId
+$text =~ s/"(.*)"(\w*)/"$1" $2/g;
+
+#Create parser
+my $parser = new Intel::IviPoc::DbcGrammar;
+
+# Print wait info for user
+&printWait($inputfilename, $outputfilename);
+
+# Parse input file and generate json
+my $result;
+$result = $parser->DbcOutput($text);
+my %jsonroot = %{$result};
+
+# Get the filename without path and extension and set it as pluginName
+my ($outfilename, $outdirectories, $outsuffix) = fileparse($outputfilename, qr/\.[^.]*/);
+$jsonroot{'pluginName'} = $outfilename;
+
+# Now just spit the JSON out
+my $json = JSON->new;
+$json = $json->utf8;
+my $json_text = $json->pretty->encode( \%jsonroot );
+
+open (my $fho, '>', $outputfilename)
+ or die "Can't create filehandle: $!";
+
+binmode($fho, ":utf8");
+
+print { $fho } $json_text;
+
+if ( $total == 1 or $total == 2 ) {
+ # close current output file
+ close($fho);
+}
+
+# Finnish
+exit;
+
+=head2 printWait
+
+Prints out wait information
+
+=cut
+
+sub printWait {
+ print STDERR ("\n");
+ print STDERR ("Processing input file:\n");
+ print STDERR (" $_[0]\n");
+ print STDERR ("Generating output file:\n");
+ print STDERR (" $_[1]\n");
+ print STDERR ("\n");
+ print STDERR ("This operation may take some while. Please wait...\n");
+ print STDERR ("\n");
+ print STDERR ("\n");
+}
+
+=head2 printUsage
+
+Prints out basic usage help
+
+=cut
+
+sub printUsage {
+ my $scriptname=$_[0];
+ print STDERR ("$scriptname\n");
+ print STDERR ("Usage: dbc2json infile [outfile]\n");
+ print STDERR (" infile Input dbc file\n");
+ print STDERR (" outfile File (optional) converted to json,\n");
+ print STDERR (" otherwise created in current directory.\n");
+ print STDERR ("\n");
+}
+
+=head1 AUTHOR
+
+IntelIVIPoc, C<< <ivipoc at intel.com> >>
+
+=head1 SUPPORT
+
+You can find documentation for this module with the perldoc command.
+
+ perldoc dbc2json
+
+=head1 ACKNOWLEDGEMENTS
+
+=head1 LICENSE AND COPYRIGHT
+
+Copyright (C) 2014 Intel Corporation
+
+This library 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 2.1 of the License, or (at your option) any later version.
+
+This library 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 library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+=cut