www.gusucode.com > GPS_SDR_GPS软件接收机源码 > code4/GNSS_SDR/setSettings.m

    function varargout = setSettings(varargin)
% SETSETTINGS M-file for setSettings.fig
%      SETSETTINGS, by itself, creates a new SETSETTINGS or raises the existing
%      singleton*.
%
%      H = SETSETTINGS returns the handle to a new SETSETTINGS or the handle to
%      the existing singleton*.
%
%      SETSETTINGS('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in SETSETTINGS.M with the given input arguments.
%
%      SETSETTINGS('Property','Value',...) creates a new SETSETTINGS or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before setSettings_OpeningFunction gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to setSettings_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help setSettings

% Last Modified by GUIDE v2.5 02-Aug-2006 10:33:09

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
    'gui_Singleton',  gui_Singleton, ...
    'gui_OpeningFcn', @setSettings_OpeningFcn, ...
    'gui_OutputFcn',  @setSettings_OutputFcn, ...
    'gui_LayoutFcn',  [] , ...
    'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before setSettings is made visible.
function setSettings_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to setSettings (see VARARGIN)

%--- Try to read data from the variable "settings" ------------------------
% (variable "settings" is in the base Matlab workspace)
try
    handles.settings = evalin('base', 'settings');
catch
    %--- Creat a new settings structure in case of an error ---------------
    handles.settings = initSettings();
end

%--- Assign it to the GUI data structure ----------------------------------
loadSettings(handles);

% Choose default command line output for setSettings
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes setSettings wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = setSettings_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

%### Callback functions ###################################################

% --- Executes during object creation, after setting all properties.
function edit_CreateFcn(hObject, eventdata, handles)
% hObject    handle to edit (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), ...
        get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


function edit_Callback(hObject, eventdata, handles)
% hObject    handle to edit (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of edit as text
%        str2double(get(hObject,'String')) returns contents of edit as a double

%--- Enable the apply button on any input event ---------------------------
set(handles.pushbuttonApply, 'Enable', 'on');


% --- Executes on button press in any checkbox.
function checkbox_Callback(hObject, eventdata, handles)
% hObject    handle to PRN1checkbox (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of PRN1checkbox

%--- Enable the apply button on any input event ---------------------------
set(handles.pushbuttonApply, 'Enable', 'on');

% --- Executes on button press in applybutton.
function pushbuttonApply_Callback(hObject, eventdata, handles)
% hObject    handle to applybutton (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

%--- Try to read values from the GUI input fields -------------------------
[settings, error] = saveSettings(handles);

%--- If no errors, then ...
if error == 0  
    %--- Save the updated settings in the main workspace ------------------
    assignin('base', 'settings', settings);
        
    % Turn off the apply button 
    set(hObject, 'Enable', 'off');
end

% --- Executes on button press in resetbutton.
function pushbuttonReset_Callback(hObject, eventdata, handles)
% hObject    handle to resetbutton (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

%--- Try to read data from the variable "settings" ------------------------
% (variable "settings" is in the base Matlab workspace)
try
    handles.settings = evalin('base', 'settings');
catch
    %--- Create a new settings structure in case of an error --------------
    handles.settings = initSettings();
end
    
%--- Assign it to the GUI data structure ----------------------------------
loadSettings(handles);

%--- Save changes in the GUI data structure -------------------------------
guidata(hObject, handles);

%--- Turn off the apply button --------------------------------------------
set(handles.pushbuttonApply, 'Enable', 'off');

%@@@ Function reads values from the GUI and updates the settings structure
function [settings, error] = saveSettings(handles)
settings = handles.settings;
error = 0; % no error

try
    %Please read the Matlab help for mo details on TRY, CATCH and ERROR
    %commands. 
    
    %--- Signal properties related fields ---------------------------------
    settings.fileName           = get(handles.editFileName, 'String');
    settings.numberOfChannels   = edit2double(handles.editNumberOfChannels);
    settings.msToProcess        = edit2double(handles.editMsToProcess);    
    settings.skipNuberOfBytes   = edit2double(handles.editSkipNumberOfBytes);
    settings.IF                 = edit2double(handles.editIF);
    settings.samplingFreq       = edit2double(handles.editSamplingFreq);
    settings.dataType           = get(handles.editDataType, 'String');

    %--- Satellite PRN numbers --------------------------------------------
    for PRN = 1:32
        %If checkbox is checked 
        if getCheckbox(getfield(handles, ['checkboxPRN', num2str(PRN)])) == 1
            
            % Include satellite in the list
            settings.acqSatelliteList = ...
                                    union(settings.acqSatelliteList, PRN);
        else
            % Exclude satellite from the list
            settings.acqSatelliteList = ...
                                  setdiff(settings.acqSatelliteList, PRN);
        end
    end

    %--- Acquisition parameters -------------------------------------------
    settings.acqSearchBand     = edit2double(handles.editAcqSearchBand);
    settings.acqThreshold      = edit2double(handles.editAcqThreshold);
    settings.skipAcquisition   = getCheckbox(handles.checkboxSkipAcquisition);    
    
    %--- Tracking ---------------------------------------------------------
    settings.dllCorrelatorSpacing = edit2double(handles.editDllCorrelatorSpacing);
    settings.dllDampingRatio   = edit2double(handles.editDllDampingRatio);
    settings.dllNoiseBandwidth = edit2double(handles.editDllNoiseBandwidth);
    settings.pllDampingRatio   = edit2double(handles.editPllDampingRatio);
    settings.pllNoiseBandwidth = edit2double(handles.editPllNoiseBandwidth);
       
    %--- Nav solutions ----------------------------------------------------
    settings.elevationMask      = edit2double(handles.editElevationMask);
    settings.navSolPeriod       = edit2double(handles.editNavSolPeriod);
    settings.useTropCorr        = getCheckbox(handles.checkboxUseTropCorr);
    settings.truePosition.E     = edit2double(handles.editUtmE);
    settings.truePosition.N     = edit2double(handles.editUtmN);
    settings.truePosition.U     = edit2double(handles.editUtmU);
    
    %--- Plotting ---------------------------------------------------------    
    settings.plotTracking       = getCheckbox(handles.checkboxPlotTracking);

catch
    %Please read the Matlab help for mo details on TRY, CATCH and ERROR
    %commands. 
    
    %--- Read error information -------------------------------------------
    e = lasterror;
    
    %If this error caused by bad input 
    if strcmp(e.identifier, 'setSettings:badInput')
        % then do not save settings, return an error indication 
        error = 1;
    else
        % Not our error, this error must be handled/reported in the system 
        rethrow(e);
    end    
end

%@@@ Function loads the settings into the GUI @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
function loadSettings(handles)

%--- Signal properties related fields -------------------------------------
set(handles.editFileName, 'String', handles.settings.fileName);
set(handles.editNumberOfChannels, 'String', num2str(handles.settings.numberOfChannels));
set(handles.editSkipNumberOfBytes, 'String', num2str(handles.settings.skipNumberOfBytes));
set(handles.editMsToProcess, 'String', num2str(handles.settings.msToProcess));
set(handles.editIF, 'String', num2str(handles.settings.IF));
set(handles.editSamplingFreq, 'String', num2str(handles.settings.samplingFreq ));
set(handles.editDataType, 'String', handles.settings.dataType);

%--- Satellite PRN numbers ------------------------------------------------
for PRN = 1:32
    % If the PRN number is in the list
    if ismember(PRN, handles.settings.acqSatelliteList)
        % then set the checkbox to "checked" state
        setCheckbox(getfield(handles, ['checkboxPRN', num2str(PRN)]), 1);
    else
        % set the checkbox to "unchecked" state
        setCheckbox(getfield(handles, ['checkboxPRN', num2str(PRN)]), 0);
    end
end

%--- Acquisition parameters -------------------------------------------
set(handles.editAcqSearchBand, 'String', num2str(handles.settings.acqSearchBand));
set(handles.editAcqThreshold, 'String', num2str(handles.settings.acqThreshold));
setCheckbox(handles.checkboxSkipAcquisition, handles.settings.skipAcquisition);

%--- Tracking ---------------------------------------------------------
set(handles.editDllCorrelatorSpacing, 'String', num2str(handles.settings.dllCorrelatorSpacing));
set(handles.editDllDampingRatio, 'String', num2str(handles.settings.dllDampingRatio));
set(handles.editDllNoiseBandwidth, 'String', num2str(handles.settings.dllNoiseBandwidth));
set(handles.editPllDampingRatio, 'String', num2str(handles.settings.pllDampingRatio));
set(handles.editPllNoiseBandwidth, 'String', num2str(handles.settings.pllNoiseBandwidth));

%--- Nav solutions --------------------------------------------------------
set(handles.editElevationMask, 'String', num2str(handles.settings.elevationMask));
set(handles.editNavSolPeriod, 'String', num2str(handles.settings.navSolPeriod));
setCheckbox(handles.checkboxUseTropCorr, handles.settings.useTropCorr);
set(handles.editUtmE, 'String', num2str(handles.settings.truePosition.E));
set(handles.editUtmN, 'String', num2str(handles.settings.truePosition.N));
set(handles.editUtmU, 'String', num2str(handles.settings.truePosition.U));

%--- Plotting -------------------------------------------------------------
setCheckbox(handles.checkboxPlotTracking, handles.settings.plotTracking);

%@@@ Function reads current state of a checkbox "in the Matlab way" @@@@@@@
function value = getCheckbox(handle)

if (get(handle, 'Value') == get(handle,'Max'))
    % then checkbox is checked
    value = 1;
else
    % checkbox is not checked
    value = 0;
end

%@@@ Function sets checkbox state @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
% Setting the "Value" variable to some number not equal to "Min" or "Max"
% will cause Matlab runtime error.
function setCheckbox(handle, value)

if (value == 1)
    % "check" the checkbox
    set(handle, 'Value', get(handle,'Max'));
else
    % "uncheck" the checkbox
    set(handle, 'Value', get(handle,'Min'));
end

%@@@ Function checks if the edit field contains a numeric value. If yes,
%then it converts string type value to double. @@@@@@@@@@@@@@@@@@@@@@@@@@@@
function value = edit2double(handle)

%--- Try to convert string in the entry field to double -------------------
value = str2double(get(handle, 'String'));

% If it is not a number, then handle the incorect input -------------------
if isnan(value) && ~strcmpi(get(handle, 'String'), 'NaN')
    %--- Make the message text ---
    text = ['Bad input in the field "', get(handle, 'UserData'),...
        '". You must enter a numeric value.'];
    
    % Show the error message in a message box
    errordlg(text, 'Bad Input', 'modal');
    
    %--- Stop code execution here and "Throw an error". The error will be
    % "cached" by the "CATCH" statement. The code execution resumes from
    % at the "CATCH" statement. Please read the Matlab help for mo details
    % on TRY, CATCH and ERROR commands.
    error('setSettings:badInput', text);
end


% --- Executes on button press in pushbuttonSelectDataFile.
function pushbuttonSelectDataFile_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonSelectDataFile (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

[fileName, pathName] = uigetfile('*.bin', ...
                                 'Select data file...', ...
                                 get(handles.editFileName, 'String'));

if (~isequal(fileName, 0) && ~isequal(pathName, 0))
    set(handles.editFileName, 'String', fullfile(pathName, fileName));
    set(handles.pushbuttonApply, 'Enable', 'on');    
end

% --- Executes on button press in pushbuttonProbeData.
function pushbuttonProbeData_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonProbeData (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

[settings, error] = saveSettings(handles);

%--- If no errors, then ...
if error == 0
    try
        probeData(settings);
    catch
        errStruct = lasterror;
        msgbox(errStruct.message, 'Error', 'error');
    end
end


% --- Executes on button press in pushbuttonDefault.
function pushbuttonDefault_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonDefault (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

handles.settings = initSettings();

% Assign it to the GUI data structure
loadSettings(handles);

% Update handles structure
guidata(hObject, handles);

% Turn on the apply button
set(handles.pushbuttonApply, 'Enable', 'on');