diff options
author | Petr Nechaev <petr.nechaev@cogentembedded.com> | 2015-04-03 19:55:31 +0300 |
---|---|---|
committer | Petr Nechaev <petr.nechaev@cogentembedded.com> | 2015-04-03 19:55:31 +0300 |
commit | 947be368482abf6f5d38a79213d9ba9d1c5debd4 (patch) | |
tree | 2ce3ddbadc565979ceede201645d1d27c8d425d1 | |
parent | 572541c5bcac6ef4e1fda5b31b364d3330816f84 (diff) | |
download | automotive-message-broker-947be368482abf6f5d38a79213d9ba9d1c5debd4.tar.gz |
Fixed tabbing issues
-rw-r--r-- | plugins/common/canobserver.h | 91 | ||||
-rw-r--r-- | plugins/common/cansocketadapter.cpp | 78 | ||||
-rw-r--r-- | plugins/common/cansocketadapter.h | 116 | ||||
-rw-r--r-- | plugins/common/thread.cpp | 206 | ||||
-rw-r--r-- | tools/AmbSignalMapper/lib/Intel/IviPoc/AmbPluginGenerator.pm | 858 |
5 files changed, 674 insertions, 675 deletions
diff --git a/plugins/common/canobserver.h b/plugins/common/canobserver.h index 876998ed..549f0700 100644 --- a/plugins/common/canobserver.h +++ b/plugins/common/canobserver.h @@ -39,53 +39,52 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA class CANObserver { public: - /** - * General CAN bus error. Currently only GENERAL_ERROR is specified. - * @enum CANError - * @public - */ - enum CANError { - GENERAL_ERROR = 0 - }; - - virtual ~CANObserver(){} /*LCOV_EXCL_LINE*/ - /** - * Called when error occurred on the bus. - * @fn errorOccured - * @param error Bus error code - */ - virtual void errorOccured(CANObserver::CANError error) = 0; /* socket error */ - /** - * Called when standard frame was is received from the bus. - * @fn standardFrameReceived - * @param frame Received frame - */ - virtual void standardFrameReceived(const can_frame& frame) = 0; /* SFF was present */ - /** - * Called when extended frame was is received from the bus. - * @fn extendedFrameReceived - * @param frame Received frame - */ - virtual void extendedFrameReceived(const can_frame& frame) = 0; /* EFF was present */ - /** - * Called when error frame was received from the bus. - * @fn errorFrameReceived - * @param frame Error frame - */ - virtual void errorFrameReceived(const can_frame& frame) = 0; /* error frame */ - /** - * Called when remote transmission frame was received from the bus. - * @fn remoteTransmissionRequest - * @param frame RTR frame - */ - virtual void remoteTransmissionRequest(const can_frame& frame) = 0; /* remote transmission request (SFF/EFF is still present)*/ - /** - * Called when timeout was detected for a cyclic message. - * @fn timeoutDetected - * @param frame - */ - virtual void timeoutDetected(const can_frame& frame) = 0; /* timeout */ + /** + * General CAN bus error. Currently only GENERAL_ERROR is specified. + * @enum CANError + * @public + */ + enum CANError { + GENERAL_ERROR = 0 + }; + virtual ~CANObserver(){} /*LCOV_EXCL_LINE*/ + /** + * Called when error occurred on the bus. + * @fn errorOccured + * @param error Bus error code + */ + virtual void errorOccured(CANObserver::CANError error) = 0; /* socket error */ + /** + * Called when standard frame was is received from the bus. + * @fn standardFrameReceived + * @param frame Received frame + */ + virtual void standardFrameReceived(const can_frame& frame) = 0; /* SFF was present */ + /** + * Called when extended frame was is received from the bus. + * @fn extendedFrameReceived + * @param frame Received frame + */ + virtual void extendedFrameReceived(const can_frame& frame) = 0; /* EFF was present */ + /** + * Called when error frame was received from the bus. + * @fn errorFrameReceived + * @param frame Error frame + */ + virtual void errorFrameReceived(const can_frame& frame) = 0; /* error frame */ + /** + * Called when remote transmission frame was received from the bus. + * @fn remoteTransmissionRequest + * @param frame RTR frame + */ + virtual void remoteTransmissionRequest(const can_frame& frame) = 0; /* remote transmission request (SFF/EFF is still present)*/ + /** + * Called when timeout was detected for a cyclic message. + * @fn timeoutDetected + * @param frame + */ + virtual void timeoutDetected(const can_frame& frame) = 0; /* timeout */ }; #endif // CANOBSERVER_H diff --git a/plugins/common/cansocketadapter.cpp b/plugins/common/cansocketadapter.cpp index df92bb7d..3395038b 100644 --- a/plugins/common/cansocketadapter.cpp +++ b/plugins/common/cansocketadapter.cpp @@ -27,83 +27,83 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA // TODO: handle socket errors CANSocketAdapter::CANSocketAdapter(CANObserver& observer) : - CANAdapter(observer), - mSocket(NULL), - mReader(NULL) + CANAdapter(observer), + mSocket(NULL), + mReader(NULL) { - LOG_TRACE(""); + LOG_TRACE(""); } CANSocketAdapter::~CANSocketAdapter() { - LOG_TRACE(""); + LOG_TRACE(""); - stop(); + stop(); } bool CANSocketAdapter::start(const char* ifName) { - LOG_TRACE(""); + LOG_TRACE(""); - if(!mSocket || !mReader) { - init(); - } + if(!mSocket || !mReader) { + init(); + } - if(mSocket && mReader && mSocket->start(ifName) && mReader->start()) { + if(mSocket && mReader && mSocket->start(ifName) && mReader->start()) { return true; } stop(); - return false; + return false; } void CANSocketAdapter::stop() { - LOG_TRACE(""); - - if(mReader) { - mReader->stop(); - delete mReader; - mReader = 0; - } - if(mSocket) { - mSocket->stop(); - delete mSocket; - mSocket = 0; - } + LOG_TRACE(""); + + if(mReader) { + mReader->stop(); + delete mReader; + mReader = 0; + } + if(mSocket) { + mSocket->stop(); + delete mSocket; + mSocket = 0; + } } bool CANSocketAdapter::sendFrame(const can_frame& frame) { - LOG_TRACE(""); + LOG_TRACE(""); - if(mSocket) { + if(mSocket) { CANFrameInfo message(frame); return mSocket->write(message); - } - return false; + } + return false; } void CANSocketAdapter::init() { - if(!mSocket) - mSocket = new CANSocketBCM(); - if(!mReader) - mReader = new CANSocketReader(mObserver, *mSocket); + if(!mSocket) + mSocket = new CANSocketBCM(); + if(!mReader) + mReader = new CANSocketReader(mObserver, *mSocket); } bool CANSocketAdapter::registerCyclicMessageForReceive(int canId, double minCycleTime, double maxCycleTime) { - if(mSocket) { + if(mSocket) return mSocket->registerCyclicMessageForReceive(canId, minCycleTime, maxCycleTime); - } - return false; + else + return false; } bool CANSocketAdapter::unregisterMessageForReceive(int canId) { - if(mSocket) { - return mSocket->unregisterMessageForReceive(canId); - } - return false; + if(mSocket) + return mSocket->unregisterMessageForReceive(canId); + else + return false; } diff --git a/plugins/common/cansocketadapter.h b/plugins/common/cansocketadapter.h index 334e523e..811d26a7 100644 --- a/plugins/common/cansocketadapter.h +++ b/plugins/common/cansocketadapter.h @@ -38,69 +38,69 @@ class CANSocketReader; class CANSocketAdapter : public CANAdapter { public: - /** - * @param observer @link CANObserver Observer @endlink that will receives CAN bus frames - */ - CANSocketAdapter(CANObserver& observer); - virtual ~CANSocketAdapter(); + /** + * @param observer @link CANObserver Observer @endlink that will receives CAN bus frames + */ + CANSocketAdapter(CANObserver& observer); + virtual ~CANSocketAdapter(); - /** - * Creates connection the specified network interface and starts listening on it. - * @fn start - * @param ifName Name of the CAN bus network interface - * @return True if no error occurs. - */ - virtual bool start(const char* ifName); - /** - * Closes socket connection and exits listening thread. - * @fn stop - */ - virtual void stop(); - /** - * Sends CAN frame over the socket CAN interface - * @fn sendFrame - * @param frame CAN frame to be sent - * @return True if frame was sent - */ - virtual bool sendFrame(const can_frame& frame); - /** - * Registers CAN ID of a cyclic message for receiving - * @fn registerCyclicMessageForReceive - * @param canId CAN ID of the message. - * @param minCycleTime Minimal interval between messages in seconds. Set to 0 if not used. - * @param maxCycleTime Maximum interval between messages for timeout detection in seconds. Set to 0 if no timeout detection is necessary. - * @return True if registration succeeds. - */ - virtual bool registerCyclicMessageForReceive(int canId, double minCycleTime, double maxCycleTime); - /** - * Un-registers CAN ID of a message used of receiving. Valid for cyclic and sporadic messages. - * @fn unregisterMessageForReceive - * @param canId CAN ID of the message. - * @return True if de-registration succeeds. - */ - virtual bool unregisterMessageForReceive(int canId); + /** + * Creates connection the specified network interface and starts listening on it. + * @fn start + * @param ifName Name of the CAN bus network interface + * @return True if no error occurs. + */ + virtual bool start(const char* ifName); + /** + * Closes socket connection and exits listening thread. + * @fn stop + */ + virtual void stop(); + /** + * Sends CAN frame over the socket CAN interface + * @fn sendFrame + * @param frame CAN frame to be sent + * @return True if frame was sent + */ + virtual bool sendFrame(const can_frame& frame); + /** + * Registers CAN ID of a cyclic message for receiving + * @fn registerCyclicMessageForReceive + * @param canId CAN ID of the message. + * @param minCycleTime Minimal interval between messages in seconds. Set to 0 if not used. + * @param maxCycleTime Maximum interval between messages for timeout detection in seconds. Set to 0 if no timeout detection is necessary. + * @return True if registration succeeds. + */ + virtual bool registerCyclicMessageForReceive(int canId, double minCycleTime, double maxCycleTime); + /** + * Un-registers CAN ID of a message used of receiving. Valid for cyclic and sporadic messages. + * @fn unregisterMessageForReceive + * @param canId CAN ID of the message. + * @return True if de-registration succeeds. + */ + virtual bool unregisterMessageForReceive(int canId); protected: - /** - * Socket initialization and starts reading thread - * @fn init - * @protected - */ - virtual void init(); + /** + * Socket initialization and starts reading thread + * @fn init + * @protected + */ + virtual void init(); private: - /** - * @link CANSocket CAN Socket wrapper @endlink instance reference - * @property mSocket - * @protected - */ - CANSocket* mSocket; - /** - * @link CANSocketReader CANSocket reader @endlink instance reference - * @property mReader - * @protected - */ - CANSocketReader* mReader; + /** + * @link CANSocket CAN Socket wrapper @endlink instance reference + * @property mSocket + * @protected + */ + CANSocket* mSocket; + /** + * @link CANSocketReader CANSocket reader @endlink instance reference + * @property mReader + * @protected + */ + CANSocketReader* mReader; }; #endif // CANSOCKETADAPTER_H diff --git a/plugins/common/thread.cpp b/plugins/common/thread.cpp index 34f98754..504feb38 100644 --- a/plugins/common/thread.cpp +++ b/plugins/common/thread.cpp @@ -44,18 +44,18 @@ static int gActiveThreadCount(0); static void *PosixThreadProc(void *param) { - gMutex.lock(); - ++gActiveThreadCount; - gMutex.unlock(); - - CUtil::Thread *thread = (CUtil::Thread *)param; - thread->run(); - - gMutex.lock(); - --gActiveThreadCount; - LOG_INFO("PosixThreadProc() - active threads: " << gActiveThreadCount); - gMutex.unlock(); - return 0; + gMutex.lock(); + ++gActiveThreadCount; + gMutex.unlock(); + + CUtil::Thread *thread = (CUtil::Thread *)param; + thread->run(); + + gMutex.lock(); + --gActiveThreadCount; + LOG_INFO("PosixThreadProc() - active threads: " << gActiveThreadCount); + gMutex.unlock(); + return 0; } namespace CUtil{ @@ -64,129 +64,129 @@ namespace CUtil{ //////////////////////////////////////////////// Thread::Thread() : - thread(0), - runnableFlag(false) + thread(0), + runnableFlag(false) { - pthread_cond_init( &cond, NULL ); - pthread_mutex_init( &mutex, NULL ); + pthread_cond_init( &cond, NULL ); + pthread_mutex_init( &mutex, NULL ); } bool Thread::start() { - pthread_mutex_lock(&mutex); - if (runnableFlag) {// already running - pthread_mutex_unlock(&mutex); - return false; - } - // try to run - if (pthread_create(&thread, NULL/*&thread_attr*/, PosixThreadProc, this) != 0) { - //pthread_attr_destroy(&thread_attr); - pthread_mutex_unlock(&mutex); - return false; - } - //pthread_attr_destroy(&thread_attr); - runnableFlag = true; - pthread_mutex_unlock(&mutex); - return true; + pthread_mutex_lock(&mutex); + if (runnableFlag) {// already running + pthread_mutex_unlock(&mutex); + return false; + } + // try to run + if (pthread_create(&thread, NULL/*&thread_attr*/, PosixThreadProc, this) != 0) { + //pthread_attr_destroy(&thread_attr); + pthread_mutex_unlock(&mutex); + return false; + } + //pthread_attr_destroy(&thread_attr); + runnableFlag = true; + pthread_mutex_unlock(&mutex); + return true; } bool Thread::setPriority(int priority) { - pthread_mutex_lock(&mutex); - if (!runnableFlag) {// not running yet or terminated already - pthread_mutex_unlock(&mutex); - return false; - } - - priority = priority < 1 ? 1 : priority; - priority = priority < 99 ? priority : 99; - - // set priority - struct sched_param pr; - pr.__sched_priority = priority; - if (pthread_setschedparam(thread, SCHED_FIFO, &pr) < 0) - { - pthread_mutex_unlock(&mutex); - return false; - } - - pthread_mutex_unlock(&mutex); - return true; + pthread_mutex_lock(&mutex); + if (!runnableFlag) {// not running yet or terminated already + pthread_mutex_unlock(&mutex); + return false; + } + + priority = priority < 1 ? 1 : priority; + priority = priority < 99 ? priority : 99; + + // set priority + struct sched_param pr; + pr.__sched_priority = priority; + if (pthread_setschedparam(thread, SCHED_FIFO, &pr) < 0) + { + pthread_mutex_unlock(&mutex); + return false; + } + + pthread_mutex_unlock(&mutex); + return true; } Thread::~Thread() { - stop(); - pthread_cond_destroy( &cond ); - pthread_mutex_destroy( &mutex ); - thread = 0; + stop(); + pthread_cond_destroy( &cond ); + pthread_mutex_destroy( &mutex ); + thread = 0; } void Thread::stop() { - if (setRunnableFlag(false) == true) { - if( thread != 0 ){ - if (thread == pthread_self()){ - int s = pthread_detach(thread); - ((void)s);// prevent compiler warning in RELEASE build - LOG_MESSAGE("Thread::stop() - thread " << std::hex << int(thread) << std::dec << " detached, returned value was " << s); - } - else{ - int s = pthread_join(thread, NULL); - if (s != 0){ - LOG_ERROR("Thread::stop() - Joined with thread " << std::hex << int(thread) << std::dec << ", returned value was " << s); - } - else{ - LOG_MESSAGE("Thread::stop() - Joined with thread " << std::hex << int(thread) << std::dec << ", returned value was " << s); - } - } - thread = 0; - } - } - return; + if (setRunnableFlag(false) == true) { + if( thread != 0 ){ + if (thread == pthread_self()){ + int s = pthread_detach(thread); + ((void)s);// prevent compiler warning in RELEASE build + LOG_MESSAGE("Thread::stop() - thread " << std::hex << int(thread) << std::dec << " detached, returned value was " << s); + } + else{ + int s = pthread_join(thread, NULL); + if (s != 0){ + LOG_ERROR("Thread::stop() - Joined with thread " << std::hex << int(thread) << std::dec << ", returned value was " << s); + } + else{ + LOG_MESSAGE("Thread::stop() - Joined with thread " << std::hex << int(thread) << std::dec << ", returned value was " << s); + } + } + thread = 0; + } + } + return; } bool Thread::setRunnableFlag(bool flag) { - pthread_mutex_lock(&mutex); - bool retval(runnableFlag); - runnableFlag = flag; - - if(!runnableFlag) - pthread_cond_signal(&cond); - pthread_mutex_unlock(&mutex); - return retval; + pthread_mutex_lock(&mutex); + bool retval(runnableFlag); + runnableFlag = flag; + + if(!runnableFlag) + pthread_cond_signal(&cond); + pthread_mutex_unlock(&mutex); + return retval; } bool Thread::isRunnable(long miliseconds) { - bool runnable(false); + bool runnable(false); - pthread_mutex_lock(&mutex); - if (miliseconds != 0){ - wait(miliseconds); - } - runnable = runnableFlag; + pthread_mutex_lock(&mutex); + if (miliseconds != 0){ + wait(miliseconds); + } + runnable = runnableFlag; - pthread_mutex_unlock(&mutex); - return runnable; + pthread_mutex_unlock(&mutex); + return runnable; } bool Thread::wait( long miliseconds ) { - struct timespec abstime; - clock_gettime(CLOCK_REALTIME, &abstime); - abstime.tv_sec += ( miliseconds / 1000 ); - miliseconds %= 1000; - abstime.tv_nsec += ( miliseconds * 1000000L ); // in nanoseconds - if ( abstime.tv_nsec > 1000000000L /* > 1s */ ){ - abstime.tv_sec += 1; // +1s - abstime.tv_nsec -= 1000000000L; // -1s - } - - int status = pthread_cond_timedwait( &cond, &mutex, &abstime ); - return ( status == ETIMEDOUT ); + struct timespec abstime; + clock_gettime(CLOCK_REALTIME, &abstime); + abstime.tv_sec += ( miliseconds / 1000 ); + miliseconds %= 1000; + abstime.tv_nsec += ( miliseconds * 1000000L ); // in nanoseconds + if ( abstime.tv_nsec > 1000000000L /* > 1s */ ){ + abstime.tv_sec += 1; // +1s + abstime.tv_nsec -= 1000000000L; // -1s + } + + int status = pthread_cond_timedwait( &cond, &mutex, &abstime ); + return ( status == ETIMEDOUT ); } } diff --git a/tools/AmbSignalMapper/lib/Intel/IviPoc/AmbPluginGenerator.pm b/tools/AmbSignalMapper/lib/Intel/IviPoc/AmbPluginGenerator.pm index e208c84d..d4e33d34 100644 --- a/tools/AmbSignalMapper/lib/Intel/IviPoc/AmbPluginGenerator.pm +++ b/tools/AmbSignalMapper/lib/Intel/IviPoc/AmbPluginGenerator.pm @@ -49,13 +49,13 @@ plugin project. The following little code snippet shows the module usage. - use Intel::IviPoc::AmbPluginGenerator qw(processPlugin); + use Intel::IviPoc::AmbPluginGenerator qw(processPlugin); - my $hashingAllowed = "E"; - my $inputfile = "myfile.json"; - my $targetDir = '/home/user/project/automotive-message-broker/plugins'; - processPlugin ( $hashingAllowed, $inputfile, $targetDir ); - ... + my $hashingAllowed = "E"; + my $inputfile = "myfile.json"; + my $targetDir = '/home/user/project/automotive-message-broker/plugins'; + processPlugin ( $hashingAllowed, $inputfile, $targetDir ); + ... =head1 EXPORT @@ -80,68 +80,68 @@ based on information comming from input JSON file. =cut -my $hashingAllowed = 'E'; # Enabled by default +my $hashingAllowed = 'E'; # Enabled by default sub processPlugin { - $hashingAllowed = $_[0]; - my $dbcjson = $_[1]; - my $targetDir = $_[2]; - - if ($hashingAllowed eq 'E' ) { - &encryptAmbPropertyNames( $dbcjson ); - } - - my $pluginName = $dbcjson->{'pluginName'}; - - my $templatesDir = 'templates/'; - my $pluginDir = File::Spec->catdir( ($targetDir, lc($pluginName). '_plugin/') ); - - # make new folder - &createDirectory( $pluginDir ); - - my @templatesFiles = ( "CMakeLists.txt" - , "ambtmpl_cansignal.h" - , "ambtmpl_cansignal.cpp" - , "ambtmpl_plugin.h" - , "ambtmpl_plugin.cpp" - , "ambtmpl_cansignals.h" - , "ambtmpl_plugin.idl" - , "ambtmpl.in.json" - ); - - my @pluginFiles = ( "CMakeLists.txt" - , lc ($pluginName) . "_cansignal.h" - , lc ($pluginName) . "_cansignal.cpp" - , lc ($pluginName) . "_plugin.h" - , lc ($pluginName) . "_plugin.cpp" - , lc ($pluginName) . "_cansignals.h" - , lc ($pluginName) . "_plugin.idl" - , lc ($pluginName) . ".in.json" - ); - - my @generationSubs = ( undef - , undef - , undef - , \&generateUuid - , \&generateCppImplTypes - , \&generateSignalsTypes - , \&generateIdlTypes - , undef - ); - - my $templateFile = ''; - my $pluginFile = ''; - my ($volume, $directory) = File::Spec->splitpath(__FILE__); - for my $i (0..scalar(@pluginFiles)-1) { - # First join templates folder and filename - $templateFile = File::Spec->catfile( ($templatesDir), $templatesFiles[$i] ); - # Now prepend the module full path - $templateFile = File::Spec->catpath( $volume, $directory, $templateFile ); - # Join target directory with target filename - $pluginFile = File::Spec->catfile( ($pluginDir), $pluginFiles[$i] ); - # Generate each plugin files - &generatePluginFile( $templateFile, $pluginFile, $dbcjson, $generationSubs[$i]); - } + $hashingAllowed = $_[0]; + my $dbcjson = $_[1]; + my $targetDir = $_[2]; + + if ($hashingAllowed eq 'E' ) { + &encryptAmbPropertyNames( $dbcjson ); + } + + my $pluginName = $dbcjson->{'pluginName'}; + + my $templatesDir = 'templates/'; + my $pluginDir = File::Spec->catdir( ($targetDir, lc($pluginName). '_plugin/') ); + + # make new folder + &createDirectory( $pluginDir ); + + my @templatesFiles = ( "CMakeLists.txt" + , "ambtmpl_cansignal.h" + , "ambtmpl_cansignal.cpp" + , "ambtmpl_plugin.h" + , "ambtmpl_plugin.cpp" + , "ambtmpl_cansignals.h" + , "ambtmpl_plugin.idl" + , "ambtmpl.in.json" + ); + + my @pluginFiles = ( "CMakeLists.txt" + , lc ($pluginName) . "_cansignal.h" + , lc ($pluginName) . "_cansignal.cpp" + , lc ($pluginName) . "_plugin.h" + , lc ($pluginName) . "_plugin.cpp" + , lc ($pluginName) . "_cansignals.h" + , lc ($pluginName) . "_plugin.idl" + , lc ($pluginName) . ".in.json" + ); + + my @generationSubs = ( undef + , undef + , undef + , \&generateUuid + , \&generateCppImplTypes + , \&generateSignalsTypes + , \&generateIdlTypes + , undef + ); + + my $templateFile = ''; + my $pluginFile = ''; + my ($volume, $directory) = File::Spec->splitpath(__FILE__); + for my $i (0..scalar(@pluginFiles)-1) { + # First join templates folder and filename + $templateFile = File::Spec->catfile( ($templatesDir), $templatesFiles[$i] ); + # Now prepend the module full path + $templateFile = File::Spec->catpath( $volume, $directory, $templateFile ); + # Join target directory with target filename + $pluginFile = File::Spec->catfile( ($pluginDir), $pluginFiles[$i] ); + # Generate each plugin files + &generatePluginFile( $templateFile, $pluginFile, $dbcjson, $generationSubs[$i]); + } } =head2 generatePluginFile @@ -153,31 +153,31 @@ based on information comming from input JSON file. =cut sub generatePluginFile { - my $srcFileName = $_[0]; - my $dstFileName = $_[1]; - my $dbcjson = $_[2]; - my $generationSub = $_[3]; + my $srcFileName = $_[0]; + my $dstFileName = $_[1]; + my $dbcjson = $_[2]; + my $generationSub = $_[3]; - my $pluginName = $dbcjson->{'pluginName'}; + my $pluginName = $dbcjson->{'pluginName'}; - # Open template file - my $content = &readFileContent( $srcFileName ); - $content = &replaceTemplateStrings( $content, $pluginName ); + # Open template file + my $content = &readFileContent( $srcFileName ); + $content = &replaceTemplateStrings( $content, $pluginName ); - if (defined $generationSub) { - my $generatedCode = $generationSub->( $dbcjson ); - my $place = '\/\*GENERATED_CODE\*\/'; - $content =~ s/$place/$generatedCode/g; - } + if (defined $generationSub) { + my $generatedCode = $generationSub->( $dbcjson ); + my $place = '\/\*GENERATED_CODE\*\/'; + $content =~ s/$place/$generatedCode/g; + } - # Create new file - my $pluginFileHandle = &createFile( $dstFileName ); + # Create new file + my $pluginFileHandle = &createFile( $dstFileName ); - # Copy data from one file to another. - print $pluginFileHandle $content; + # Copy data from one file to another. + print $pluginFileHandle $content; - # close the file - close ($pluginFileHandle); + # close the file + close ($pluginFileHandle); } =head2 createDirectory @@ -187,11 +187,11 @@ Creates directory for plugin. =cut sub createDirectory { - my $dirName = $_[0]; + my $dirName = $_[0]; - unless(-e $dirName or mkdir $dirName) { - die "Unable to create directory '$dirName' $!"; - } + unless(-e $dirName or mkdir $dirName) { + die "Unable to create directory '$dirName' $!"; + } } =head2 createFile @@ -201,13 +201,13 @@ Creates file and returns a file handle to it. =cut sub createFile { - my $fileName = $_[0]; + my $fileName = $_[0]; - # Open file or die - open(my $fileHandle, '>', $fileName) - or die "Could not open file '$fileName' $!"; + # Open file or die + open(my $fileHandle, '>', $fileName) + or die "Could not open file '$fileName' $!"; - return $fileHandle; + return $fileHandle; } =head2 replaceTemplateStrings @@ -217,15 +217,15 @@ Replaces all occurencies of template specific symbols with plugin name. =cut sub replaceTemplateStrings { - my $text = $_[0]; - my $pluginName = $_[1]; - - $text =~ s/AmbTmpl/$pluginName/g; - $pluginName = lc ($pluginName); - $text =~ s/ambtmpl/$pluginName/g; - $pluginName = uc ($pluginName); - $text =~ s/AMBTMPL/$pluginName/g; - return $text; + my $text = $_[0]; + my $pluginName = $_[1]; + + $text =~ s/AmbTmpl/$pluginName/g; + $pluginName = lc ($pluginName); + $text =~ s/ambtmpl/$pluginName/g; + $pluginName = uc ($pluginName); + $text =~ s/AMBTMPL/$pluginName/g; + return $text; } =head2 generateUuid @@ -236,12 +236,12 @@ Returns C++ code to be placed into the target plugin. =cut sub generateUuid { - my $dbcjson = $_[0]; + my $dbcjson = $_[0]; - my $ug = new Data::UUID; - my $uuidText = $ug->create_str(); + my $ug = new Data::UUID; + my $uuidText = $ug->create_str(); - return $uuidText; + return $uuidText; } =head2 generateCppImplTypes @@ -252,31 +252,31 @@ Returns C++ code to be placed into the target plugin. =cut sub generateCppImplTypes { - my $dbcjson = $_[0]; - - my $registerMessageText = ''; - my $hexValue = (); - - my @engineControlUnits = @{$dbcjson->{'electronicControlUnits'}}; - for my $ecui (0..scalar(@engineControlUnits)-1) { - if ( exists( $engineControlUnits[$ecui]{'messages'} ) ) { - my @messages = @{$engineControlUnits[$ecui]{'messages'}}; - for my $msgi (0..scalar(@messages)-1) { - $hexValue = '0x' . uc ( sprintf( "%x", $messages[$msgi]{'canId'} ) ); - $registerMessageText .= " registerMessage($hexValue, $messages[$msgi]{'canDlc'}, $messages[$msgi]{'cycle'}"; - - my @signals = @{$messages[$msgi]{'signals'}}; - foreach my $signal ( @signals ) { - my $type = $signal->{'AMBPropertyType'}; - $registerMessageText .= &generateCppProperty( $signal, $type); - } - - $registerMessageText .= "\n );\n"; - } - } - } - - return $registerMessageText; + my $dbcjson = $_[0]; + + my $registerMessageText = ''; + my $hexValue = (); + + my @engineControlUnits = @{$dbcjson->{'electronicControlUnits'}}; + for my $ecui (0..scalar(@engineControlUnits)-1) { + if ( exists( $engineControlUnits[$ecui]{'messages'} ) ) { + my @messages = @{$engineControlUnits[$ecui]{'messages'}}; + for my $msgi (0..scalar(@messages)-1) { + $hexValue = '0x' . uc ( sprintf( "%x", $messages[$msgi]{'canId'} ) ); + $registerMessageText .= " registerMessage($hexValue, $messages[$msgi]{'canDlc'}, $messages[$msgi]{'cycle'}"; + + my @signals = @{$messages[$msgi]{'signals'}}; + foreach my $signal ( @signals ) { + my $type = $signal->{'AMBPropertyType'}; + $registerMessageText .= &generateCppProperty( $signal, $type); + } + + $registerMessageText .= "\n );\n"; + } + } + } + + return $registerMessageText; } =head2 generateCppProperty @@ -287,23 +287,23 @@ definitions. =cut sub generateCppProperty { - my $signal = $_[0]; - my $type = $_[1]; - - my $generatedText = ''; - my $zonesInUse = 0; # TODO this needs to be in config file - - if ( exists( $signal->{'AMBPropertyName'} ) ) { - my $ambPropertyName = $signal->{'AMBPropertyName'}; - - # TODO CANSignal needs to take zone as argument - #my $zone = 'Zone::None'; - #if ($zonesInUse) { - # $zone = &calculateZone( $ambPropertyName ); - #} - $generatedText .= "\n , new ${ambPropertyName}Type()"; - } - return $generatedText; + my $signal = $_[0]; + my $type = $_[1]; + + my $generatedText = ''; + my $zonesInUse = 0; # TODO this needs to be in config file + + if ( exists( $signal->{'AMBPropertyName'} ) ) { + my $ambPropertyName = $signal->{'AMBPropertyName'}; + + # TODO CANSignal needs to take zone as argument + #my $zone = 'Zone::None'; + #if ($zonesInUse) { + # $zone = &calculateZone( $ambPropertyName ); + #} + $generatedText .= "\n , new ${ambPropertyName}Type()"; + } + return $generatedText; } =head2 generateSignalsTypes @@ -314,27 +314,27 @@ Returns C++ code to be placed into the target plugin. =cut sub generateSignalsTypes { - my $dbcjson = $_[0]; - - my $enumsText = ''; - my $propertiesText = ''; - - # First generate the c++ enums from signals with values - my @engineControlUnits = @{$dbcjson->{'electronicControlUnits'}}; - for my $ecui (0..scalar(@engineControlUnits)-1) { - if ( exists( $engineControlUnits[$ecui]{'messages'} ) ) { - my @messages = @{$engineControlUnits[$ecui]{'messages'}}; - for my $msgi (0..scalar(@messages)-1) { - my @signals = @{$messages[$msgi]{'signals'}}; - foreach my $signal ( @signals ) { - my $type = $signal->{'AMBPropertyType'}; - $enumsText .= &generateEnumOrValues( $signal, $type); - $propertiesText .= &generatePropertyClasses( $signal, $type ); - } - } - } - } - return $enumsText . $propertiesText; + my $dbcjson = $_[0]; + + my $enumsText = ''; + my $propertiesText = ''; + + # First generate the c++ enums from signals with values + my @engineControlUnits = @{$dbcjson->{'electronicControlUnits'}}; + for my $ecui (0..scalar(@engineControlUnits)-1) { + if ( exists( $engineControlUnits[$ecui]{'messages'} ) ) { + my @messages = @{$engineControlUnits[$ecui]{'messages'}}; + for my $msgi (0..scalar(@messages)-1) { + my @signals = @{$messages[$msgi]{'signals'}}; + foreach my $signal ( @signals ) { + my $type = $signal->{'AMBPropertyType'}; + $enumsText .= &generateEnumOrValues( $signal, $type); + $propertiesText .= &generatePropertyClasses( $signal, $type ); + } + } + } + } + return $enumsText . $propertiesText; } =head2 generateEnumOrValues @@ -345,60 +345,60 @@ definitions. =cut sub generateEnumOrValues { - my $signal = $_[0]; - my $type = $_[1]; - - my $generatedText = ""; - - my $ambPropertyName = $signal->{'canId'}; - if ( exists( $signal->{'AMBPropertyName'} ) ) { - $ambPropertyName = $signal->{'AMBPropertyName'}; - } - - if ( exists( $signal->{'values'} ) ) { - my @dupvalues = @{$signal->{'values'}}; - my @values = sort { $$a{'value'} <=> $$b{'value'} } (&removeDuplicates (\@dupvalues)); - my $hexValue = (); - - if ( $type eq 'enum' or $type =~ m/int/) { - # Start with comments - $generatedText .= "/**< $ambPropertyName\n"; - for my $vali (0..scalar(@values) -1 ) { - $hexValue = '0x' . uc ( sprintf( "%x", $values[$vali]->{'value'} ) ); - $generatedText .= " * $hexValue = $values[$vali]->{'description'}\n"; - } - $generatedText .= " */\n"; - } - - if ( $type eq 'enum' ) { - # Enum definition - $generatedText .= "namespace ${ambPropertyName}s {\n"; - $generatedText .= "enum ${ambPropertyName}Type {\n"; - - # Generate enum values - for my $vali (0..scalar(@values) -1 ) { - $hexValue = '0x' . uc ( sprintf( "%x", $values[$vali]->{'value'} ) ); - $generatedText .= " $values[$vali]->{'name'} = $hexValue"; - if ($vali != scalar(@values)-1 ) { - $generatedText .= ","; - } - $generatedText .= "\n"; - } - $generatedText .= "};\n"; - $generatedText .= "}\n\n"; - } elsif ( $type =~ m/int/ ) { - $generatedText .= "namespace ${ambPropertyName}s {\n"; - # Generate values - for my $vali (0..scalar(@values) -1 ) { - $hexValue = '0x' . uc ( sprintf( "%x", $values[$vali]->{'value'} ) ); - $generatedText .= "static const $type $values[$vali]->{'name'} = $hexValue;"; - $generatedText .= "\n"; - } - $generatedText .= "}\n\n"; - } - } - - return $generatedText; + my $signal = $_[0]; + my $type = $_[1]; + + my $generatedText = ""; + + my $ambPropertyName = $signal->{'canId'}; + if ( exists( $signal->{'AMBPropertyName'} ) ) { + $ambPropertyName = $signal->{'AMBPropertyName'}; + } + + if ( exists( $signal->{'values'} ) ) { + my @dupvalues = @{$signal->{'values'}}; + my @values = sort { $$a{'value'} <=> $$b{'value'} } (&removeDuplicates (\@dupvalues)); + my $hexValue = (); + + if ( $type eq 'enum' or $type =~ m/int/) { + # Start with comments + $generatedText .= "/**< $ambPropertyName\n"; + for my $vali (0..scalar(@values) -1 ) { + $hexValue = '0x' . uc ( sprintf( "%x", $values[$vali]->{'value'} ) ); + $generatedText .= " * $hexValue = $values[$vali]->{'description'}\n"; + } + $generatedText .= " */\n"; + } + + if ( $type eq 'enum' ) { + # Enum definition + $generatedText .= "namespace ${ambPropertyName}s {\n"; + $generatedText .= "enum ${ambPropertyName}Type {\n"; + + # Generate enum values + for my $vali (0..scalar(@values) -1 ) { + $hexValue = '0x' . uc ( sprintf( "%x", $values[$vali]->{'value'} ) ); + $generatedText .= " $values[$vali]->{'name'} = $hexValue"; + if ($vali != scalar(@values)-1 ) { + $generatedText .= ","; + } + $generatedText .= "\n"; + } + $generatedText .= "};\n"; + $generatedText .= "}\n\n"; + } elsif ( $type =~ m/int/ ) { + $generatedText .= "namespace ${ambPropertyName}s {\n"; + # Generate values + for my $vali (0..scalar(@values) -1 ) { + $hexValue = '0x' . uc ( sprintf( "%x", $values[$vali]->{'value'} ) ); + $generatedText .= "static const $type $values[$vali]->{'name'} = $hexValue;"; + $generatedText .= "\n"; + } + $generatedText .= "}\n\n"; + } + } + + return $generatedText; } =head2 generatePropertyClasses @@ -413,83 +413,83 @@ Returns C++ definitions of one signal property. =cut sub generatePropertyClasses { - my $signal = $_[0]; - my $type = $_[1]; + my $signal = $_[0]; + my $type = $_[1]; - my $generatedText = ''; + my $generatedText = ''; - my $ambPropertyName = $signal->{'canId'}; - if ( exists( $signal->{'AMBPropertyName'} ) ) { + my $ambPropertyName = $signal->{'canId'}; + if ( exists( $signal->{'AMBPropertyName'} ) ) { $ambPropertyName = $signal->{'AMBPropertyName'}; - } - - my $byteOrdering = "Endian::Intel"; # LittleEndian by default - if ( exists( $signal->{'byteOrdering'} ) and $signal->{'byteOrdering'} eq '0') { - $byteOrdering = "Endian::Motorola"; # BigEndian - } - - my $signedness; - if ($signal->{'signedness'} eq '+') { - $signedness = "Signedness::Unsigned"; # Unsigned - } else { - $signedness = "Signedness::Signed"; # Signed - } - - my $convertFromFunction = "nullptr"; - if ( exists( $signal->{'AMBConversionFrom'} ) ) { - $convertFromFunction = $signal->{'AMBConversionFrom'}; - } - - my $convertToFunction = "nullptr"; - if ( exists( $signal->{'AMBConversionTo'} ) ) { - $convertToFunction = $signal->{'AMBConversionTo'}; - } - - $generatedText .= "\n"; - $generatedText .= "/**< $ambPropertyName.\n"; - - my $typeBasedText = ''; - my $cppType; - - if ( $type =~ m/enum/ ) { - if ( exists( $signal->{'values'} ) ) { - $generatedText .= " *\@see ${ambPropertyName}s::${ambPropertyName}Type\n"; - $cppType = "${ambPropertyName}s::${ambPropertyName}Type"; - } - } elsif ( $type =~ m/bool/ ) { - if ( exists( $signal->{'values'} ) ) { - my @dupvalues = @{$signal->{'values'}}; - my @values = sort { $$a{'value'} <=> $$b{'value'} } (&removeDuplicates (\@dupvalues)); - my $hexValue = (); - for my $vali (0..scalar(@values) -1 ) { - $hexValue = '0x' . uc ( sprintf( "%x", $values[$vali]->{'value'} ) ); - $generatedText .= " * $hexValue = $values[$vali]->{'description'}\n"; - } - } - $cppType = "$type"; - } elsif ( $type =~ m/int8/ ) { - $cppType = "char"; - } elsif ( $type =~ m/int32/ ) { - if ( $type eq 'uint32_t' ) { - $cppType = "$type"; - } else { - $cppType = "int"; - } - } else { # (u)int16, (u)int64 - $cppType = "$type"; - } - - $typeBasedText .= "CANSIGNAL($ambPropertyName, $cppType, $signal->{'startBit'}, $signal->{'length'}, $byteOrdering, $signedness, $signal->{'factor'}, $signal->{'offset'}, static_cast<$cppType>($signal->{'minValue'}), static_cast<$cppType>($signal->{'maxValue'}), $convertFromFunction, $convertToFunction)\n"; - - $generatedText .= " */\n"; - my $shownPropertyName = $ambPropertyName; - if ($hashingAllowed eq 'E' ) { - $shownPropertyName = $signal->{'AMBPropertyNameEnc'}; - } - $generatedText .= "const VehicleProperty::Property $ambPropertyName = \"$shownPropertyName\";\n"; - $generatedText .= $typeBasedText; - - return $generatedText; + } + + my $byteOrdering = "Endian::Intel"; # LittleEndian by default + if ( exists( $signal->{'byteOrdering'} ) and $signal->{'byteOrdering'} eq '0') { + $byteOrdering = "Endian::Motorola"; # BigEndian + } + + my $signedness; + if ($signal->{'signedness'} eq '+') { + $signedness = "Signedness::Unsigned"; # Unsigned + } else { + $signedness = "Signedness::Signed"; # Signed + } + + my $convertFromFunction = "nullptr"; + if ( exists( $signal->{'AMBConversionFrom'} ) ) { + $convertFromFunction = $signal->{'AMBConversionFrom'}; + } + + my $convertToFunction = "nullptr"; + if ( exists( $signal->{'AMBConversionTo'} ) ) { + $convertToFunction = $signal->{'AMBConversionTo'}; + } + + $generatedText .= "\n"; + $generatedText .= "/**< $ambPropertyName.\n"; + + my $typeBasedText = ''; + my $cppType; + + if ( $type =~ m/enum/ ) { + if ( exists( $signal->{'values'} ) ) { + $generatedText .= " *\@see ${ambPropertyName}s::${ambPropertyName}Type\n"; + $cppType = "${ambPropertyName}s::${ambPropertyName}Type"; + } + } elsif ( $type =~ m/bool/ ) { + if ( exists( $signal->{'values'} ) ) { + my @dupvalues = @{$signal->{'values'}}; + my @values = sort { $$a{'value'} <=> $$b{'value'} } (&removeDuplicates (\@dupvalues)); + my $hexValue = (); + for my $vali (0..scalar(@values) -1 ) { + $hexValue = '0x' . uc ( sprintf( "%x", $values[$vali]->{'value'} ) ); + $generatedText .= " * $hexValue = $values[$vali]->{'description'}\n"; + } + } + $cppType = "$type"; + } elsif ( $type =~ m/int8/ ) { + $cppType = "char"; + } elsif ( $type =~ m/int32/ ) { + if ( $type eq 'uint32_t' ) { + $cppType = "$type"; + } else { + $cppType = "int"; + } + } else { # (u)int16, (u)int64 + $cppType = "$type"; + } + + $typeBasedText .= "CANSIGNAL($ambPropertyName, $cppType, $signal->{'startBit'}, $signal->{'length'}, $byteOrdering, $signedness, $signal->{'factor'}, $signal->{'offset'}, static_cast<$cppType>($signal->{'minValue'}), static_cast<$cppType>($signal->{'maxValue'}), $convertFromFunction, $convertToFunction)\n"; + + $generatedText .= " */\n"; + my $shownPropertyName = $ambPropertyName; + if ($hashingAllowed eq 'E' ) { + $shownPropertyName = $signal->{'AMBPropertyNameEnc'}; + } + $generatedText .= "const VehicleProperty::Property $ambPropertyName = \"$shownPropertyName\";\n"; + $generatedText .= $typeBasedText; + + return $generatedText; } =head2 generateIdlTypes @@ -500,24 +500,24 @@ Returns IDL code to be placed into the target plugin. =cut sub generateIdlTypes { - my $dbcjson = $_[0]; - - my $generatedText = ''; - - my @engineControlUnits = @{$dbcjson->{'electronicControlUnits'}}; - for my $ecui (0..scalar(@engineControlUnits)-1) { - if ( exists( $engineControlUnits[$ecui]{'messages'} ) ) { - my @messages = @{$engineControlUnits[$ecui]{'messages'}}; - for my $msgi (0..scalar(@messages)-1) { - my @signals = @{$messages[$msgi]{'signals'}}; - foreach my $signal ( @signals ) { - my $type = $signal->{'AMBPropertyType'}; - $generatedText .= &generateIdlProperty( $signal, $type); - } - } - } - } - return $generatedText; + my $dbcjson = $_[0]; + + my $generatedText = ''; + + my @engineControlUnits = @{$dbcjson->{'electronicControlUnits'}}; + for my $ecui (0..scalar(@engineControlUnits)-1) { + if ( exists( $engineControlUnits[$ecui]{'messages'} ) ) { + my @messages = @{$engineControlUnits[$ecui]{'messages'}}; + for my $msgi (0..scalar(@messages)-1) { + my @signals = @{$messages[$msgi]{'signals'}}; + foreach my $signal ( @signals ) { + my $type = $signal->{'AMBPropertyType'}; + $generatedText .= &generateIdlProperty( $signal, $type); + } + } + } + } + return $generatedText; } =head2 generateIdlProperty @@ -528,58 +528,58 @@ definitions of one signal property. =cut sub generateIdlProperty { - my $signal = $_[0]; - my $type = $_[1]; - my $generatedText = ''; - - my $ambPropertyName = $signal->{'canId'}; - if ( exists( $signal->{'AMBPropertyName'} ) ) { - $ambPropertyName = $signal->{'AMBPropertyName'}; - } - - $generatedText .= "[NoInterfaceObject]\n"; - $generatedText .= "interface org.automotive.${ambPropertyName} : VehiclePropertyType {\n"; - if ( $type eq 'enum' ) { - if ( exists( $signal->{'values'} ) ) { - my @dupvalues = @{$signal->{'values'}}; - my @values = sort { $$a{'value'} <=> $$b{'value'} } (&removeDuplicates (\@dupvalues)); - - my $hexValue = (); - for my $vali (0..scalar(@values) -1 ) { - # TODO const unsigned short migth be not enough, guess type based on values - $hexValue = '0x' . uc (sprintf( "%x", $values[$vali]->{'value'} ) ); - $generatedText .= " const unsigned short " . uc($values[$vali]->{'name'}) . " = $hexValue;\n"; - } - } - } - - $generatedText .= "\n"; - $generatedText .= " /** ${ambPropertyName}\n"; - $generatedText .= " * \\brief Returns ${ambPropertyName}\n"; - $generatedText .= " **/\n"; - - my $unsigned = ''; - if ( $type =~ m/uint/ ) { - $unsigned = 'unsigned '; - } - - if ( $type =~ m/enum/ ) { - # TODO const unsigned short migth be not enough, guess type based on values - $generatedText .= " readonly attribute octet ${ambPropertyName};\n"; - } elsif ( $type =~ m/bool/ ) { - $generatedText .= " readonly attribute boolean ${ambPropertyName};\n"; - } elsif ( $type =~ m/int8/ ) { - $generatedText .= " readonly attribute ${unsigned}octet ${ambPropertyName};\n"; - } elsif ( $type =~ m/int16/ ) { - $generatedText .= " readonly attribute ${unsigned}short ${ambPropertyName};\n"; - } elsif ( $type =~ m/int32/ ) { - $generatedText .= " readonly attribute ${unsigned}long ${ambPropertyName};\n"; - } else { - $generatedText .= " readonly attribute double ${ambPropertyName};\n"; - } - $generatedText .= "};\n\n"; - - return $generatedText; + my $signal = $_[0]; + my $type = $_[1]; + my $generatedText = ''; + + my $ambPropertyName = $signal->{'canId'}; + if ( exists( $signal->{'AMBPropertyName'} ) ) { + $ambPropertyName = $signal->{'AMBPropertyName'}; + } + + $generatedText .= "[NoInterfaceObject]\n"; + $generatedText .= "interface org.automotive.${ambPropertyName} : VehiclePropertyType {\n"; + if ( $type eq 'enum' ) { + if ( exists( $signal->{'values'} ) ) { + my @dupvalues = @{$signal->{'values'}}; + my @values = sort { $$a{'value'} <=> $$b{'value'} } (&removeDuplicates (\@dupvalues)); + + my $hexValue = (); + for my $vali (0..scalar(@values) -1 ) { + # TODO const unsigned short migth be not enough, guess type based on values + $hexValue = '0x' . uc (sprintf( "%x", $values[$vali]->{'value'} ) ); + $generatedText .= " const unsigned short " . uc($values[$vali]->{'name'}) . " = $hexValue;\n"; + } + } + } + + $generatedText .= "\n"; + $generatedText .= " /** ${ambPropertyName}\n"; + $generatedText .= " * \\brief Returns ${ambPropertyName}\n"; + $generatedText .= " **/\n"; + + my $unsigned = ''; + if ( $type =~ m/uint/ ) { + $unsigned = 'unsigned '; + } + + if ( $type =~ m/enum/ ) { + # TODO const unsigned short migth be not enough, guess type based on values + $generatedText .= " readonly attribute octet ${ambPropertyName};\n"; + } elsif ( $type =~ m/bool/ ) { + $generatedText .= " readonly attribute boolean ${ambPropertyName};\n"; + } elsif ( $type =~ m/int8/ ) { + $generatedText .= " readonly attribute ${unsigned}octet ${ambPropertyName};\n"; + } elsif ( $type =~ m/int16/ ) { + $generatedText .= " readonly attribute ${unsigned}short ${ambPropertyName};\n"; + } elsif ( $type =~ m/int32/ ) { + $generatedText .= " readonly attribute ${unsigned}long ${ambPropertyName};\n"; + } else { + $generatedText .= " readonly attribute double ${ambPropertyName};\n"; + } + $generatedText .= "};\n\n"; + + return $generatedText; } =head2 encryptAmbPropertyNames @@ -589,21 +589,21 @@ Encrypt AmbPropertyNames. =cut sub encryptAmbPropertyNames { - my $dbcjson = $_[0]; - - my @engineControlUnits = @{$dbcjson->{'electronicControlUnits'}}; - for my $ecui (0..scalar(@engineControlUnits)-1) { - if ( exists( $engineControlUnits[$ecui]{'messages'} ) ) { - my @messages = @{$engineControlUnits[$ecui]{'messages'}}; - for my $msgi (0..scalar(@messages)-1) { - my @signals = @{$messages[$msgi]{'signals'}}; - foreach my $signal ( @signals ) { - my $shownPropertyName = sha1_hex( $signal->{'AMBPropertyName'} ); - $signal->{'AMBPropertyNameEnc'} = 'S' . sha1_hex( $shownPropertyName ); - } - } - } - } + my $dbcjson = $_[0]; + + my @engineControlUnits = @{$dbcjson->{'electronicControlUnits'}}; + for my $ecui (0..scalar(@engineControlUnits)-1) { + if ( exists( $engineControlUnits[$ecui]{'messages'} ) ) { + my @messages = @{$engineControlUnits[$ecui]{'messages'}}; + for my $msgi (0..scalar(@messages)-1) { + my @signals = @{$messages[$msgi]{'signals'}}; + foreach my $signal ( @signals ) { + my $shownPropertyName = sha1_hex( $signal->{'AMBPropertyName'} ); + $signal->{'AMBPropertyNameEnc'} = 'S' . sha1_hex( $shownPropertyName ); + } + } + } + } } =head2 removeDuplicates @@ -613,38 +613,38 @@ Returns array of values witout duplicates. =cut sub removeDuplicates { - my @arr = sort { $a->{'name'} cmp $b->{'name'} } @{$_[0]}; - - my @duplicates; - my $prev = pop @arr; - - while (defined(my $x = pop @arr)) { - if ($prev->{'name'} eq $x->{'name'}) { - push @duplicates, $x; - while (defined(my $y = pop @arr)) { - if ($y->{'name'} ne $x->{'name'}) { - $prev = $y; - last; - } - } - } - else { - $prev = $x; - } - } - # Typically very small arrays - @arr = sort @{$_[0]}; - if (scalar @duplicates > 0) { - foreach my $x (@arr) { - foreach my $y (@duplicates) { - if ($x->{'name'} eq $y->{'name'}) { - $x->{'name'} .= '_' . $x->{'value'}; - } - } - } - } - - return @arr; + my @arr = sort { $a->{'name'} cmp $b->{'name'} } @{$_[0]}; + + my @duplicates; + my $prev = pop @arr; + + while (defined(my $x = pop @arr)) { + if ($prev->{'name'} eq $x->{'name'}) { + push @duplicates, $x; + while (defined(my $y = pop @arr)) { + if ($y->{'name'} ne $x->{'name'}) { + $prev = $y; + last; + } + } + } + else { + $prev = $x; + } + } + # Typically very small arrays + @arr = sort @{$_[0]}; + if (scalar @duplicates > 0) { + foreach my $x (@arr) { + foreach my $y (@duplicates) { + if ($x->{'name'} eq $y->{'name'}) { + $x->{'name'} .= '_' . $x->{'value'}; + } + } + } + } + + return @arr; } =head2 calculateZone @@ -654,19 +654,19 @@ Returns calculated Zone for given signal. =cut sub calculateZone { - my $ambPropertyName = $_[0]; - my $zone = 'Zone::None'; - - if ( $ambPropertyName =~ m/FrL/) { - $zone = 'Zone::FrontLeft'; - } elsif ( $ambPropertyName =~ m/FrR/) { - $zone = 'Zone::FrontRight'; - } elsif ( $ambPropertyName =~ m/ReL/) { - $zone = 'Zone::RearLeft'; - } elsif ( $ambPropertyName =~ m/ReR/) { - $zone = 'Zone::RearRight'; - } - return $zone; + my $ambPropertyName = $_[0]; + my $zone = 'Zone::None'; + + if ( $ambPropertyName =~ m/FrL/) { + $zone = 'Zone::FrontLeft'; + } elsif ( $ambPropertyName =~ m/FrR/) { + $zone = 'Zone::FrontRight'; + } elsif ( $ambPropertyName =~ m/ReL/) { + $zone = 'Zone::RearLeft'; + } elsif ( $ambPropertyName =~ m/ReR/) { + $zone = 'Zone::RearRight'; + } + return $zone; } ############################################################################## @@ -679,7 +679,7 @@ IntelIVIPoc, C<< <ivipoc at intel.com> >> You can find documentation for this module with the perldoc command. - perldoc Intel::IVIPoc::AMBPluginGenerator + perldoc Intel::IVIPoc::AMBPluginGenerator =head1 ACKNOWLEDGEMENTS |