Fixed tabbing issues
authorPetr Nechaev <petr.nechaev@cogentembedded.com>
Fri, 3 Apr 2015 16:55:31 +0000 (19:55 +0300)
committerPetr Nechaev <petr.nechaev@cogentembedded.com>
Fri, 3 Apr 2015 16:55:31 +0000 (19:55 +0300)
plugins/common/canobserver.h
plugins/common/cansocketadapter.cpp
plugins/common/cansocketadapter.h
plugins/common/thread.cpp
tools/AmbSignalMapper/lib/Intel/IviPoc/AmbPluginGenerator.pm

index 876998e..549f070 100644 (file)
@@ -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
index df92bb7..3395038 100644 (file)
@@ -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;
 }
index 334e523..811d26a 100644 (file)
@@ -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
index 34f9875..504feb3 100644 (file)
@@ -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 );
 }
 
 }
index e208c84..d4e33d3 100644 (file)
@@ -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