Main Content

Specify the Initialization, Output, and Termination Behavior

The setupImpl and stepImpl methods hook the C/C++ functions to the System object™. See Write the Hardware Specific C/C++ Code for more information on creating C/C++ device driver code. The initialization of a digital pin as output needs to be done only once at model initialization. Hence, the digitalIOSetup function is called in setupImpl. To update the logic state of the digital output pin, a call to writeDigitalPin is made from stepImpl method. Nothing needs to be done at termination. Follow these steps to update the initialization, output, and termination code sections of the DigitalWrite System object you created in Select a System Object Template.

  1. In the MATLAB® editor, open DigitalWrite.m class file.

  2. Update the setupImpl method using the following code.

    methods (Access=protected)
        function setupImpl(obj) %#ok<MANU>
            if isempty(coder.target)
                % Place simulation setup code here
            else
                % Call C-function implementing device initialization
                coder.cinclude('digitalio_raspi.h');
                coder.ceval('digitalIOSetup', 9, 1);
            end
        end
        ...
    end

    The coder.ceval function executes calls to the C wrapper functions in digitalio_raspi.h. The second and third arguments of coder.ceval are the Raspberry Pi® hardware pin number and pin mode values, respectively.

  3. Update the BuildInfo method using the following code.

    methods (Static)
        ...
        function updateBuildInfo(buildInfo, context)
            if context.isCodeGenTarget('rtw')
                % Update buildInfo
                srcDir = fullfile(fileparts(mfilename('fullpath')),'src'); %#ok     
                includeDir = fullfile(fileparts(mfilename('fullpath')),'include');                 
                addIncludePaths(buildInfo,includeDir);
                % Use the following API's to add include files, sources and linker flags
                addSourceFiles(buildInfo,'digitalio_raspi.c', srcDir);
                buildInfo.addLinkFlags({'-lwiringPi'});
            end
        end
        ...
    end
  4. Update the stepImpl method with the following code.

    methods(Access=protected)
        ...
        function stepImpl(obj,u) %#ok<INUSD>
            if isempty(coder.target)
                % Place simulation setup code here
            else
                % Call C-function implementing device output
                coder.ceval('writeDigitalPin', 9, u);
            end
        end
        ...
    end
  5. Update the releaseImpl method with the following code.

    methods(Access=protected)
        ...
        function releaseImpl(obj) %#ok<MANU>
            if isempty(coder.target)
                % Place simulation termination code here
            else
                % Call C-function implementing device termination
                % No termination code for Raspberry Pi
            end
        end
        ...
    end

In the next section, you will Test System Object on MATLAB Command Line.

See Also

| |