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');