Specify the Initialization, Output, and Termination
The setupImpl
and stepImpl
methods hook the C
functions to the System object™. 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 readDigitalPin
is made from the
stepImpl
method. Nothing needs to be done at termination. Follow
these steps to update the initialization, output, and termination code sections of the
DigitalRead System object you created in Select a System Object Template.
In the MATLAB® Editor, open
DigitalRead.m
class file.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, 0); end end ... end
The
coder.ceval
function executes calls to the C wrapper functions indigitalio_raspi.h
. The second and third arguments ofcoder.ceval
are the Raspberry Pi® hardware pin number and value, respectively.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
Update the
stepImpl
method with the following code.methods(Access=protected) ... function y = stepImpl(obj) %#ok<MANU> y = double(0); if isempty(coder.target) % Place simulation output code here else % Call C-function implementing device output y = coder.ceval('readDigitalPin', 9); end end ... end
Unlike the
DigitalWrite
System object, thestepImpl
method for theDigitalRead
System object defines an output,y
, which is the logical value of the chosen pin.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 RaspberryPi end end ... end
In the next section, you will Set Output Port Properties of your System object.
See Also
Create a Digital Read Block | Select System Object Template | Set Output Port Properties