]> rtime.felk.cvut.cz Git - jenkicar/rpp-simulink.git/blob - rpp/blocks/rpp_block_transform.m
Automatically transform models with old GIO blocks to the new ones
[jenkicar/rpp-simulink.git] / rpp / blocks / rpp_block_transform.m
1 function [outData] = rpp_block_transform(inData)
2 % Transform RPP blocks to newer version to ensure backward compatibility
3 %
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
7
8     fte = inData.ForwardingTableEntry;
9
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__');
15
16     instanceData = inData.InstanceData;
17
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);
23     end
24 end
25
26
27 function [outData] = update_gio_pin_name(instanceData)
28     outData.NewBlockPath = '';
29     outData.NewInstanceData = [];
30
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'));
35
36     if (~ismember('pin', ParameterNames))
37         instanceData(end+1).Name = 'pin';
38         instanceData(end).Value = '---';
39     end
40
41     if (~ismember('pin_name', ParameterNames) && ...
42         ~isempty(port_type_idx) && ...
43         ~isempty(pin_number_idx)),
44
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);
49
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)) = [];
53     end
54
55     outData.NewInstanceData = instanceData;
56 end