1 function [outData] = rpp_block_transform(inData)
2 % Transform RPP blocks to newer version to ensure backward compatibility
4 % This function is called automaticall after opening an old model.
5 % See "Make Backward-Compatible Changes to Libraries"
6 % http://www.mathworks.com/help/simulink/ug/creating-block-libraries.html#brkngxr-6
8 fte = inData.ForwardingTableEntry;
10 % Fields with underscore cannot be accessed by using '.' operator!
11 oldName = getfield(fte, '__slOldName__');
12 newName = getfield(fte, '__slNewName__');
13 oldVersion = getfield(fte, '__slOldVersion__');
14 newVersion = getfield(fte, '__slNewVersion__');
16 instanceData = inData.InstanceData;
18 if ismember(oldName, {'rpp_lib/General Purpose Digital Output' ...
19 'rpp_lib/General Purpose Digital Input' ...
20 'rpp_gio_out/General Purpose Digital Output' ...
21 'rpp_gio_in/General Purpose Digital Input' }),
22 outData = update_gio_pin_name(instanceData);
27 function [outData] = update_gio_pin_name(instanceData)
28 outData.NewBlockPath = '';
29 outData.NewInstanceData = [];
31 % Get the field type 'Name' from instanceData
32 [ParameterNames{1:length(instanceData)}] = instanceData.Name;
33 port_type_idx = find(strcmp(ParameterNames, 'port_type'));
34 pin_number_idx = find(strcmp(ParameterNames, 'pin_number'));
36 if (~ismember('pin', ParameterNames))
37 instanceData(end+1).Name = 'pin';
38 instanceData(end).Value = '---';
41 if (~ismember('pin_name', ParameterNames) && ...
42 ~isempty(port_type_idx) && ...
43 ~isempty(pin_number_idx)),
45 instanceData(end+1).Name = 'pin_name';
46 instanceData(end).Value = sprintf('%s%s', ...
47 instanceData(port_type_idx).Value, ...
48 instanceData(pin_number_idx).Value);
50 % Delete old parameters to avoid warnings
51 instanceData(arrayfun(@(x) strcmp(x.Name, 'port_type'), instanceData)) = [];
52 instanceData(arrayfun(@(x) strcmp(x.Name, 'pin_number'), instanceData)) = [];
55 outData.NewInstanceData = instanceData;