Code covered by the BSD License  

Highlights from
APM2 Simulink Blockset

image thumbnail

APM2 Simulink Blockset

by

Robert Hartley

  • 1 file
  • 147 downloads
  • 4.55556

 

Simulink blockset for use with the ArduPilot Mega 2.0 hardware. Includes blocks to read external rad

arduino.ConnectivityConfig
classdef ConnectivityConfig < rtw.connectivity.Config
%CONNECTIVITYCONFIG PIL configuration class for Arduino
%
%   CONNECTIVITYCONFIG(COMPONENTARGS) creates instances of MAKEFILEBUILDER,
%   LAUNCHER, RTIOSTREAMHOSTCOMMUNICATOR and collects them together into a
%   connectivity configuration class for PIL.
%
%   See also RTW.CONNECTIVITY.CONFIG, RTW.CONNECTIVITY.MAKEFILEBUILDER,
%   RTW.MYPIL.TARGETAPPLICATIONFRAMEWORK, RTW.MYPIL.LAUNCHER,
%   RTW.CONNECTIVITY.RTIOSTREAMHOSTCOMMUNICATOR, RTWDEMO_CUSTOM_PIL
    
%   Copyright 2008-2011 The MathWorks, Inc.
    
    methods
        function this = ConnectivityConfig(componentArgs)
            
        % An executable framework specifies additional source files and
        % libraries required for building the PIL executable
            targetApplicationFramework = ...
                arduino.TargetApplicationFramework(componentArgs);
            
            % Filename extension for executable on the target system
            exeExtension = '.hex';
            
            % Create an instance of MakefileBuilder; this works in
            % conjunction with your template makefile to build the PIL
            % executable
            builder = rtw.connectivity.MakefileBuilder...
                      (componentArgs, ...
                       targetApplicationFramework, ...
                       exeExtension);
            
            % Launcher
            launcher = arduino.Launcher(componentArgs, builder);
            
            % File extension for shared libraries (e.g. .dll on Windows)
            sharedLibExt='.dll';

            % Evaluate name of the rtIOStream shared library
            rtiostreamLib = ['rtiostreamserial' sharedLibExt];
            
            communicator = arduino.Communicator(componentArgs, ...
                                                launcher, ...
                                                rtiostreamLib);
            communicator.setTimeoutRecvSecs(5);

            % Custom arguments that will be passed to the              
            % rtIOStreamOpen function in the rtIOStream shared         
            % library (this configures the host-side of the            
            % communications channel)        
            if ispc
                sl_ext = '.dll'; 
            else
                sl_ext = '.so'; 
            end
            libSerial = ['rtiostreamserial' sl_ext];
            
            rtIOStreamOpenArgs = {...                                  
                libSerial,...
                '-port', ['\\.\' arduino.Prefs.getComPort], ...
                '-baud', '9600'...                               
                   };                                                     
            communicator.setOpenRtIOStreamArgList(rtIOStreamOpenArgs); 
            
            % call super class constructor to register components
            this@rtw.connectivity.Config(componentArgs, builder, launcher, communicator);

            % The timer API is changing so we need to check whether to use the 
            % new or old style
            
            if arduino.ConnectivityConfig.isOldStyleTimerApi
            
                % Register a timer if the execution profiling infrastructure is available. For
                % PIL simulations, a file execProfile.mat is created in the pil
                % sub-folder of the build directory. This file contains execution
                % time measurements for the component that you are running in PIL
                % simulation mode.
                if ~isempty(?rtw.connectivity.Timer)
                    timer = arduino.TimerOldStyle(targetApplicationFramework);
                    this.setTimer(timer);
                end
            else
                timer = arduino.Timer;
                this.setTimer(timer);
            end
        end
    end
    
    methods (Static = true)
        function isOldStyle = isOldStyleTimerApi
            h = new_system;
            try
                get_param(h,'CodeExecutionProfiling');
                isOldStyle=false;
            catch exc
                if any(strcmp(exc.identifier, {'Simulink:SL_ParamUnknown', ...
                        'Simulink:Commands:ParamUnknown'}))
                    isOldStyle=true;
                else
                    rethrow(exc);
                end
            end
            close_system(h);
        end
    end
end

Contact us