This is my solution as it won't work directly from a matlab simulink block:
- 1. Add a "Matlab System" Block
- 2. Add an .m source file which runs .c/.h code.
display_backlight_on.m
classdef display_backlight_on < matlab.System ...
& coder.ExternalDependency ...
& matlab.system.mixin.Propagates ...
& matlab.system.mixin.CustomIcon
properties
% Public, tunable properties.
end
properties (Nontunable)
% Public, non-tunable properties.
end
properties (Access = private)
% Pre-computed constants.
end
methods
% Constructor
function obj = display_backlight_on_trigger(varargin)
% Support name-value pair arguments when constructing the object.
setProperties(obj,nargin,varargin{:});
end
end
methods (Access=protected)
function setupImpl(obj) %#ok<MANU>
end
function stepImpl(obj,turn_on) %#ok<INUSD>
if isempty(coder.target)
% Place simulation output code here
else
% Call C-function implementing device output
coder.cinclude('display_backlight_on.h');
coder.ceval('display_backlight_on_command',turn_on);
end
end
function releaseImpl(obj) %#ok<MANU>
if isempty(coder.target)
% Place simulation termination code here
else
% Call C-function implementing device termination
%coder.ceval('sink_terminate');
end
end
end
methods (Access=protected)
%%Define input properties
function num = getNumInputsImpl(~)
num = 1;
end
function num = getNumOutputsImpl(~)
num = 0;
end
function flag = isInputSizeLockedImpl(~,~)
flag = true;
end
function varargout = isInputFixedSizeImpl(~,~)
varargout{1} = true;
end
function flag = isInputComplexityLockedImpl(~,~)
flag = true;
end
function icon = getIconImpl(~)
% Define a string as the icon for the System block in Simulink.
icon = 'display_backlight_on';
end
end
methods (Static, Access=protected)
function simMode = getSimulateUsingImpl(~)
simMode = 'Interpreted execution';
end
function isVisible = showSimulateUsingImpl
isVisible = false;
end
end
methods (Static)
function name = getDescriptiveName()
name = 'display_backlight_on';
end
function b = isSupportedContext(context)
b = context.isCodeGenTarget('rtw');
end
function updateBuildInfo(buildInfo, context)
if context.isCodeGenTarget('rtw')
% Update buildInfo
srcDir = fullfile(fileparts(mfilename('fullpath')),'../src'); %#ok<NASGU>
includeDir = fullfile(fileparts(mfilename('fullpath')),'../include');
addIncludePaths(buildInfo,includeDir);
addSourceFiles(buildInfo,'display_backlight_on.c',srcDir);
end
end
end
end
- 3. Add a .c/.h file which runs the system command from c.
display_backlight_on.c
#include <display_backlight_on.h>
char command[50];
void display_backlight_on_command(boolean_T turn_on)
{
if (turn_on == 1)
{
strcpy( command, "echo 0 | sudo tee /sys/class/backlight/rpi_backlight/bl_power" );
system(command);
}
}
display_backlight_on.h
#ifndef _DISPLAY_BACKLIGHT_ON_H_
#define _DISPLAY_BACKLIGHT_ON_H_
#include "rtwtypes.h"
void display_backlight_on_command(boolean_T turn_on);
#endif //_DISPLAY_BACKLIGHT_ON_H_