⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mbc_rfcomms_server.m

📁 simulink real-time workshop for dragon12 development board from
💻 M
📖 第 1 页 / 共 2 页
字号:
        set_param(gcb, 'MaskPrompts', kk);
        
    end

    channelstr = num2str (channel);
    data_type_str = data_sz_str{data_type};
    
end


% prevent accidental format change on hidden input
if (strcmp(RXTXmodestr, 'TX') == 1)
    outformat = 0;
end

% set block parameter of the data conversion block
if(outformat == 1)
    set_param(myBlocks{DTC}, 'DataType', 'double');
else
    set_param(myBlocks{DTC}, 'DataType', data_type_str);
end


% check if each communication channel has only been allocated once
mySendBlocks = get_param(find_system(gcs, 'LookUnderMasks', 'all', 'Name', 'rfComms_server_sfnc'), 'Parent');    % get all rfComms_server blocks
kk = get_param(mySendBlocks, 'format');                                                                          % raw data / formatted data
myRaw = [];
for(i = 1:length(kk))
    if(findstr(kk{i}, 'on'))
        myRaw = [myRaw i];
    end
end

% indices of formatted channels
myFormatted = setdiff([1:length(kk)], myRaw);

% check formatted data for double channel allocation
if(~isempty(myFormatted))

    kk = get_param(mySendBlocks, 'channel');                                                                     % get user channel number
    kk = double(char(kk) - '0');                                                                                 % turn this into numbers...
    kk = kk(myFormatted);                                                                                        % restrict this to the formatted channels
    if(length(unique(kk)) < length(kk))
        % the same channel number has been used more than once...
        disp(['RFComms_server: Warning... at least 2 blocks have been allocated the same user channel number!'])
    end
    
end

% Create resource keywords to be reserved in resource database
modelRTWFields = struct( 'format', formatstr, ...
                         'RXTXmode', RXTXmodestr, ...
                         'serverAddress', serverAddressstr, ...
                         'clientAddress', clientAddressstr, ...
                         'RFchannel', RFchannelstr, ...
                         'numClient', num2str(numClient), ...
                         'clientflagmask', clientmaskstr );

%debug
%modelRTWFields

% Insert modelRTWFields in the I/O block S-Function containing the Tag 'MC9S12target_RFCOMMS'
% to set the block 'Tag' use: 
% >> kk = find_system(gcb, 'FollowLinks', 'on', 'LookUnderMasks', 'all', 'Name', 'rfComms_server_sfnc')
% >> set_param(kk{:}, 'Tag', 'MC9S12target_RFCOMMS')
% ... then save the block / model (fw-09-06)
MC9S12DriverDataBlock = find_system(gcb, 'FollowLinks', 'on', 'LookUnderMasks', 'all', 'Tag', 'MC9S12target_RFCOMMS');
for(i = 1:length(MC9S12DriverDataBlock))
    set_param(MC9S12DriverDataBlock{i}, 'RTWdata', modelRTWFields);
end



% adjust number of block input and/or output ports...

% de-activate link to library...
if(~strcmp(get_param(gcb, 'LinkStatus'), 'inactive'))
    set_param(gcb, 'LinkStatus', 'inactive')
end

