📄 mbc_rfcomms_server.m
字号:
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 + -