]> rtime.felk.cvut.cz Git - jenkicar/rpp-simulink.git/commitdiff
Automatically transform models with old GIO blocks to the new ones
authorMichal Sojka <sojkam1@fel.cvut.cz>
Sat, 3 Oct 2015 22:34:02 +0000 (00:34 +0200)
committerMichal Sojka <sojkam1@fel.cvut.cz>
Sun, 4 Oct 2015 08:17:04 +0000 (10:17 +0200)
rpp/blocks/.gitattributes
rpp/blocks/rpp_block_transform.m [new file with mode: 0644]
rpp/blocks/rpp_generate_lib.m
rpp/blocks/rpp_gio_in.slx
rpp/blocks/rpp_gio_out.slx

index a545b45510c0bd1c3e4920a8546279e2d5a7de79..14a300928aa0ace5151b7a3d10a7f83724ac94e0 100644 (file)
@@ -2,6 +2,7 @@
 /compile_blocks.m      eaton
 /config_rm48_hdk.h     eaton
 /header.c      eaton
+/rpp_block_transform.m  eaton
 /rpp_can_rx.slx        eaton
 /rpp_can_setup.slx     eaton
 /rpp_can_tx.slx        eaton
diff --git a/rpp/blocks/rpp_block_transform.m b/rpp/blocks/rpp_block_transform.m
new file mode 100644 (file)
index 0000000..f1d66bf
--- /dev/null
@@ -0,0 +1,56 @@
+function [outData] = rpp_block_transform(inData)
+% Transform RPP blocks to newer version to ensure backward compatibility
+%
+% This function is called automaticall after opening an old model.
+% See "Make Backward-Compatible Changes to Libraries"
+% http://www.mathworks.com/help/simulink/ug/creating-block-libraries.html#brkngxr-6
+
+    fte = inData.ForwardingTableEntry;
+
+    % Fields with underscore cannot be accessed by using '.' operator!
+    oldName = getfield(fte, '__slOldName__');
+    newName = getfield(fte, '__slNewName__');
+    oldVersion = getfield(fte, '__slOldVersion__');
+    newVersion = getfield(fte, '__slNewVersion__');
+
+    instanceData = inData.InstanceData;
+
+    if ismember(oldName, {'rpp_lib/General Purpose Digital Output' ...
+                          'rpp_lib/General Purpose Digital Input' ...
+                          'rpp_gio_out/General Purpose Digital Output' ...
+                          'rpp_gio_in/General Purpose Digital Input' }),
+        outData = update_gio_pin_name(instanceData);
+    end
+end
+
+
+function [outData] = update_gio_pin_name(instanceData)
+    outData.NewBlockPath = '';
+    outData.NewInstanceData = [];
+
+    % Get the field type 'Name' from instanceData
+    [ParameterNames{1:length(instanceData)}] = instanceData.Name;
+    port_type_idx = find(strcmp(ParameterNames, 'port_type'));
+    pin_number_idx = find(strcmp(ParameterNames, 'pin_number'));
+
+    if (~ismember('pin', ParameterNames))
+        instanceData(end+1).Name = 'pin';
+        instanceData(end).Value = '---';
+    end
+
+    if (~ismember('pin_name', ParameterNames) && ...
+        ~isempty(port_type_idx) && ...
+        ~isempty(pin_number_idx)),
+
+        instanceData(end+1).Name = 'pin_name';
+        instanceData(end).Value = sprintf('%s%s', ...
+                                          instanceData(port_type_idx).Value, ...
+                                          instanceData(pin_number_idx).Value);
+
+        % Delete old parameters to avoid warnings
+        instanceData(arrayfun(@(x) strcmp(x.Name, 'port_type'), instanceData)) = [];
+        instanceData(arrayfun(@(x) strcmp(x.Name, 'pin_number'), instanceData)) = [];
+    end
+
+    outData.NewInstanceData = instanceData;
+end
index 406b9ee924c664f11ec788a926398d35c3b0b0f3..19250243e6eb56283f144174d400495c11031e56 100644 (file)
@@ -49,6 +49,19 @@ function rpp_generate_lib()
                end
                close_system(blockFilePath, 0);
        end
+
+    % Set ForwardingTable
+    mv = 9999.9999; %get_param('rpp_lib', 'ModelVersion');
+    ft = {
+            {'rpp_lib/General Purpose Digital Input', ...
+             'rpp_lib/General Purpose Digital Input', ...
+             0, mv, 'rpp_block_transform' },
+            {'rpp_lib/General Purpose Digital Output', ...
+             'rpp_lib/General Purpose Digital Output', ...
+             0, mv, 'rpp_block_transform' },
+         };
+       set_param('rpp_lib', 'ForwardingTable', ft);
+
        disp(['Closing and saving file ', 'rpp_lib.slx']);
        set_param('rpp_lib', 'Lock', 'on');
     save_system('rpp_lib');
index a9075ed249a8c7df2ff0b39ad8069664b957e049..6b33766e939180595b2114654e690eaadc8d32a9 100644 (file)
Binary files a/rpp/blocks/rpp_gio_in.slx and b/rpp/blocks/rpp_gio_in.slx differ
index 21f17a8a91d33357b46937fc4f6e2957b9bedb8f..9c772cc73ce147693c00f66bae0bea22f2542e3e 100644 (file)
Binary files a/rpp/blocks/rpp_gio_out.slx and b/rpp/blocks/rpp_gio_out.slx differ