switch(RXTXmodestr)
    
    case 'TX'
        
        % TX -> produce block input
        
        % delete output port (if required)
        num_now = length (find_system (gcb, 'LookUnderMasks', 'on', 'BlockType', 'Outport'));
        if (num_now == 1)
            
            % disp('deleting output port...');
            
            delete_line (gcb, 'Data Type Conversion Out/1', 'Out1/1')
            delete_line (gcb, 'rfComms_server_sfnc/1', 'Data Type Conversion Out/1')
            delete_block ([gcb, '/Data Type Conversion Out'])
            delete_block ([gcb, '/Out1'])
            
            % remove the output port of the 'rfComms_server_sfnc' block
            sPars = get_param ([gcb, '/rfComms_server_sfnc'], 'Parameters');
            sPars = strrep(sPars, 'RXTXmode', '1');                           % change parameter 'RXTXmode' to 'RX'
            set_param([gcb, '/rfComms_server_sfnc'], 'Parameters', sPars);    % force input port to disappear
            sPars = strrep(sPars, '1', 'RXTXmode');                           % restore original parameter 'RXTXmode'
            set_param([gcb, '/rfComms_server_sfnc'], 'Parameters', sPars);
            
        end
        
        % add input port (if required)
        num_now = length (find_system (gcb, 'LookUnderMasks', 'on', 'BlockType', 'Inport'));
        if (num_now == 0)
            
            % disp('adding input port...');

            % add an input port to the 'rfComms_server_sfnc' block
            sPars = get_param ([gcb, '/rfComms_server_sfnc'], 'Parameters');
            sPars = strrep(sPars, 'RXTXmode', '1');                           % change parameter 'RXTXmode' to 'RX'
            set_param([gcb, '/rfComms_server_sfnc'], 'Parameters', sPars);    % force input port to disappear
            sPars = strrep(sPars, '1', 'RXTXmode');                           % restore original parameter 'RXTXmode'
            set_param([gcb, '/rfComms_server_sfnc'], 'Parameters', sPars);
            
            % add input block
            add_block ('built-in/Inport', [gcb, '/In1'])
            add_block ('built-in/DataTypeConversion', [gcb, '/Data Type Conversion In'])

            
            % place 'Data Type Conversion' block
            kk = get_param ([gcb, '/Data Type Conversion In'], 'Position');
            ll = get_param ([gcb, '/rfComms_server_sfnc'], 'Position');
            set_param ([gcb, '/Data Type Conversion In'], 'Position',  ...
                       [ll(1)-50-70  ll(2)+floor((ll(4)-ll(2))/2)-floor(35/2) ...
                        ll(1)-50     ll(2)+floor((ll(4)-ll(2))/2)-floor(35/2)+35])
            set_param ([gcb, '/Data Type Conversion In'], 'DataType', data_type_str)
            set_param ([gcb, '/Data Type Conversion In'], 'FontSize', '12')

            % place 'output' block
            kk = get_param ([gcb, '/In1'], 'Position');
            ll = get_param ([gcb, '/Data Type Conversion In'], 'Position');
            set_param ([gcb, '/In1'], 'Position', ...
                       [ll(1)-50-(kk(3)-kk(1))   ll(2)+floor((ll(4)-ll(2))/2)-floor((kk(4)-kk(2))/2) ...
                        ll(1)-50                 ll(2)+floor((ll(4)-ll(2))/2)-floor((kk(4)-kk(2))/2)+(kk(4)-kk(2))])
            set_param ([gcb, '/In1'], 'FontSize', '12')
            
            add_line (gcb, 'Data Type Conversion In/1', 'rfComms_server_sfnc/1')
            add_line (gcb, 'In1/1', 'Data Type Conversion In/1')
            
            % made changes -> save
            %save_system;
            
        end
        
    case 'RX'
        
        % RX -> produce block output
        
        % delete input port (if required)
        num_now = length (find_system (gcb, 'LookUnderMasks', 'on', 'BlockType', 'Inport'));
        if (num_now == 1)
            
            % disp('deleting input port...');
            
            delete_line (gcb, 'In1/1', 'Data Type Conversion In/1')
            delete_line (gcb, 'Data Type Conversion In/1', 'rfComms_server_sfnc/1')
            delete_block ([gcb, '/Data Type Conversion In'])
            delete_block ([gcb, '/In1'])
            
            % remove the input port of the 'Timer Block' block
            sPars = get_param ([gcb, '/rfComms_server_sfnc'], 'Parameters');
            sPars = strrep(sPars, 'RXTXmode', '2');                           % change parameter 'RXTXmode' to 'TX'
            set_param([gcb, '/rfComms_server_sfnc'], 'Parameters', sPars);    % force input port to disappear
            sPars = strrep(sPars, '2', 'RXTXmode');                           % restore original parameter 'RXTXmode'
            set_param([gcb, '/rfComms_server_sfnc'], 'Parameters', sPars);
            
        end
        
        % add output port (if required)
        num_now = length (find_system (gcb, 'LookUnderMasks', 'on', 'BlockType', 'Outport'));
        if (num_now == 0)
            
            % disp('adding output port...');

            % add an output port to the 'rfComms_server_sfnc' block
            sPars = get_param ([gcb, '/rfComms_server_sfnc'], 'Parameters');
            sPars = strrep(sPars, 'RXTXmode', '2');                           % change parameter 'RXTXmode' to 'TX'
            set_param([gcb, '/rfComms_server_sfnc'], 'Parameters', sPars);    % force input port to disappear
            sPars = strrep(sPars, '2', 'RXTXmode');                           % restore original parameter 'RXTXmode'
            set_param([gcb, '/rfComms_server_sfnc'], 'Parameters', sPars);

            % add output block
            add_block ('built-in/Outport', [gcb, '/Out1'])
            add_block ('built-in/DataTypeConversion', [gcb, '/Data Type Conversion Out'])

            % place 'Data Type Conversion' block
            kk = get_param ([gcb, '/Data Type Conversion Out'], 'Position');
            ll = get_param ([gcb, '/rfComms_server_sfnc'], 'Position');
            set_param ([gcb, '/Data Type Conversion Out'], 'Position',  ...
                       [ll(3)+50      ll(2)+floor((ll(4)-ll(2))/2)-floor(35/2) ...
                        ll(3)+50+70   ll(2)+floor((ll(4)-ll(2))/2)-floor(35/2)+35])
            set_param ([gcb, '/Data Type Conversion Out'], 'DataType', 'double')
            set_param ([gcb, '/Data Type Conversion Out'], 'FontSize', '12')

            % place 'output' block
            kk = get_param ([gcb, '/Out1'], 'Position');
            ll = get_param ([gcb, '/Data Type Conversion Out'], 'Position');
            set_param ([gcb, '/Out1'], 'Position', ...
                       [ll(3)+50                 ll(2)+floor((ll(4)-ll(2))/2)-floor((kk(4)-kk(2))/2) ...
                        ll(3)+50+(kk(3)-kk(1))   ll(2)+floor((ll(4)-ll(2))/2)-floor((kk(4)-kk(2))/2)+(kk(4)-kk(2))])
            set_param ([gcb, '/Out1'], 'FontSize', '12')
            
            add_line (gcb, 'rfComms_server_sfnc/1', 'Data Type Conversion Out/1')
            add_line (gcb, 'Data Type Conversion Out/1', 'Out1/1')
            
            % made changes -> save
            %save_system;
            
        end
        
end % switch

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -